dirk-cfx-react 1.1.91 → 1.1.92
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/dist/components/index.cjs +126 -40
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +3 -7
- package/dist/components/index.d.ts +3 -7
- package/dist/components/index.js +127 -41
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.cjs +33 -13
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.cts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +33 -13
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.cjs +159 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +160 -54
- package/dist/index.js.map +1 -1
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/BlipSelect.tsx","../../src/utils/colorWithAlpha.ts","../../src/utils/misc.ts","../../src/types/theme.ts","../../src/utils/useSettings.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/utils/map.ts","../../src/utils/useItems.ts","../../src/utils/useFrameworkGroups.ts","../../src/utils/inputMapper.ts","../../src/utils/gtaControls.ts","../../src/components/BorderedIcon.tsx","../../src/components/Motion.tsx","../../src/components/Counter.tsx","../../src/components/FloatingParticles.tsx","../../src/components/InfoBox.tsx","../../src/components/InputContainer.tsx","../../src/hooks/useAudio/store.ts","../../src/components/SegmentedControl.tsx","../../src/components/Navigation.tsx","../../src/components/SegmentedProgress.tsx","../../src/components/Title.tsx","../../src/components/LevelBanner.tsx","../../src/components/LevelPanel.tsx","../../src/components/Modal.tsx","../../src/components/PromptModal.tsx","../../src/components/ModalStore.tsx","../../src/components/ConfirmModal.tsx","../../src/components/MissingItemsBanner.tsx","../../src/hooks/useForm.tsx","../../src/hooks/useAdminState.ts","../../src/hooks/useScriptConfig.ts","../../src/components/AdminTools/adminToolStore.ts","../../src/providers/DirkProvider.tsx","../../src/components/ConfigPanel.tsx","../../src/components/SelectItem.tsx","../../src/components/PositionPicker.tsx","../../src/components/GroupSelect.tsx","../../src/components/FiveMKeyBindInput.tsx","../../src/components/ControlSelect.tsx","../../src/components/AsyncSaveButton.tsx","../../src/components/AdminPageTitle.tsx","../../src/components/SwitchPanel.tsx","../../src/components/TestBed/main.tsx","../../src/components/ThemeOverrideSection.tsx","../../src/hooks/usePlayers.ts","../../src/components/AdminTools/PlayerSelect.tsx","../../src/components/AccessOverrideSection.tsx","../../src/utils/gtaAnimPostFx.ts","../../src/components/AnimPostFxSelect.tsx","../../src/utils/gtaScenarios.ts","../../src/components/ScenarioSelect.tsx","../../src/components/DiscordRoleSelect.tsx","../../src/components/AccountSelect.tsx","../../src/components/InstructionPanel.tsx","../../src/components/AdminTools/WorldPositionPicker.tsx","../../src/components/AdminTools/DoorPicker.tsx","../../src/components/Map/Map.tsx","../../src/components/Map/BlipMarker.tsx"],"names":["jsxs","Group","jsx","Image","Text","Box","Select","alpha","z","create","useMantineTheme","Flex","FontAwesomeIcon","motion","AnimatePresence","useRef","useState","useMotionValue","useEffect","Tooltip","Info","clickSoundUrl","hoverSoundUrl","createContext","useContext","useStore","store","Progress","RingProgress","Portal","X","Button","AlertTriangle","TextInput","t","Trash2","useCallback","RefreshCw","ChevronDown","Check","Copy","createStore","useMemo","library","fas","far","fab","QueryClient","Code2","JsonInput","useInfiniteQuery","History","Search","Filter","User","Loader","Fragment","notifications","ArrowLeft","Undo2","Redo2","SaveIcon","XCircle","RotateCcw","MapPin","Crosshair","EyeOff","Eye","NumberInput","MultiSelect","Switch","FlaskConical","ActionIcon","ChevronUp","Stack","generateColors","Palette","ColorInput","Popover","useQuery","keepPreviousData","ShieldCheck","Users","UserRound","Plus","buildGroupedData","createPortal","WorldPositionSetButton","WorldPositionGotoButton","DoorOpen","memo","MapContainer","CRS","Map","useMap","tileLayer","latLngBounds","latLng","Minus","Marker"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,YAAA,GAA2C;AAAA,EAC/C,CAAC,CAAA,EAAE,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACpG,CAAC,CAAA,EAAE,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3G,CAAC,CAAA,EAAE,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC9F,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5F,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACnG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACvF,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACvF,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC7F,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChG,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC3F,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,KAAK,CAAA;AAAA,EAC9E,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC/F,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAChG,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtG,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpG,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClG,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACnG,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC/F,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACpD,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACvD,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACpD,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK;AACpC,CAAA;AAEA,IAAM,SAAA,GAAY,+BAAA;AAEX,SAAS,OAAA,CAAQ,MAAc,GAAA,EAAa;AACjD,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,IAAI,GAAG,CAAA,CAAA;AACnC;AAIA,IAAM,WAAA,GAA0C;AAAA,EAC9C,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,KAAA,EAAM,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9D,CAAC,CAAA,EAAE,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,QAAA,EAAS,SAAS,CAAA;AAAA,EAChE,CAAC,CAAA,EAAE,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,QAAA,EAAS,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,MAAA,EAAO,SAAS,CAAA;AAAA,EACpE,CAAC,CAAA,EAAE,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,QAAA,EAAS,SAAS,CAAA;AAAA,EAC1E,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAClF,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EACnF,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,eAAA,EAAgB,SAAS,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,eAAA,EAAgB,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAClF,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EACnF,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAClE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,UAAA,EAAW,SAAS,CAAA;AAAA,EAC/E,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAC/E,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,QAAA,EAAS,SAAS;AACrE,CAAA;AAIA,IAAM,iBAAiC,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,MAAO;AAAA,EACvE,KAAA,EAAO,OAAO,EAAE,CAAA;AAAA,EAChB,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA,QAAA,EAAM,IAAI,CAAA;AACxB,CAAA,CAAE,CAAA;AAEF,IAAM,kBAAkC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,KAAK,CAAA,MAAO;AAAA,EACxE,KAAA,EAAO,OAAO,EAAE,CAAA;AAAA,EAChB,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA,QAAA,EAAM,KAAK,CAAA;AACzB,CAAA,CAAE,CAAA;AAGF,IAAM,YAAA,GAAe,IAAI,GAAA,CAAI,YAAA,CAAa,IAAI,CAAC,CAAC,IAAI,IAAA,EAAM,GAAG,MAAM,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,IAAI,IAAA,EAAM,GAAA,EAAK,CAAC,CAAC,CAAA;AACnG,IAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAC,IAAI,KAAA,EAAO,GAAG,MAAM,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,IAAI,KAAA,EAAO,GAAA,EAAK,CAAC,CAAC,CAAA;AAO7F,SAAS,aAAa,QAAA,EAA8C;AACzE,EAAA,IAAI,QAAA,IAAY,MAAM,OAAO,MAAA;AAC7B,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AAC1C;AAGO,SAAS,aAAa,OAAA,EAA6C;AACxE,EAAA,IAAI,OAAA,IAAW,MAAM,OAAO,MAAA;AAC5B,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA;AACzC;AAGO,SAAS,iBAAiB,QAAA,EAA6D;AAC5F,EAAA,MAAM,KAAA,GAAQ,aAAa,QAAQ,CAAA;AACnC,EAAA,OAAO,QAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAClD;AAIA,IAAM,gBAAA,GAAgD,CAAC,EAAE,MAAA,EAAO,KAAM;AACpE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAC1B,EAAA,uBACEA,eAAA,CAACC,UAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,MAAK,QAAA,EACnB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,MAAM,GAAG,CAAA;AAAA,QAClC,KAAK,KAAA,CAAM,IAAA;AAAA,QACX,CAAA,EAAG,EAAA;AAAA,QAAI,CAAA,EAAG,EAAA;AAAA,QACV,GAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,EAAE,cAAA,EAAgB,WAAA;AAAY;AAAA,KACvC;AAAA,oBACAH,eAAA,CAACI,SAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,UAAQ,IAAA,EACrB,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,EAAA;AAAA,MAAG,UAAA;AAAA,MAAI,KAAA,CAAM;AAAA,KAAA,EACtB;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAM,iBAAA,GAAiD,CAAC,EAAE,MAAA,EAAO,KAAM;AACrE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAC1B,EAAA,uBACEJ,eAAA,CAACC,UAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,MAAK,QAAA,EACnB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACG,QAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAG,EAAA;AAAA,QAAI,CAAA,EAAG,EAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,CAAA;AAAA,UACd,iBAAiB,KAAA,CAAM,GAAA;AAAA,UACvB,MAAA,EAAQ,kCAAA;AAAA,UACR,UAAA,EAAY;AAAA;AACd;AAAA,KACF;AAAA,oBACAL,eAAA,CAACI,SAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,UAAQ,IAAA,EACrB,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,EAAA;AAAA,MAAG,UAAA;AAAA,MAAI,KAAA,CAAM;AAAA,KAAA,EACtB;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AASO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,aAAa,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAAwB;AAClH,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,GAAO,YAAA,CAAa,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,MAAA;AAEhE,EAAA,uBACEF,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,UAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,YAAA,EAAc,gBAAA;AAAA,MACd,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,YAAA;AAAA,MACpB,aACE,KAAA,mBACEJ,cAAA;AAAA,QAACC,UAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,MAAM,GAAG,CAAA;AAAA,UAClC,KAAK,KAAA,CAAM,IAAA;AAAA,UACX,CAAA,EAAG,EAAA;AAAA,UAAI,CAAA,EAAG,EAAA;AAAA,UACV,GAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,EAAE,cAAA,EAAgB,WAAA;AAAY;AAAA,OACvC,GACE;AAAA;AAAA,GAER;AAEJ;AASO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,cAAc,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAAyB;AACrH,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,GAAO,YAAA,CAAa,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,MAAA;AAEhE,EAAA,uBACED,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,UAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM,eAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,YAAA,EAAc,iBAAA;AAAA,MACd,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,YAAA;AAAA,MACpB,aACE,KAAA,mBACEJ,cAAA;AAAA,QAACG,QAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAG,EAAA;AAAA,UAAI,CAAA,EAAG,EAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,CAAA;AAAA,YACd,iBAAiB,KAAA,CAAM,GAAA;AAAA,YACvB,MAAA,EAAQ,kCAAA;AAAA,YACR,UAAA,EAAY;AAAA;AACd;AAAA,OACF,GACE;AAAA;AAAA,GAER;AAEJ;AAOA,IAAM,iBAAA,GAAwD;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,0CAAA,EAAsC;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,qCAAA,EAAiC;AAAA,EACvD,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,qCAAA,EAAiC;AAAA,EACvD,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,uBAAA,EAAmB;AAAA,EACzC,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,0CAAA,EAAsC;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,8CAAA,EAA0C;AAAA,EAChE,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,uBAAA,EAAmB;AAAA,EACzC,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,+CAAA;AACxB,CAAA;AAOO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,gBAAgB,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAA2B;AAC3H,EAAA,uBACEH,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,aAAA,EAAe,KAAA;AAAA,MACf,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAEJ;;;ACjmBA,IAAM,UAAA,GAAa;AAAA,EACjB,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC/B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAChC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACpC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC9B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACrC,eAAe,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACnC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,aAAa,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC7B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC5B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACrC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC9B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAClC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,sBAAsB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/C,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC3B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA;AAAA,EAC7B,kBAAkB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC3C,YAAY,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACjC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,mBAAmB,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,iBAAiB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACzC,cAAc,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,EACjC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACvC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACpC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACjC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA;AACpC,CAAA;AAKO,SAAS,cAAA,CAAe,OAAeC,OAAAA,EAAuB;AACnE,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAE1C,EAAA,IAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC/B,IAAA,MAAM,GAAA,GAAM,WAAW,eAAe,CAAA;AACtC,IAAA,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,IAAA,MAAM,CAAA,GAAK,UAAU,EAAA,GAAM,GAAA;AAC3B,IAAA,MAAM,CAAA,GAAK,UAAU,CAAA,GAAK,GAAA;AAC1B,IAAA,MAAM,IAAI,MAAA,GAAS,GAAA;AACnB,IAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,0CAAA,CAA2C,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,0CAA0C,CAAA;AACrE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,KAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,IAChE;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT;;;AChLO,IAAM,YAAA,GAAe,MAAe,CAAE,MAAA,CAAe,YAAA;ACwBrD,IAAM,eAAA,GAA4B;AAAA,EACvC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAOmCC,MAAE,MAAA,CAAO;AAAA,EAC1C,WAAA,EAAaA,MAAE,OAAA,EAAQ;AAAA,EACvB,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,EACvB,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,EACvB,WAAA,EAAaA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ;AACjC,CAAC;AASM,IAAM,oBAAA,GAA2C;AAAA,EACtD,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa;AACf,CAAA;;;AC3CO,IAAM,WAAA,GAAcC,eAAsB,OAAO;AAAA,EACtD,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,OAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa,EAAA;AAAA,EACb,eAAA,EAAiB,KAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA,CAAE,CAAA;;;ACnBF,eAAsB,QAAA,CACpB,SAAA,EACA,IAAA,EACA,QAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC3B;AAEA,EAAA,IAAI,YAAA,EAAa,IAAK,QAAA,KAAa,MAAA,EAAW,OAAO,QAAA;AACrD,EAAA,IAAI,YAAA,EAAa,IAAK,QAAA,KAAa,MAAA,EAAW;AAC5C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,yCAAyC,SAAS,CAAA,kEAAA;AAAA,KACpD;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,QAAA,EAAS,CAAE,mBAAA;AAcpD,EAAA,MAAM,qBACJ,OAAQ,MAAA,CAAe,qBAAA,KAA0B,UAAA,IACjD,CAAC,CAAC,oBAAA;AAEJ,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,OAAQ,YAAa,EAAC;AAAA,EACxB;AAEA,EAAA,MAAM,YAAA,GAAgB,MAAA,CAAe,qBAAA,GAChC,MAAA,CAAe,uBAAsB,GACtC,oBAAA;AAEJ,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,CAAA,QAAA,EAAW,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,OAAO,CAAA;AACxE,IAAA,OAAO,MAAM,KAAK,IAAA,EAAK;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAQ,YAAa,EAAC;AAAA,EACxB;AACF;AAgBA,eAAsB,oBAAA,CACpB,SAAA,EACA,IAAA,EACA,QAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAY,SAAA,EAAW,MAAM,QAAQ,CAAA;AAE3D,EAAA,OAAO,OAAA,EAAQ;AACjB;ACrEA,IAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,SAAS,oBAAoB,GAAA,EAAa;AACxC,EAAA,IAAI,CAAC,GAAA,IAAO,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,EAAG;AACtC,EAAA,eAAA,CAAgB,IAAI,GAAG,CAAA;AACvB,EAAA,QAAA,CAAS,yBAAyB,EAAE,GAAA,EAAK,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAC3D;AAQA,IAAM,gBAAA,GAAiC;AAAA,EACrC,eAAA,EAAiB,sOAAA;AAAA,EACjB,kBAAA,EAAoB,SAAA;AAAA,EACpB,sBAAA,EAAwB,aAAA;AAAA,EACxB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,kBAAA,EAAoB,SAAA;AAAA,EACpB,qBAAA,EAAuB,qBAAA;AAAA,EACvB,eAAA,EAAiB,MAAA;AAAA,EACjB,eAAA,EAAiB,MAAA;AAAA,EACjB,eAAA,EAAiB,MAAA;AAAA,EACjB,iBAAA,EAAmB,WAAA;AAAA,EACnB,kBAAA,EAAoB,SAAA;AAAA,EACpB,sBAAA,EAAwB,mBAAA;AAAA,EACxB,qBAAA,EAAuB,0IAAA;AAAA,EACvB,wBAAA,EAA0B,cAAA;AAAA,EAC1B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,4BAAA,EAA8B,6DAAA;AAAA,EAC9B,6BAAA,EAA+B,0DAAA;AAAA,EAC/B,+BAAA,EAAiC,wBAAA;AAAA,EACjC,gCAAA,EAAkC,sBAAA;AAAA,EAClC,qBAAA,EAAuB,aAAA;AAAA,EACvB,iBAAA,EAAmB,QAAA;AAAA,EACnB,gBAAA,EAAkB,OAAA;AAAA,EAClB,wBAAA,EAA0B,gBAAA;AAAA,EAC1B,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,WAAA,GAAcA,cAAAA,CAAyB,CAAC,GAAA,EAAK,GAAA,KAAQ;AAChE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,EAAE,GAAG,gBAAA,EAAiB;AAAA,IAC/B,MAAA,EAAQ,CAAC,GAAA,EAAA,GAAgB,IAAA,KAAoC;AAC3D,MAAA,MAAM,MAAA,GAAS,GAAA,EAAI,CAAE,OAAA,CAAQ,GAAG,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ,mBAAA,CAAoB,GAAG,CAAA;AACpC,MAAA,IAAI,cAAc,MAAA,IAAU,GAAA;AAC5B,MAAA,IAAI,KAAK,MAAA,EAAQ;AAIf,QAAA,WAAA,GAAc,WAAA,CAAY,QAAQ,KAAA,EAAO,MAAM,OAAO,IAAA,CAAK,KAAA,EAAM,IAAK,EAAE,CAAC,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,GACF;AACF,CAAC,CAAA;AAGM,IAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAS,CAAE,MAAA;AAE7C,oBAAA,CAAmC,aAAA,EAAe,MAAS,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC1E,EAAA,WAAA,CAAY,QAAA,CAAS,EAAE,OAAA,EAAS,EAAE,GAAG,gBAAA,EAAkB,GAAG,IAAA,EAAK,EAAG,CAAA;AACpE,CAAC,CAAA,CAAE,MAAM,MAAM;AAAC,CAAC,CAAA;AAIjB,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,KAAA,KAAU;AAC5C,IAAA,MAAM,MAAM,KAAA,CAAM,IAAA;AAClB,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,yBAAA,EAA2B;AACtD,IAAA,IAAI,CAAC,GAAA,CAAI,IAAA,IAAQ,OAAO,GAAA,CAAI,SAAS,QAAA,EAAU;AAK/C,IAAA,IAAI,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AACxC,IAAA,WAAA,CAAY,QAAA,CAAS,EAAE,OAAA,EAAS,EAAE,GAAG,kBAAkB,GAAI,GAAA,CAAI,IAAA,EAAsB,EAAG,CAAA;AAAA,EAC1F,CAAC,CAAA;AACH;;;AC7FO,IAAM,SAAA,GAA8B,CAAC,OAAA,EAAS,KAAK,CAAA;AACnD,IAAM,QAAA,GAAW,KAAA;AAGjB,SAAS,SAAA,CAAU,GAAW,CAAA,EAA6B;AAChE,EAAA,OAAO;AAAA,IACL,SAAA,CAAU,CAAC,CAAA,GAAK,QAAA,GAAW,GAAA,GAAO,CAAA;AAAA;AAAA,IAClC,SAAA,CAAU,CAAC,CAAA,GAAK,QAAA,GAAW,GAAA,GAAO;AAAA;AAAA,GACpC;AACF;ACEO,IAAM,QAAA,GAAWA,cAAAA,CAAuB,OAAO,EAAC,CAAE,CAAA;AAElD,IAAM,YAAA,GAAe,CAAC,gBAAA,GAA6B,EAAC,KAAuB;AAChF,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,gBAAgB,CAAA;AAC3C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvF,CAAA;AAMA,oBAAA,CAAqC,mBAAmB,IAAA,EAAM;AAAA,EAC5D,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,WAAA,EAAY;AAAA,EACzE,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,CAAA,EAAK,KAAA,EAAO,WAAA,EAAY;AAAA,EACzE,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,WAAA;AAC/D,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,YAAA,KAAiB;AACxB,EAAA,IAAI,CAAC,YAAA,EAAc;AACnB,EAAA,QAAA,CAAS,SAAS,YAAY,CAAA;AAChC,CAAC,CAAA,CAAE,MAAM,MAAM;AAAC,CAAC,CAAA;ACKV,IAAM,kBAAA,GAAqBA,eAA6B,OAAO;AAAA,EACpE,MAAM,EAAC;AAAA,EACP,OAAO,EAAC;AAAA,EACR,MAAA,EAAQ;AACV,CAAA,CAAE,CAAA;AAaF,IAAI,wBAAA,GAA2B,KAAA;AACxB,SAAS,qBAAA,GAA8B;AAC5C,EAAA,IAAI,wBAAA,EAA0B;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,QAAA,CAAgC,sBAAA,EAAwB,MAAS,CAAA,CAC9D,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,IAAA,kBAAA,CAAmB,QAAA,CAAS;AAAA,MAC1B,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA,CAAK,OAAO,EAAC;AAAA,MAC/C,KAAA,EAAO,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,GAAI,IAAA,CAAK,QAAQ,EAAC;AAAA,MAClD,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,IAAA,wBAAA,GAA2B,KAAA;AAC3B,IAAA,kBAAA,CAAmB,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EAC9C,CAAC,CAAA;AACL;;;ACpEO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB;AAAA,EACpB,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,UAAA;AAAA,EAC1E,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA,EACxD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC7C,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC7H,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpE,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EACnG,UAAA;AAAA,EAAY,KAAA;AAAA,EAAO,UAAA;AAAA,EAAY,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,aAAA;AAAA,EACpD,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,UAAA;AAAA,EAAY,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,OAAA;AAAA,EACrD,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,QAAA;AAAA,EACnC,OAAA;AAAA,EAAS,WAAA;AAAA,EAAa,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAC/F,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,WAAA;AAAA,EAAa,OAAA;AAAA,EAAS,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,YAAA;AAAA,EAAc,OAAA;AAAA,EAAS;AACzF,CAAA;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACxB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,cAAA,EAAgB,gBAAgB,CAAA;AAE1D,IAAM,eAAA,GAAkB;AAAA,EACtB,YAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,eAAA,GAAkB;AAAA,EACtB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB;AAAA,EACpB,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,iBAAA,EAAoB,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,IAAM,oBAAA,GAAuB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,mBAAA,EAAsB,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC/F,IAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5D,EAAA,MAAM,MAAM,CAAA,GAAI,CAAA;AAChB,EAAA,OAAO;AAAA,IACL,UAAU,GAAG,CAAA,GAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,MAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,KAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,KAAA;AAAA,GACf;AACF,CAAC,EAAE,IAAA,EAAK;AAED,IAAM,4BAAA,GAAyD;AAAA,EACpE,oBAAoB,EAAC;AAAA,EACrB,iBAAiB,EAAC;AAAA,EAClB,aAAA,EAAe,CAAC,GAAG,kBAAkB,CAAA;AAAA,EACrC,sBAAA,EAAwB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EAC9C,sBAAA,EAAwB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EAC9C,eAAA,EAAiB,CAAC,GAAG,oBAAoB,CAAA;AAAA,EACzC,cAAA,EAAgB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EACtC,YAAA,EAAc,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACnC,iBAAA,EAAmB,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACxC,QAAA,EAAU,CAAC,GAAG,aAAa,CAAA;AAAA,EAC3B,UAAU,EAAC;AAAA,EACX,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,YAAA,EAAc,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACnC,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,WAAA,EAAa,CAAC,GAAG,gBAAgB,CAAA;AAAA,EACjC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,QAAA,EAAU,CAAC,GAAG,aAAa,CAAA;AAAA,EAC3B,eAAA,EAAiB,CAAC,GAAG,cAAc,CAAA;AAAA,EACnC,iBAAA,EAAmB,CAAC,GAAG,eAAe,CAAA;AAAA,EACtC,wBAAwB,EAAC;AAAA,EACzB,wBAAwB;AAC1B,CAAA;;;ACxJO,IAAM,YAAA,GAA6B;AAAA;AAAA,EAExC,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,iBAAA,EAAwB,UAAA,EAAY,SAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,SAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,sBAA2B,KAAA,EAAO,cAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,gBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,gBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,yBAA2B,KAAA,EAAO,iBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,wBAAA,EAA0B,OAAO,kBAAA,EAAyB,UAAA,EAAY,QAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,aAAA,EAAwB,UAAA,EAAY,GAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,OAAA,EAAwB,UAAA,EAAY,UAAA,EAAY,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGpH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,QAAA,EAAwB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,UAAA,EAAW;AAAA,EACzH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,YAAA,EAA2B,OAAO,MAAA,EAAwB,UAAA,EAAY,OAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,iBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,cAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,sBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,eAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,eAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,yBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,YAAA,EAA2B,OAAO,gBAAA,EAAwB,UAAA,EAAY,WAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,KAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,mBAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAGxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,WAAA,EAA2B,OAAO,KAAA,EAAwB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,QAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,UAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,UAAA,EAAkD,OAAO,QAAA,EAAS;AAAA,EACvH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,0BAAA,EAAgC,OAAO,aAAA,EAAmB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,0BAAA,EAAgC,OAAO,aAAA,EAAmB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,8BAAA,EAAgC,OAAO,iBAAA,EAAmB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,uBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,QAAA,EAAS;AAAA,EACvH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,uBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,QAAA,EAAS;AAAA;AAAA,EAGvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,OAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGrH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,qBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,4BAA6B,KAAA,EAAO,oBAAA,EAAgD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,6BAA6B,KAAA,EAAO,qBAAA,EAAgD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,sBAAA,EAA2B,OAAO,oBAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,iBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,YAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,WAAA,EAAwB,UAAA,EAAY,OAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,kBAAA,EAA+C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,kBAAA,EAA+C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,uBAAA,EAA2B,OAAO,aAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,MAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,aAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,oBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,qBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,gCAAgC,KAAA,EAAO,iBAAA,EAA6C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,gCAAgC,KAAA,EAAO,iBAAA,EAA6C,OAAO,SAAA,EAAU;AAAA;AAAA,EAGxH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,2BAAA,EAA+B,OAAO,mBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,6BAAA,EAA+B,OAAO,qBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA+B,OAAO,gBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,yBAAA,EAA+B,OAAO,iBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,sBAAA,EAA+B,OAAO,cAAA,EAAuB,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA;AAAA,EAGrI,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,2BAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,qBAAA,EAAsB;AAAA;AAAA,EAGpI,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,wCAAwC,KAAA,EAAO,oBAAA,EAAqC,OAAO,OAAA,EAAQ;AAAA;AAAA,EAGtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,sBAAA,EAAkC,OAAO,YAAA,EAAsB,UAAA,EAAY,GAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,gCAAA,EAAkC,OAAO,kBAAA,EAAsB,UAAA,EAAY,KAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,uBAAA,EAAkC,OAAO,QAAA,EAAsB,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,uBAAA,EAAkC,OAAO,QAAA,EAAsB,UAAA,EAAY,KAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAAkC,OAAO,kBAAA,EAAsB,UAAA,EAAY,GAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA;AAAA,EAG9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,YAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,yBAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,gBAAA,EAA6C,OAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,2BAA2B,KAAA,EAAO,aAAA,EAAgD,OAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,oBAAA,EAA2B,OAAO,cAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA;AAAA,EAG1H,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,yBAAA,EAA2B,OAAO,mBAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,uBAAA,EAA2B,OAAO,iBAAA,EAAuB,UAAA,EAAY,UAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,iBAAA,EAAuB,UAAA,EAAY,WAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,kBAAA,EAAuB,UAAA,EAAY,IAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,mCAAA,EAAsC,OAAO,eAAA,EAAsB,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,MAAA,EAAO;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,+CAA+C,KAAA,EAAO,qBAAA,EAA6B,OAAO,MAAA;AAC/G,CAAA;AAEA,IAAM,KAAA,GAAQ,IAAI,GAAA,CAAwB,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAOrE,SAAS,iBAAiB,EAAA,EAAoB;AACnD,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AACtB,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,EAAE,CAAA,CAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,UAAA,GAAa,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,EAAE,CAAA,MAAA,EAAM,CAAA,CAAE,UAAU,CAAA,CAAA,CAAA,GAAM,CAAA,EAAG,CAAA,CAAE,KAAK,KAAK,EAAE,CAAA,CAAA,CAAA;AAClF;AAGO,IAAM,uBAAA,GAA6C;AAAA,EACxD,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;ACnJO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,MAAM,QAAQC,oBAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,oBAAA;AAAA,MACH,CAAA,EAAG,MAAM,CAAA,IAAK,IAAA;AAAA,MACd,OAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,WAAA,EAAa,KAAA;AAAA,QAEb,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA;AAAA,QAE3B,OAAA,EAAS,CAAA,YAAA,EAAe,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QAC5G,SAAA,EAAW,CAAA,cAAA,EAAiB,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,OAClH;AAAA,MAGA,QAAA,kBAAAT,cAAAA;AAAA,QAACU,gCAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAO,cAAA,CAAe,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,KAAA,CAAM,YAAsB,GAAG,KAAA,CAAM,OAAA,GAAU,MAAK,GAAG,CAAA;AAAA,UAC1I,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GAAU;AAAA;AAC7C;AAAA;AACF;AAAA,GACF;AAEJ;ACpCO,IAAM,UAAA,GAAaC,mBAAA,CAAO,MAAA,CAAOF,SAAI;AAErC,IAAM,UAAA,GAAaE,mBAAA,CAAO,MAAA,CAAOT,SAAI;AAErC,IAAM,WAAA,GAAcS,mBAAA,CAAO,MAAA,CAAOV,UAAK;AAEvC,IAAM,UAAA,GAAaU,mBAAA,CAAO,MAAA,CAAOD,gCAAe;ACThD,SAAS,QAAQ,KAAA,EAAqE;AAC3F,EAAA,uBACEV,cAAAA,CAACY,4BAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,KAAA,GAAQ,qBACbZ,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MAEnB,EAAA,EAAG,QAAA;AAAA,MACH,CAAA,EAAE,QAAA;AAAA,MACF,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAM,QAAA;AAAA,MACN,EAAA,EAAI,MAAM,KAAA,IAAS,qBAAA;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,KAAA;AAAA,QACd,WAAA,EAAa,KAAA;AAAA,QACb,YAAA,EAAc,OAAA;AAAA,QACd,UAAA,EAAY,cAAA;AAAA,QACZ,SAAA,EAAW,4BAAA;AAAA,QACX,GAAG,KAAA,CAAM;AAAA,OACX;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM;AAAA,KAAA;AAAA,IAnBH;AAAA,GAoBN,EAEJ,CAAA;AAGJ;ACHO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAQ,EAAC;AAAA,EACT,aAAA,GAAgB,EAAA;AAAA,EAChB,KAAA,GAAQ,WAAA;AAAA,EACR,IAAA,GAAO,EAAA;AAAA,EACP,KAAA,GAAQ,MAAA;AAAA,EACR,OAAA,GAAU,GAAA;AAAA,EACV,QAAQ,EAAC;AAAA,EACT,kBAAA,GAAqB,GAAA;AAAA,EACrB,kBAAA,GAAqB,EAAA;AAAA,EACrB,eAAA,GAAkB;AACpB,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAea,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,cAAA,CAA0B,EAAE,CAAA;AAE9D,EAAA,MAAM,MAAA,GAASC,4BAAe,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAASA,4BAAe,CAAC,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA,EAAM,EAAE,IAAA,EAAM,EAAA,EAAI,UAAU,EAAA,EAAG;AAAA,IAC/B,MAAA,EAAQ,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,EAAC;AAAA,IAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA;AAAE,GAC/B;AAEA,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAElC,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiB;AACrC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,GAAA;AAC3B,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,EACzB,CAAA;AAEA,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,IAAA,MAAM,YAAA,GAAgC,CAAC,GAAG,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5E,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,eAAe,CAAA,GAAI,OAAA;AAEzB,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE3C,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,CAAA;AAAA,QACJ,KAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,CAAA,GAAI,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AAAA,QACnD,mBAAmB,QAAA,CAAS,IAAA,GAAO,YAAA,CAAa,YAAY,IAAI,QAAA,CAAS;AAAA,OAC3E;AAAA,IACF,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,YAAY,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,aAAA,EAAe,KAAA,CAAM,QAAQ,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,QAAQ,CAAC,CAAA;AAElE,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAS,qBAAA,EAAsB;AAC3D,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,IAAA;AAC7B,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,GAAA;AAE7B,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACZ,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAEZ,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,KAAY;AAC5B,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAE5C,UAAA,IAAI,QAAA,GAAW,kBAAA,IAAsB,QAAA,GAAW,CAAA,EAAG;AACjD,YAAA,MAAM,KAAA,GAAA,CAAS,qBAAqB,QAAA,IAAY,kBAAA;AAChD,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAC9D,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAE9D,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,QAAA,EAAU,SAAS,KAAA,GAAQ,MAAA;AAAA,cAC3B,QAAA,EAAU,SAAS,KAAA,GAAQ;AAAA,aAC7B;AAAA,UACF,CAAA,MAAO;AACL,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,UAAU,QAAA,CAAS,KAAA;AAAA,cACnB,UAAU,QAAA,CAAS;AAAA,aACrB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,MAAa;AAAA,UAC7B,GAAG,QAAA;AAAA,UACH,UAAU,QAAA,CAAS,KAAA;AAAA,UACnB,UAAU,QAAA,CAAS;AAAA,SACrB,CAAE;AAAA,OACJ;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,SAAA,CAAU,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACvD,IAAA,SAAA,CAAU,gBAAA,CAAiB,cAAc,gBAAgB,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAC1D,MAAA,SAAA,CAAU,mBAAA,CAAoB,cAAc,gBAAgB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,kBAAA,EAAoB,kBAAkB,CAAC,CAAA;AAE3D,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAC,UAAU,CAAA,KAAM;AACjC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,KAAA;AACnC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,MAAA;AAEnC,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC9C,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE9C,UAAA,OAAO;AAAA,YACL,GAAG,QAAA;AAAA,YACH,KAAA,EAAO,QAAA;AAAA,YACP,KAAA,EAAO,QAAA;AAAA,YACP,QAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEhB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,EAAA;AAAA,QAER,eAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,MAEA,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,QAAO,EACjE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,6BACdA,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,KAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAK;AAAA,WACP;AAAA,UACA,OAAA,EAAS;AAAA,YACP,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,KAAA,EAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,YACrB,SAAS,CAAC,OAAA,GAAU,GAAA,EAAK,OAAA,EAAS,UAAU,GAAG,CAAA;AAAA;AAAA,YAE/C,MAAA,EAAQ,QAAA,CAAS,EAAA,GAAK,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,CAAC,GAAA,EAAK,CAAC;AAAA,WACpD;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,MAAA,EAAQ;AAAA,cACN,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAM;AAAA,aAER;AAAA,YACA,KAAA,EAAO;AAAA,cACL,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA,aACR;AAAA,YACA,OAAA,EAAS;AAAA,cACP,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UAEC,QAAA,EAAA,QAAA,CAAS,IAAA,mBACRX,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,cAAA,EAAgB,QAAA,EAAS,EAC3G,QAAA,kBAAAA,cAAAA,CAACU,gCAAAA,EAAA,EAAgB,IAAA,EAAM,SAAS,IAAA,EAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA,EAAM,EAAG,CAAA,EACvF,oBAEAV,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF,SAAA;AAAA,QArDG,QAAA,CAAS;AAAA,OAwDjB,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACrPO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAG9B,EAAA,uBACEV,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,aAAA;AAAA,MACF,CAAA,EAAE,aAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,CAAA,8BAAA;AAAA,OACV;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,KAAA;AAAA,YACJ,CAAA,EAAE,KAAA;AAAA,YACF,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAM,QAAA;AAAA,YAEN,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAAI,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAS;AAAA,SACvB;AAAA,wBAEAF,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,KAAA;AAAA,YACF,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAI,KAAA;AAAA,YACJ,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,KAAA,EAAM,QAAA;AAAA,YACN,OAAA,EAAQ,QAAA;AAAA,YAER,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAU;AAAA;AACpB;AAAA;AAAA,GAEF;AAEJ;ACrCO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MACd,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,GAAG,KAAA,CAAM,CAAA;AAAA,MACT,GAAA,EAAK,KAAA,CAAM,KAAA,GAAQ,IAAA,GAAO,CAAA;AAAA,MAG1B,EAAA,EAAI,MAAM,EAAA,IAAMO,UAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,MAChD,CAAA,EAAG,MAAM,CAAA,IAAK,IAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,SAAA,EAAW,MAAM,OAAA,CAAQ,EAAA;AAAA,QACzB,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,kCAAA,CAAA,GAAuC,uCAAA;AAAA,QAC7D,GAAG,KAAA,CAAM;AAAA,OACX;AAAA,MACA,UAAU,KAAA,CAAM,QAAA;AAAA,MAGhB,QAAA,EAAA;AAAA,wBAAAP,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAEF,QAAA,EAAA;AAAA,cAAA,CAAA,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,WAAA,qBACrBX,eAAAA;AAAA,gBAACW,SAAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,QAAA;AAAA,kBACN,IAAA,EAAM,CAAA;AAAA,kBACN,CAAA,EAAG,KAAA,CAAM,CAAA,IAAK,GAAA,GAAM,IAAA,GAAO,CAAA;AAAA,kBAE1B,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,yBACLT,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,IAAA;AAAA,wBACL,KAAA,EAAO;AAAA,0BACL,UAAA,EAAY,QAAA;AAAA,0BACZ,UAAA,EAAY,cAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe;AAAA,yBACjB;AAAA,wBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,qBAAM;AAAA,oBAEf,KAAA,CAAM,+BACLF,cAAAA;AAAA,sBAACiB,YAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,KAAA,CAAM,WAAA;AAAA,wBACb,QAAA,EAAS,SAAA;AAAA,wBACT,SAAA,EAAS,IAAA;AAAA,wBACT,SAAA,EAAS,IAAA;AAAA,wBACT,GAAA,EAAI,MAAA;AAAA,wBACJ,MAAA,EAAQ;AAAA,0BACN,OAAA,EAAS;AAAA,4BACP,YAAYZ,UAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,4BAC5C,MAAA,EAAQ,CAAA,iCAAA,CAAA;AAAA,4BACR,KAAA,EAAO,wBAAA;AAAA,4BACP,UAAA,EAAY,cAAA;AAAA,4BACZ,QAAA,EAAU,OAAA;AAAA,4BACV,UAAA,EAAY,GAAA;AAAA,4BACZ,OAAA,EAAS,aAAA;AAAA,4BACT,aAAA,EAAe;AAAA;AACjB,yBACF;AAAA,wBAEA,QAAA,kBAAAL,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,QAAQ,MAAA,EAAO,EAChF,QAAA,kBAAAT,cAAAA,CAACkB,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAOb,WAAM,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAI,GAAG,CAAA,EAC9E;AAAA;AAAA;AACF;AAAA;AAAA,eAEJ;AAAA,cAED,KAAA,CAAM,yBACLL,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,kBACrB,EAAA,EAAI,GAAA;AAAA,kBACJ,EAAA,EAAG,MAAA;AAAA,kBACH,EAAA,EAAG,KAAA;AAAA,kBAEF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,cAED,MAAM,YAAA,oBACLF,eAACS,SAAAA,EAAA,EACE,gBAAM,YAAA,EACT;AAAA;AAAA;AAAA,SAEJ;AAAA,QACC,KAAA,CAAM;AAAA;AAAA;AAAA,GACT;AAEJ;ACnGO,IAAM,QAAA,GAAWF,eAAyB,MAAM;AACrD,EAAA,MAAM,YAA8C,EAAC;AAGrD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,KAAA,EAAOY,8BAAA;AAAA,IACP,KAAA,EAAOC;AAAA,GACT;AAGA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC/C,IAAA,SAAA,CAAU,GAAG,CAAA,GAAI,IAAI,KAAA,CAAM,GAAG,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,GAAA;AACf,MAAA,KAAA,CAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,IACA,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAAA,IACtB;AAAA,GACF;AACF,CAAC,CAAA;ACZO,SAAS,iBAAiB,KAAA,EAA8B;AAC9D,EAAA,MAAM,QAAQZ,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAE3C,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAgC;AACpD,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA;AAC9B,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,uBAAA;AAAA,MACH,CAAA,EAAG,MAAM,CAAA,IAAK,aAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,cAAc,KAAA,CAAM,UAAA,KAAe,KAAA,GAAQ,KAAA,CAAM,OAAO,EAAA,GAAK,CAAA;AAAA,QAC7D,QAAA,EAAU;AAAA,OACZ;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,gBAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BACtBT,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,OAAA,EAAS,EAAE,CAAA,EAAG,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,UAC/B,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,UAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,OAAO,KAAA,GAAQ,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,UAEnE,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,KAAA;AAAA,YACf,UAAA,EAAY,QAAA;AAAA,YACZ,IAAA,EAAM;AAAA,WACR;AAAA,UAEA,QAAA,kBAAAX,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,cAAc,IAAA,CAAK,YAAA;AAAA,cACnB,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,UAAU,CAAC,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,UAAU,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,KAAK,CAAA,IAAK,MAAM,KAAA,CAAM,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,cACnH,SAAS,MAAM;AAEb,gBAAA,IAAI,MAAM,KAAA,EAAO;AACf,kBAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GACtC,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,GAC7B,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAA,CAAK,KAAK,CAAA,GAC1C,CAAC,GAAG,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,GAC7B,CAAC,KAAK,KAAK,CAAA;AAEf,kBAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,gBACvB,CAAA,MAAO;AACL,kBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,gBACzB;AAAA,cACF;AAAA,aAAA;AAAA,YArBK,IAAA,CAAK;AAAA;AAsBZ,SAAA;AAAA,QAnCK;AAAA,OAqCR;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,QAAQ,KAAA,EAId;AACD,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAE9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,CAAA,EAAE,MAAA;AAAA,MACF,SAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAM,QAAA;AAAA,MAEN,CAAA,EAAE,MAAA;AAAA,MACF,EAAA,EAAI,MAAM,QAAA,GAAW,KAAA,CAAM,QAAQ,cAAA,CAAe,KAAA,CAAM,OAAO,GAAG,CAAA,GAAI,eAAe,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,MAAM,YAAsB,CAAA,EAAG,GAAG,CAAA,GAAI,aAAA;AAAA,MAC5J,GAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO;AAAA;AAAA,QAEL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAExB,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAEJ,CAAA,EAAE,IAAA;AAAA,YAGD,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,wBACLT,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,MAAM,KAAA,CAAM,IAAA;AAAA,kBAEZ,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,MAAM,SAAA,CAAU,EAAA;AAAA,oBAC1B,YAAA,EAAc;AAAA;AAChB;AAAA,eACF;AAAA,8BAEFA,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,MAAM,EAAA,IAAM,IAAA;AAAA,kBAClB,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe,OAAA;AAAA,oBACf,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA,QAAA,EAAA,KAAA,CAAM,MAAM,WAAA;AAAY;AAAA,eAAE;AAAA,cAC3B,KAAA,CAAM;AAAA;AAAA;AAAA,SACT;AAAA,wBAGAA,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS;AAAA,cACP,MAAA,EAAQ,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI,CAAA;AAAA,cAC7B,OAAA,EAAS,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI;AAAA,aAChC;AAAA,YACA,UAAA,EAAY;AAAA,cACV,QAAA,EAAU,GAAA;AAAA,cACV,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC;AAAA;AAAA,aACvB;AAAA,YACA,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,CAAA;AAAA,cACR,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,CAAA;AAAA,cACP,MAAA,EAAQ,OAAA;AAAA,cACR,eAAA,EAAiB,MAAM,KAAA,IAAS,KAAA,CAAM,OAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAAA,cAClE,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;ACrLO,IAAM,iBAAA,GAAoBU,oBAAgD,IAAI;AAE9E,SAAS,cAAiB,QAAA,EAAwC;AACvE,EAAA,MAAM,UAAA,GAAaC,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAOC,gBAAA,CAAS,YAAY,QAAQ,CAAA;AACtC;AAGO,SAAS,kBAAA,GAAoB;AAClC,EAAA,MAAM,UAAA,GAAaD,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,WAAA,EAAY,EAAuD;AAChH,EAAA,MAAM,QAAA,GAAWT,YAAAA;AAAA,IACfN,eAAwB,OAAO;AAAA,MAC7B,QAAQ,WAAA,IAAe;AAAA,KACzB,CAAE;AAAA,GACJ;AAEA,EAAA,uBACEP,eAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,QAAA,CAAS,SACzC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAO,KAAA,EAErB;AACA,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AACpD,EAAA,MAAMwB,SAAQ,kBAAA,EAAmB;AAEjC,EAAA,uBACExB,cAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAM,IAAA;AAAA,MACN,CAAA,EAAE,MAAA;AAAA,MACF,KAAA,EAAO,MAAA;AAAA,MACP,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAAwB,MAAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,OAAiB,CAAA;AAAA,MAC5C;AAAA;AAAA,GACF;AAEJ;ACjDA,IAAM,iBAAA,GAA8B;AAAA,EAClC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,GAAA;AAAA,MACjB,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AACpB;AAEJ,CAAA;AAGA,IAAM,YAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,EAAA;AAAA,IACH,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,GAAA;AAAA,MACX,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,GAAA;AAAA,IACH,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAIO,SAAS,kBAAkB,KAAA,EAAsB;AACtD,EAAA,MAAM,kBAAA,GAAqB,MAAM,KAAA,CAAM,QAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,kBAAkB,CAAA;AACrE,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,QAAA,GAAW,kBAAA,GAAsB,kBAAA;AAE5D,EAAA,uBACExB,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,MAAA;AAAA,MACF,CAAA,EAAG,MAAM,IAAA,IAAQ,KAAA;AAAA,MACjB,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,iBAAA;AAAA,MAET,QAAA,EAAA,CAAC,GAAG,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AAC5C,QAAA,MAAM,WAAW,KAAA,GAAQ,cAAA;AACzB,QAAA,MAAM,YAAY,KAAA,KAAU,cAAA;AAE5B,QAAA,uBACEA,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,QAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,CAAA;AAAA,cACN,MAAA,EAAQ,MAAA;AAAA,cACR,UAAA,EAAY,QAAA,GACR,0BAAA,GACA,SAAA,GACA,CAAA,mDAAA,EAAsD,cAAc,GAAG,CAAA,4BAAA,EAA+B,WAAA,GAAc,GAAG,CAAA,EAAA,CAAA,GACvH,0BAAA;AAAA,cACJ,UAAA,EAAY;AAAA;AACd,WAAA;AAAA,UAXK;AAAA,SAYP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;ACnDA,SAAS,aAAA,CAAc,MAAiB,eAAA,EAAqC;AAC3E,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,OAAO,SAAA,EAAW,KAAA,EAAO,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IAC1J,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,OAAO,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACzJ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACvJ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACvJ,KAAK,IAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAE,YAAA,EAAc,eAAA,EAAiB,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,eAAA,EAAiB,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA;AAE3K;AAEO,SAAS,MAAM,KAAA,EAAmB;AACvC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC9C,EAAA,MAAM,QAAQH,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,SAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,IAAA,EAAM,KAAA,CAAM,UAAU,EAAE,CAAA;AACnE,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,EAAA,EAAI,MAAM,EAAA,IAAM,aAAA;AAAA,MAChB,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MACd,CAAA,EAAG,MAAM,CAAA,IAAK,OAAA;AAAA,MACd,IAAI,CAAC,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,YAAY,KAAA,CAAM,CAAA;AAAA,MACxC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,MAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA,GAAe,MAAA,GAAS,CAAA,YAAA,EAAe,MAAM,WAAA,IAAe,cAAA,CAAe,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,OAC1I;AAAA,MAEA,0BAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,SAAS,QAAA,EAC5B,QAAA,EAAA;AAAA,wBAAAX,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAK,MAAA,CAAO,QAAA,EAAU,EAAA,EAAG,IAAA,EAC5C,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,UAAU,MAAA,CAAO,YAAA;AAAA,cACjB,OAAO,KAAA,CAAM,SAAA;AAAA,cACb,GAAG,MAAA,CAAO;AAAA;AAAA,WACZ;AAAA,0BACAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,QAAA,EAC3B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAE,GAAA;AAAA,gBACF,MAAM,MAAA,CAAO,SAAA;AAAA,gBACb,KAAA,EAAO;AAAA,kBACL,YAAY,MAAA,CAAO,eAAA;AAAA,kBACnB,UAAA,EAAY,IAAA,IAAQ,OAAA,GAAU,cAAA,GAAiB,UAAA;AAAA,kBAC/C,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,aACT;AAAA,4BACAF,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,MAAM,MAAA,CAAO,eAAA;AAAA,gBACb,CAAA,EAAE,MAAA;AAAA,gBACF,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAU,UAAU,YAAA,EAAa;AAAA,gBAErD,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAF,cAAAA,CAACS,SAAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAChC,QAAA,EAAA,KAAA,CAAM,YAAA,EACT;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AC1GO,SAAS,YAAY,KAAA,EAO1B;AACA,EAAA,uBACEX,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,CAAA,EAAE,MAAA;AAAA,MACF,GAAA,EAAI,UAAA;AAAA,MACJ,IAAA,EAAK,KAAA;AAAA,MACL,KAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAI,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QAEL,YAAA,EAAcU,oBAAAA,EAAgB,CAAE,MAAA,CAAO;AAAA,OACzC;AAAA,MAEA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,MAC7D,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,WAAW,kBAAA,EAAmB;AAAA,MAC3D,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,MAC1D,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,MAC5B,SAAA,EAAW,QAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAV,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,MAAA;AAAA,YACF,OAAA,EAAS,eAAA;AAAA,YAET,QAAA,EAAA;AAAA,8BAAAX,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,MAAA;AAAA,oBAAK,KAAA,CAAM;AAAA;AAAA;AAAA,eAAM;AAAA,8BAClBJ,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,GAAA;AAAA,oBAAI,GAAA;AAAA,oBAAE,KAAA,CAAM,WAAA;AAAA,oBAAY;AAAA;AAAA;AAAA,eAAG;AAAA,8BACnCJ,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,MAAA;AAAA,oBAAK,MAAM,KAAA,GAAQ;AAAA;AAAA;AAAA;AAAE;AAAA;AAAA,SACxB;AAAA,wBACAF,cAAAA;AAAA,UAACyB,aAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,CAAA,EAAE,MAAA;AAAA,YACF,IAAA,EAAK,IAAA;AAAA,YACL,OAAO,KAAA,CAAM;AAAA;AAAA;AACf;AAAA;AAAA,GACF;AAGJ;ACnEO,SAAS,WAAW,KAAA,EAOzB;AACA,EAAA,MAAM,QAAQjB,oBAAAA,EAAgB;AAE9B,EAAA,uBACEV,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,aAAA;AAAA,MACF,EAAA,EAAG,KAAA;AAAA,MACH,EAAA,EAAG,KAAA;AAAA,MAEH,EAAA,EAAG,2GAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,SAAA,EAAW,MAAM,OAAA,CAAQ,EAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACX;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW,QAAA;AAAA,MACX,CAAA,EAAE,IAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC0B,iBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,GAAA;AAAA,YACN,SAAA,EAAS,IAAA;AAAA,YACT,SAAA,EAAW,EAAA;AAAA,YACX,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,MAAM,eAAA,EAAiB,KAAA,EAAM,eAAe,KAAA,CAAM,KAAA,IAAS,MAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,GAAG,CAAA;AAAA,YACrJ,uBACE1B,cAAAA;AAAA,cAACS,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,QAAA;AAAA,gBACT,KAAA,EAAO,QAAA;AAAA,gBACP,SAAA,EAAW,QAAA;AAAA,gBAEX,QAAA,kBAAAT,cAAAA;AAAA,kBAACE,SAAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,KAAA;AAAA,oBACL,CAAA,EAAG,cAAA,CAAe,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,CAAA;AAAA,oBACpG,KAAA,EAAO;AAAA,sBACL,UAAA,EAAY,eAAA;AAAA,sBACZ,UAAA,EAAY,CAAA,SAAA,EAAY,cAAA,CAAe,KAAA,CAAM,SAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,qBAC5H;AAAA,oBAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AACF;AAAA,SAEJ;AAAA,wBACAF,cAAAA;AAAA,UAACE,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,eAAA;AAAA,cACZ,aAAA,EAAe,QAAA;AAAA,cACf,aAAA,EAAe;AAAA,aACjB;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,OAAO;AAAA;AAAA,SAC/B;AAAA,wBACAJ,eAAAA;AAAA,UAACI,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,CAAA,EAAE,uBAAA;AAAA,YAED,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,GAAA;AAAA,cAAI,GAAA;AAAA,cAAE,KAAA,CAAM,WAAA;AAAA,cAAY,GAAA;AAAA,cAAE,OAAO,KAAK;AAAA;AAAA;AAAA;AAC/C;AAAA;AAAA,GACF;AAEJ;ACrDO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,SAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,MAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,YAAA,GAAe,IAAA;AAAA,EACf;AACF,CAAA,EAAe;AACb,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,oBAAA,GAAuBK,aAAO,KAAK,CAAA;AAEzC,EAAA,uBACEb,cAAAA,CAAC2B,WAAA,EAAA,EACC,QAAA,kBAAA3B,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MACA,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,QAAA,oBAAA,CAAqB,OAAA,GAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA;AAAA,MAChD,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,IAAI,gBAAgB,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,IAAiB,qBAAqB,OAAA,EAAS;AAChF,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAAb,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAC9C,KAAA,EAAO;AAAA,YACL,YAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,YAC5C,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,YAC3C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,KAAA;AAAA,YACA,SAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY;AAAA,WACd;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAP,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,eAAA;AAAA,gBACR,KAAA,EAAM,QAAA;AAAA,gBACN,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,cAAc,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,kBACjD,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAX,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,IAAA,oBACCT,cAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,SAAA,IAAa,uBAAA;AAAA,wBACpB,IAAA,EAAK;AAAA;AAAA,qBACP;AAAA,oCAEFA,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,EAAA,EAAG,cAAA;AAAA,wBACH,IAAA,EAAK,IAAA;AAAA,wBACL,EAAA,EAAG,WAAA;AAAA,wBACH,GAAA,EAAI,QAAA;AAAA,wBACJ,CAAA,EAAE,wBAAA;AAAA,wBAED,QAAA,EAAA;AAAA;AAAA,qBACH;AAAA,oBACC,yBACCF,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO;AAAA,0BACL,UAAA,EAAYK,UAAAA,CAAM,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,0BACnC,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,0BAC/C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,0BAC3B,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,yBACjC;AAAA,wBAEA,QAAA,kBAAAL,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,GAAG,KAAA,CAAM,KAAA;AAAA,4BAER,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AACF,mBAAA,EAEJ,CAAA;AAAA,kCACAF,cAAAA;AAAA,oBAACW,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,MAAA,EAAQ,MAAA;AAAA,wBACR,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,wBACvB,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS;AAAA,uBACX;AAAA,sBAEA,QAAA,kBAAAL,cAAAA,CAAC4B,aAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB;AAAA;AAAA;AACnC;AAAA;AAAA,aACF;AAAA,YAGC,WAAA,oBACC5B,cAAAA,CAACS,SAAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EACf,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,IAAA;AAAA,gBACL,CAAA,EAAE,wBAAA;AAAA,gBACF,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAI;AAAA,gBAExB,QAAA,EAAA;AAAA;AAAA,aACH,EACF,CAAA;AAAA,4BAIFF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,IAClE,QAAA,EACH;AAAA;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;AClJO,SAAS,YAAY,KAAA,EAAe;AACzC,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAI,IAAA;AAAA,MACJ,SAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAM,CAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAE,cAAAA;AAAA,UAACE,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,CAAA,EAAE,0BAAA;AAAA,YACF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SAAQ;AAAA,wBAChBF,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,IAAA;AAAA,YAEH,gBAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,0BAC1BT,cAAAA;AAAA,cAAC6B,WAAA;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAA,CAAO,OAAA;AAAA,gBAChB,OAAO,MAAA,CAAO,KAAA;AAAA,gBACd,IAAA,EAAM,GAAA;AAAA,gBACN,SAAS,MAAA,CAAO,OAAA;AAAA,gBAChB,WAAA,EAAa,MAAA,CAAO,IAAA,mBAClB7B,cAAAA;AAAA,kBAACU,gCAAAA;AAAA,kBAAA;AAAA,oBACC,MAAM,MAAA,CAAO,IAAA;AAAA,oBACb,KAAA,EAAO;AAAA,sBACL,QAAA,EAAU,MAAM,SAAA,CAAU;AAAA;AAC5B;AAAA,iBACF,GACC,MAAA;AAAA,gBAEF,QAAA,EAAA,MAAA,CAAO;AAAA,eAAA;AAAA,cAdH;AAAA,aAgBR;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;AChCO,IAAM,YAAA,GAAeW,oBAA2C,IAAI;AAEpE,SAAS,SAAY,QAAA,EAAuC;AACjE,EAAA,MAAM,KAAA,GAAQC,iBAAW,YAAY,CAAA;AACrC,EAAA,IAAG,CAAC,KAAA,EAAM;AACR,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAOC,gBAAAA,CAAS,OAAO,QAAQ,CAAA;AACjC;AAEA,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAC/C,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,eAAA,EAAgB;AAEtC,EAAA,uBACEvB,cAAAA,CAACY,4BAAAA,EAAA,EACE,oCACCZ,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,cAAc,MAAA,CAAO,YAAA;AAAA,MAEpB,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,GACV,EAEJ,CAAA;AAEJ;AAEO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAiC;AACxE,EAAA,MAAM,QAAA,GAAWa,YAAAA;AAAA,IACfN,eAAmB,OAAO;AAAA,MACxB,MAAA,EAAQ;AAAA,KACV,CAAE;AAAA,GACJ;AAEA,EAAA,uBACET,eAAAA,CAAC,YAAA,CAAa,UAAb,EAAsB,KAAA,EAAO,SAAS,OAAA,EACrC,QAAA,EAAA;AAAA,oBAAAE,eAAC,UAAA,EAAA,EAAU,CAAA;AAAA,IACV;AAAA,GAAA,EACH,CAAA;AAEJ;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,KAAA,GAAQsB,iBAAW,YAAY,CAAA;AACrC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAEjF,EAAA,MAAM,SAAA,GAAY,CAAC,SAAA,KAA+B;AAChD,IAAA,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,OAAO,EAAE,WAAW,SAAA,EAAU;AAChC;ACzEO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAQd,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,CAAC,WAAA,IAAe,KAAA,KAAU,WAAA;AAE7C,EAAA,uBACEd,cAAAA,CAAC2B,WAAAA,EAAA,EACC,QAAA,kBAAA3B,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MACA,OAAA,EAAS,OAAA;AAAA,MAET,QAAA,kBAAAb,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAC9C,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,YAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,YAC5C,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAC,CAAA,CAAA;AAAA,YAC5C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,KAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,QAAA,EAAU;AAAA,WACZ;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAP,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,eAAA;AAAA,gBACR,KAAA,EAAM,QAAA;AAAA,gBACN,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,YAAA,EAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAC,CAAA,CAAA;AAAA,kBAClD,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,kBACjC,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAP,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,oCAAAT,cAAAA,CAAC8B,yBAAA,EAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,CAAA;AAAA,oCAC5C9B,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,EAAA,EAAG,cAAA;AAAA,wBACH,IAAA,EAAK,IAAA;AAAA,wBACL,EAAA,EAAG,WAAA;AAAA,wBACH,GAAA,EAAI,QAAA;AAAA,wBACJ,CAAA,EAAE,SAAA;AAAA,wBAED,QAAA,EAAA;AAAA;AAAA;AACH,mBAAA,EACF,CAAA;AAAA,kCACAF,cAAAA;AAAA,oBAACW,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,MAAA,EAAQ,MAAA;AAAA,wBACR,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,wBACvB,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS;AAAA,uBACX;AAAA,sBAEA,QAAA,kBAAAL,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,OAAM,uBAAA,EAAwB;AAAA;AAAA;AACnC;AAAA;AAAA,aACF;AAAA,4BAGA9B,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,IAAA,EAClC,QAAA,EAAA;AAAA,8BAAAT,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,iBAAA;AAAA,kBACH,IAAA,EAAK,IAAA;AAAA,kBACL,CAAA,EAAE,wBAAA;AAAA,kBACF,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAI;AAAA,kBAExB,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cAEC,WAAA,oBACCJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC3B,QAAA,EAAA;AAAA,gCAAAX,eAAAA;AAAA,kBAACI,SAAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,cAAA;AAAA,oBACH,IAAA,EAAK,KAAA;AAAA,oBACL,EAAA,EAAG,WAAA;AAAA,oBACH,GAAA,EAAI,QAAA;AAAA,oBACJ,CAAA,EAAE,wBAAA;AAAA,oBACH,QAAA,EAAA;AAAA,sBAAA,MAAA;AAAA,sBACM,GAAA;AAAA,sCACLF,cAAAA,CAACE,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAO,EAAA,EAAG,cAAA,EAAe,CAAA,EAAE,SAAA,EACxC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBAAQ,GAAA;AAAA,sBAAI;AAAA;AAAA;AAAA,iBAEd;AAAA,gCACAF,cAAAA;AAAA,kBAAC+B,cAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,IAAA;AAAA,oBACL,WAAA,EAAa,WAAA;AAAA,oBACb,KAAA,EAAO,KAAA;AAAA,oBACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,oBAC/C,MAAA,EAAQ,CAACC,EAAAA,MAAO;AAAA,sBACd,KAAA,EAAO;AAAA,wBACL,iBAAiB3B,UAAAA,CAAM2B,EAAAA,CAAE,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,wBAC5C,QAAQ,CAAA,YAAA,EAAe3B,UAAAA;AAAA,0BACrB,UAAU,WAAA,GACN,SAAA,GACA2B,EAAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,0BACnB;AAAA,yBACD,CAAA,CAAA;AAAA,wBACD,KAAA,EAAO,wBAAA;AAAA,wBACP,UAAA,EAAY;AAAA;AACd,qBACF,CAAA;AAAA,oBACA,SAAA,EAAS;AAAA;AAAA;AACX,eAAA,EACF;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAGAlC,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,UAAA;AAAA,gBACR,GAAA,EAAI,IAAA;AAAA,gBACJ,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,WAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,kBAC9C,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAX,eAAAA;AAAA,oBAACa,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,sBACxB,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,wBAC3C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS,WAAA;AAAA,wBACT,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,GAAA,EAAK;AAAA,uBACP;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAL,eAAC4B,aAAAA,EAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,wCAC9C5B,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,CAAA,EAAE,uBAAA;AAAA,4BACH,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,mBACF;AAAA,kCAEAJ,eAAAA;AAAA,oBAACa,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,SAAS,MAAM;AACb,wBAAA,IAAI,UAAA,EAAY;AACd,0BAAA,SAAA,EAAU;AACV,0BAAA,OAAA,EAAQ;AAAA,wBACV;AAAA,sBACF,CAAA;AAAA,sBACA,YACE,UAAA,GACI;AAAA,wBACE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,wBACjC,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG;AAAA,uBACnC,GACA,MAAA;AAAA,sBAEN,QAAA,EAAU,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,sBACzC,KAAA,EAAO;AAAA,wBACL,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,UAAA,GAAa,OAAO,IAAI,CAAA;AAAA,wBACrD,QAAQ,CAAA,YAAA,EAAeA,UAAAA;AAAA,0BACrB,SAAA;AAAA,0BACA,aAAa,IAAA,GAAO;AAAA,yBACrB,CAAA,CAAA;AAAA,wBACD,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS,WAAA;AAAA,wBACT,MAAA,EAAQ,aAAa,SAAA,GAAY,aAAA;AAAA,wBACjC,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,GAAA,EAAK,OAAA;AAAA,wBACL,OAAA,EAAS,aAAa,CAAA,GAAI,IAAA;AAAA,wBAC1B,UAAA,EAAY;AAAA,uBACd;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAL,cAAAA,CAACiC,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,CAAA;AAAA,wCACrCjC,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,CAAA,EAAE,SAAA;AAAA,4BAED,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;AClMA,IAAM,IAAA,GAAuC;AAAA,EAC3C,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,cAAA,EAAe;AAAA,EAClC,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,cAAA,EAAe;AAAA,EAClC,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA;AACtB,CAAA;AAYO,IAAM,oBAAA,GAAuBK,cAAAA,CAAmB,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,EACpE,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU,KAAA;AAAA,EACV,SAAS,YAAY;AACnB,IAAA,IAAI,GAAA,GAAM,QAAA,EAAU;AACpB,IAAA,GAAA,CAAI,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAwB,mBAAA,EAAqB,KAAA,CAAA,EAAW;AAAA,QACxE,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,EAAE,OAAA,EAAS,EAAC,EAAG,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,IAAG;AAAE,OAC5D,CAAA;AACD,MAAA,IAAI,GAAA,EAAK,OAAA,IAAW,GAAA,CAAI,IAAA,EAAM;AAC5B,QAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,MACtB;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IACtB,CAAA,SAAE;AACA,MAAA,GAAA,CAAI,EAAE,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,IACzB;AAAA,EACF;AACF,CAAA,CAAE;AAEK,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,QAAQC,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIM,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAgB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAC/D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAIvD,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAQ;AAAA,EACvB,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAakB,iBAAA,CAAY,CAAC,GAAA,KAAe;AAC7C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,EAAA;AACpC,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,KAAK,MAAM;AAC7C,MAAA,SAAA,CAAU,GAAG,CAAA;AACb,MAAA,UAAA,CAAW,MAAM,UAAU,CAAC,CAAA,KAAO,MAAM,GAAA,GAAM,IAAA,GAAO,CAAE,CAAA,EAAG,IAAI,CAAA;AAAA,IACjE,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,CAAA,KAAwB;AACzD,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,IAAA;AAEjD,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAE7C,EAAA,uBACEpC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,UAAA,EAAYO,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,QACjC,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA;AAAA,QAC7C,UAAA,EAAY,eAAe,SAAS,CAAA,CAAA;AAAA,QACpC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,MAAA,EAAQ,WAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAP,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAI,OAAA,EAAQ,GAAE,WAAA,EAAY,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,IAAa,OAAA,EAAS,MAAM,YAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,EAC/G,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC8B,2BAAA,EAAc,IAAA,EAAK,SAAQ,KAAA,EAAO,SAAA,EAAW,aAAa,GAAA,EAAK,CAAA;AAAA,0BAChEhC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EACrD,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,GAAG,SAAA,EAC9D,QAAA,EAAA,KAAA,CAAM,QAAQ,MAAA,KAAW,CAAA,GACtB,uCACA,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,kCAAA,CAAA,EAC7B,CAAA;AAAA,4BACAF,eAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,OAAM,CAAA,EAAE,uBAAA,EAAwB,WAAW,CAAA,EAAG,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,IAC7F,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAClB;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAF,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,aAAA;AAAA,cACT,QAAA,EAAU,QAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY,aAAA;AAAA,gBACZ,MAAA,EAAQ,MAAA;AAAA,gBACR,OAAA,EAAS,OAAA;AAAA,gBACT,MAAA,EAAQ,WAAW,MAAA,GAAS,SAAA;AAAA,gBAC5B,OAAA,EAAS,MAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,cAAA,EAAgB,QAAA;AAAA,gBAChB,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,eAC5B;AAAA,cACA,KAAA,EAAM,UAAA;AAAA,cAEN,QAAA,kBAAAA,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,IAAA;AAAA,gBAAP;AAAA,kBACC,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,kBACtC,UAAA,EAAY,QAAA,GAAW,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,QAAA,EAAS,GAAI,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,kBACzF,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,kBAEzE,QAAA,kBAAAX,eAACmC,qBAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAO9B,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA;AAAA;AACxD;AAAA,WACF;AAAA,0BACAL,cAAAA;AAAA,YAACW,mBAAAA,CAAO,GAAA;AAAA,YAAP;AAAA,cACC,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,cACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,cAC7B,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,cAEzE,QAAA,kBAAAX,eAACoC,uBAAA,EAAA,EAAY,IAAA,EAAK,SAAQ,KAAA,EAAO/B,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA;AAAA;AAC1D,SAAA,EACF,CAAA;AAAA,wBAGAL,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,sCACCd,eAAAA;AAAA,UAACa,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,YACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,YAC9C,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,eAAeN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAG;AAAA,YAOhF,QAAA,EAAA;AAAA,8BAAAL,eAACS,SAAAA,EAAA,EAAK,KAAI,GAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,IACvE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,gBAAA,MAAM,MAAA,GAAS,IAAI,EAAA,KAAO,SAAA;AAC1B,gBAAA,MAAM,OAAA,GAAU,eAAe,GAAA,CAAI,EAAA;AACnC,gBAAA,IAAI,EAAA,GAAa,aAAA;AACjB,gBAAA,IAAI,MAAA,EAAQ,EAAA,GAAKA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,qBAAA,IAC7B,OAAA,EAAS,EAAA,GAAKA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAC5C,gBAAA,uBACEL,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,sBAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AAAA,oBAAG,CAAA;AAAA,oBAC7D,YAAA,EAAc,MAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AAAA,oBACxC,YAAA,EAAc,MAAM,aAAA,CAAc,CAAC,MAAO,CAAA,KAAM,GAAA,CAAI,EAAA,GAAK,IAAA,GAAO,CAAE,CAAA;AAAA,oBAClE,KAAA,EAAO;AAAA,sBACL,IAAA,EAAM,CAAA;AAAA,sBACN,UAAA,EAAY,EAAA;AAAA,sBACZ,MAAA,EAAQ,MAAA;AAAA,sBACR,YAAA,EAAc,MAAA,GAAS,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,GAAK,yBAAA;AAAA,sBACpD,OAAA,EAAS,WAAA;AAAA,sBACT,MAAA,EAAQ,SAAS,SAAA,GAAY,SAAA;AAAA,sBAC7B,KAAA,EAAO,SAAS,SAAA,GAAY,uBAAA;AAAA,sBAC5B,UAAA,EAAY,cAAA;AAAA,sBACZ,QAAA,EAAU,8BAAA;AAAA,sBACV,aAAA,EAAe,QAAA;AAAA,sBACf,aAAA,EAAe,WAAA;AAAA,sBACf,UAAA,EAAY;AAAA,qBACd;AAAA,oBAEC,QAAA,EAAA,GAAA,CAAI;AAAA,mBAAA;AAAA,kBAnBA,GAAA,CAAI;AAAA,iBAoBX;AAAA,cAEJ,CAAC,CAAA,EACH,CAAA;AAAA,8BAEAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IAAK,EAAA;AAAA,kBACnC,QAAQ,MAAA,KAAW,SAAA;AAAA,kBACnB,MAAA,EAAQ,CAAC,CAAA,KAAM;AAAE,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,oBAAA,UAAA,CAAW,SAAS,CAAA;AAAA,kBAAG,CAAA;AAAA,kBAC7D;AAAA;AAAA;AACF;AAAA,WAAA;AAAA,UAnDI;AAAA,SAoDN,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIM,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,SAAS,EAAA,GAAK,CAAC,EAAE,CAAA,GAAI,IAAA,CAAK,MAAM,IAAI,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,CAAE,MAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,MAAA,GACXT,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,GACrB,OAAA,GACEA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,GACrBA,UAAAA,CAAM,WAAW,GAAG,CAAA;AAE1B,EAAA,uBACEP,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,YAAW,EACjC,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAA;AAAA,QACT,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,QACnC,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,QACpC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,OAAA;AAAA,UACP,MAAA,EAAQ,CAAA;AAAA,UACR,UAAA,EAAY,MAAA;AAAA,UACZ,QAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,SAAS,SAAA,GAAY,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA;AAAA,UAClE,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,UAC3B,OAAA,EAAS,aAAA;AAAA,UACT,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,OAAA;AAAA,UACL,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,MAAA,mBACGL,cAAAA,CAACqC,iBAAA,EAAA,EAAM,IAAA,EAAK,SAAQ,KAAA,EAAM,SAAA,EAAU,CAAA,mBACpCrC,cAAAA,CAACsC,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAO,SAAA,EAAW,CAAA;AAAA,0BACzCtC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAAS,CAAA,EAAG,MAAA,GAAS,YAAY,SAAA,EACpF,QAAA,EAAA,MAAA,GAAS,WAAW,MAAA,EACvB;AAAA;AAAA;AAAA,KACF;AAAA,oBAEAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO;AAAA,MACV,YAAYK,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,MAC3C,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX,EACE,QAAA,kBAAAL,cAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAO,EAAE,cAAA,EAAgB,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,GAAA,EAAI,EACrH,QAAA,kBAAAA,cAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBF,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAE,cAAAA,CAAC,QAAG,KAAA,EAAO;AAAA,QACT,KAAA,EAAO,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA,EAAA,CAAA;AAAA,QAC1B,SAAA,EAAW,OAAA;AAAA,QACX,OAAA,EAAS,eAAA;AAAA,QACT,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,MAAA;AAAA,QACZ,UAAA,EAAY,QAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB,EAAI,cAAI,CAAA,EAAE,CAAA;AAAA,sBACVA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO;AAAA,QACT,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB,EAAI,kBAAQ,QAAA,EAAI;AAAA,KAAA,EAAA,EAfT,CAgBT,CACD,CAAA,EACH,CAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpSA,SAAS,SAAA,CAAU,KAAU,IAAA,EAAmB;AAC9C,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAS,GAAA,GAAM,GAAA,CAAI,GAAG,CAAA,GAAI,QAAY,GAAG,CAAA;AAC/E;AAEA,SAAS,SAAA,CAAU,GAAA,EAAU,IAAA,EAAc,KAAA,EAAiB;AAC1D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAC,GAAG,GAAG,CAAA,GAAI,EAAE,GAAG,GAAA,EAAI;AACtD,EAAA,IAAI,OAAA,GAAU,IAAA;AAEd,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAEtC,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAG,CAAA;AAE5B,IAAA,OAAA,CAAQ,GAAG,CAAA,GACT,QAAA,IAAY,OACR,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GACpB,CAAC,GAAG,QAAQ,CAAA,GACZ,EAAE,GAAG,QAAA,KACP,OAAA,GACA,KACA,EAAC;AAEP,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AACjC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CAAa,KAAU,IAAA,EAAmB;AACjD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,IAAI,OAAA,GAAU,MAAA;AAEd,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,GAAA;AAC1B,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,EAAE,GAAG,OAAA,CAAQ,GAAG,CAAA,EAAE;AACjC,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACpC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAA0C;AAC/D,EAAA,OACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,EAAE,KAAA,YAAiB,IAAA,CAAA;AAEvB;AAEA,SAAS,mBAAA,CAAoB,MAAA,EAAa,OAAA,EAAc,MAAA,GAAS,EAAA,EAAc;AAC7E,EAAA,IAAI,OAAO,EAAA,CAAG,MAAA,EAAQ,OAAO,CAAA,SAAU,EAAC;AAExC,EAAA,MAAM,WAAA,GAAc,cAAc,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,cAAc,OAAO,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAE1C,EAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,MAAA,EAAQ,UAAU,CAAA,EAAG,OAAA,EAAS,UAAU,CAAC,CAAA;AACjE,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,UAAA,GAAa,SAAS,CAAA,EAAG,MAAM,IAAI,CAAC,CAAA,CAAA,GAAK,GAAG,CAAC,CAAA,CAAA;AACnD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,mBAAA,CAAoB,MAAA,GAAS,CAAC,GAAG,OAAA,GAAU,CAAC,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,IAAA,MAAM,IAAA,uBAAW,GAAA,CAAI;AAAA,MACnB,GAAG,MAAA,CAAO,IAAA,CAAK,MAAA,IAAU,EAAE,CAAA;AAAA,MAC3B,GAAG,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE;AAAA,KAC7B,CAAA;AACD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,aAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AACjD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,mBAAA,CAAoB,MAAA,GAAS,GAAG,GAAG,OAAA,GAAU,GAAG,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IAC/E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,GAAS,CAAC,MAAM,CAAA,GAAI,EAAC;AAC9B;AAEA,SAAS,mBAAA,CACP,QACA,WAAA,EAC2C;AAC3C,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,MAAA,EAAQ,WAAW,CAAA;AACtD,EAAA,IAAI,UAAsB,EAAC;AAE3B,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,OAAA,GAAU,UAAU,OAAA,EAAS,IAAA,EAAM,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAC3B;AAEA,SAAS,YAAA,CACP,KAAA,EACA,MAAA,GAAS,EAAA,EACoB;AAC7B,EAAA,MAAM,SAAsC,EAAC;AAE7C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,MAAM,WAAW,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,MAAM,GAAG,CAAA;AAErB,IAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA;AAAA,SAAA,IACzC,OAAO,GAAA,KAAQ,QAAA;AACtB,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,OAAA,CACb,IAAA,EACA,KAAA,EACA,MAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AACjC,EAAA,OAAO,MAAA,YAAkB,OAAA,GAAU,MAAM,MAAA,GAAS,MAAA;AACpD;AA0DO,SAAS,eAAA,CACd,aAAA,EACA,eAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,eAAA,GAAkB,YAAA,CAAa,eAAe,IAAI,EAAC;AAErE,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,EAAA,OAAOuC,mBAAA,CAA0B,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,IAC9C,aAAA;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,gBAAgB,EAAC;AAAA,IACjB,OAAA,EAAS,KAAA;AAAA,IACT,UAAA,EAAY,KAAA;AAAA,IACZ,eAAe,EAAC;AAAA,IAChB,YAAA,EAAc,CAAA;AAAA,IACd,QAAA;AAAA,IAEA,QAAQ,YAAY;AAClB,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,QAAA,EAAS;AACrC,MAAA,IAAI,OAAA,IAAW,MAAM,QAAA,EAAU;AAC7B,QAAA,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IAEA,aAAA,EAAe,CAAC,IAAA,KAAiB;AAC/B,MAAA,OAAO;AAAA,QACL,OAAO,SAAA,CAAU,GAAA,EAAI,CAAE,MAAA,EAAQ,IAAI,CAAA,IAAK,EAAA;AAAA,QACxC,KAAA,EAAO,GAAA,EAAI,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,QACxB,QAAA,EAAU,CAAC,CAAA,KAA2C;AACpD,UAAA,GAAA,EAAI,CAAE,SAAS,IAAA,EAAM,CAAA,CAAE,OAAO,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,QACzD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,kBAAkB,MAAM;AACtB,MAAA,OAAA,CAAQ,KAAA,EAAM;AACd,MAAA,GAAA,CAAI,EAAE,eAAe,EAAC,EAAG,cAAc,CAAA,EAAG,cAAA,EAAgB,EAAC,EAAG,CAAA;AAAA,IAChE,CAAA;AAAA,IAEA,kBAAkB,CAAC,gBAAA,KACjB,IAAI,EAAE,aAAA,EAAe,kBAAkB,CAAA;AAAA,IAEzC,QAAA,EAAU,CAAC,IAAA,EAAM,KAAA,EAAO,OAAA,KAAY;AAClC,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA;AAC5B,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,KAAK,CAAA;AAEtD,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,aAAA,EAAe,IAAI,CAAA;AACpD,MAAA,MAAM,aAAa,KAAA,KAAU,QAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAC1B,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAEhB,MAAA,IAAI,aAAa,KAAA,CAAM,cAAA;AAEvB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,QAAA,UAAA,GAAa,SAAA,CAAU,UAAA,EAAY,IAAA,EAAM,KAAK,CAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,QAAA,UAAA,GAAa,YAAA,CAAa,YAAY,IAAI,CAAA;AAAA,MAC5C;AAEA,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,SAAA;AAAA,QACR,cAAA,EAAgB,UAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAA;AAAA,QAC1B,UAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAe,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AAAA,QACjC,cAAc,OAAA,CAAQ;AAAA,OACvB,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AAExB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,OAAA,CAAQ,OAAA,CAAQ,QAAQ,IAAA,EAAM,KAAA,EAAO,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AAC/D,QAAA,IAAI,KAAA;AACF,UAAA,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA,EAAE,CAAE,CAAA;AAAA;AAEzD,UAAA,GAAA,CAAI,CAAC,OAAO,EAAE,MAAA,EAAQ,aAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAA,EAAE,CAAE,CAAA;AAAA,MACzD,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,QAAA,EAAU,CAAC,IAAA,EAAM,OAAA,KACf,IAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,UAAU,CAAA,CAAE,MAAA,EAAQ,IAAA,EAAM,OAAO,GAAE,CAAE,CAAA;AAAA,IAE7D,UAAA,EAAY,CAAC,IAAA,KACX,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,YAAA,CAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,GAAE,CAAE,CAAA;AAAA,IAEvD,aAAA,EAAe,OAAO,IAAA,KAAS;AAC7B,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAC1C,MAAA,MAAM,QAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,MAAM,MAAM,CAAA;AAErD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA,EAAE,CAAE,CAAA;AACzD,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,GAAA,CAAI,CAAC,OAAO,EAAE,MAAA,EAAQ,aAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAA,EAAE,CAAE,CAAA;AACrD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,UAAU,YAAY;AACpB,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,IAAI,OAAA,GAAU,IAAA;AACd,MAAA,IAAI,YAAoC,EAAC;AAEzC,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,QAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,MAAM,MAAM,CAAA;AAErD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,GAAU,KAAA;AACV,UAAA,SAAA,GAAY,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,KAAK,CAAA;AAAA,QAC9C;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AACzB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,KAAI,CAAE,aAAA;AAAA,QACd,QAAQ,EAAC;AAAA,QACT,gBAAgB,EAAC;AAAA,QACjB,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,eAAe,EAAC;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,SAAA,KAAc;AAC3B,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,SAAA;AAAA,QACR,aAAA,EAAe,SAAA;AAAA,QACf,QAAQ,EAAC;AAAA,QACT,gBAAgB,EAAC;AAAA,QACjB,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,eAAe,EAAC;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,MAAM;AACV,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,MAAA,MAAM,IAAA,GAAO,QAAQ,GAAA,EAAI;AACzB,MAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI,CAAE,MAAM,CAAA;AAExB,MAAA,MAAM,EAAE,QAAQ,OAAA,EAAQ,GAAI,oBAAoB,IAAA,EAAM,GAAA,GAAM,aAAa,CAAA;AAEzE,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,IAAA;AAAA,QACR,cAAA,EAAgB,OAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAA;AAAA,QAC1B,UAAA,EAAY,IAAA;AAAA,QACZ,aAAA,EAAe,MAAA;AAAA,QACf,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,SAAS,MAAM;AACb,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAEpB,MAAA,MAAM,IAAA,GAAO,OAAO,GAAA,EAAI;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAAE,MAAM,CAAA;AAEzB,MAAA,MAAM,EAAE,QAAQ,OAAA,EAAQ,GAAI,oBAAoB,IAAA,EAAM,GAAA,GAAM,aAAa,CAAA;AAEzE,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,IAAA;AAAA,QACR,cAAA,EAAgB,OAAA;AAAA,QAChB,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,OAAO,MAAA,GAAS,CAAA;AAAA,QAC5B,aAAA,EAAe,MAAA;AAAA,QACf,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,GACF,CAAE,CAAA;AACJ;AAMA,IAAM,WAAA,GAAclB,oBAA+C,IAAI,CAAA;AAEhE,SAAS,YAAA,CAAgB;AAAA,EAC9B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAA,GAAWR,YAAAA;AAAA,IACf,eAAA,CAAmB,aAAA,EAAe,QAAA,EAAU,QAAQ;AAAA,GACtD;AAEA,EAAA,uBACEb,eAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,QAAA,CAAS,SACnC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAA,GAAa;AAC3B,EAAA,MAAMwB,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,KAAA,GAAQD,iBAASC,MAAK,CAAA;AAE5B,EAAA,MAAM,aAAA,GAAgBgB,cAAQ,MAAM;AAClC,IAAA,OAAO,mBAAA,CAAoB,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,aAAa,CAAA;AAAA,EAC9D,GAAG,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,aAAa,CAAC,CAAA;AAEtC,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,YAAA,EAAc,cAAc,MAAA,EAAO;AACvE;AAEO,SAAS,aACd,IAAA,EACwD;AACxD,EAAA,MAAMhB,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAOD,gBAAAA,CAASC,QAAO,CAAC,CAAA,KAAM,UAAU,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAC,CAAA;AACzD;AAyCO,SAAS,cAAA,GAAoB;AAClC,EAAA,MAAMA,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAOA,OAAM,QAAA,EAAS;AAexB;AC/fA,IAAM,KAAA,uBAAkC,GAAA,EAAI;AAC5C,IAAM,SAAA,uBAA4C,GAAA,EAAI;AAEtD,SAAS,OAAO,GAAA,EAAa;AAC3B,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC5B,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,OAAA,CAAQ,CAAC,EAAA,KAAO,EAAA,EAAI,CAAA;AACzB;AAUO,SAAS,aAAA,CAAiB,KAAa,OAAA,EAAoD;AAGhG,EAAA,MAAM,GAAG,OAAO,CAAA,GAAIV,eAAS,CAAC,CAAA;AAE9B,EAAAE,gBAAU,MAAM;AACd,IAAA,MAAM,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,wBAAS,GAAA,EAAc;AACpD,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AACtB,IAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,CAACgB,EAAAA,KAAMA,KAAI,CAAC,CAAA;AAC1C,IAAA,GAAA,CAAI,IAAI,OAAO,CAAA;AACf,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,CAAI,OAAO,OAAO,CAAA;AAClB,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,CAAA,EAAG,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,IAC1C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,KAAA,GAAS,MAAM,GAAA,CAAI,GAAG,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,GAAI,OAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAA4B;AAC5C,IAAA,MAAM,OAAO,OAAO,CAAA,KAAM,UAAA,GAAc,CAAA,CAAkB,KAAK,CAAA,GAAI,CAAA;AACnE,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,IAAI,CAAA;AACnB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;ACDO,SAAS,uBAAA,GAA4D;AAC1E,EAAgB,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAE/G;AClCO,IAAM,iBAAA,GAAoBzB,cAAAA,CAAuB,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,EACrE,MAAA,EAAQ,IAAA;AAAA,EACR,OAAO,CAAS,IAAA,KACd,IAAI,OAAA,CAAuB,CAAC,OAAA,KAAY;AACtC,IAAA,MAAM,IAAA,GAAO,KAAI,CAAE,MAAA;AACnB,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC3B,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAA,IAA6C,CAAA;AAAA,EACxE,CAAC,CAAA;AAAA,EACH,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB,CAAA;AAAA,EACA,cAAc,MAAM;AAClB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAChB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB;AACF,CAAA,CAAE;AC5CFkC,0BAAA,CAAQ,GAAA,CAAIC,qBAAA,EAAKC,uBAAA,EAAKC,sBAAG,CAAA;AA2BlB,IAAM,eAAA,GAAkB,IAAIC,sBAAA,CAAY;AAAA,EAC7C,cAAA,EAAgB,EAAE,OAAA,EAAS,EAAE,WAAW,GAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,GAAA,EAAO;AACrE,CAAC,CAAA;ACgBD,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ;AAC7B,CAAA,EAKG;AACD,EAAA,MAAM,QAAQrC,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAEhD,EAAA,uBACEV,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,UAAA,EAAY,EAAE,UAAA,EAAY,MAAA,GAASN,WAAM,KAAA,EAAO,IAAI,IAAI,wBAAA,EAAyB;AAAA,MACjF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,UAAA,EAAY,MAAA,GAASA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAI,aAAA;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY,CAAA,YAAA,EAAe,MAAA,GAAS,KAAA,GAAQ,aAAa,CAAA,CAAA;AAAA,QACzD,YAAA,EAAc,KAAK,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,QACrD,OAAA,EAAS,WAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,OAAA;AAAA,QACL,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,GAAS,QAAQ,wBAAA,EAA0B,CAAA;AAAA,wBACxDA,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,MAAA,GAAS,KAAA,GAAQ,0BAC/E,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,0BACCF,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,QAAA,EAAS,gBAAA;AAAA,YACT,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,KAAA;AAAM;AAAA;AACvG;AAAA;AAAA,GAEJ;AAEJ;AAIA,SAAS,eAAA,CAA+C;AAAA,EACtD,OAAA;AAAA,EAAS;AACX,CAAA,EAGG;AACD,EAAA,MAAM,QAAQH,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,OAAA,EAAW;AACxB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIM,cAAAA,CAAS,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AACtC,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,QAAA,CAAS,OAAO,KAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,IAAA,CAAK,KAAK,GAAG,CAAC,KAAK,CAAA,CAAE,OAAO,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACxF,UAAA;AAAA,QACF;AACA,QAAA,MAAM,UAAU,IAAA,CAAK,MAAA;AACrB,QAAC,OAAO,IAAA,CAAK,MAAA,CAAO,IAAK,CAAA,CAAkB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1D,UAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAA,CAAM,GAAG,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AACtE,YAAA,IAAA,CAAK,QAAA,CAAS,GAAA,EAAe,MAAA,CAAO,IAAA,CAAM,GAAG,CAAC,CAAA;AAAA,UAChD;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,MAAM,UAAU,IAAA,CAAK,MAAA;AACrB,QAAC,OAAO,IAAA,CAAK,MAAM,CAAA,CAAkB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpD,UAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAG,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AAChE,YAAA,IAAA,CAAK,QAAA,CAAS,GAAA,EAAe,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,UAC1C;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AACA,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,CAAA,EAAQ;AACf,MAAA,QAAA,CAAS,EAAE,OAAO,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,eAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,MAAA,CAAO,qBAAqB,CAAA,EAAG,IAAA,EAAMgD,iBAAA,EAAO,SAAA,EAAW,OAAO,OAAA,EAAkB,KAAA,EAAM,QAAO,SAAA,EAAU,MAAA,EAAO,QAAQ,GAAA,EAClI,QAAA,EAAA;AAAA,oBAAAhD,eAAAA,CAACK,QAAAA,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,CAAA,EAAE,OAAA,EAAQ,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO,EACjD,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAAC+C,cAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,KAAA;AAAA,UACZ,QAAA,EAAU,OAAA;AAAA,UACV,IAAA,EAAM,EAAA;AAAA,UACN,YAAA,EAAY,IAAA;AAAA,UACZ,eAAA,EAAgB,cAAA;AAAA,UAChB,QAAQ,OAAO;AAAA,YACb,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,EAAa,UAAU,OAAA,EAAS,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,MAAA;AAAO,WACvF;AAAA;AAAA,OACF;AAAA,MACC,KAAA,oBAAS/C,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,SAAA,EAAU,EAAA,EAAG,OAAO,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EAC3E,CAAA;AAAA,oBACAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,OAAA,EAAQ,YAAW,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAO,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACzH,QAAA,EAAA;AAAA,sBAAAX,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UAAc,OAAA,EAAS,OAAA;AAAA,UAAS,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UACrH,KAAA,EAAO,EAAE,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,UACxP,QAAA,EAAA;AAAA,4BAAAL,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB,CAAA;AAAA,4BACjC5B,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,iBAAiB,CAAA,EAAE;AAAA;AAAA;AAAA,OACrH;AAAA,sBACAJ,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UAAc,OAAA,EAAS,UAAA;AAAA,UAAY,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,UAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UAC1G,OAAO,EAAE,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,MAAM,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,SAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,UAC1P,QAAA,EAAA;AAAA,4BAAAL,cAAAA,CAACqC,iBAAAA,EAAA,EAAM,KAAA,EAAc,CAAA;AAAA,4BACrBrC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,gBAAgB,CAAA,EAAE;AAAA;AAAA;AAAA;AACpG,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAChF,EAAA,IAAI;AAAE,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EAAG;AACtE;AAEA,SAAS,sBAAsB,KAAA,EAAyC;AACtE,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,UAAU,GAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACjC,MAAA,OAAO,KAAK,cAAA,CAAe,MAAA,EAAW,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,MAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClJ;AAAA,EACF;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAClC,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACjC,MAAA,OAAO,KAAK,cAAA,CAAe,MAAA,EAAW,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,MAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClJ;AAAA,EACF;AACA,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAiC,KAAA,EAAe;AACvE,EAAA,OAAO,GAAG,KAAA,CAAM,OAAO,IAAI,KAAA,CAAM,eAAe,IAAI,KAAK,CAAA,CAAA;AAC3D;AAIA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAM,EAAwC;AACrE,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,OAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,CAAA,YAAA,EAAeJ,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,UAAA,EAAYA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,GAAE,EAC/L,QAAA,EAAA;AAAA,oBAAAP,eAAAA,CAACI,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,GAAE,wBAAA,EAAyB,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACnD,MAAM,gBAAA,IAAoB,GAAA;AAAA,MAAI,GAAA;AAAA,MAAE,QAAA;AAAA,MAAS,GAAA;AAAA,MAAE,MAAM,eAAA,IAAmB;AAAA,KAAA,EAC/E,CAAA;AAAA,oBACAJ,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,mBAAA,EAAqB,kDAAA,EAAoD,GAAA,EAAK,SAAS,MAAA,EAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,IAAI,QAAA,EAAU,QAAA,EAAU,UAAA,EAAYA,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,GAAE,EAC/Q,QAAA,EAAA;AAAA,sBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnJL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnJL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,MAAA,CAC/I,MAAM,OAAA,IAAW,IAAI,GAAA,CAAI,CAAC,QAAQ,GAAA,KAAQ;AAC1C,QAAA,MAAM,KAAK,GAAA,GAAM,CAAA,KAAM,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAC9F,QAAA,OAAO;AAAA,0BACLL,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,SAAA,EAAU,EAAA,EAAG,OAAA,EAAQ,IAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAa,EAAI,QAAA,EAAA,MAAA,CAAO,IAAA,EAAA,EAAxI,CAAA,EAAG,GAAG,CAAA,EAAA,CAAuI,CAAA;AAAA,0BACxJF,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,WAAA,EAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAAwB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,UAAA,EAAY,UAAA,EAAW,EAAI,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA,EAAA,EAA1L,CAAA,EAAG,GAAG,CAAA,EAAA,CAAsL,CAAA;AAAA,0BACvMF,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,WAAA,EAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,UAAA,EAAY,UAAA,EAAW,EAAI,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA,EAAA,EAA3L,CAAA,EAAG,GAAG,CAAA,EAAA,CAAuL;AAAA,SAC1M;AAAA,MACF,CAAC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAiF;AACpI,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,EAAO,IAAA,IAAQ,KAAA,CAAM,OAAO,UAAA,IAAc,SAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,GAAU,CAAC,GAAG,IAAA,IAAQ,GAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,GAAG,KAAA,CAAM,gBAAA,IAAoB,GAAG,CAAA,QAAA,EAAW,KAAA,CAAM,mBAAmB,GAAG,CAAA,CAAA;AAE3F,EAAA,uBACER,cAAAA,CAACW,mBAAAA,CAAO,GAAA,EAAP,EAAW,MAAA,EAAM,IAAA,EAAC,OAAA,EAAS,EAAE,SAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,GAAE,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,SAAA,EAAU,EAC7H,QAAA,kBAAAb,gBAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,QAAA,EAC3B,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAACW,mBAAAA,CAAO,MAAA;AAAA,MAAP;AAAA,QAAc,OAAA,EAAS,QAAA;AAAA,QAAU,UAAA,EAAY,EAAE,KAAA,EAAO,KAAA,EAAM;AAAA,QAAG,QAAA,EAAU,EAAE,KAAA,EAAO,KAAA,EAAM;AAAA,QAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,QACvH,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,GAAWN,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAe,QAAA,GAAWA,UAAAA,CAAM,KAAA,CAAM,OAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,SAAS,eAAA,EAAiB,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,MAAA,EAAO;AAAA,QAC/T,QAAA,kBAAAP,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,mBAAA,EAAqB,4CAAA,EAA8C,GAAA,EAAK,OAAA,EAAS,UAAA,EAAY,UAAS,EACnI,QAAA,EAAA;AAAA,0BAAAE,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,cAAA,EAAgB,QAAA,EAAS,EACtD,QAAA,kBAAAA,eAACW,mBAAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAS,EAAE,QAAQ,QAAA,GAAW,CAAA,GAAI,GAAA,EAAI,EAAG,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,SAAA,IACvF,QAAA,kBAAAX,cAAAA,CAACoC,uBAAAA,EAAA,EAAY,MAAK,OAAA,EAAQ,KAAA,EAAO,WAAW,uBAAA,GAA0B,wBAAA,EAA0B,GAClG,CAAA,EACF,CAAA;AAAA,0BACApC,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,qBAAA,CAAsB,KAAK,CAAA,EAAE,CAAA;AAAA,0BAC1GF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACnFF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAA0B,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,0BAC3EF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,0BACvFF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,aAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAA0B,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC1E;AAAA;AAAA,KACF;AAAA,oBACAF,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,QAAA,oBACCZ,cAAAA,CAACW,mBAAAA,CAAO,GAAA,EAAP,EAAyB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAG,EAAG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,GAAE,EAAG,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAG,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,WAAA,EAAY,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS,EACxO,QAAA,kBAAAX,cAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,CAAA,EAAA,EADf,SAEhB,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,mBAAA,EAAqB,4CAAA,EAA8C,GAAA,EAAK,SAAS,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,cAAc,KAAA,CAAM,MAAA,CAAO,IAAI,UAAA,EAAYA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,OAAA,EAAS,iBAAgB,EACtS,QAAA,EAAA;AAAA,oBAAAL,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBAC/DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBAClEF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,oBACnEF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBAC/DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,oBAC1EF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,SAAA,EAAO;AAAA,GAAA,EACvE,CAAA;AAEJ;AAIA,SAAS,kBAAA,CAAmB;AAAA,EAC1B;AACF,CAAA,EAEG;AACD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,uBAAA,EAAwB;AAC/C,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIM,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAElE,EAAA,MAAM,OAAA,GAAU0B,aAAAA,CAAQ,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,CAAA,EAAI,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAE5E,EAAA,MAAM,eAAeQ,2BAAA,CAAiB;AAAA,IACpC,QAAA,EAAU,CAAC,qBAAA,EAAuB,OAAO,CAAA;AAAA,IACzC,gBAAA,EAAkB,CAAA;AAAA,IAClB,OAAA,EAAS,OAAO,EAAE,SAAA,EAAU,KAAM;AAChC,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW;AAAA,QAChC,MAAA,EAAQ,SAAA;AAAA,QACR,KAAA,EAAO,EAAA;AAAA,QACP,KAAA,EAAO,QAAQ,KAAA,IAAS,MAAA;AAAA,QACxB,IAAA,EAAM,QAAQ,IAAA,IAAQ,MAAA;AAAA,QACtB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,OACzB,CAAA;AACD,MAAA,IAAI,CAAC,QAAA,EAAU,OAAA,IAAW,CAAC,SAAS,IAAA,EAAM;AACxC,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU,+BAA+B,CAAA;AAAA,MACrE;AACA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,QAAA,KAAa,QAAA,CAAS;AAAA,GAC1C,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,KAAK,CAAA,IAAK,EAAC;AACxE,EAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,CAAC,GAAG,KAAA,IAAS,CAAA;AAEpD,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA+B;AACvD,IAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,IAAA,IAAI,EAAA,CAAG,YAAA,GAAe,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,YAAA,GAAe,GAAA,IAAO,YAAA,CAAa,WAAA,IAAe,CAAC,YAAA,CAAa,kBAAA,EAAoB;AAC1H,MAAA,YAAA,CAAa,aAAA,EAAc;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,uBACElD,eAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,MAAA,CAAO,wBAAwB,CAAA,EAAG,IAAA,EAAMmD,mBAAA,EAAS,SAAA,EAAW,OAAO,OAAA,EAAkB,KAAA,EAAM,QAAO,SAAA,EAAU,MAAA,EAAO,QAAQ,GAAA,EACvI,QAAA,EAAA;AAAA,oBAAAnD,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,EACtD,QAAA,EAAA;AAAA,sBAAAX,eAAAA,CAACW,WAAA,EAAK,GAAA,EAAI,MAAK,CAAA,EAAE,IAAA,EAAK,OAAO,EAAE,YAAA,EAAc,eAAeJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAG,EAC7F,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACkD,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,yBAAA,EAA0B,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAAG,CAAA;AAAA,wBAC/LlD,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACmD,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,qCAAA,EAAsC,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,wBACzMnD,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACoD,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,cAAA,EAAe,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,wBAClLpD,cAAAA;AAAA,UAACW,mBAAAA,CAAO,MAAA;AAAA,UAAP;AAAA,YACC,SAAS,MAAM;AAAE,cAAA,cAAA,CAAe,IAAI,CAAA;AAAG,cAAA,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA;AAAG,cAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAAG,cAAA,QAAA,CAAS,UAAA,CAAW,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAAA,YAAG,CAAA;AAAA,YACxJ,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAE;AAAA,YAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,YACvE,KAAA,EAAO,EAAE,UAAA,EAAYA,UAAAA,CAAM,OAAO,IAAI,CAAA,EAAG,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,IAAI,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,eAAA,EAAiB,MAAA,EAAQ,SAAA,EAAU;AAAA,YACjK,QAAA,kBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAG,KAAA,EAAO,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AACpD,OAAA,EACF,CAAA;AAAA,sBAEAJ,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,MAAK,CAAA,EAAE,IAAA,EAAK,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO,EAAG,UAAU,gBAAA,EACtG,QAAA,EAAA;AAAA,wBAAAT,eAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAClC,QAAA,EAAA,YAAA,CAAa,cAAc,CAAC,YAAA,CAAa,OAAO,oBAAA,GAAuB,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA,EAClF,CAAA;AAAA,wBACAF,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,QACnB,YAAA,CAAa,OAAA,oBAAWA,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,IAAA,EAAK,CAAA,EAAE,SAAA,EAAY,QAAA,EAAA,YAAA,CAAa,MAAgB,OAAA,EAAQ,CAAA;AAAA,QAC7G,CAAC,YAAA,CAAa,SAAA,IAAa,KAAK,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA,CAAa,OAAA,oBAC7DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,IAAA,EAAK,CAAA,EAAE,0BAAyB,QAAA,EAAA,uCAAA,EAAqC,CAAA;AAAA,wBAEpGF,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,OACvB,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC1B,UAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AACxC,UAAA,uBAAOZ,cAAAA,CAAC,eAAA,EAAA,EAA0B,KAAA,EAAc,UAAU,WAAA,KAAgB,GAAA,EAAK,QAAA,EAAU,MAAM,eAAe,WAAA,KAAgB,GAAA,GAAM,IAAA,GAAO,GAAG,KAAjH,GAAoH,CAAA;AAAA,QACnJ,CAAC,CAAA,EACH,CAAA;AAAA,QAAA,CACE,aAAa,kBAAA,IAAsB,YAAA,CAAa,8BAChDA,cAAAA,CAACS,WAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,EAAA,EAAG,MAAK,QAAA,kBAAAT,cAAAA,CAACqD,eAAO,IAAA,EAAK,IAAA,EAAK,OAAc,CAAA,EAAE;AAAA,OAAA,EAErE;AAAA,KAAA,EACF,CAAA;AAAA,oBACArD,cAAAA,CAACS,SAAAA,EAAA,EAAK,OAAA,EAAQ,YAAW,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAO,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACzH,QAAA,kBAAAX,eAAAA;AAAA,MAACa,mBAAAA,CAAO,MAAA;AAAA,MAAP;AAAA,QAAc,OAAA,EAAS,OAAA;AAAA,QAAS,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,QAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,QACrH,KAAA,EAAO,EAAE,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,QACxP,QAAA,EAAA;AAAA,0BAAAL,eAAC4B,aAAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB,MAAK,OAAA,EAAQ,CAAA;AAAA,0BAC9C5B,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,gBAAgB,CAAA,EAAE;AAAA;AAAA;AAAA,KACpH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,gBAAA,CAAgD;AAAA,EACvD,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,OAAA;AAAA,EAC/C,MAAA;AAAA,EAAQ,gBAAA;AAAA,EAAkB,aAAA;AAAA,EAC1B,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ;AACjB,CAAA,EAA+F;AAC7F,EAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAa,UAAA,KAAe,uBAAA,EAA2B;AAC7E,EAAA,MAAM,OAAO,OAAA,EAAW;AACxB,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,CAAC,CAAA,KAAM,EAAE,eAAe,CAAA;AAIpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,aAAA,CAAc,+BAA+B,QAAA,CAAS,CAAC,CAAA,EAAG,EAAA,IAAM,EAAE,CAAA;AACpG,EAAA,MAAM,aAAA,GAAgBK,aAAO,IAAI,CAAA;AACjC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAChF,EAAA,MAAM,YAAA,GAAe,KAAK,YAAA,IAAgB,CAAA;AAC1C,EAAA,MAAM,UAAU,YAAA,GAAe,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,mBAAmB,CAAA;AAEjD,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,EAAO;AAAA,EACT,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,SAAS,cAAc,CAAA,EAAkB;AACvC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACxB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,EAAQ;AAAA,IACV;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,uBACElB,gBAAAwD,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAtD,cAAAA,CAACY,4BAAAA,EAAA,EAAiB,QAAA,EAAA,QAAA,oBAAYZ,cAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA,EAAG,QAAgB,CAAA,EAAG,CAAA;AAAA,oBACrGA,cAAAA,CAACY,4BAAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,oBAAeZ,cAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,GAAG,CAAA,EAAG,CAAA;AAAA,oBAC9FA,cAAAA,CAACY,4BAAAA,EAAA,EACE,uCACCZ,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,sBAAsB,CAAA;AAAA,QACpC,WAAA,EAAa,OAAO,qBAAqB,CAAA;AAAA,QACzC,YAAA,EAAc,OAAO,wBAAwB,CAAA;AAAA,QAC7C,WAAA,EAAa,gBAAA;AAAA,QACb,WAAW,YAAY;AACrB,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,MAAM,MAAA,GAAS,MAAM,WAAA,EAAY;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,MAAM,EAAE,KAAA,EAAAwB,MAAAA,EAAM,GAAI,uBAAA,EAA2B;AAC7C,YAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAYA,MAAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAK/C,YAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,cACjB,KAAA,EAAO,OAAA;AAAA,cACP,KAAA,EAAO,OAAO,yBAAyB,CAAA;AAAA,cACvC,OAAA,EAAS,OAAO,wBAAwB,CAAA;AAAA,cACxC,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,IAAU,SAAA;AAC9B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mCAAA,EAAsC,GAAG,CAAA,CAAE,CAAA;AACxD,UAAAA,2BAAA,CAAc,IAAA,CAAK;AAAA,YACjB,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,YACtC,OAAA,EAAS,MAAA,CAAO,uBAAA,EAAyB,GAAG,CAAA;AAAA,YAC5C,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH,CAAA;AAAA,QACA,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,QACjC,MAAA,EAAQ;AAAA;AAAA,KACV,EAEJ,CAAA;AAAA,oBACAvD,cAAAA,CAACY,4BAAAA,EAAA,EACE,QAAA,EAAA,aAAA,KAAkB,wBACjBZ,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,QACtC,aACE,aAAA,KAAkB,MAAA,GACd,OAAO,4BAA4B,CAAA,GACnC,OAAO,6BAA6B,CAAA;AAAA,QAE1C,cAAc,aAAA,KAAkB,MAAA,GAAS,OAAO,+BAA+B,CAAA,GAAI,OAAO,gCAAgC,CAAA;AAAA,QAC1H,WAAW,MAAM;AACf,UAAA,MAAM,MAAA,GAAS,aAAA;AACf,UAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,UAAA,IAAI,MAAA,KAAW,QAAQ,MAAA,EAAO;AAAA,eACzB,OAAA,EAAQ;AAAA,QACf,CAAA;AAAA,QACA,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACpC,MAAA,EAAQ;AAAA;AAAA,KACV,EAEJ,CAAA;AAAA,oBAEAF,eAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAI,UAAA;AAAA,QAAW,IAAA,EAAK,KAAA;AAAA,QAAM,GAAA,EAAI,KAAA;AAAA,QAC9B,IAAIO,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,QACnC,GAAG,KAAA,IAAS,OAAA;AAAA,QAAS,GAAG,MAAA,IAAU,MAAA;AAAA,QAAQ,IAAA,EAAK,IAAA;AAAA,QAC/C,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,MAAA;AAAA,UAAQ,QAAA,EAAU,QAAA;AAAA,UAC9B,SAAA,EAAW,uBAAA;AAAA,UACX,SAAA,EAAW,0BAAA;AAAA,UACX,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,SAC7C;AAAA,QACA,SAAA,EAAU,KAAA;AAAA,QACV,SAAS,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QACtE,SAAS,EAAE,KAAA,EAAO,GAAG,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QACpE,MAAM,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QAGnE,QAAA,EAAA;AAAA,0BAAAP,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,CAAA,EAAG,WAAA,EAAa,CAAA,YAAA,EAAeJ,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAYA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,QAAA,EAAU,UAAS,EAC/L,QAAA,EAAA;AAAA,4BAAAP,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,KAAA,EAAO,EAAE,cAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACvI,QAAA,EAAA;AAAA,8BAAAL,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBACC,KAAA,EAAO,OAAO,qBAAqB,CAAA;AAAA,kBACnC,OAAA,EAAS,UAAA;AAAA,kBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,kBAC9E,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO;AAAA,oBACL,WAAA,EAAa,OAAA;AAAA,oBACb,MAAA,EAAQ,OAAA;AAAA,oBACR,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,oBAC7B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA,CAAA;AAAA,oBACxC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,oBAC3B,MAAA,EAAQ,SAAA;AAAA,oBACR,OAAA,EAAS,MAAA;AAAA,oBACT,UAAA,EAAY,QAAA;AAAA,oBACZ,cAAA,EAAgB,QAAA;AAAA,oBAChB,UAAA,EAAY;AAAA,mBACd;AAAA,kBAEA,QAAA,kBAAAL,cAAAA,CAACwD,qBAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAc;AAAA;AAAA,eACxC;AAAA,8BACA1D,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAM,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,UAAS,EACxF,QAAA,EAAA;AAAA,gCAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,cAAA,EAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,QAAA,EAAQ,MAAE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gBAC7E,4BACCF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,aAAY,GAAA,EAAI,QAAA,EAAS,GAAG,KAAA,EAAO,QAAA,EAAQ,MAC9E,QAAA,EAAA,QAAA,EACH;AAAA,eAAA,EAEJ;AAAA,aAAA,EACF,CAAA;AAAA,4BAGAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,OAAM,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,KAAA,EAAO,EAAE,cAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACtH,QAAA,EAAA;AAAA,8BAAAL,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,IAAW,KAAK,IAAA,EAAK;AAAA,kBAAG,QAAA,EAAU,CAAC,IAAA,CAAK,OAAA;AAAA,kBACzG,YAAY,IAAA,CAAK,OAAA,GAAU,EAAE,UAAA,EAAY,0BAAyB,GAAI,MAAA;AAAA,kBACtE,UAAU,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBAC3C,OAAO,EAAE,IAAA,EAAM,GAAG,WAAA,EAAa,OAAA,EAAS,YAAY,aAAA,EAAe,MAAA,EAAQ,eAAeN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,OAAA,GAAU,MAAM,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,KAAK,OAAA,GAAU,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBAC9V,0BAAAL,cAAAA,CAACyD,iBAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB;AAAA;AAAA,eACpD;AAAA,8BACAzD,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,IAAc,KAAK,OAAA,EAAQ;AAAA,kBAAG,QAAA,EAAU,CAAC,IAAA,CAAK,UAAA;AAAA,kBAC/G,YAAY,IAAA,CAAK,UAAA,GAAa,EAAE,UAAA,EAAY,0BAAyB,GAAI,MAAA;AAAA,kBACzE,UAAU,IAAA,CAAK,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBAC9C,OAAO,EAAE,IAAA,EAAM,GAAG,WAAA,EAAa,OAAA,EAAS,YAAY,aAAA,EAAe,MAAA,EAAQ,eAAeN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,UAAA,GAAa,MAAM,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,KAAK,UAAA,GAAa,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,OAAA,EAAS,IAAA,CAAK,aAAa,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBACvW,0BAAAL,cAAAA,CAAC0D,iBAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB;AAAA;AAAA,eACpD;AAAA,8BACA1D,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,QAAA,GAAW,MAAA,CAAO,iBAAiB,IAAI,OAAA,GAAU,CAAA,EAAG,MAAA,CAAO,eAAe,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,CAAA,GAAM,OAAO,eAAe,CAAA;AAAA,kBAC5I,SAAS,MAAM,OAAA,IAAW,CAAC,QAAA,IAAY,KAAK,MAAA,EAAO;AAAA,kBAAG,QAAA,EAAU,CAAC,OAAA,IAAW,QAAA;AAAA,kBAC5E,UAAA,EAAY,OAAA,IAAW,CAAC,QAAA,GAAW,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,GAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,GAAG,GAAE,GAAI,MAAA;AAAA,kBACxG,UAAU,OAAA,IAAW,CAAC,WAAW,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,aAAa,OAAA,EAAS,UAAA,EAAY,OAAA,GAAUA,UAAAA,CAAM,KAAA,EAAO,IAAI,IAAI,aAAA,EAAe,MAAA,EAAQ,CAAA,YAAA,EAAe,OAAA,GAAUA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,OAAA,IAAW,CAAC,QAAA,GAAW,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,QAAA,EAAU,SAAS,OAAA,GAAU,CAAA,GAAI,IAAA,EAAM,UAAA,EAAY,gCAAA,EAAiC;AAAA,kBAC3Z,qCAAWL,cAAAA,CAACqD,eAAO,IAAA,EAAK,OAAA,EAAQ,OAAc,IAAA,EAAK,MAAA,EAAO,CAAA,mBAAKrD,eAAC2D,gBAAA,EAAA,EAAS,KAAA,EAAO,UAAU,KAAA,GAAQ,wBAAA,EAA0B,MAAK,OAAA,EAAQ;AAAA;AAAA,eAC5I;AAAA,8BACA3D,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,kBAAkB,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,kBAClF,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAE;AAAA,kBACrF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,WAAA,EAAa,OAAA,EAAS,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,kBAC/O,0BAAAL,cAAAA,CAACiD,mBAAA,EAAA,EAAQ,KAAA,EAAM,SAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA;AACxC,aAAA,EACF,CAAA;AAAA,4BAGAjD,cAAAA,CAACS,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAAM,CAAA,EAAE,MAAK,KAAA,EAAO,EAAE,MAAM,CAAA,EAAG,SAAA,EAAW,QAAO,EAC3E,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,IAAA,qBACbT,cAAAA,CAAC,aAAA,EAAA,EAA4B,MAAM,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,SAAA,KAAc,IAAA,CAAK,IAAI,OAAA,EAAS,MAAM,aAAa,IAAA,CAAK,EAAE,KAA/G,IAAA,CAAK,EAA6G,CACvI,CAAA,EACH,CAAA;AAAA,4BAGAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EAAE,IAAA,EAAK,GAAA,EAAI,IAAA,EAAK,KAAA,EAAO,EAAE,WAAW,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EAC5H,QAAA,EAAA;AAAA,8BAAAP,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA,CAAK,KAAA,EAAM;AAAA,kBAAG,UAAU,CAAC,OAAA;AAAA,kBAChE,UAAA,EAAY,OAAA,GAAU,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,IAAI,GAAE,GAAI,MAAA;AAAA,kBACpG,QAAA,EAAU,OAAA,GAAU,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBACtC,OAAO,EAAE,KAAA,EAAO,QAAQ,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,OAAA,GAAUA,WAAM,SAAA,EAAW,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,gBAAgB,MAAA,EAAQ,OAAA,GAAU,YAAY,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAU,OAAA,EAAS,UAAU,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBAChW,QAAA,EAAA;AAAA,oCAAAL,eAAC4D,mBAAA,EAAA,EAAQ,KAAA,EAAO,UAAU,SAAA,GAAY,wBAAA,EAA0B,MAAK,OAAA,EAAQ,CAAA;AAAA,oCAC7E5D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAAS,CAAA,EAAG,OAAA,GAAU,YAAY,wBAAA,EAA2B,QAAA,EAAA,MAAA,CAAO,kBAAkB,CAAA,EAAE;AAAA;AAAA;AAAA,eAChJ;AAAA,8BAEAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,SAAA,EAAU,EAAG,CAAA;AAAA,8BAE3FF,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,kBAC5C,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,kBAC9E,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,kBACrO,QAAA,EAAA;AAAA,oCAAAL,cAAAA,CAAC8C,iBAAA,EAAA,EAAM,KAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,CAAA;AAAA,oCAClC9C,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,sBAAsB,CAAA,EAAE;AAAA;AAAA;AAAA,eAC3G;AAAA,8BAEAJ,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,kBAC7C,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAE;AAAA,kBACrF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,kBAC7O,QAAA,EAAA;AAAA,oCAAAL,cAAAA,CAAC6D,qBAAA,EAAA,EAAU,KAAA,EAAM,SAAA,EAAU,MAAK,OAAA,EAAQ,CAAA;AAAA,oCACxC7D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,SAAA,EAAW,QAAA,EAAA,MAAA,CAAO,yBAAyB,CAAA,EAAE;AAAA;AAAA;AAAA,eAChH;AAAA,cAEC,2BACCJ,eAAAA,CAACI,SAAAA,EAAA,EAAK,MAAK,QAAA,EAAS,CAAA,EAAE,QAAA,EAAS,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,eAAe,QAAA,EAAU,OAAA,EAAS,KAAI,EACvF,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,kBAAkB,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE;AAAA,eAAA,EAChC;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAOAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,UAAS,EAIxE,QAAA,EAAA;AAAA,YAAA,CAAC,0BAAA,oBAA8BT,cAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,4BAEpDA,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,IAAA,EAAK,QACpB,QAAA,kBAAAZ,cAAAA;AAAA,cAACW,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBAA2B,OAAA,EAAS,aAAA,CAAc,OAAA,IAAW,aAAA,CAAc,OAAA,GAAU,KAAA,EAAO,KAAA,IAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAAA,gBAAG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,gBAAG,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,gBAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,gBACnN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,SAAA,EAAW,MAAA,EAAO;AAAA,gBAC7E,mBAAS,SAAS;AAAA,eAAA;AAAA,cAFJ;AAAA,aAGjB,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAe,KAAA,EAAa;AACnC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC;AAIA,SAAS,iBAAA,GAAmD;AAC1D,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,uBAAA,EAA2B;AACnD,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,cAAA,EAAkB;AAE3C,EAAAK,gBAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,WAAA,EAAY,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC3B,MAAA,IAAI,CAAC,SAAA,IAAa,IAAA,EAAM,YAAA,CAAa,IAAkB,CAAA;AAAA,IACzD,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AACjB,IAAA,OAAO,MAAM;AAAE,MAAA,SAAA,GAAY,IAAA;AAAA,IAAM,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,IAAA;AACT;AAIA,IAAM,cAAA,GAAiB,MAAM,QAAA,CAAS,qBAAqB,CAAA;AAEpD,SAAS,YAA2C,KAAA,EAA4B;AACrF,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,cAAA,EAAe,GAAI,KAAA;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAAQ,MAAAA,EAAO,YAAA,KAAiB,uBAAA,EAA2B;AAC3D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIV,eAAS,KAAK,CAAA;AAE9C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAKlB,EAAA,uBACEd,cAAAA,CAAAsD,mBAAA,EAAA,EACE,QAAA,kBAAAxD,eAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,WAAA,CAAY0B,MAAAA,CAAM,QAAA,EAAU,CAAA;AAAA,MAC3C,QAAA,EAAU,OAAO,IAAA,KAAS;AACxB,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAc,MAAM,YAAA,CAAa,IAAA,CAAK,MAAW,CAAA;AACvD,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,IAAA,CAAK,MAAW,CAAC,CAAA;AAC/C,YAAA,eAAA,CAAgB,kBAAkB,EAAE,QAAA,EAAU,CAAC,qBAAqB,GAAG,CAAA;AAIvE,YAAA,oBAAA,CAAqB,QAAA,GAAW,OAAA,EAAQ;AACxC,YAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,cACjB,KAAA,EAAO,OAAA;AAAA,cACP,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,cACtC,OAAA,EAAS,OAAO,uBAAuB,CAAA;AAAA,cACvC,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY/B,MAAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAC/C,UAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,IAAU,SAAA;AAC9B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kCAAA,EAAqC,GAAG,CAAA,CAAE,CAAA;AAIvD,UAAA,MAAM,QAAA,GAAW,QAAQ,cAAA,GAAqB,6BAAA,GAC9B,QAAQ,iBAAA,GAAqB,gCAAA,GAC7B,GAAA,KAAQ,UAAA,GAAqB,yBAAA,GAC7B,uBAAA;AAChB,UAAA,MAAM,OAAA,GAAW,QAAQ,cAAA,GAAqB,4BAAA,GAC9B,QAAQ,iBAAA,GAAqB,+BAAA,GAC7B,GAAA,KAAQ,UAAA,GAAqB,wBAAA,GAC7B,sBAAA;AAChB,UAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,YACjB,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,YACtB,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,GAAG,CAAA;AAAA,YAC5B,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH,CAAA,SAAE;AACA,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAvD,eAAC,iBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,cAAAA,CAACY,4BAAAA,EAAA,EACE,kCACCZ,cAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACJ,OAAA;AAAA,YACA;AAAA;AAAA,SACF,EAEJ;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACjtBA,IAAM,aAAA,GAAgB,SAAA;AAEtB,SAAS,SAAA,CAAU,EAAE,GAAA,EAAK,KAAA,EAAM,EAAiD;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIc,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,GAAA,GAAMD,aAAuB,IAAI,CAAA;AAEvC,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,MAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,UAAA,EAAW;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,GAAA,CAAI,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC7C,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAKL,EAAA,uBACEhB,eAAC,KAAA,EAAA,EAAI,GAAA,EAAU,OAAO,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA,IAC3C,QAAA,EAAA,OAAA,oBAAWA,eAACC,UAAAA,EAAA,EAAM,KAAU,GAAA,EAAI,SAAA,EAAU,OAAc,CAAA,EAC3D,CAAA;AAEJ;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM,WAAW,QAAA,EAAS;AAI1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,CAAM,SAAS,CAAC,QAAA,CAAS,MAAM,KAAK,CAAA;AAExD,EAAA,MAAM,cAAA,GAAiBuC,cAAQ,MAAM;AACnC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,IAAA,GAAO,aAAa,KAAA,CAAM,gBAAA,IAAoB,EAAE,CAAA,CACnD,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AAChC,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,UAAU,EAAE,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,OAAM,CAAE,CAAA;AAM7E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAA;AAAA,EAIT,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,CAAM,kBAAkB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAE7D,EAAA,uBACExC,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,iBAAA,EAAkB,MAAA;AAAA,MAClB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MACzB,IAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,KAAA,EAAO,EAAA;AAAA,MACP,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,SAAS,CAAW,CAAA;AAAA,MAC3C,IAAA,EAAM,cAAA;AAAA,MACN,aAAA,EAAe,KAAA;AAAA,MACf,UAAA,EAAU,IAAA;AAAA,MAGV,MAAA,EAAQ,YAAY,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,aAAA,IAAgB,GAAI,MAAA;AAAA,MAG1D,aAAA,EAAe,EAAE,YAAA,EAAc,IAAA,EAAM,QAAQ,GAAA,EAAK;AAAA,MAClD,gBAAA,EAAiB,KAAA;AAAA,MAIjB,wBAAA,EAAyB,MAAA;AAAA,MACzB,WAAA,EACE,SAAA,mBACEJ,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAA,EAC9C,QAAA,kBAAAT,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,KAAA,EAAM,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,GAAA,EAAK,CAAA,EACpE,CAAA,GACE,KAAA,CAAM,KAAA,mBACR9B,cAAAA;AAAA,QAACC,UAAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAY,kBAAA;AAAA,UACZ,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,KAAK,GAAG,KAAA,IAAS,EAAA;AAAA,UACrC,GAAA,EAAI,SAAA;AAAA,UACJ,GAAA,EAAI,KAAA;AAAA,UACJ,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA;AAAQ;AAAA,OAChC,GACE,IAAA;AAAA,MAEN,mBAAA,EAAqB,OAAO,cAAc,CAAA;AAAA,MAC1C,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,KAAA,CAAM,KAAA;AAClF,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,uBACEH,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,MAAA,EAC9B,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAA,EAAM,KAAA,EAAO,EAAE,YAAY,CAAA,EAAE,EAC3E,QAAA,kBAAAT,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,KAAA,EAAM,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,GAAA,EAAK,CAAA,EACpE,CAAA;AAAA,4BACAhC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EACrD,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,CAAA,EAAG,aAAA,EAAe,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,EAAY,EAChE,QAAA,EAAA,IAAA,CAAK,OAAO,KAAA,EACf,CAAA;AAAA,8BACAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAE,QAAA,EAChB,QAAA,EAAA,MAAA,CAAO,oBAAoB,CAAA,EAC9B;AAAA,aAAA,EACF,CAAA;AAAA,4BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO;AAAA,cACV,UAAA,EAAY,uBAAA;AAAA,cACZ,MAAA,EAAQ,eAAe,aAAa,CAAA,EAAA,CAAA;AAAA,cACpC,YAAA,EAAc,OAAA;AAAA,cACd,OAAA,EAAS;AAAA,eAET,QAAA,kBAAAA,cAAAA,CAACE,WAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAG,aAAA,EAAe,EAAA,EAAG,cAAA,EAAe,IAAG,WAAA,EAAY,GAAA,EAAI,UACrE,QAAA,EAAA,MAAA,CAAO,SAAS,GACnB,CAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,QAEJ;AACA,QAAA,uBACEJ,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,MAAA,EAC9B,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAK,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,GAAG,KAAA,IAAS,EAAA;AAAA,cAC3C,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA;AAAQ;AAAA,WAChC;AAAA,0BACAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EACd,QAAA,EAAA;AAAA,4BAAAT,eAACE,SAAAA,EAAA,EAAK,MAAK,IAAA,EAAM,QAAA,EAAA,IAAA,CAAK,OAAO,KAAA,EAAM,CAAA;AAAA,4BACnCF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAE,QAAA,EAAU,QAAA,EAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM;AAAA,WAAA,EACjD;AAAA,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA;AAAA,GACF;AAEJ;AC7HA,IAAM,IAAA,GAAqB,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAE7C,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,GAAa,cAAA;AAAA,IACb,YAAA,GAAe,kBAAA;AAAA,IACf,gBAAA,GAAmB,uBAAA;AAAA,IACnB,WAAA;AAAA,IACA,WAAA,GAAc;AAAA,GAChB,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAEhD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIM,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgBD,aAAO,KAAK,CAAA;AAElC,EAAAG,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,cAAc,OAAA,EAAS;AACzB,QAAA,QAAA,CAAS,kBAAkB,EAAE,UAAA,EAAY,CAAA,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,UAAU,CAAC,CAAA;AAEjC,EAAA,MAAM,GAAA,GAAM,CAA+B,GAAA,EAAQ,GAAA,KAAgB;AACjE,IAAA,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,GAAA,EAAI;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,QAAA,CAA8B,YAAY,EAAE,UAAA,IAAc,KAAK,CAAA;AAClF,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,QAAA,MAAM,IAAA,GAAqB;AAAA,UACzB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC;AAAA,SACvB;AACA,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,UAAC,CAAC,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,MAAM,YAAY,CAAC,UAAA;AACnB,IAAA,aAAA,CAAc,SAAS,CAAA;AACvB,IAAA,aAAA,CAAc,OAAA,GAAU,SAAA;AACxB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,QAAA,CAAS,cAAc,EAAE,KAAA,EAAO,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE,CAAA,MAAO;AACL,MAAA,MAAM,SAAS,gBAAA,EAAkB,EAAE,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACjE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,QAAA,CAAS,EAAE,GAAG,IAAA,EAAM,CAAA;AACpB,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAkB,YAAY,WAAA;AAAY,GAChE;AAEA,EAAA,uBACElB,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,KAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEE,QAAA,EAAA;AAAA,QAAA,CAAA,KAAA,IAAS,WAAA,qBACTP,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAC/C,QAAA,EAAA;AAAA,0BAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAE,EACnD,QAAA,EAAA;AAAA,YAAA,KAAA,oBACCX,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,KAAA,EACvB,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAAC8D,sBAAO,IAAA,EAAK,OAAA,EAAQ,OAAOzD,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA;AAAA,8BAC/CL,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,cAAA;AAAA,kBACH,IAAA,EAAK,KAAA;AAAA,kBACL,EAAA,EAAG,WAAA;AAAA,kBACH,GAAA,EAAI,QAAA;AAAA,kBACJ,CAAA,EAAE,wBAAA;AAAA,kBAED,iBAAO,KAAK;AAAA;AAAA,eACf;AAAA,cACC,UAAA,oBACCJ,eAAAA,CAACI,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,GAAGG,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG,KAAI,QAAA,EAAS,QAAA,EAAA;AAAA,gBAAA,OAAA;AAAA,gBACjE,OAAO,YAAY,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B;AAAA,aAAA,EAEJ,CAAA;AAAA,YAED,WAAA,oBACCL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,GAAE,QAAA,EAAS,EAAA,EAAI,GAAA,EAC/C,QAAA,EAAA,MAAA,CAAO,WAAW,CAAA,EACrB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,OAAM,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EACrC,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAA,CAAO,gBAAgB,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAC9D,0BAAAA,cAAAA,CAAC+D,qBAAA,EAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,OAAc,CAAA,EACxC,CAAA;AAAA,4BACA/D,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAS,UAAA,GAAa,MAAA,CAAO,aAAa,CAAA,GAAI,OAAO,gBAAgB,CAAA;AAAA,gBACrE,OAAA,EAAS,aAAA;AAAA,gBACT,KAAA;AAAA,gBACA,MAAA,EAAQ,UAAA;AAAA,gBAEP,uCACCA,cAAAA,CAACgE,kBAAA,EAAA,EAAO,IAAA,EAAK,SAAQ,KAAA,EAAc,CAAA,mBAEnChE,cAAAA,CAACiE,mBAAI,IAAA,EAAK,OAAA,EAAQ,OAAO5D,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG;AAAA;AAAA,aAEhD;AAAA,4BACAL,cAAAA,CAAC,YAAA,EAAA,EAAa,SAAS,MAAA,CAAO,OAAO,GAAG,OAAA,EAAS,KAAA,EAAO,OAAM,SAAA,EAC5D,QAAA,kBAAAA,eAAC6D,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ,KAAA,EAAM,WAAU,CAAA,EAC1C;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGF/D,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAI,KAAA,EACR,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,0BACAlE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,0BACAlE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,UACC,+BACClE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,CAAA;AAAA,cACN,GAAA,EAAK,CAAA;AAAA,cACL,GAAA,EAAK,GAAA;AAAA,cACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,QAAQ1D,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,SAAS,QAAA,EAAS,KAAA,EAAM,SAAA,EAAS,IAAA,EAC/C,QAAA,kBAAAjB,cAAAA;AAAA,IAACW,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,SAASA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAIA,UAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,QAC3D,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,MAAA,GAAS,GAAA,GAAM,GAAG,CAAC,CAAA,CAAA;AAAA,QACvD,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,aAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAYA,SAAS,MAAM,CAAA,EAAW;AACxB,EAAA,OAAO,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAC7C;AAGO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAM,EAA4B;AACjE,EAAA,MAAM,QAAQG,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEA,QAAA,kBAAAP,eAAAA;AAAA,QAACI,SAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,WAAA;AAAA,UACH,IAAA,EAAK,KAAA;AAAA,UACL,CAAA,EAAE,wBAAA;AAAA,UACF,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,aAAA,EAAe,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,YAAA,EAAc,UAAA,EAAW;AAAA,UAC/G,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACU,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE;AAAA;AAAA;AAAA;AAChF;AAAA,GACF;AAEJ;AAGA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,OAAO,OAAA,EAAS,QAAA,EAAS,KAAA,EAAM,SAAA,EAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACrE,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDL,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAG,OAC/D,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAGO,SAAS,sBAAA,CAAuB;AAAA,EACrC,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,QAAA,CAA8B,cAAA,EAAgB,IAAI,KAAK,CAAA;AAC1E,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,MAAA,QAAA,CAAS;AAAA,QACP,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC;AAAA,OACtB,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AACA,EAAA,uBACER,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAAC+D,qBAAA,EAAA,EAAU,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,MAClE,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,MACnB,OAAA,EAAS,OAAO,iBAAiB,CAAA;AAAA,MACjC,OAAA,EAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,uBAAA,CAAwB;AAAA,EACtC,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,QAAQvD,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,QAAA,CAAS,eAAA,EAAiB,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,uBACER,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAAC8D,kBAAA,EAAA,EAAO,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,MAC/D,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,MACpB,OAAA,EAAS,OAAO,kBAAkB,CAAA;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,mBAAA,CAAoB;AAAA,EAClC,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,KAAA,GAAQ,SAAA;AACd,EAAA,uBACE9D,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,IAAA,EAAM,OAAA,GAAU,OAAA,GAAU,OAAA,EAAS,KAAA,EAAc,CAAA;AAAA,MAC/D,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,MACtB,OAAA,EAAS,OAAO,QAAQ,CAAA;AAAA,MACxB,OAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACjYA,IAAM,kBAAA,GAAqBZ,oBAA8C,IAAI,CAAA;AAetE,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACErB,cAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAK,EAC1D,QAAA,kBAAAA,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAA,EAAS,GAAG,KAAA,EAAM,EAC5E,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAA,CACP,IAAA,EACA,KAAA,EACA,IAAA,EACkB;AAClB,EAAA,IAAI,IAAA,KAAS,OAAO,OAAO,IAAA;AAC3B,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,KAAA;AAC5B,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAA;AAC3B;AAoBO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,GAAA,GAAMsB,iBAAW,kBAAkB,CAAA;AACzC,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAK/C,EAAAN,gBAAU,MAAM;AACd,IAAA,qBAAA,EAAsB;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAa,GAAA,KAAQ,IAAA;AAC3B,EAAA,MAAM,YAAA,GAAe,UAAA,GAAa,GAAA,CAAK,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,UAAA,GAAa,GAAA,CAAK,IAAA,GAAO,KAAA,CAAM,IAAA;AAElD,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,UAAU,CAAA;AAIjD,EAAA,MAAM,IAAA,GACJ,eAAe,MAAA,GACX;AAAA,IACE,EAAE,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,EAAQ,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAE;AAAA,IAC/F,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA,EAAS,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA;AAAE,GACpG,GACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,CAAE,CAAA;AAEzD,EAAA,uBACEhB,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,WAAA,EAAa,KAAA,CAAM,WAAA,KAAgB,MAAA,CAAO,aAAa,CAAA,IAAK,cAAA,CAAA;AAAA,MAC5D,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA;AAAA,MACA,OAAO,YAAA,IAAgB,IAAA;AAAA,MACvB,UAAA,EAAU,IAAA;AAAA,MACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,OAAO,CAAA,IAAK,EAAA;AAClB,QAAA,IAAI,UAAA,EAAY;AAEd,UAAA,GAAA,CAAK,SAAS,EAAE,IAAA,EAAM,QAAQ,MAAA,EAAW,KAAA,EAAO,QAAW,CAAA;AAAA,QAC7D,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;AACzB,UAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAcO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,GAAA,GAAMkB,iBAAW,kBAAkB,CAAA;AACzC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAI/C,EAAAN,gBAAU,MAAM;AACd,IAAA,qBAAA,EAAsB;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,GAAA,GAAM,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,IAAK,IAAA;AACpE,EAAA,MAAM,MAAA,GAAS,aAAA,EAAe,MAAA,IAAU,EAAC;AAEzC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC9B,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,IACrB,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,QAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,MAAA,GAAS,YAAY,EAAE,CAAA;AAAA,GACtE,CAAE,CAAA;AAEF,EAAA,uBACEhB,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,WAAA,EAAa,KAAA,CAAM,WAAA,KAAgB,MAAA,CAAO,aAAa,CAAA,IAAK,oBAAA,CAAA;AAAA,MAC5D,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA;AAAA,MACA,KAAA,EAAO,IAAI,KAAA,CAAM,KAAA,IAAS,OAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,MAC3D,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,GAAG,GAAA,CAAI,KAAA;AAAA,UACP,KAAA,EAAO,CAAA,IAAK,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA,GAAI;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,aAAA,IAAiB,MAAA,CAAO,MAAA,KAAW,CAAA;AAAA,MAC9C,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAIA,WAAA,CAAY,IAAA,GAAO,SAAA;AACnB,WAAA,CAAY,IAAA,GAAO,SAAA;ACtMnB,IAAM,cAAA,GAAiBiB,oBAA0C,IAAI,CAAA;AAErE,SAAS,iBAAA,GAAyC;AAChD,EAAA,MAAM,GAAA,GAAMC,iBAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,GAAA;AACT;AAQA,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAc;AACtD,EAAA,uBACEtB,eAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAS,EAChD,QAAA,kBAAAA,eAACS,SAAAA,EAAA,EAAK,KAAI,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAC7B,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAMA,SAAS,QAAA,CAAS,EAAE,KAAA,GAAQ,SAAA,EAAU,EAAkB;AACtD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAE9C,EAAA,uBACET,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACjB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,4BAA4B,CAAA;AAAA,MACtC,QAAA,EAAU,CAAC,QAAA,KAAa;AACtB,QAAA,IAAI,CAAC,QAAA,EAAU;AAEf,QAAA,MAAM,UAAA,GAAa,4BAAA,CAA6B,QAAQ,CAAA,IAAK,EAAC;AAC9D,QAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACpD,QAAA,MAAM,UAAU,aAAA,GAAgB,KAAA,CAAM,OAAQ,UAAA,CAAW,CAAC,KAAK,KAAA,CAAM,IAAA;AAErE,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,KAAA;AAAA,UACH,KAAA,EAAO,QAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH,CAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAMA,SAAS,GAAA,CAAI,EAAE,KAAA,GAAQ,KAAA,EAAM,EAAa;AACxC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAE9C,EAAA,MAAM,UAAA,GAAa,4BAAA,CAA6B,KAAA,CAAM,KAAK,KAAK,EAAC;AAEjE,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,uBACEJ,cAAAA;AAAA,MAAC+B,cAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,QACjB,OAAO,KAAA,CAAM,IAAA;AAAA,QACb,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,CAAA,CAAE,aAAA,CAAc,KAAA,EAAO,CAAA;AAAA,QACnE,WAAA,EAAY;AAAA;AAAA,KACd;AAAA,EAEJ;AAEA,EAAA,uBACE/B,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACjB,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,CAAC,OAAA,KAAY;AACrB,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAEO,IAAM,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM;AAAA,EACnD,QAAA;AAAA,EACA;AACF,CAAC;ACzFD,SAAS,gBAAA,CAAiB,QAAA,GAAqB,EAAC,EAAG;AAIjD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAmC;AACtD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,EAAE,CAAA;AACb,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,EAAE,CAAA;AAChD,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,OAAA,CAAQ,CAAC,CAAA,KAAM;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACvB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,UAClB,KAAA,EAAO,gBAAA,CAAiB,CAAA,CAAE,EAAE;AAAA,SAC9B,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAKD,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,OAAO,CAAC,QAAA,CAAS,GAAA,CAAI,EAAE,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAItB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,QAAA,EAAW,EAAE,IAAG,CAAE;AAAA,KAC3E,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,IAAS,IAAA,GAAO,CAAC,KAAK,CAAA,GAAI,EAAE,CAAA;AAC1D,EAAA,uBACEJ,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,sBAAA;AAAA,MACnB,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,IAAA,GAAO,IAAA,GAAO,MAAA,CAAO,CAAC,CAAC;AAAA;AAAA,GACxD;AAEJ;AASO,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,IAAA,GAAO,iBAAiB,KAAK,CAAA;AACnC,EAAA,uBACEJ,cAAAA;AAAA,IAACmE,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,sBAAA;AAAA,MACnB,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAAA,MACvB,UAAU,CAAC,IAAA,KAAS,SAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,OAAO,QAAA,CAAS,CAAC,CAAC,CAAC;AAAA;AAAA,GAC3F;AAEJ;AC5HO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,cAAA;AAAA,EACR;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAQ3D,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAoB,MAAM,CAAA;AAEpD,EAAA,MAAM,cAAc,YAAY;AAC9B,IAAA,IAAI,UAAU,SAAA,EAAW;AACzB,IAAA,QAAA,CAAS,SAAS,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,MAAA,QAAA,CAAS,MAAA,EAAQ,OAAA,KAAY,KAAA,GAAQ,OAAA,GAAU,SAAS,CAAA;AAAA,IAC1D,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AACA,IAAA,UAAA,CAAW,MAAM,QAAA,CAAS,MAAM,CAAA,EAAG,GAAI,CAAA;AAAA,EACzC,CAAA;AAEA,EAAA,MAAM,CAAA,GAAI,KAAA,KAAU,OAAA,GAAU,SAAA,GAAY,KAAA;AAE1C,EAAA,uBACEhB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,WAAA;AAAA,MACT,UAAU,KAAA,KAAU,SAAA;AAAA,MACpB,UAAA,EAAY,KAAA,KAAU,SAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAYN,UAAAA,CAAM,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA,MACpE,UAAU,KAAA,KAAU,SAAA,GAAY,EAAC,GAAI,EAAE,OAAO,IAAA,EAAK;AAAA,MACnD,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,QACzB,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QACpC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,GAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA;AAAA,QACjD,MAAA,EAAQ,KAAA,KAAU,SAAA,GAAY,SAAA,GAAY,SAAA;AAAA,QAC1C,OAAA,EAAS,MAAA;AAAA,QAAQ,UAAA,EAAY,QAAA;AAAA,QAC7B,cAAA,EAAgB,QAAA;AAAA,QAAU,GAAA,EAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC7C,UAAA,EAAY,oCAAA;AAAA,QACZ,SAAA,EAAW,UAAA;AAAA,QACX,GAAG;AAAA,OACL;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,SAAA,mBACPL,cAAAA,CAACqD,WAAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,IAAA,EAAK,MAAA,EAAO,CAAA,GAC3C,UAAU,OAAA,mBACRrD,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,CAAA,mBAC1B5B,cAAAA,CAACqC,iBAAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAO,CAAA,EAAG,CAAA;AAAA,wBAEpCrC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,IAAA,EAAK,EAAA,EAAG,aAAY,GAAA,EAAI,QAAA,EAAS,GAC3D,QAAA,EAAA,KAAA,KAAU,SAAA,GAAY,WAAW,KAAA,KAAU,OAAA,GAAU,YAAY,KAAA,EACpE;AAAA;AAAA;AAAA,GACF;AAEJ;ACtDO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,uBACEJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,eAAC,KAAA,CAAM,IAAA,EAAN,EAAW,KAAA,EAAO,MAAM,KAAA,EAAO,CAAA;AAAA,oBAChCA,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,OAAA,EAAQ,MAAK,IAAA,EAAK,CAAA,EAAE,yBAC5D,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EACrB;AAAA,GAAA,EACF,CAAA;AAEJ;ACQO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAE1C,EAAA,MAAM,KAAK,OAAA,GACPH,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,GAAG,CAAA,GAC/BA,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,UACX,oCAAA,GACA,oCAAA;AAEJ,EAAA,uBACEP,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAM,QAAA;AAAA,MACN,EAAA,EAAI,UAAU,IAAA,GAAO,IAAA;AAAA,MACrB,EAAA,EAAI,UAAU,KAAA,GAAQ,IAAA;AAAA,MACtB,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,EAAA;AAAA,QACZ,MAAA;AAAA,QACA,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,OAC5B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,KAAA,EAAM,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,GAAE,EAC9D,QAAA,EAAA;AAAA,UAAA,OAAO,KAAA,KAAU,QAAA,GAChB,OAAA,mBACET,cAAAA;AAAA,YAACE,SAAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,cAAA;AAAA,cACH,IAAA,EAAK,KAAA;AAAA,cACL,CAAA,EAAE,wBAAA;AAAA,cACF,EAAA,EAAG,WAAA;AAAA,cACH,GAAA,EAAI,QAAA;AAAA,cAEH,QAAA,EAAA;AAAA;AAAA,WACH,mBAEAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,IAAA,EAAK,CAAA,EAAE,wBAAA,EACjC,QAAA,EAAA,KAAA,EACH,CAAA,GAGF,KAAA;AAAA,UAED,gBACC,OAAO,WAAA,KAAgB,QAAA,mBACrBF,eAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAG,UAAU,uBAAA,GAA0B,wBAAA,EACvE,uBACH,CAAA,GAEA,WAAA;AAAA,SAAA,EAGN,CAAA;AAAA,wBACAF,cAAAA;AAAA,UAACoE,WAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,cAAc,OAAO,CAAA;AAAA,YACjD,IAAA,EAAM,UAAU,IAAA,GAAO,IAAA;AAAA,YACvB,SAAA;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,YAAY,OAAA,GAAU/D,UAAAA,CAAM,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,wBAAA;AAAA,gBAC1C,aAAa,OAAA,GAAUA,UAAAA,CAAM,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI;AAAA;AAC7C;AACF;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC/EA,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAqD;AAC3E,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,WAAW,kBAAA,EAAmB;AAAA,IAClE,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,IACpC,KAAK,UAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA;AAEvC,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAAgD;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC3C,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,IAAI,EAAC;AAAA,EAClC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,UAAA,EAAoB,KAAA,KAAmC;AACjF,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AAAA,EAAC;AACX,CAAA;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,UAAA,GAAa,oBAAA;AAAA,EACb,kBAAA,GAAqB,KAAA;AAAA,EACrB,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY;AACd,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIS,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,QAAA,GAAWD,aAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAEnB,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAa,IAAK,kBAAA,EAAoB;AAC3C,IAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,IAAA,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACjC,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AACzC,MAAA,IAAI,OAAO,cAAA,KAAmB,SAAA,IAAa,cAAA,KAAmB,KAAK,MAAA,EAAQ;AACzE,QAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,MAC9B;AAAA,IACF,CAAC,CAAA;AAAA,EAEH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,YAAA,EAAa,EAAG,OAAO,IAAA;AAE5B,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAsB;AACpC,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,MAAA,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AACtB,MAAA,kBAAA,CAAmB,YAAY,SAAS,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA;AAEA,EAAA,uBACElB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,GAAG,eAAe,SAAS,CAAA;AAAA,QAC3B,MAAA,EAAQ,UAAA;AAAA,QACR,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YACJ,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAG,IAAA;AAAA,YACH,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,YAChC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,SAAA;AAAA,cACR,UAAA,EAAY,kBAAA;AAAA,cACZ,cAAA,EAAgB,aAAA;AAAA,cAChB,oBAAA,EAAsB,aAAA;AAAA,cACtB,MAAA,EAAQ,mCAAA;AAAA,cACR,YAAA,EAAc,0BAAA;AAAA,cACd,UAAA,EAAY,MAAA;AAAA,cACZ,QAAA,EAAU;AAAA,aACZ;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAACqE,wBAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,OAAM,uBAAA,EAAwB,CAAA;AAAA,8BACtDrE,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,EAAA,EAAG,cAAA;AAAA,kBACH,EAAA,EAAG,WAAA;AAAA,kBACH,GAAA,EAAI,QAAA;AAAA,kBACJ,CAAA,EAAE,wBAAA;AAAA,kBACF,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,kBAEhB,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BACAF,eAACsE,eAAA,EAAA,EAAW,IAAA,EAAK,MAAK,OAAA,EAAQ,aAAA,EAAc,CAAA,EAAE,uBAAA,EAC3C,QAAA,EAAA,IAAA,mBAAOtE,eAACuE,qBAAA,EAAA,EAAU,IAAA,EAAM,IAAI,CAAA,mBAAKvE,eAACoC,uBAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAC3D;AAAA;AAAA;AAAA,SACF;AAAA,QAEC,wBACCpC,cAAAA;AAAA,UAACwE,UAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,CAAA;AAAA,YACL,EAAA,EAAG,KAAA;AAAA,YACH,CAAA,EAAE,IAAA;AAAA,YACF,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,kBAAA;AAAA,cACZ,cAAA,EAAgB,aAAA;AAAA,cAChB,oBAAA,EAAsB,aAAA;AAAA,cACtB,MAAA,EAAQ,mCAAA;AAAA,cACR,YAAA,EAAc,0BAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,SAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAW;AAAA,aACb;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV1E,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAM,QAAA;AAAA,gBACN,OAAA,EAAQ,eAAA;AAAA,gBACR,GAAA,EAAI,IAAA;AAAA,gBACJ,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,KAAA;AAAA,gBACH,OAAA,EAAS,MAAM,MAAA,CAAO,IAAI,CAAA;AAAA,gBAC1B,KAAA,EAAO;AAAA,kBACL,MAAA,EAAQ,SAAA;AAAA,kBACR,YAAA,EAAc,0BAAA;AAAA,kBACd,UAAA,EAAY,IAAA,CAAK,MAAA,GAAS,uBAAA,GAA0B,wBAAA;AAAA,kBACpD,MAAA,EAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,GAAS,0BAA0B,wBAAwB,CAAA,CAAA;AAAA,kBACvF,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAT,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,EAAA,EAAG,cAAA;AAAA,sBACH,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,SAAA,GAAY,wBAAA;AAAA,sBAE5B,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,mBACR;AAAA,kCACAF,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,KAAA;AAAA,sBACL,EAAA,EAAG,cAAA;AAAA,sBACH,EAAA,EAAG,WAAA;AAAA,sBACH,GAAA,EAAI,QAAA;AAAA,sBACJ,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,SAAA,GAAY,wBAAA;AAAA,sBAE5B,QAAA,EAAA,IAAA,CAAK,SAAS,IAAA,GAAO;AAAA;AAAA;AACxB;AAAA,eAAA;AAAA,cA9BK,IAAA,CAAK;AAAA,aAgCb;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;ACvIA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,CAAE,IAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAO,KAAA,EAAO,OAAM,CAAE,CAAA;AAE1C,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAsB;AAChD,EAAA,uBACEJ,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,KAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAAyB,EAAG;AAAA,GAAA,EACnF,CAAA;AAEJ;AAeO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA,GAAY,OAAA;AAAA,EACZ;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,eAAeQ,oBAAAA,EAAgB;AACrC,EAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,YAAA,CAAa,YAAY,EAAE,CAAC,CAAA;AAE9D,EAAA,MAAM,GAAA,GAAM,aAAiD,SAAkB,CAAA;AAO/E,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,WAAA,EAAa,GAAA,EAAK,WAAA,IAAe,oBAAA,CAAc,WAAA;AAAA,IAC/C,YAAA,EAAc,GAAA,EAAK,YAAA,IAAgB,oBAAA,CAAc,YAAA;AAAA,IACjD,YAAA,EAAc,GAAA,EAAK,YAAA,IAAgB,oBAAA,CAAc,YAAA;AAAA,IACjD,WAAA,EACE,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA,IAAK,GAAA,CAAK,WAAA,CAAY,MAAA,KAAW,EAAA,GAC1D,GAAA,CAAK,WAAA,GACN,oBAAA,CAAc;AAAA,GACtB;AAEA,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,cAAA,EAAmD;AACxE,EAAA,MAAM,GAAA,GAAM,CAAqC,GAAA,EAAQ,GAAA,KACvD,QAAA,CAAS,SAAA,EAAoB,EAAE,GAAG,KAAA,EAAO,CAAC,GAAG,GAAG,KAAc,CAAA;AAEhE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,KAAiB,QAAA;AACzC,EAAA,MAAM,WAAW,KAAA,CAAM,WAAA;AAEvB,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,GAAA,KAAgB;AAChD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAClC,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,GAAA;AACd,IAAA,GAAA,CAAI,eAAe,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAgB;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYiE,+BAAe,GAAG,CAAA;AACpC,MAAA,GAAA,CAAI,eAAe,SAAgC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,aAAA,EAAe,eAAe,CAAA;AAE7D,EAAA,uBACE3E,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO;AAAA,MAElD,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM0E,mBAAA;AAAA,YACN,KAAA,EAAO,KAAA,IAAS,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA;AAAA,YACnC;AAAA;AAAA,SACF;AAAA,wBAMA1E,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,MAAA,CAAO,qBAAqB,CAAA,IAAK,uBAAA;AAAA,YACxC,WAAA,EACE,MAAA,CAAO,yBAAyB,CAAA,IAChC,qKAAA;AAAA,YAEF,SAAS,KAAA,CAAM,WAAA;AAAA,YACf,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,eAAe,CAAC;AAAA;AAAA,SACvC;AAAA,wBAEAF,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,WAAW,CAAA,GAAI,GAAA;AAAA,cACxB,aAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,cACnC,UAAA,EAAY;AAAA,aACd;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAE,eAAC,UAAA,EAAA,EAAW,KAAA,EAAO,MAAA,CAAO,cAAc,KAAK,gBAAA,EAAkB,CAAA;AAAA,8BAE/DA,cAAAA;AAAA,gBAACoE,WAAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,MAAA,CAAO,kBAAkB,CAAA,IAAK,oBAAA;AAAA,kBACrC,IAAA,EAAK,IAAA;AAAA,kBACL,EAAA,EAAG,IAAA;AAAA,kBACH,OAAA,EAAS,SAAA;AAAA,kBACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,gBAAgB,CAAA,CAAE,aAAA,CAAc,OAAA,GAAU,QAAA,GAAW,MAAM,CAAA;AAAA,kBAChF,MAAA,EAAQ;AAAA,oBACN,KAAA,EAAO;AAAA,sBACL,UAAA,EAAY,cAAA;AAAA,sBACZ,QAAA,EAAU,QAAA;AAAA,sBACV,aAAA,EAAe,QAAA;AAAA,sBACf,aAAA,EAAe,WAAA;AAAA,sBACf,KAAA,EAAO;AAAA;AACT;AACF;AAAA,eACF;AAAA,8BAEAtE,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,IAAA,EAAK,IAAG,IAAA,EACf,QAAA,EAAA;AAAA,gBAAA,CAAC,6BACAT,cAAAA;AAAA,kBAACI,WAAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,gBAAgB,CAAA,IAAK,iBAAA;AAAA,oBACnC,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,oBACjB,OAAO,KAAA,CAAM,YAAA;AAAA,oBACb,IAAA,EAAM,qBAAA;AAAA,oBACN,aAAA,EAAe,KAAA;AAAA,oBACf,UAAU,CAAC,CAAA,KAAM,CAAA,IAAK,GAAA,CAAI,gBAAgB,CAAC;AAAA;AAAA,iBAC7C;AAAA,gCAEFJ,cAAAA;AAAA,kBAACkE,gBAAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA;AAAA,oBAC1B,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,oBACjB,GAAA,EAAK,CAAA;AAAA,oBACL,GAAA,EAAK,CAAA;AAAA,oBACL,OAAO,KAAA,CAAM,YAAA;AAAA,oBACb,UAAU,CAAC,CAAA,KAAM,IAAI,cAAA,EAAgB,MAAA,CAAO,CAAC,CAAC;AAAA;AAAA;AAChD,eAAA,EACF,CAAA;AAAA,cAEC,SAAA,oBACCpE,eAAAA,CAAAwD,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAxD,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,OAAA,EAAQ,eAAA,EAAgB,IAAG,IAAA,EAC9C,QAAA,EAAA;AAAA,kCAAAT,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,EAAA,EAAG,cAAA;AAAA,sBACH,IAAA,EAAK,KAAA;AAAA,sBACL,EAAA,EAAG,WAAA;AAAA,sBACH,GAAA,EAAI,QAAA;AAAA,sBACJ,CAAA,EAAE,uBAAA;AAAA,sBAED,QAAA,EAAA,MAAA,CAAO,eAAe,CAAA,IAAK;AAAA;AAAA,mBAC9B;AAAA,kCACAF,cAAAA;AAAA,oBAACsE,eAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,OAAA,EAAQ,QAAA;AAAA,sBACR,OAAA,EAAS,YAAA;AAAA,sBACT,KAAA,EAAO,MAAA,CAAO,cAAc,CAAA,IAAK,eAAA;AAAA,sBAEjC,QAAA,kBAAAtE,cAAAA,CAAC6D,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA;AAC1B,iBAAA,EACF,CAAA;AAAA,gCAEA7D,cAAAA;AAAA,kBAAC2E,eAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA,IAAK,aAAA;AAAA,oBAC9B,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,MAAM,WAAA,CAAY,KAAA,CAAM,YAAY,CAAA,IAAK,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA,IAAK,SAAA;AAAA,oBACxE,QAAA,EAAU,gBAAA;AAAA,oBACV,cAAA,kBAAgB3E,cAAAA,CAAAsD,mBAAAA,EAAA,EAAE;AAAA;AAAA,iBACpB;AAAA,gCAEAtD,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAI,KAAA,EAAM,EAAA,EAAG,KAAA,EAChB,QAAA,EAAA,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,EAAQ,sBAC9BT,cAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBAEC,KAAA,EAAO,CAAA;AAAA,oBACP,KAAA,EAAO,MAAA;AAAA,oBACP,SAAA,EAAW,MAAM,KAAA,CAAM,YAAA;AAAA,oBACvB,QAAA,EAAU,CAAC,CAAA,KAAM,SAAA,CAAU,GAAG,CAAC;AAAA,mBAAA;AAAA,kBAJ1B;AAAA,iBAMR,CAAA,EACH;AAAA,eAAA,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIc,eAAS,KAAK,CAAA;AAC1C,EAAA,uBACEhB,eAAAA,CAAC8E,YAAA,EAAA,EAAQ,MAAA,EAAgB,QAAA,EAAU,SAAA,EAAW,QAAA,EAAS,QAAA,EAAS,SAAA,EAAS,IAAA,EAAC,MAAA,EAAQ,GAAA,EAChF,QAAA,EAAA;AAAA,oBAAA5E,cAAAA,CAAC4E,YAAA,CAAQ,MAAA,EAAR,EACC,QAAA,kBAAA5E,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM,SAAA,CAAU,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAClC,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,MAAA,EAAM,KAAK,CAAA,CAAA;AAAA,QAC1B,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAa,OAAA;AAAA,UACb,UAAA,EAAY,KAAA;AAAA,UACZ,MAAA,EAAQ,YACJ,oCAAA,GACA,oCAAA;AAAA,UACJ,YAAA,EAAc,OAAA;AAAA,UACd,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,UAAA;AAAA,UACZ,cAAA,EAAgB,UAAA;AAAA,UAChB,QAAA,EAAU;AAAA,SACZ;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,cAAA;AAAA,cACZ,QAAA,EAAU,OAAA;AAAA,cACV,UAAA,EAAY,CAAA;AAAA,cACZ,OAAA,EAAS,aAAA;AAAA,cACT,KAAA,EAAO,kBAAA;AAAA,cACP,UAAA,EAAY,wBAAA;AAAA,cACZ,YAAA,EAAc,QAAA;AAAA,cACd,MAAA,EAAQ;AAAA,aACV;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,KACF,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC4E,YAAA,CAAQ,UAAR,EAAiB,CAAA,EAAE,MAClB,QAAA,kBAAA5E,cAAAA;AAAA,MAAC2E,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,KAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAO,KAAA;AAAA,QACP,cAAA,kBAAgB3E,cAAAA,CAAAsD,mBAAAA,EAAA,EAAE;AAAA;AAAA,KACpB,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC7QO,SAAS,UAAA,CAAW,IAAA,GAA0B,EAAC,EAAqB;AACzE,EAAA,MAAM;AAAA,IACJ,cAAA,GAAiB,KAAA;AAAA,IACjB,MAAA,GAAS,EAAA;AAAA,IACT,KAAA,GAAQ,EAAA;AAAA,IACR,WAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AAEJ,EAAA,MAAM,QAAQuB,mBAAA,CAAmB;AAAA,IAC/B,QAAA,EAAU,cAAA,GACN,CAAC,cAAA,EAAgB,UAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY,EAAG,KAAK,CAAA,GAC7D,CAAC,gBAAgB,QAAQ,CAAA;AAAA,IAC7B,SAAS,YAAY;AACnB,MAAA,MAAM,MAAA,GAAS,iBAAiB,eAAA,GAAkB,kBAAA;AAClD,MAAA,MAAM,UAAU,cAAA,GACZ,EAAE,EAAA,EAAI,MAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,IAAQ,KAAA,EAAM,EAAE,GACtD,EAAE,IAAI,MAAA,EAAO;AACjB,MAAA,MAAM,SAAS,MAAM,QAAA;AAAA,QACnB,kBAAA;AAAA,QACA,OAAA;AAAA;AAAA;AAAA,QAGA,cAAA,GACI;AAAA,UACE,EAAE,EAAA,EAAI,CAAA,EAAI,SAAA,EAAW,UAAA,EAAY,MAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAc,MAAA,EAAQ,IAAA,EAAM;AAAA,UACzF,EAAE,EAAA,EAAI,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,MAAM,EAAA,EAAU,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,KAAA;AAAM,SAC7F,GACA;AAAA,UACE,EAAE,EAAA,EAAI,CAAA,EAAI,SAAA,EAAW,UAAA,EAAY,MAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAc,MAAA,EAAQ,IAAA;AAAM;AAC3F,OACN;AACA,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,EAAC;AAAA,IAC3C,CAAA;AAAA,IACA,SAAA,EAAW,WAAA,KAAgB,cAAA,GAAiB,GAAA,GAAS,GAAA,CAAA;AAAA,IACrD,QAAQ,CAAA,GAAI,GAAA;AAAA,IACZ,iBAAiB,iBAAA,IAAqB,KAAA;AAAA,IACtC,oBAAA,EAAsB,KAAA;AAAA,IACtB,eAAA,EAAiB,iBAAiBC,2BAAA,GAAmB;AAAA,GACtD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,IACxB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAQ,MAAM,KAAA,IAA0B,IAAA;AAAA,IACxC,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA;AAAQ,GAC/B;AACF;AC9DA,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,aAAA,GAAgB,SAAA;AAEf,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,KAAA,GAAQ,EAAA;AAAA,EACR,UAAA,EAAY,cAAA;AAAA,EACZ,WAAA;AAAA,EACA,mBAAA,EAAqB,uBAAA;AAAA,EACrB,YAAA,GAAe,eAAA;AAAA,EACf,WAAA,GAAc,QAAA;AAAA,EACd,YAAA,GAAe,SAAA;AAAA,EACf,YAAA,GAAe,qBAAA;AAAA,EACf,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAQtE,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAIhD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIM,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,EAAE,CAAA;AAEzD,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,OAAA,KAAY,UAAA,CAAW;AAAA,IAClD,cAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,eAAA,GAAkB,MAAA;AAAA,IAC3C;AAAA,GACD,CAAA;AAID,EAAA,MAAM,aAAA,GAAgB0B,aAAAA;AAAA,IACpB,MACE,CAAC,GAAG,OAAO,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC1B,MAAA,IAAI,EAAE,MAAA,KAAW,CAAA,CAAE,QAAQ,OAAO,CAAA,CAAE,SAAS,EAAA,GAAK,CAAA;AAClD,MAAA,OAAO,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,IACH,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,eAAA,GAAkBA,cAAQ,MAAM;AACpC,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAAoB;AAClC,IAAA,KAAA,MAAW,KAAK,aAAA,EAAe,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AACnD,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,IAAA,GAAOA,cAAQ,MAAM;AACzB,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtC,OAAO,CAAA,CAAE,SAAA;AAAA,MACT,KAAA,EAAO,YAAY,CAAC;AAAA,KACtB,CAAE,CAAA;AAKF,IAAA,IAAI,KAAA,IAAS,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG;AAClD,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,MAAM,iBAAiB,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,KAAK,KAAK,IAAA,GAAO,IAAA;AACpE,EAAA,MAAM,aAAA,GAAgB,cAAA,GAAiB,WAAA,CAAY,cAAc,CAAA,GAAI,IAAA;AASrE,EAAAxB,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,IAAI,aAAA,IAAiB,gBAAgB,aAAA,EAAe;AACpD,IAAA,MAAMgB,KAAI,UAAA,CAAW,MAAM,kBAAA,CAAmB,WAAW,GAAG,WAAW,CAAA;AACvE,IAAA,OAAO,MAAM,aAAaA,EAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,WAAA,EAAa,cAAA,EAAgB,aAAa,CAAC,CAAA;AAG/C,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,KAAA;AACtB,IAAA,uBACElC,eAAAA,CAACC,UAAAA,EAAA,EAAM,SAAQ,eAAA,EAAgB,IAAA,EAAK,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,QAAO,EAC3E,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EACvC,QAAA,EAAA,WAAA,CAAY,CAAC,CAAA,EAChB,CAAA;AAAA,sBACAF,cAAAA,CAAC,SAAA,EAAA,EAAU,QAAQ,CAAA,CAAE,MAAA,EAAQ,aAA0B,YAAA,EAA4B;AAAA,KAAA,EACrF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,IAAI,CAAC,CAAA,EAAG,OAAO,QAAA,CAAS,IAAI,CAAA;AAC5B,QAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA;AACzC,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,YAAY,cAAA,IAAkB,IAAA;AAAA,MAC9B,WAAA,EAAa,iBAAiB,WAAA,GAAc,MAAA;AAAA,MAC5C,cAAA,EAAgB,iBAAiB,cAAA,GAAiB,MAAA;AAAA,MAClD,WAAA;AAAA,MACA,mBAAA,EAAqB,UAAA,GAAa,YAAA,GAAgB,uBAAA,IAA2B,kBAAA;AAAA,MAC7E,iBAAA,EAAmB,GAAA;AAAA,MACnB,YAAA;AAAA,MACA,WAAA,EAAa,cAAA,mBAAiBJ,cAAAA,CAAC,SAAA,EAAA,EAAU,QAAQ,cAAA,CAAe,MAAA,EAAQ,WAAA,EAA0B,YAAA,EAA4B,CAAA,GAAK,MAAA;AAAA,MACnI,iBAAA,EAAkB,OAAA;AAAA,MAClB,yBAAA,EAA0B,KAAA;AAAA,MAC1B,8BACEA,cAAAA;AAAA,QAACsE,eAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA,YAAA,EAAY,YAAA;AAAA,UACZ,KAAA,EAAO,YAAA;AAAA,UACP,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA,EAAQ;AAAA,UAE7B,QAAA,EAAA,UAAA,mBAAatE,cAAAA,CAACqD,WAAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAc,CAAA,mBAAKrD,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAc;AAAA;AAAA;AAC9F;AAAA,GAEJ;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,WAAA,EAAa,cAAa,EAAmE;AACxH,EAAA,uBACEnC,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAS,WAAA,GAAc,YAAA;AAAA,MAC9B,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,cAAA;AAAA,QACT,KAAA,EAAO,OAAA;AAAA,QACP,MAAA,EAAQ,OAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,eAAA,EAAiB,SAAS,YAAA,GAAe,aAAA;AAAA,QACzC,SAAA,EAAW,CAAA,UAAA,EAAa,MAAA,GAAS,YAAA,GAAe,aAAa,CAAA,CAAA;AAAA,QAC7D,UAAA,EAAY;AAAA;AACd;AAAA,GACF;AAEJ;AAEA,SAAS,YAAY,CAAA,EAAmB;AAItC,EAAA,MAAM,KAAA,GAAkB,CAAC,CAAA,CAAE,QAAA,IAAY,EAAE,SAAS,CAAA;AAClD,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,IAAI,CAAA,CAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAC7B,IAAA,IAAI,CAAA,CAAE,MAAM,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,QAAK,CAAA;AACzB;ACnKA,IAAM,CAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAUA,IAAM,aAAA,GAAqC;AAAA,EACzC,QAAQ,EAAC;AAAA,EACT,aAAa;AACf,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,EAAM,OAAM,EAA0C;AAClF,EAAA,uBACEF,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,oBACjDA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAAyB,EAAG;AAAA,GAAA,EACnF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAAqB;AAC7C,EAAA,uBACEA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,QAAA,EAAS,EAAA,EAAG,MAC1E,QAAA,EAAA,IAAA,EACH,CAAA;AAEJ;AA8BO,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,EAA+B;AAC7B,EAAA,MAAM,eAAeM,oBAAAA,EAAgB;AACrC,EAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,YAAA,CAAa,YAAY,EAAE,CAAC,CAAA;AAE9D,EAAA,MAAM,GAAA,GAAM,aAAkD,SAAkB,CAAA;AAOhF,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAM,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA,GAAK,GAAA,CAAK,SAAsB,aAAA,CAAc,MAAA;AAAA,IAC/E,WAAA,EAAa,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA,GACtC,GAAA,CAAK,cACN,aAAA,CAAc;AAAA,GACpB;AAEA,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,cAAA,EAAoD;AACzE,EAAA,MAAM,GAAA,GAAM,CAAsC,GAAA,EAAQ,GAAA,KACxD,QAAA,CAAS,SAAA,EAAoB,EAAE,GAAG,KAAA,EAAO,CAAC,GAAG,GAAG,KAAc,CAAA;AAKhE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIM,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AAGtD,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACpC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,GAAA,CAAI,UAAU,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAC,CAAA;AACrC,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,EAAe,IAAA,KAAiB;AAChD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA;AAC7B,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA;AACd,IAAA,GAAA,CAAI,UAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAC,CAAA;AAAA,EAC5C,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KACnB,GAAA,CAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAG1D,EAAA,MAAM,gBAAA,GAAmB,CAAC,EAAA,KAAe;AACvC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,GAAA,CAAI,eAAe,CAAC,GAAG,KAAA,CAAM,WAAA,EAAa,EAAE,CAAC,CAAA;AAC7C,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,EAAA,KAAe;AACnD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAClC,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AACd,IAAA,GAAA,CAAI,eAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAC,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KACxB,GAAA,CAAI,aAAA,EAAe,KAAA,CAAM,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAEpE,EAAA,uBACEhB,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO;AAAA,MAElD,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM+E,uBAAA;AAAA,YACN,KAAA,EAAO,KAAA,IAAS,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,YACpC;AAAA;AAAA,SACF;AAAA,wBAEA/E,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAClC,QAAA,EAAA,WAAA,IACC,CAAA;AAAA,UACE,oBAAA;AAAA,UACA;AAAA,SACF,EACJ,CAAA;AAAA,wBAGAF,eAAC,YAAA,EAAA,EAAa,IAAA,EAAMgF,mBAAO,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,QAAQ,CAAA,EAAG,CAAA;AAAA,wBAE/DlF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC1B,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,CAAC,WAAA,oBAC7BT,cAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,CAAA,CAAE,gBAAA,EAAkB,kBAAkB,CAAA,EAAG,CAAA;AAAA,UAE3D,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACvBF,eAAAA,CAACW,SAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EAC/B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA;AAAA,gBACP,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,gBAC9B,IAAA,EAAM,SAAA;AAAA,gBACN,WAAA,EAAa,CAAA,CAAE,iBAAA,EAAmB,oBAAe,CAAA;AAAA,gBACjD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA;AAAE;AAAA,aACnB;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,CAAA;AAAA,gBAC5B,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EAAA,EAjBS,CAkBX,CACD,CAAA;AAAA,UACA,WAAA,oBACCnC,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,EAAA;AAAA,gBACN,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAA;AAAA,gBAC9B,IAAA,EAAM,SAAA;AAAA,gBACN,WAAA,EAAa,CAAA,CAAE,iBAAA,EAAmB,oBAAe,CAAA;AAAA,gBACjD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA;AAAE;AAAA,aACnB;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,gBACnC,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,QAEC,CAAC,WAAA,oBACAjC,cAAAA,CAAC,gBAAa,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,WAAW,CAAA,EAAG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA,EAAG,CAAA;AAAA,wBAI9FA,eAAC,YAAA,EAAA,EAAa,IAAA,EAAMiF,uBAAW,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA,EAAG,CAAA;AAAA,wBAErEnF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC1B,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA,oBAClCT,cAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,CAAA,CAAE,iBAAA,EAAmB,mBAAmB,CAAA,EAAG,CAAA;AAAA,UAE7D,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,qBAC1BF,eAAAA,CAACW,SAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EAC/B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,OAAO,EAAA,IAAM,IAAA;AAAA,gBACb,UAAU,CAAC,CAAA,KAAM,cAAc,CAAA,EAAG,CAAA,EAAG,aAAa,EAAE,CAAA;AAAA,gBACpD,cAAA;AAAA,gBACA,WAAA,EAAa,CAAA,CAAE,kBAAA,EAAoB,qBAAgB,CAAA;AAAA,gBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,gBACjB,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,gBACjC,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EAAA,EAlBS,CAmBX,CACD,CAAA;AAAA,UACA,YAAA,oBACCnC,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,EAAG,aAAa,EAAE,CAAA;AAAA,gBACpD,cAAA;AAAA,gBACA,WAAA,EAAa,CAAA,CAAE,kBAAA,EAAoB,qBAAgB,CAAA;AAAA,gBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,gBACjB,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,gBACpC,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,QAEC,CAAC,YAAA,oBACAjC,cAAAA,CAAC,gBAAa,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,YAAY,CAAA,EAAG,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA,EAAG;AAAA;AAAA;AAAA,GAEnG;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,OAAA,EAAQ,EAA2C;AAChF,EAAA,uBACEF,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAG,IAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAQ,qCAAA;AAAA,QACR,YAAA,EAAc,OAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,UAAA,GAAa,wBAAA;AACnC,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,uBAAA;AAAA,MACtC,CAAA;AAAA,MACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,UAAA,GAAa,aAAA;AACnC,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,wBAAA;AAAA,MACtC,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAACkF,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,wBACjDlF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;;;ACrTO,IAAM,4BAAA,GAAqD;AAAA,EAChE,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,gBAAA,GAAoC;AAAA;AAAA,EAE/C,EAAE,IAAA,EAAM,kBAAA,EAA4B,KAAA,EAAO,gBAAA,EAAyB,OAAO,iBAAA,EAAkB;AAAA,EAC7F,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,6BAAA,EAA0B,OAAO,iBAAA,EAAkB;AAAA,EAC9F,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,8BAAA,EAA2B,OAAO,iBAAA,EAAkB;AAAA,EAC/F,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,6BAAA,EAA0B,OAAO,iBAAA,EAAkB;AAAA,EAC9F,EAAE,IAAA,EAAM,mBAAA,EAA4B,KAAA,EAAO,4BAAA,EAAyB,OAAO,iBAAA,EAAkB;AAAA;AAAA,EAG7F,EAAE,IAAA,EAAM,aAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,cAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,sBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,mBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC/D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,wBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA,EAG7D,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,aAAA,EAAyB,OAAO,mBAAA,EAAoB;AAAA,EAC9F,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAG9D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,sBAAA,EAAyB,OAAO,cAAA,EAAe;AAAA,EACzF,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,2BAAA,EAAyB,OAAO,cAAA,EAAe;AAAA,EACzF,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA;AAAA,EAGzD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,wBAAA,EAA0B,OAAO,OAAA,EAAQ;AAAA,EACnF,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGlD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAGrD,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1D,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC3D,EAAE,IAAA,EAAM,wBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,0BAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1D,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,mBAAA,EAAyB,OAAO,aAAA,EAAc;AAAA;AAAA,EAGxF,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,QAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA;AAAA,EAGhE,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA;AAAA,EAGxD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAyB,OAAO,MAAA,EAAO;AAAA,EACjF,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA;AAC5C,CAAA;AAEO,SAAS,oBAAoB,IAAA,EAAsB;AACxD,EAAA,MAAM,QAAQ,gBAAA,CAAiB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,SAAS,IAAI,CAAA;AAC5D,EAAA,OAAO,OAAO,KAAA,IAAS,IAAA;AACzB;ACtMA,SAASiF,iBAAAA,CAAiB,UAAA,GAAuB,EAAC,EAAG;AACnD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAyC;AAC5D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA;AAClD,IAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CAAG,KAAK,EAAE,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAA,GAAO,4BAAA,CAA6B,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACxB,OAAO,EAAA,CAAG,IAAA;AAAA,UACV,KAAA,EAAO,mBAAA,CAAoB,EAAA,CAAG,IAAI;AAAA,SACpC,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAID,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,gBAAA,CAAiB,IAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE,CAAE;AAAA,KACnD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,WAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAiB,CAAC,KAAK,CAAC,CAAA;AACrC,EAAA,uBACEnF,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,qBAAA;AAAA,MACpB,WAAA,EAAY,mBAAA;AAAA,MACX,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,EAAE;AAAA;AAAA,GACnC;AAEJ;;;ACxDO,IAAM,wBAAA,GAA+C;AAAA,EAC1D,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,aAAA,GAA+B;AAAA;AAAA,EAE1C,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,UAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,sCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8CAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4CAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAGrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA;AAAA,EAGxF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2CAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA,EAGpF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,yCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAGrF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA;AAAA,EAGhF,EAAE,IAAA,EAAM,MAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,eAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAG5E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,OAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,cAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0CAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA;AAAA;AAAA,EAK5E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,eAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,aAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,iBAAA;AACnE,CAAA;AAOA,IAAM,SAAA,GAAY,gNAAA;AAEX,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,IAAA;AACjD,EAAA,OAAO,OAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,GAAG,EACT,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,GAAG,CAAA;AACb;ACxUA,SAAS+E,iBAAAA,CAAiB,UAAA,GAAuB,EAAC,EAAG;AACnD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAqC;AACxD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA;AAClD,IAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CAAG,KAAK,EAAE,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAA,GAAO,wBAAA,CAAyB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACnD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACxB,OAAO,EAAA,CAAG,IAAA;AAAA,UACV,KAAA,EAAO,EAAA,CAAG,KAAA,IAAS,iBAAA,CAAkB,GAAG,IAAI;AAAA,SAC9C,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAID,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE,CAAE;AAAA,KACnD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAiB,CAAC,KAAK,CAAC,CAAA;AACrC,EAAA,uBACEnF,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,uBAAA;AAAA,MACpB,WAAA,EAAY,oBAAA;AAAA,MACX,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,EAAE;AAAA;AAAA,GACnC;AAEJ;ACvDA,IAAM4B,EAAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAkBA,SAAS,aAAa,KAAA,EAA8B;AAClD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,OAAO,MAAM,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD;AAIA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAA0B;AACnD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,IAAK,wBAAA;AAC3C,EAAA,uBACElC,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,UAAA,EAAY,MAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,SAAA,EAAW,IAAA,CAAK,KAAA,GAAQ,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,GAAK;AAAA;AAClD;AAAA,KACF;AAAA,oBACAA,eAACE,SAAAA,EAAA,EAAK,MAAK,IAAA,EAAK,CAAA,EAAE,uBAAA,EACf,QAAA,EAAA,IAAA,CAAK,IAAA,EACR;AAAA,GAAA,EACF,CAAA;AAEJ;AAOA,IAAM,mBAAA,GAAsB,sBAAA;AAC5B,IAAM,mBAAA,GAAsB,sBAAA;AA6BrB,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM,EAAE,UAAU,KAAA,EAAO,IAAA,GAAO,MAAM,WAAA,EAAa,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC/E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIY,eAA+B,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAuB,QAAA,EAAU,EAAC,EAAG;AAAA;AAAA;AAAA,QAGrD,EAAA,EAAI,IAAA;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,SAAY,KAAA,EAAO,QAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,YAAY,KAAA,EAAO,QAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,UAAY,KAAA,EAAO,OAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,SAAY,KAAA,EAAO,CAAA,EAAU,UAAU,CAAA;AAAE;AAC5D,OACD,CAAA;AACD,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,QAAA,CAAS,GAAA,CAAI,KAAA,IAAS,EAAE,CAAA;AACxB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,YAAA,CAAa,GAAA,EAAK,UAAU,aAAa,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,OAAA,EAAQ;AAAA,EAEV,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,SAAA,GAAYwB,cAAQ,MAAM;AAC9B,IAAA,MAAM,MAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,KAAK,KAAA,IAAS,IAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,GAAI,CAAA;AACzC,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAOV,EAAA,IAAI,cAAc,eAAA,EAAiB;AACjC,IAAA,MAAM,wBAAA,GAA2BR,EAAAA;AAAA,MAC/B,sBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,mBAAA,GAAsB;AAAA,MAC1B,GAAI,MAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,GAAK,MAAA,EAA4D,KAAA,IAAS,EAAC;AAAA,QAC3E,WAAA,EAAa,mBAAA;AAAA,QACb,eAAA,EAAiB;AAAA;AACnB,KACF;AACA,IAAA,MAAM,QAAA,mBACJhC,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,mBAAA,CAAoB,OAAA,CAAQ,UAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAEvF,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,uBACE9B,cAAAA;AAAA,QAACmE,gBAAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA,EAAa,wBAAA;AAAA,UACb,MAAM,EAAC;AAAA,UACP,OAAO,EAAC;AAAA,UACR,UAAU,MAAM;AAAA,UAAC,CAAA;AAAA,UACjB,QAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,KAAA;AAAA,UACA,MAAA,EAAQ;AAAA;AAAA,OACV;AAAA,IAEJ;AACA,IAAA,uBACEnE,cAAAA;AAAA,MAACI,WAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,wBAAA;AAAA,QACb,MAAM,EAAC;AAAA,QACP,KAAA,EAAO,IAAA;AAAA,QACP,UAAU,MAAM;AAAA,QAAC,CAAA;AAAA,QACjB,QAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,QAAA;AAAA,QACd,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAIA,EAAA,MAAM,QAAwB,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACrD,OAAO,CAAA,CAAE,EAAA;AAAA,IACT,OAAO,CAAA,CAAE;AAAA,GACX,CAAE,CAAA;AAEF,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,OAAO,IAAA,mBAAOJ,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,CAAA,mBAAKA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,EAC3E,CAAA;AAOA,EAAA,MAAM,gCACJF,cAAAA;AAAA,IAACsE,eAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,MAAG,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,QAAA,OAAA,EAAQ;AAAA,MAAG,CAAA;AAAA,MAClD,KAAA,EAAOtC,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAC7B,OAAA;AAAA,MACA,YAAA,EAAYA,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAElC,QAAA,kBAAAhC,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA,GAC1B;AAGF,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,uBACEnC,cAAAA;AAAA,MAACmE,gBAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,WAAA,IAAenC,EAAAA,CAAE,WAAA,EAAa,eAAe,CAAA;AAAA,QAC1D,IAAA;AAAA,QACA,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,EAAC;AAAA,QACvB,QAAA,EAAU,CAAC,GAAA,KAAQ,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,QACrC,YAAA;AAAA,QACA,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,KAAA;AAAA,QACnC,YAAA,EAAc,aAAA;AAAA,QACd,yBAAA,EAA0B,KAAA;AAAA,QAC1B,KAAA;AAAA,QACA,MAAA;AAAA,QACA,mBAAA,EACE,SAAA,GACI,CAAA,EAAGA,EAAAA,CAAE,OAAA,EAAS,OAAO,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GACpCA,EAAAA,CAAE,SAAA,EAAW,gBAAgB;AAAA;AAAA,KAErC;AAAA,EAEJ;AAEA,EAAA,uBACEhC,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA,EAAa,WAAA,IAAe4B,EAAAA,CAAE,UAAA,EAAY,gBAAgB,CAAA;AAAA,MAC1D,IAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,MACtB,QAAA,EAAU,CAAC,EAAA,KAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAAA,MACnC,YAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,SAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,KAAA;AAAA,MACnC,YAAA,EAAc,aAAA;AAAA,MACd,yBAAA,EAA0B,KAAA;AAAA,MAC1B,KAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA,EACE,SAAA,GACI,CAAA,EAAGA,EAAAA,CAAE,OAAA,EAAS,OAAO,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GACpCA,EAAAA,CAAE,SAAA,EAAW,gBAAgB;AAAA;AAAA,GAErC;AAEJ;ACnQA,IAAMA,EAAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAeA,IAAM,eAAA,GAA0C;AAAA,EAC9C,aAAA,EAAiB,0BAAA;AAAA,EACjB,SAAA,EAAiB,8BAAA;AAAA,EACjB,UAAA,EAAiB,8GAAA;AAAA,EACjB,cAAA,EAAiB,mCAAA;AAAA,EACjB,SAAA,EAAiB;AACnB,CAAA;AA4BA,SAAS,aAAA,CAAc,EAAE,OAAA,EAAQ,EAAkC;AACjE,EAAA,uBACElC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC3B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,CAAA,EAAE,uBAAA,EAAwB,EAAA,EAAG,cAAA,EAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAC5E,kBAAQ,IAAA,EACX,CAAA;AAAA,IACC,OAAA,CAAQ,KAAA,oBACPF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAChB,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAsC;AACvE,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,MAAM,OAAA,GAAU,wBAAwB,SAAS,CAAA,CAAA;AACjD,EAAA,MAAM,OAAOwB,EAAAA,CAAE,OAAA,EAAS,gBAAgB,SAAS,CAAA,IAAK,gBAAgB,OAAO,CAAA;AAC7E,EAAA,uBACElC,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MAAS,GAAA,EAAI,IAAA;AAAA,MAAK,EAAA,EAAG,IAAA;AAAA,MAAK,EAAA,EAAG,OAAA;AAAA,MACnC,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,QAC3C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,cAAA,EAAe,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAC9E,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,wBACAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,EAAA,EAAG,SAAA,EAAU,CAAA,EAAE,wBAAA,EAAyB,OAAO,EAAE,IAAA,EAAM,GAAE,EAAG,SAAA,EAAW,GACrF,QAAA,EAAA,IAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,IAAA,GAAO,IAAA,EAAM,aAAa,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,iBAAA,EAAkB,GAAI,KAAA;AAClG,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIY,eAAoC,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAA6B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAuB,QAAA,EAAU,EAAC,EAAG;AAAA;AAAA,QAErD,EAAA,EAAI,IAAA;AAAA,QACJ,SAAA,EAAW,aAAA;AAAA,QACX,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,OAAA,EAAe,KAAA,EAAO,MAAA,EAAO;AAAA,UACrC,EAAE,IAAA,EAAM,MAAA,EAAe,KAAA,EAAO,MAAA,EAAO;AAAA,UACrC,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA;AAAc;AAC9C,OACD,CAAA;AACD,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,WAAA,CAAY,GAAA,CAAI,QAAA,IAAY,EAAE,CAAA;AAC9B,QAAA,YAAA,CAAa,IAAI,SAAS,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,EAAE,CAAA;AACd,QAAA,YAAA,CAAa,KAAK,SAAS,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,OAAA,EAAQ;AAAA,EAEV,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,cAAA,GAAiBwB,cAAQ,MAAM;AACnC,IAAA,MAAM,MAAwC,EAAC;AAC/C,IAAA,KAAA,MAAW,KAAK,QAAA,IAAY,IAAI,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA;AAG9C,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AACjC,QAAA,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,CAAC,CAAA,MAAO,CAAC,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACvC;AAAA,IACF,WAAW,KAAA,CAAM,KAAA,IAAS,CAAC,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3C,MAAA,GAAA,CAAI,MAAM,KAAK,CAAA,GAAI,EAAE,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IACzC;AACA,IAAA,OAAO,GAAA;AAAA,EAET,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,CAAC,CAAA;AAE9E,EAAA,MAAM,OAAuB,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACrE,OAAO,CAAA,CAAE,IAAA;AAAA,IACT,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,CAAA,CAAE;AAAA,GAChD,CAAE,CAAA;AAEF,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA;AACvC,IAAA,OAAO,GAAA,mBAAMxC,cAAAA,CAAC,aAAA,EAAA,EAAc,SAAS,GAAA,EAAK,CAAA,mBAAKA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,EAC/E,CAAA;AAEA,EAAA,MAAM,gCACJF,cAAAA;AAAA,IAACsE,eAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MAAK,OAAA,EAAQ,QAAA;AAAA,MAClB,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,MAAG,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,QAAA,OAAA,EAAQ;AAAA,MAAG,CAAA;AAAA,MAClD,KAAA,EAAOtC,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAC7B,OAAA;AAAA,MACA,YAAA,EAAYA,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAElC,QAAA,kBAAAhC,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA,GAC1B;AAGF,EAAA,MAAM,iBAAA,GAAoB;AAAA,IACxB,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,QAAA;AAAA,IACnC,YAAA,EAAc,aAAA;AAAA,IACd,yBAAA,EAA2B,KAAA;AAAA,IAC3B,KAAA;AAAA,IACA,mBAAA,EAAqBH,EAAAA,CAAE,YAAA,EAAc,uBAAuB;AAAA,GAC9D;AAEA,EAAA,uBACElC,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,SAAQ,KAAA,EAClC,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,wBACLT,cAAAA;AAAA,MAACmE,gBAAAA;AAAA,MAAA;AAAA,QACE,GAAG,iBAAA;AAAA,QACJ,WAAA,EAAa,WAAA,IAAenC,EAAAA,CAAE,cAAA,EAAgB,mCAAmC,CAAA;AAAA,QACjF,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,EAAC;AAAA,QACvB,QAAA,EAAU,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,QACzC,YAAA;AAAA,QAIA,UAAA,EAAU,IAAA;AAAA,QACV,iBAAA,EAAiB,IAAA;AAAA,QAGjB;AAAA;AAAA,wBAGFhC,cAAAA;AAAA,MAACI,WAAAA;AAAA,MAAA;AAAA,QACE,GAAG,iBAAA;AAAA,QACJ,WAAA,EAAa,WAAA,IAAe4B,EAAAA,CAAE,aAAA,EAAe,oBAAoB,CAAA;AAAA,QACjE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,QACtB,QAAA,EAAU,CAAC,IAAA,KAAS,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,QACvC,YAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAED,CAAC,iBAAA,oBAAqBhC,cAAAA,CAAC,iBAAc,SAAA,EAAsB;AAAA,GAAA,EAC9D,CAAA;AAEJ;AC1MA,IAAM,kBAAA,GAAqB,8BAAA;AAC3B,IAAM,cAAA,GAAiB,8BAAA;AACvB,IAAM,YAAA,GAAe,+BAAA;AAErB,SAAS,mBAAA,GAAsB;AAC7B,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA,EAAG;AACjD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACzC,EAAA,EAAA,CAAG,EAAA,GAAK,kBAAA;AAKR,EAAA,EAAA,CAAG,WAAA,GAAc;AAAA,SAAA,EACR,cAAc,cAAc,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAMjD,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC9B;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAM,IAAA,GAAO8D,kBAAAA;AAAA,EACb,eAAA,GAAkB;AACpB,CAAA,EAA0B;AACxB,EAAA,MAAM,QAAQtD,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAE1C,EAAAQ,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,eAAA,EAAiB;AAClC,IAAA,mBAAA,EAAoB;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,EAAE,CAAA;AAC7C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,cAAc,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,eAAe,CAAC,CAAA;AAE7B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,OAAOoE,qBAAA;AAAA,oBACLpF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,EAAE,CAAC,YAAY,GAAG,EAAA,EAAG;AAAA,QACzB,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA,EAAG,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAM;AAAA,QAE3E,QAAA,kBAAAA,cAAAA,CAACY,4BAAAA,EAAA,EACC,QAAA,kBAAAZ,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,YAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,YACvC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,WAAA,EAAY;AAAA,YAChD,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,QAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,MAAA,EAAO;AAAA,YAE/E,QAAA,kBAAAb,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,QAAA;AAAA,gBACV,GAAA,EAAI,OAAA;AAAA,gBACJ,KAAA,EAAO;AAAA,kBACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,kBAC5C,MAAA,EAAQ,oCAAA;AAAA,kBACR,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,kBAC3B,SAAA,EAAW,iCAAA;AAAA,kBACX,OAAA,EAAS,aAAA;AAAA,kBACT,QAAA,EAAU,MAAA;AAAA,kBACV,QAAA,EAAU;AAAA,iBACZ;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAP,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oCAAAT,cAAAA,CAAC,QAAK,IAAA,EAAK,OAAA,EAAQ,OAAO,EAAA,CAAG,CAAC,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,CAAA;AAAA,oCACnDA,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO;AAAA,0BACL,UAAA,EAAY,0BAAA;AAAA,0BACZ,QAAA,EAAU,OAAA;AAAA,0BACV,UAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe,WAAA;AAAA,0BACf,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,0BACX,UAAA,EAAY,CAAA,UAAA,EAAaG,UAAAA,CAAM,EAAA,CAAG,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,YAAA,EAAeA,UAAAA,CAAM,EAAA,CAAG,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,yBAC5E;AAAA,wBAEC,QAAA,EAAA;AAAA;AAAA;AACH,mBAAA,EACF,CAAA;AAAA,kBAAA,CAEE,QAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,qBAC/BL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAQ,OAAA,EAAS,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,WAAU,EAAG,CAAA;AAAA,kBAG3F,wBACCA,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,0BAAA;AAAA,wBACZ,QAAA,EAAU,QAAA;AAAA,wBACV,KAAA,EAAO,wBAAA;AAAA,wBACP,aAAA,EAAe,QAAA;AAAA,wBACf,aAAA,EAAe,WAAA;AAAA,wBACf,UAAA,EAAY;AAAA,uBACd;AAAA,sBAEC,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kBAGD,QAAQ,IAAA,CAAK,MAAA,GAAS,qBACrBJ,eAAAA,CAAAwD,qBAAA,EACG,QAAA,EAAA;AAAA,oBAAA,IAAA,oBACCtD,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,SAAA,EAAU,EAAG,CAAA;AAAA,oCAE5FA,cAAAA,CAACS,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAI,OAAA,EAC1B,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,sBACZT,cAAAA,CAAC,iBAAA,EAAA,EAA0B,QAAA,EAAU,CAAA,CAAE,GAAA,EAAK,QAAQ,CAAA,CAAE,MAAA,EAAA,EAA9B,CAAsC,CAC/D,CAAA,EACH;AAAA,mBAAA,EACF;AAAA;AAAA;AAAA;AAEJ,WAAA;AAAA,UApEI;AAAA,SAqEN,EACF;AAAA;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAMA,SAAS,iBAAiB,QAAA,EAAmC;AAC3D,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/C,EAAA,IAAI,eAAe,KAAA,EAAO,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAAU,MAAK,MAAA,EAAO,CAAA;AACxD,EAAA,IAAI,eAAe,KAAA,EAAO,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAAU,MAAK,OAAA,EAAQ,CAAA;AACzD,EAAA,IAAI,eAAe,WAAA,IAAe,QAAA,KAAa,UAAK,uBAAOA,eAAC,aAAA,EAAA,EAAc,CAAA;AAC1E,EAAA,uBACEA,cAAAA;AAAA,IAACE,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,0BAAA;AAAA,QACZ,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,MAAA,EAAO,EAAyC;AAGrF,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/C,EAAA,MAAM,YAAY,UAAA,KAAe,KAAA,IAAS,eAAe,KAAA,IACpD,UAAA,KAAe,eAAe,QAAA,KAAa,QAAA;AAChD,EAAA,MAAM,QAAA,GAAW,YAAY,OAAA,GAAU,OAAA;AAEvC,EAAA,uBACEJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA;AAAA,UACA,MAAA,EAAQ,OAAA;AAAA,UACR,OAAA,EAAS,SAAA;AAAA,UACT,YAAA,EAAc,OAAA;AAAA,UACd,MAAA,EAAQ,qCAAA;AAAA,UACR,UAAA,EAAY,wBAAA;AAAA,UACZ,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,OAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAQ,wCAAA;AAAA,UACR,UAAA,EAAY,CAAA;AAAA,UACZ,SAAA,EAAW;AAAA,SACb;AAAA,QAEC,2BAAiB,QAAQ;AAAA;AAAA,KAC5B;AAAA,oBACAA,cAAAA;AAAA,MAACE,SAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,0BAAA;AAAA,UACZ,QAAA,EAAU,QAAA;AAAA,UACV,KAAA,EAAO,wBAAA;AAAA,UACP,aAAA,EAAe,QAAA;AAAA,UACf,aAAA,EAAe;AAAA,SACjB;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAKA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAA+B;AACvD,EAAA,MAAM,MAAA,GAAS,wBAAA;AACf,EAAA,MAAM,UAAA,GAAa,wBAAA;AACnB,EAAA,uBACEJ,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,KAAA,EAAM,OAAA,EAAQ,MAAA,EAAO,OAAA,EAAQ,MAAK,MAAA,EAAO,MAAA,EAAgB,WAAA,EAAY,KAAA,EAAM,gBAAe,OAAA,EAEjH,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAEhDA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAElCA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EACE,IAAA,KAAS,MAAA,GACL,mDAAA,GACA,sDAAA;AAAA,QAEN,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAO;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,GAAgB;AAIvB,EAAA,MAAM,MAAA,GAAS,wBAAA;AACf,EAAA,uBACEF,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,OAAA,EAAQ,MAAA,EAAO,OAAA,EAAQ,IAAA,EAAK,QAAO,MAAA,EAAgB,WAAA,EAAY,OAAM,cAAA,EAAe,OAAA,EAAQ,eAAc,OAAA,EACvI,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qCAAA,EAAsC,CAAA;AAAA,oBAC9CA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACvC,CAAA;AAEJ;AClPO,SAAS,oBAAoB,EAAE,KAAA,EAAO,UAAU,OAAA,EAAS,OAAA,EAAS,UAAS,EAA4B;AAC5G,EAAA,uBACEF,eAAAA,CAAAwD,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAC,4BAAYtD,cAAAA,CAACqF,yBAAA,EAAuB,KAAA,EAAc,UAAoB,OAAA,EAAkB,CAAA;AAAA,IACzF,CAAC,OAAA,oBAAWrF,eAACsF,wBAAAA,EAAA,EAAwB,OAAc,OAAA,EAAkB;AAAA,GAAA,EACxE,CAAA;AAEJ;AAOA,SAASD,uBAAAA,CAAuB;AAAA,EAC9B,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAQ7E,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAG9C,EAAA,MAAM,UAAU,YAAY;AAI1B,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,KAAA,EAAO,MAAA,CAAO,mBAAmB,CAAA,IAAK,eAAA;AAAA,MACtC,IAAA,EAAM,MAAA,CAAO,kBAAkB,CAAA,IAAK,iCAAA;AAAA,MACpC,IAAA,EAAM;AAAA,QACJ,EAAE,GAAA,EAAK,GAAA,EAAK,QAAQ,MAAA,CAAO,KAAK,KAAK,KAAA,EAAM;AAAA,QAC3C,EAAE,GAAA,EAAK,QAAA,EAAK,QAAQ,MAAA,CAAO,QAAQ,KAAK,QAAA;AAAS;AACnD,KACF;AACA,IAAA,MAAM,gBAAgB,KAAA,CAAoB,EAAE,IAAI,iBAAA,EAAmB,GAAG,cAAc,CAAA;AAIpF,IAAA,QAAA,CAAS,kBAAA,EAAoB,EAAE,EAAA,EAAI,iBAAA,EAAmB,cAAc,CAAA,CAAE,MAAM,MAAM;AAEhF,MAAA,iBAAA,CAAkB,QAAA,GAAW,YAAA,EAAa;AAAA,IAC5C,CAAC,CAAA;AACD,IAAA,MAAM,SAAS,MAAM,aAAA;AACrB,IAAA,IAAI,MAAA,WAAiB,MAAM,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,OAAO,iBAAiB,CAAA,EAAG,QAAA,EAAS,KAAA,EAAM,WAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACvF,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,eAAC+D,qBAAAA,EAAA,EAAU,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,wBAC5D/D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAC/D,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EACf;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,SAASoF,wBAAAA,CAAwB;AAAA,EAC/B,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,QAAQ9E,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,QAAA,CAAS,mBAAA,EAAqB,EAAE,EAAA,EAAI,WAAA,EAAa,OAAO,CAAA,CAAE,MAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EAC1E,CAAA;AACA,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,OAAO,kBAAkB,CAAA,EAAG,QAAA,EAAS,KAAA,EAAM,WAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACxF,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,eAAC8D,kBAAAA,EAAA,EAAO,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,wBACzD9D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAC/D,QAAA,EAAA,MAAA,CAAO,MAAM,CAAA,EAChB;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AClFO,SAAS,WAAA,GAAqD;AACnE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAC9C,EAAA,OAAO,YAAY;AAGjB,IAAA,MAAM,UAAU,KAAA,CAAuB;AAAA,MACrC,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,MAC7B,IAAA,EAAM,OAAO,cAAc,CAAA;AAAA,MAC3B,IAAA,EAAM;AAAA,QACJ,EAAE,GAAA,EAAK,KAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA,QAC9C,EAAE,GAAA,EAAK,GAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,QAC9C,EAAE,GAAA,EAAK,WAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAG;AAChD,KACD,CAAA;AACD,IAAA,QAAA,CAAS,oBAAoB,EAAE,EAAA,EAAI,YAAY,CAAA,CAAE,MAAM,MAAM;AAC3D,MAAA,iBAAA,CAAkB,QAAA,GAAW,YAAA,EAAa;AAAA,IAC5C,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,OAAA;AAAA,EACf,CAAA;AACF;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAC9B,IAAA,IAAI,UAAU,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,SAAU,MAAM,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,uBACER,cAAAA;AAAA,IAACiB,YAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MAC1C,QAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,YAAA,EAAY,IAAA;AAAA,MACZ,MAAA,EAAQ,GAAA;AAAA,MAER,QAAA,kBAAAnB,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UACC,OAAA;AAAA,UACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,UAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UACxB,KAAA,EAAO;AAAA,YACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,YAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,YACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,YACpC,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,WAC3B;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAL,eAACuF,oBAAA,EAAA,EAAS,IAAA,EAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,4BAC3DvF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,OAC/D,QAAA,EAAA,KAAA,IAAS,MAAA,CAAO,UAAU,CAAA,EAC7B;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AC9GA,IAAM,OAAA,GAAUsF,WAAK,CAAC;AAAA,EACpB,QAAA;AAAA,EACA,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAAA,EAC9B,QAAA,GAAW;AACb,CAAA,KAAgB;AACd,EAAA,MAAM,MAAA,GAAS3E,aAA8B,IAAI,CAAA;AAEjD,EAAA,uBACEf,eAAAA;AAAA,IAAC2F,yBAAA;AAAA,IAAA;AAAA,MACC,kBAAA,EAAoB,CAAA;AAAA,MACpB,YAAA,EAAc,IAAA;AAAA,MACd,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAAA,MAC5B,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAa,KAAA;AAAA,MACb,KAAKC,WAAA,CAAI,MAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,iBAAA;AAAA,QACT,MAAA,EAAQ,iBAAA;AAAA,QACR,SAAA,EAAW,iBAAA;AAAA,QACX,eAAA,EAAiB;AAAA,OACnB;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,kBAAA,EAAoB,KAAA;AAAA,MACpB,eAAA,EAAiB,KAAA;AAAA,MACjB,OAAA,EAAS,KAAA;AAAA,MACT,aAAA,EAAe,KAAA;AAAA,MACf,GAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,MAEpC,QAAA,EAAA;AAAA,wBAAA1F,cAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,QAC7B;AAAA;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA;AAEf,IAAM2F,IAAAA,GAAM;AAWZ,IAAM,QAAA,GAAW,CAAC,EAAE,QAAA,EAAS,KAAqB;AACvD,EAAA,MAAM,MAAMC,mBAAA,EAAO;AACnB,EAAA,MAAM,QAAA,GAAW/E,aAAyB,IAAI,CAAA;AAE9C,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,GAAA,CAAI,WAAA,CAAY,SAAS,OAAO,CAAA;AAAA,IAClC;AACA,IAAA,MAAM,KAAA,GAAQ6E,iBAAA;AAAA,MACZ,6CAA6C,QAAQ,CAAA,gBAAA,CAAA;AAAA,MACrD;AAAA,QACE,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,MAAA,EAAQC,qBAAaC,cAAA,CAAO,CAAA,EAAK,GAAK,CAAA,EAAGA,cAAA,CAAO,IAAA,EAAQ,CAAG,CAAC,CAAA;AAAA,QAC5D,QAAA,EAAU,GAAA;AAAA,QACV,iBAAA,EAAmB,KAAA;AAAA,QACnB,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS;AAAA;AACX,KACF;AACA,IAAA,KAAA,CAAM,MAAM,GAAG,CAAA;AACf,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAEnB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,GAAA,CAAI,WAAA,CAAY,SAAS,OAAO,CAAA;AAAA,MAClC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,GAAG,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,QAAQvF,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,MAAMoF,mBAAA,EAAO;AACnB,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,IAAA,EAAMV,gBAAAA,EAAM,IAAI,MAAM,GAAA,CAAI,QAAO,EAAE;AAAA,IACrC,EAAE,IAAA,EAAMc,iBAAA,EAAO,IAAI,MAAM,GAAA,CAAI,SAAQ;AAAE,GACzC;AAEA,EAAA,uBACEhG,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO,KAAA;AAAA,QACP,GAAA,EAAK,KAAA;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,WAAWN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA;AAAA,QACvD,YAAYA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,MAC9B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,MAE1B,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,EAAE,MAAM,EAAA,EAAG,EAAG,sBAC1BL,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAK,QAAQ,iBAAA,EAAkB;AAAA,UACpD,OAAA,EAAS,EAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAM,OAAA,CAAQ,EAAA;AAAA,YACvB,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS;AAAA,WACX;AAAA,UAEA,QAAA,kBAAAX,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,OAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG;AAAA,SAAA;AAAA,QATxC;AAAA,OAWR;AAAA;AAAA,GACH;AAEJ;ACnHA,IAAM,cAAA,GAAiB,GAAA;AACvB,IAAM,aAAA,GAAgB,CAAA;AAEf,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB,cAAA;AAAA,EACjB,aAAA,GAAgB;AAClB,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIc,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,SAAA,GAAY0B,aAAAA,CAAQ,MAAM,SAAA,CAAU,SAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,EAAG,CAAC,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAE3F,EAAA,MAAM,kBAAkB,MAAA,IAAU,cAAA;AAClC,EAAA,MAAM,iBAAiB,KAAA,IAAS,aAAA;AAChC,EAAA,MAAM,GAAA,GAAM,iBAAiB,eAAe,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,cAAc,CAAA,EAAG,GAAA,IAAO,SAAA;AAEtD,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAW;AAC9B,IAAA,CAAA,CAAE,eAAe,eAAA,IAAkB;AACnC,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAKA,EAAA,MAAM,WAAW,GAAA,GAAM,KAAA;AACvB,EAAA,MAAM,IAAA,GAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AACxB,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,GAAG,CAAA,EAAA,CAAA;AAElC,EAAA,uBACExC,cAAAA;AAAA,IAACiG,kCAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe,OAAA,GAAU,EAAE,KAAA,EAAO,aAAY,GAAI,MAAA;AAAA,MAClD,sBACEnG,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,UACnC,UAAA,EAAY,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,QAAA;AAAA,YAChB,MAAA,EAAQ,QAAA,GAAW,aAAA,GAAgB,OAAA,GAAU,SAAA,GAAY,SAAA;AAAA,YACzD,OAAA,EAAS,WAAW,IAAA,GAAO,CAAA;AAAA,YAC3B,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,IAAW,CAAC,QAAA,GAAW,GAAA,GAAM,QAAA,GAAW,IAAA,GAAO,CAAA,EAAE;AAAA,UACnE,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAI5C,QAAA,EAAA;AAAA,YAAA,CAAA,QAAA,IAAY,OAAA,KAAY,CAAC,QAAA,oBACzBX,cAAAA;AAAA,cAACW,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,UAAA;AAAA,kBACV,KAAA,EAAO,QAAA;AAAA,kBACP,MAAA,EAAQ,QAAA;AAAA,kBACR,YAAA,EAAc,KAAA;AAAA,kBACd,MAAA,EAAQ,CAAA,aAAA,EAAgBN,UAAAA,CAAM,QAAA,EAAU,IAAI,CAAC,CAAA,CAAA;AAAA,kBAC7C,SAAA,EAAW,CAAA,QAAA,EAAWA,UAAAA,CAAM,QAAA,EAAU,IAAI,CAAC,CAAA;AAAA,iBAC7C;AAAA,gBACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,GAAA,EAAI;AAAA,gBAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA;AAAE;AAAA,aAClC;AAAA,YASD,uBACCL,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,KAAA,EAAO,IAAA;AAAA,kBACP,MAAA,EAAQ,IAAA;AAAA,kBACR,eAAA,EAAiB,QAAA;AAAA,kBACjB,eAAA,EAAiB,OAAO,GAAG,CAAA,CAAA,CAAA;AAAA,kBAC3B,SAAA,EAAW,OAAO,GAAG,CAAA,CAAA,CAAA;AAAA,kBACrB,gBAAA,EAAkB,WAAA;AAAA,kBAClB,UAAA,EAAY,WAAA;AAAA,kBACZ,kBAAA,EAAoB,QAAA;AAAA,kBACpB,YAAA,EAAc,QAAA;AAAA,kBACd,cAAA,EAAgB,SAAA;AAAA,kBAChB,QAAA,EAAU,SAAA;AAAA,kBACV,MAAA,EAAQ;AAAA,oBACN,8BAAA;AAAA,oBACA,+BAAA;AAAA,oBACA,8BAAA;AAAA,oBACA,+BAAA;AAAA,oBACA,CAAA,sBAAA,EAAyBK,UAAAA,CAAM,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,mBAC7C,CAAE,KAAK,GAAG,CAAA;AAAA,kBACV,aAAA,EAAe,MAAA;AAAA,kBACf,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA,GAEJ;AAEJ","file":"index.cjs","sourcesContent":["import {\r\n Group,\r\n Text,\r\n Image,\r\n Box,\r\n Select,\r\n} from \"@mantine/core\";\r\nimport type { ComboboxItem, SelectProps } from \"@mantine/core\";\r\n\r\n// ── Blip icons: [id, name, extension] ──────────────────────────────────────\r\n\r\nconst BLIP_ENTRIES: [number, string, string][] = [\r\n [0,\"radar_higher\",\"gif\"],[1,\"radar_level\",\"png\"],[2,\"radar_lower\",\"gif\"],[3,\"radar_police_ped\",\"gif\"],\r\n [4,\"radar_wanted_radius\",\"png\"],[5,\"radar_area_blip\",\"png\"],[6,\"radar_centre\",\"png\"],[7,\"radar_north\",\"png\"],\r\n [8,\"radar_waypoint\",\"png\"],[9,\"radar_radius_blip\",\"png\"],[10,\"radar_radius_outline_blip\",\"png\"],\r\n [11,\"radar_weapon_higher\",\"gif\"],[12,\"radar_weapon_lower\",\"gif\"],[13,\"radar_higher_ai\",\"gif\"],\r\n [14,\"radar_lower_ai\",\"gif\"],[15,\"radar_police_heli_spin\",\"gif\"],[16,\"radar_police_plane_move\",\"png\"],\r\n [27,\"radar_mp_crew\",\"png\"],[28,\"radar_mp_friendlies\",\"png\"],[36,\"radar_cable_car\",\"png\"],\r\n [37,\"radar_activities\",\"png\"],[38,\"radar_raceflag\",\"png\"],[40,\"radar_safehouse\",\"png\"],\r\n [41,\"radar_police\",\"gif\"],[42,\"radar_police_chase\",\"gif\"],[43,\"radar_police_heli\",\"png\"],\r\n [44,\"radar_bomb_a\",\"png\"],[47,\"radar_snitch\",\"png\"],[48,\"radar_planning_locations\",\"png\"],\r\n [50,\"radar_crim_carsteal\",\"png\"],[51,\"radar_crim_drugs\",\"png\"],[52,\"radar_crim_holdups\",\"png\"],\r\n [54,\"radar_crim_player\",\"png\"],[56,\"radar_cop_patrol\",\"png\"],[57,\"radar_cop_player\",\"png\"],\r\n [58,\"radar_crim_wanted\",\"png\"],[59,\"radar_heist\",\"png\"],[60,\"radar_police_station\",\"png\"],\r\n [61,\"radar_hospital\",\"png\"],[62,\"radar_assassins_mark\",\"png\"],[63,\"radar_elevator\",\"png\"],\r\n [64,\"radar_helicopter\",\"png\"],[66,\"radar_random_character\",\"png\"],[67,\"radar_security_van\",\"png\"],\r\n [68,\"radar_tow_truck\",\"png\"],[70,\"radar_illegal_parking\",\"png\"],[71,\"radar_barber\",\"png\"],\r\n [72,\"radar_car_mod_shop\",\"png\"],[73,\"radar_clothes_store\",\"png\"],[75,\"radar_tattoo\",\"png\"],\r\n [76,\"radar_armenian_family\",\"png\"],[77,\"radar_lester_family\",\"png\"],[78,\"radar_michael_family\",\"png\"],\r\n [79,\"radar_trevor_family\",\"png\"],[80,\"radar_jewelry_heist\",\"png\"],[82,\"radar_drag_race_finish\",\"png\"],\r\n [84,\"radar_rampage\",\"png\"],[85,\"radar_vinewood_tours\",\"png\"],[86,\"radar_lamar_family\",\"png\"],\r\n [88,\"radar_franklin_family\",\"png\"],[89,\"radar_chinese_strand\",\"png\"],[90,\"radar_flight_school\",\"png\"],\r\n [91,\"radar_eye_sky\",\"png\"],[92,\"radar_air_hockey\",\"png\"],[93,\"radar_bar\",\"png\"],\r\n [94,\"radar_base_jump\",\"png\"],[95,\"radar_basketball\",\"png\"],[96,\"radar_biolab_heist\",\"png\"],\r\n [99,\"radar_cabaret_club\",\"png\"],[100,\"radar_car_wash\",\"png\"],[102,\"radar_comedy_club\",\"png\"],\r\n [103,\"radar_darts\",\"png\"],[104,\"radar_docks_heist\",\"png\"],[105,\"radar_fbi_heist\",\"png\"],\r\n [106,\"radar_fbi_officers_strand\",\"png\"],[107,\"radar_finale_bank_heist\",\"png\"],\r\n [108,\"radar_financier_strand\",\"png\"],[109,\"radar_golf\",\"png\"],[110,\"radar_gun_shop\",\"png\"],\r\n [111,\"radar_internet_cafe\",\"png\"],[112,\"radar_michael_family_exile\",\"png\"],\r\n [113,\"radar_nice_house_heist\",\"png\"],[114,\"radar_random_female\",\"png\"],[115,\"radar_random_male\",\"png\"],\r\n [118,\"radar_rural_bank_heist\",\"png\"],[119,\"radar_shooting_range\",\"png\"],\r\n [120,\"radar_solomon_strand\",\"png\"],[121,\"radar_strip_club\",\"png\"],[122,\"radar_tennis\",\"png\"],\r\n [123,\"radar_trevor_family_exile\",\"png\"],[124,\"radar_michael_trevor_family\",\"png\"],\r\n [126,\"radar_triathlon\",\"png\"],[127,\"radar_off_road_racing\",\"png\"],[128,\"radar_gang_cops\",\"png\"],\r\n [129,\"radar_gang_mexicans\",\"png\"],[130,\"radar_gang_bikers\",\"png\"],[133,\"radar_snitch_red\",\"png\"],\r\n [134,\"radar_crim_cuff_keys\",\"png\"],[135,\"radar_cinema\",\"png\"],[136,\"radar_music_venue\",\"png\"],\r\n [137,\"radar_police_station_blue\",\"png\"],[138,\"radar_airport\",\"png\"],\r\n [139,\"radar_crim_saved_vehicle\",\"png\"],[140,\"radar_weed_stash\",\"png\"],[141,\"radar_hunting\",\"png\"],\r\n [142,\"radar_pool\",\"png\"],[143,\"radar_objective_blue\",\"png\"],[144,\"radar_objective_green\",\"png\"],\r\n [145,\"radar_objective_red\",\"png\"],[146,\"radar_objective_yellow\",\"png\"],[147,\"radar_arms_dealing\",\"png\"],\r\n [148,\"radar_mp_friend\",\"png\"],[149,\"radar_celebrity_theft\",\"png\"],\r\n [150,\"radar_weapon_assault_rifle\",\"png\"],[151,\"radar_weapon_bat\",\"png\"],\r\n [152,\"radar_weapon_grenade\",\"png\"],[153,\"radar_weapon_health\",\"png\"],[154,\"radar_weapon_knife\",\"png\"],\r\n [155,\"radar_weapon_molotov\",\"png\"],[156,\"radar_weapon_pistol\",\"png\"],[157,\"radar_weapon_rocket\",\"png\"],\r\n [158,\"radar_weapon_shotgun\",\"png\"],[159,\"radar_weapon_smg\",\"png\"],[160,\"radar_weapon_sniper\",\"png\"],\r\n [161,\"radar_mp_noise\",\"gif\"],[162,\"radar_poi\",\"png\"],[163,\"radar_passive\",\"png\"],\r\n [164,\"radar_usingmenu\",\"png\"],[171,\"radar_gang_cops_partner\",\"png\"],[173,\"radar_weapon_minigun\",\"png\"],\r\n [175,\"radar_weapon_armour\",\"png\"],[176,\"radar_property_takeover\",\"png\"],\r\n [177,\"radar_gang_mexicans_highlight\",\"png\"],[178,\"radar_gang_bikers_highlight\",\"png\"],\r\n [179,\"radar_triathlon_cycling\",\"png\"],[180,\"radar_triathlon_swimming\",\"png\"],\r\n [181,\"radar_property_takeover_bikers\",\"png\"],[182,\"radar_property_takeover_cops\",\"png\"],\r\n [183,\"radar_property_takeover_vagos\",\"png\"],[184,\"radar_camera\",\"png\"],\r\n [185,\"radar_centre_red\",\"png\"],[186,\"radar_handcuff_keys_bikers\",\"png\"],\r\n [187,\"radar_handcuff_keys_vagos\",\"png\"],[188,\"radar_handcuffs_closed_bikers\",\"png\"],\r\n [189,\"radar_handcuffs_closed_vagos\",\"png\"],[192,\"radar_camera_badger\",\"png\"],\r\n [193,\"radar_camera_facade\",\"png\"],[194,\"radar_camera_ifruit\",\"png\"],[197,\"radar_yoga\",\"png\"],\r\n [198,\"radar_taxi\",\"png\"],[205,\"radar_shrink\",\"png\"],[206,\"radar_epsilon\",\"png\"],\r\n [207,\"radar_financier_strand_grey\",\"png\"],[208,\"radar_trevor_family_grey\",\"png\"],\r\n [209,\"radar_trevor_family_red\",\"png\"],[210,\"radar_franklin_family_grey\",\"png\"],\r\n [211,\"radar_franklin_family_blue\",\"png\"],[212,\"radar_franklin_a\",\"png\"],[213,\"radar_franklin_b\",\"png\"],\r\n [214,\"radar_franklin_c\",\"png\"],[225,\"radar_gang_vehicle\",\"png\"],\r\n [226,\"radar_gang_vehicle_bikers\",\"png\"],[227,\"radar_gang_vehicle_cops\",\"png\"],\r\n [228,\"radar_gang_vehicle_vagos\",\"png\"],[229,\"radar_guncar\",\"png\"],\r\n [230,\"radar_driving_bikers\",\"png\"],[231,\"radar_driving_cops\",\"png\"],\r\n [232,\"radar_driving_vagos\",\"png\"],[233,\"radar_gang_cops_highlight\",\"png\"],\r\n [234,\"radar_shield_bikers\",\"png\"],[235,\"radar_shield_cops\",\"png\"],\r\n [236,\"radar_shield_vagos\",\"png\"],[237,\"radar_custody_bikers\",\"png\"],\r\n [238,\"radar_custody_vagos\",\"png\"],[251,\"radar_arms_dealing_air\",\"png\"],\r\n [252,\"radar_playerstate_arrested\",\"png\"],[253,\"radar_playerstate_custody\",\"png\"],\r\n [254,\"radar_playerstate_driving\",\"png\"],[255,\"radar_playerstate_keyholder\",\"png\"],\r\n [256,\"radar_playerstate_partner\",\"png\"],[262,\"radar_ztype\",\"png\"],[263,\"radar_stinger\",\"png\"],\r\n [264,\"radar_packer\",\"png\"],[265,\"radar_monroe\",\"png\"],[266,\"radar_fairground\",\"png\"],\r\n [267,\"radar_property\",\"png\"],[268,\"radar_gang_highlight\",\"png\"],[269,\"radar_altruist\",\"png\"],\r\n [270,\"radar_ai\",\"png\"],[271,\"radar_on_mission\",\"png\"],[272,\"radar_cash_pickup\",\"png\"],\r\n [273,\"radar_chop\",\"png\"],[274,\"radar_dead\",\"png\"],[275,\"radar_territory_locked\",\"png\"],\r\n [276,\"radar_cash_lost\",\"png\"],[277,\"radar_cash_vagos\",\"png\"],[278,\"radar_cash_cops\",\"png\"],\r\n [279,\"radar_hooker\",\"png\"],[280,\"radar_friend\",\"png\"],[281,\"radar_mission_2to4\",\"png\"],\r\n [282,\"radar_mission_2to8\",\"png\"],[283,\"radar_mission_2to12\",\"png\"],[284,\"radar_mission_2to16\",\"png\"],\r\n [285,\"radar_custody_dropoff\",\"png\"],[286,\"radar_onmission_cops\",\"png\"],\r\n [287,\"radar_onmission_lost\",\"png\"],[288,\"radar_onmission_vagos\",\"png\"],\r\n [289,\"radar_crim_carsteal_cops\",\"png\"],[290,\"radar_crim_carsteal_bikers\",\"png\"],\r\n [291,\"radar_crim_carsteal_vagos\",\"png\"],[292,\"radar_band_strand\",\"png\"],\r\n [293,\"radar_simeon_family\",\"png\"],[294,\"radar_mission_1\",\"png\"],[295,\"radar_mission_2\",\"png\"],\r\n [296,\"radar_friend_darts\",\"png\"],[297,\"radar_friend_comedyclub\",\"png\"],\r\n [298,\"radar_friend_cinema\",\"png\"],[299,\"radar_friend_tennis\",\"png\"],\r\n [300,\"radar_friend_stripclub\",\"png\"],[301,\"radar_friend_livemusic\",\"png\"],\r\n [302,\"radar_friend_golf\",\"png\"],[303,\"radar_bounty_hit\",\"png\"],[304,\"radar_ugc_mission\",\"png\"],\r\n [305,\"radar_horde\",\"png\"],[306,\"radar_cratedrop\",\"png\"],[307,\"radar_plane_drop\",\"png\"],\r\n [308,\"radar_sub\",\"png\"],[309,\"radar_race\",\"png\"],[310,\"radar_deathmatch\",\"png\"],\r\n [311,\"radar_arm_wrestling\",\"png\"],[312,\"radar_mission_1to2\",\"png\"],\r\n [313,\"radar_shootingrange_gunshop\",\"png\"],[314,\"radar_race_air\",\"png\"],\r\n [315,\"radar_race_land\",\"png\"],[316,\"radar_race_sea\",\"png\"],[317,\"radar_tow\",\"png\"],\r\n [318,\"radar_garbage\",\"png\"],[319,\"radar_drill\",\"png\"],[320,\"radar_spikes\",\"png\"],\r\n [321,\"radar_firetruck\",\"png\"],[322,\"radar_minigun2\",\"png\"],[323,\"radar_bugstar\",\"png\"],\r\n [324,\"radar_submarine\",\"png\"],[325,\"radar_chinook\",\"png\"],[326,\"radar_getaway_car\",\"png\"],\r\n [327,\"radar_mission_bikers_1\",\"png\"],[328,\"radar_mission_bikers_1to2\",\"png\"],\r\n [329,\"radar_mission_bikers_2\",\"png\"],[330,\"radar_mission_bikers_2to4\",\"png\"],\r\n [331,\"radar_mission_bikers_2to8\",\"png\"],[332,\"radar_mission_bikers_2to12\",\"png\"],\r\n [333,\"radar_mission_bikers_2to16\",\"png\"],[334,\"radar_mission_cops_1\",\"png\"],\r\n [335,\"radar_mission_cops_1to2\",\"png\"],[336,\"radar_mission_cops_2\",\"png\"],\r\n [337,\"radar_mission_cops_2to4\",\"png\"],[338,\"radar_mission_cops_2to8\",\"png\"],\r\n [339,\"radar_mission_cops_2to12\",\"png\"],[340,\"radar_mission_cops_2to16\",\"png\"],\r\n [341,\"radar_mission_vagos_1\",\"png\"],[342,\"radar_mission_vagos_1to2\",\"png\"],\r\n [343,\"radar_mission_vagos_2\",\"png\"],[344,\"radar_mission_vagos_2to4\",\"png\"],\r\n [345,\"radar_mission_vagos_2to8\",\"png\"],[346,\"radar_mission_vagos_2to12\",\"png\"],\r\n [347,\"radar_mission_vagos_2to16\",\"png\"],[348,\"radar_gang_bike\",\"png\"],\r\n [349,\"radar_gas_grenade\",\"png\"],[350,\"radar_property_for_sale\",\"png\"],\r\n [351,\"radar_gang_attack_package\",\"png\"],[352,\"radar_martin_madrazzo\",\"png\"],\r\n [353,\"radar_enemy_heli_spin\",\"gif\"],[354,\"radar_boost\",\"png\"],[355,\"radar_devin\",\"png\"],\r\n [356,\"radar_dock\",\"png\"],[357,\"radar_garage\",\"png\"],[358,\"radar_golf_flag\",\"png\"],\r\n [359,\"radar_hangar\",\"png\"],[360,\"radar_helipad\",\"png\"],[361,\"radar_jerry_can\",\"png\"],\r\n [362,\"radar_mask\",\"png\"],[363,\"radar_heist_prep\",\"png\"],[364,\"radar_incapacitated\",\"png\"],\r\n [365,\"radar_spawn_point_pickup\",\"png\"],[366,\"radar_boilersuit\",\"png\"],\r\n [367,\"radar_completed\",\"png\"],[368,\"radar_rockets\",\"png\"],[369,\"radar_garage_for_sale\",\"png\"],\r\n [370,\"radar_helipad_for_sale\",\"png\"],[371,\"radar_dock_for_sale\",\"png\"],\r\n [372,\"radar_hangar_for_sale\",\"png\"],[373,\"radar_placeholder_6\",\"png\"],\r\n [374,\"radar_business\",\"png\"],[375,\"radar_business_for_sale\",\"png\"],\r\n [376,\"radar_race_bike\",\"png\"],[377,\"radar_parachute\",\"png\"],[378,\"radar_team_deathmatch\",\"png\"],\r\n [379,\"radar_race_foot\",\"png\"],[380,\"radar_vehicle_deathmatch\",\"png\"],\r\n [381,\"radar_barry\",\"png\"],[382,\"radar_dom\",\"png\"],[383,\"radar_maryann\",\"png\"],\r\n [384,\"radar_cletus\",\"png\"],[385,\"radar_josh\",\"png\"],[386,\"radar_minute\",\"png\"],\r\n [387,\"radar_omega\",\"png\"],[388,\"radar_tonya\",\"png\"],[389,\"radar_paparazzo\",\"png\"],\r\n [390,\"radar_aim\",\"png\"],[391,\"radar_cratedrop_background\",\"png\"],\r\n [392,\"radar_green_and_net_player1\",\"png\"],[393,\"radar_green_and_net_player2\",\"png\"],\r\n [394,\"radar_green_and_net_player3\",\"png\"],[395,\"radar_green_and_friendly\",\"png\"],\r\n [396,\"radar_net_player1_and_net_player2\",\"png\"],[397,\"radar_net_player1_and_net_player3\",\"png\"],\r\n [398,\"radar_creator\",\"png\"],[399,\"radar_creator_direction\",\"png\"],[400,\"radar_abigail\",\"png\"],\r\n [401,\"radar_blimp\",\"png\"],[402,\"radar_repair\",\"png\"],[403,\"radar_testosterone\",\"png\"],\r\n [404,\"radar_dinghy\",\"png\"],[405,\"radar_fanatic\",\"png\"],[407,\"radar_info_icon\",\"png\"],\r\n [408,\"radar_capture_the_flag\",\"png\"],[409,\"radar_last_team_standing\",\"png\"],\r\n [410,\"radar_boat\",\"png\"],[411,\"radar_capture_the_flag_base\",\"png\"],\r\n [412,\"radar_mp_crew\",\"png\"],[413,\"radar_capture_the_flag_outline\",\"png\"],\r\n [414,\"radar_capture_the_flag_base_nobag\",\"png\"],[415,\"radar_weapon_jerrycan\",\"png\"],\r\n [416,\"radar_rp\",\"png\"],[417,\"radar_level_inside\",\"png\"],[418,\"radar_bounty_hit_inside\",\"png\"],\r\n [419,\"radar_capture_the_usaflag\",\"png\"],[420,\"radar_capture_the_usaflag_outline\",\"png\"],\r\n [421,\"radar_tank\",\"png\"],[422,\"radar_player_heli\",\"gif\"],[423,\"radar_player_plane\",\"png\"],\r\n [424,\"radar_player_jet\",\"png\"],[425,\"radar_centre_stroke\",\"png\"],\r\n [426,\"radar_player_guncar\",\"png\"],[427,\"radar_player_boat\",\"png\"],\r\n [428,\"radar_mp_heist\",\"png\"],[429,\"radar_temp_1\",\"png\"],[430,\"radar_temp_2\",\"png\"],\r\n [431,\"radar_temp_3\",\"png\"],[432,\"radar_temp_4\",\"png\"],[433,\"radar_temp_5\",\"png\"],\r\n [434,\"radar_temp_6\",\"png\"],[435,\"radar_race_stunt\",\"png\"],[436,\"radar_hot_property\",\"png\"],\r\n [437,\"radar_urbanwarfare_versus\",\"png\"],[438,\"radar_king_of_the_castle\",\"png\"],\r\n [439,\"radar_player_king\",\"png\"],[440,\"radar_dead_drop\",\"png\"],[441,\"radar_penned_in\",\"png\"],\r\n [442,\"radar_beast\",\"png\"],[443,\"radar_edge_pointer\",\"png\"],[444,\"radar_edge_crosstheline\",\"png\"],\r\n [445,\"radar_mp_lamar\",\"png\"],[446,\"radar_bennys\",\"png\"],[447,\"radar_corner_number_1\",\"png\"],\r\n [448,\"radar_corner_number_2\",\"png\"],[449,\"radar_corner_number_3\",\"png\"],\r\n [450,\"radar_corner_number_4\",\"png\"],[451,\"radar_corner_number_5\",\"png\"],\r\n [452,\"radar_corner_number_6\",\"png\"],[453,\"radar_corner_number_7\",\"png\"],\r\n [454,\"radar_corner_number_8\",\"png\"],[455,\"radar_yacht\",\"png\"],\r\n [456,\"radar_finders_keepers\",\"png\"],[457,\"radar_assault_package\",\"png\"],\r\n [458,\"radar_hunt_the_boss\",\"png\"],[459,\"radar_sightseer\",\"png\"],\r\n [460,\"radar_turreted_limo\",\"png\"],[461,\"radar_belly_of_the_beast\",\"png\"],\r\n [462,\"radar_yacht_location\",\"png\"],[463,\"radar_pickup_beast\",\"png\"],\r\n [464,\"radar_pickup_zoned\",\"png\"],[465,\"radar_pickup_random\",\"png\"],\r\n [466,\"radar_pickup_slow_time\",\"png\"],[467,\"radar_pickup_swap\",\"png\"],\r\n [468,\"radar_pickup_thermal\",\"png\"],[469,\"radar_pickup_weed\",\"png\"],\r\n [470,\"radar_weapon_railgun\",\"png\"],[471,\"radar_seashark\",\"png\"],\r\n [472,\"radar_pickup_hidden\",\"png\"],[473,\"radar_warehouse\",\"png\"],\r\n [474,\"radar_warehouse_for_sale\",\"png\"],[475,\"radar_office\",\"png\"],\r\n [476,\"radar_office_for_sale\",\"png\"],[477,\"radar_truck\",\"png\"],\r\n [478,\"radar_contraband\",\"png\"],[479,\"radar_trailer\",\"png\"],[480,\"radar_vip\",\"png\"],\r\n [481,\"radar_cargobob\",\"png\"],[482,\"radar_area_outline_blip\",\"png\"],\r\n [483,\"radar_pickup_accelerator\",\"png\"],[484,\"radar_pickup_ghost\",\"png\"],\r\n [485,\"radar_pickup_detonator\",\"png\"],[486,\"radar_pickup_bomb\",\"png\"],\r\n [487,\"radar_pickup_armoured\",\"png\"],[488,\"radar_stunt\",\"png\"],\r\n [489,\"radar_weapon_lives\",\"png\"],[490,\"radar_stunt_premium\",\"png\"],\r\n [491,\"radar_adversary\",\"png\"],[492,\"radar_biker_clubhouse\",\"png\"],\r\n [493,\"radar_biker_caged_in\",\"png\"],[494,\"radar_biker_turf_war\",\"png\"],\r\n [495,\"radar_biker_joust\",\"png\"],[496,\"radar_production_weed\",\"png\"],\r\n [497,\"radar_production_crack\",\"png\"],[498,\"radar_production_fake_id\",\"png\"],\r\n [499,\"radar_production_meth\",\"png\"],[500,\"radar_production_money\",\"png\"],\r\n [501,\"radar_package\",\"png\"],[502,\"radar_capture_1\",\"png\"],[503,\"radar_capture_2\",\"png\"],\r\n [504,\"radar_capture_3\",\"png\"],[505,\"radar_capture_4\",\"png\"],[506,\"radar_capture_5\",\"png\"],\r\n [507,\"radar_capture_6\",\"png\"],[508,\"radar_capture_7\",\"png\"],[509,\"radar_capture_8\",\"png\"],\r\n [510,\"radar_capture_9\",\"png\"],[511,\"radar_capture_10\",\"png\"],[512,\"radar_quad\",\"png\"],\r\n [513,\"radar_bus\",\"png\"],[514,\"radar_drugs_package\",\"png\"],[515,\"radar_pickup_jump\",\"png\"],\r\n [516,\"radar_adversary_4\",\"png\"],[517,\"radar_adversary_8\",\"png\"],\r\n [518,\"radar_adversary_10\",\"png\"],[519,\"radar_adversary_12\",\"png\"],\r\n [520,\"radar_adversary_16\",\"png\"],[521,\"radar_laptop\",\"png\"],\r\n [522,\"radar_pickup_deadline\",\"png\"],[523,\"radar_sports_car\",\"png\"],\r\n [524,\"radar_warehouse_vehicle\",\"png\"],[525,\"radar_reg_papers\",\"png\"],\r\n [526,\"radar_police_station_dropoff\",\"png\"],[527,\"radar_junkyard\",\"png\"],\r\n [528,\"radar_ex_vech_1\",\"png\"],[529,\"radar_ex_vech_2\",\"png\"],[530,\"radar_ex_vech_3\",\"png\"],\r\n [531,\"radar_ex_vech_4\",\"png\"],[532,\"radar_ex_vech_5\",\"png\"],[533,\"radar_ex_vech_6\",\"png\"],\r\n [534,\"radar_ex_vech_7\",\"png\"],[535,\"radar_target_a\",\"png\"],[536,\"radar_target_b\",\"png\"],\r\n [537,\"radar_target_c\",\"png\"],[538,\"radar_target_d\",\"png\"],[539,\"radar_target_e\",\"png\"],\r\n [540,\"radar_target_f\",\"png\"],[541,\"radar_target_g\",\"png\"],[542,\"radar_target_h\",\"png\"],\r\n [543,\"radar_jugg\",\"png\"],[544,\"radar_pickup_repair\",\"png\"],[545,\"radar_steeringwheel\",\"png\"],\r\n [546,\"radar_trophy\",\"png\"],[547,\"radar_pickup_rocket_boost\",\"png\"],\r\n [548,\"radar_pickup_homing_rocket\",\"png\"],[549,\"radar_pickup_machinegun\",\"png\"],\r\n [550,\"radar_pickup_parachute\",\"png\"],[551,\"radar_pickup_time_5\",\"png\"],\r\n [552,\"radar_pickup_time_10\",\"png\"],[553,\"radar_pickup_time_15\",\"png\"],\r\n [554,\"radar_pickup_time_20\",\"png\"],[555,\"radar_pickup_time_30\",\"png\"],\r\n [556,\"radar_supplies\",\"png\"],[557,\"radar_property_bunker\",\"png\"],\r\n [558,\"radar_gr_wvm_1\",\"png\"],[559,\"radar_gr_wvm_2\",\"png\"],[560,\"radar_gr_wvm_3\",\"png\"],\r\n [561,\"radar_gr_wvm_4\",\"png\"],[562,\"radar_gr_wvm_5\",\"png\"],[563,\"radar_gr_wvm_6\",\"png\"],\r\n [564,\"radar_gr_covert_ops\",\"png\"],[565,\"radar_adversary_bunker\",\"png\"],\r\n [566,\"radar_gr_moc_upgrade\",\"png\"],[567,\"radar_gr_w_upgrade\",\"png\"],\r\n [568,\"radar_sm_cargo\",\"png\"],[569,\"radar_sm_hangar\",\"png\"],[570,\"radar_tf_checkpoint\",\"png\"],\r\n [571,\"radar_race_tf\",\"png\"],[572,\"radar_sm_wp1\",\"png\"],[573,\"radar_sm_wp2\",\"png\"],\r\n [574,\"radar_sm_wp3\",\"png\"],[575,\"radar_sm_wp4\",\"png\"],[576,\"radar_sm_wp5\",\"png\"],\r\n [577,\"radar_sm_wp6\",\"png\"],[578,\"radar_sm_wp7\",\"png\"],[579,\"radar_sm_wp8\",\"png\"],\r\n [580,\"radar_sm_wp9\",\"png\"],[581,\"radar_sm_wp10\",\"png\"],[582,\"radar_sm_wp11\",\"png\"],\r\n [583,\"radar_sm_wp12\",\"png\"],[584,\"radar_sm_wp13\",\"png\"],[585,\"radar_sm_wp14\",\"png\"],\r\n [586,\"radar_nhp_bag\",\"png\"],[587,\"radar_nhp_chest\",\"png\"],[588,\"radar_nhp_orbit\",\"png\"],\r\n [589,\"radar_nhp_veh1\",\"png\"],[590,\"radar_nhp_base\",\"png\"],[591,\"radar_nhp_overlay\",\"png\"],\r\n [592,\"radar_nhp_turret\",\"png\"],[593,\"radar_nhp_mg_firewall\",\"png\"],\r\n [594,\"radar_nhp_mg_node\",\"png\"],[595,\"radar_nhp_wp1\",\"png\"],[596,\"radar_nhp_wp2\",\"png\"],\r\n [597,\"radar_nhp_wp3\",\"png\"],[598,\"radar_nhp_wp4\",\"png\"],[599,\"radar_nhp_wp5\",\"png\"],\r\n [600,\"radar_nhp_wp6\",\"png\"],[601,\"radar_nhp_wp7\",\"png\"],[602,\"radar_nhp_wp8\",\"png\"],\r\n [603,\"radar_nhp_wp9\",\"png\"],[604,\"radar_nhp_cctv\",\"png\"],[605,\"radar_nhp_starterpack\",\"png\"],\r\n [606,\"radar_nhp_turret_console\",\"png\"],[607,\"radar_nhp_mg_mir_rotate\",\"png\"],\r\n [608,\"radar_nhp_mg_mir_static\",\"png\"],[609,\"radar_nhp_mg_proxy\",\"png\"],\r\n [610,\"radar_acsr_race_target\",\"png\"],[611,\"radar_acsr_race_hotring\",\"png\"],\r\n [612,\"radar_acsr_wp1\",\"png\"],[613,\"radar_acsr_wp2\",\"png\"],\r\n [614,\"radar_bat_club_property\",\"png\"],[615,\"radar_bat_cargo\",\"png\"],\r\n [616,\"radar_bat_truck\",\"png\"],[617,\"radar_bat_hack_jewel\",\"png\"],\r\n [618,\"radar_bat_hack_gold\",\"png\"],[619,\"radar_bat_keypad\",\"png\"],\r\n [620,\"radar_bat_hack_target\",\"png\"],[621,\"radar_pickup_dtb_health\",\"png\"],\r\n [622,\"radar_pickup_dtb_blast_increase\",\"png\"],[623,\"radar_pickup_dtb_blast_decrease\",\"png\"],\r\n [624,\"radar_pickup_dtb_bomb_increase\",\"png\"],[625,\"radar_pickup_dtb_bomb_decrease\",\"png\"],\r\n [626,\"radar_bat_rival_club\",\"png\"],[627,\"radar_bat_drone\",\"png\"],\r\n [628,\"radar_bat_cash_reg\",\"png\"],[629,\"radar_cctv\",\"png\"],\r\n [630,\"radar_bat_assassinate\",\"png\"],[631,\"radar_bat_pbus\",\"png\"],\r\n [632,\"radar_bat_wp1\",\"png\"],[633,\"radar_bat_wp2\",\"png\"],[634,\"radar_bat_wp3\",\"png\"],\r\n [635,\"radar_bat_wp4\",\"png\"],[636,\"radar_bat_wp5\",\"png\"],[637,\"radar_bat_wp6\",\"png\"],\r\n [638,\"radar_blimp_2\",\"png\"],[639,\"radar_oppressor_2\",\"png\"],[640,\"radar_bat_wp7\",\"png\"],\r\n [641,\"radar_arena_series\",\"png\"],[642,\"radar_arena_premium\",\"png\"],\r\n [643,\"radar_arena_workshop\",\"png\"],[644,\"radar_race_wars\",\"png\"],\r\n [645,\"radar_arena_turret\",\"png\"],[646,\"radar_arena_rc_car\",\"png\"],\r\n [647,\"radar_arena_rc_workshop\",\"png\"],[648,\"radar_arena_trap_fire\",\"png\"],\r\n [649,\"radar_arena_trap_flip\",\"png\"],[650,\"radar_arena_trap_sea\",\"png\"],\r\n [651,\"radar_arena_trap_turn\",\"png\"],[652,\"radar_arena_trap_pit\",\"png\"],\r\n [653,\"radar_arena_trap_mine\",\"png\"],[654,\"radar_arena_trap_bomb\",\"png\"],\r\n [655,\"radar_arena_trap_wall\",\"png\"],[656,\"radar_arena_trap_brd\",\"png\"],\r\n [657,\"radar_arena_trap_sbrd\",\"png\"],[658,\"radar_arena_bruiser\",\"png\"],\r\n [659,\"radar_arena_brutus\",\"png\"],[660,\"radar_arena_cerberus\",\"png\"],\r\n [661,\"radar_arena_deathbike\",\"png\"],[662,\"radar_arena_dominator\",\"png\"],\r\n [663,\"radar_arena_impaler\",\"png\"],[664,\"radar_arena_imperator\",\"png\"],\r\n [665,\"radar_arena_issi\",\"png\"],[666,\"radar_arena_sasquatch\",\"png\"],\r\n [667,\"radar_arena_scarab\",\"png\"],[668,\"radar_arena_slamvan\",\"png\"],\r\n [669,\"radar_arena_zr380\",\"png\"],[670,\"radar_ap\",\"png\"],[671,\"radar_comic_store\",\"png\"],\r\n [672,\"radar_cop_car\",\"png\"],[673,\"radar_rc_time_trials\",\"png\"],\r\n [674,\"radar_king_of_the_hill\",\"png\"],[675,\"radar_king_of_the_hill_teams\",\"png\"],\r\n [676,\"radar_rucksack\",\"png\"],[677,\"radar_shipping_container\",\"png\"],\r\n [678,\"radar_agatha\",\"png\"],[679,\"radar_casino\",\"png\"],\r\n [680,\"radar_casino_table_games\",\"png\"],[681,\"radar_casino_wheel\",\"png\"],\r\n [682,\"radar_casino_concierge\",\"png\"],[683,\"radar_casino_chips\",\"png\"],\r\n [684,\"radar_casino_horse_racing\",\"png\"],[685,\"radar_adversary_featured\",\"png\"],\r\n [686,\"radar_roulette_1\",\"png\"],[687,\"radar_roulette_2\",\"png\"],\r\n [688,\"radar_roulette_3\",\"png\"],[689,\"radar_roulette_4\",\"png\"],\r\n [690,\"radar_roulette_5\",\"png\"],[691,\"radar_roulette_6\",\"png\"],\r\n [692,\"radar_roulette_7\",\"png\"],[693,\"radar_roulette_8\",\"png\"],\r\n [694,\"radar_roulette_9\",\"png\"],[695,\"radar_roulette_10\",\"png\"],\r\n [696,\"radar_roulette_11\",\"png\"],[697,\"radar_roulette_12\",\"png\"],\r\n [698,\"radar_roulette_13\",\"png\"],[699,\"radar_roulette_14\",\"png\"],\r\n [700,\"radar_roulette_15\",\"png\"],[701,\"radar_roulette_16\",\"png\"],\r\n [702,\"radar_roulette_17\",\"png\"],[703,\"radar_roulette_18\",\"png\"],\r\n [704,\"radar_roulette_19\",\"png\"],[705,\"radar_roulette_20\",\"png\"],\r\n [706,\"radar_roulette_21\",\"png\"],[707,\"radar_roulette_22\",\"png\"],\r\n [708,\"radar_roulette_23\",\"png\"],[709,\"radar_roulette_24\",\"png\"],\r\n [710,\"radar_roulette_25\",\"png\"],[711,\"radar_roulette_26\",\"png\"],\r\n [712,\"radar_roulette_27\",\"png\"],[713,\"radar_roulette_28\",\"png\"],\r\n [714,\"radar_roulette_29\",\"png\"],[715,\"radar_roulette_30\",\"png\"],\r\n [716,\"radar_roulette_31\",\"png\"],[717,\"radar_roulette_32\",\"png\"],\r\n [718,\"radar_roulette_33\",\"png\"],[719,\"radar_roulette_34\",\"png\"],\r\n [720,\"radar_roulette_35\",\"png\"],[721,\"radar_roulette_36\",\"png\"],\r\n [722,\"radar_roulette_0\",\"png\"],[723,\"radar_roulette_00\",\"png\"],\r\n [724,\"radar_limo\",\"png\"],[725,\"radar_weapon_alien\",\"png\"],\r\n [726,\"radar_race_open_wheel\",\"png\"],[727,\"radar_rappel\",\"png\"],\r\n [728,\"radar_swap_car\",\"png\"],[729,\"radar_scuba_gear\",\"png\"],\r\n [730,\"radar_cpanel_1\",\"png\"],[731,\"radar_cpanel_2\",\"png\"],\r\n [732,\"radar_cpanel_3\",\"png\"],[733,\"radar_cpanel_4\",\"png\"],\r\n [734,\"radar_snow_truck\",\"png\"],[735,\"radar_buggy_1\",\"png\"],[736,\"radar_buggy_2\",\"png\"],\r\n [737,\"radar_zhaba\",\"png\"],[738,\"radar_gerald\",\"png\"],[739,\"radar_ron\",\"png\"],\r\n [740,\"radar_arcade\",\"png\"],[741,\"radar_drone_controls\",\"png\"],[742,\"radar_rc_tank\",\"png\"],\r\n [743,\"radar_stairs\",\"png\"],[744,\"radar_camera_2\",\"png\"],[745,\"radar_winky\",\"png\"],\r\n [746,\"radar_mini_sub\",\"png\"],[747,\"radar_kart_retro\",\"png\"],[748,\"radar_kart_modern\",\"png\"],\r\n [749,\"radar_military_quad\",\"png\"],[750,\"radar_military_truck\",\"png\"],\r\n [751,\"radar_ship_wheel\",\"png\"],[752,\"radar_ufo\",\"png\"],[753,\"radar_seasparrow2\",\"png\"],\r\n [754,\"radar_dinghy2\",\"png\"],[755,\"radar_patrol_boat\",\"png\"],\r\n [756,\"radar_retro_sports_car\",\"png\"],[757,\"radar_squadee\",\"png\"],\r\n [758,\"radar_folding_wing_jet\",\"png\"],[759,\"radar_valkyrie2\",\"png\"],\r\n [760,\"radar_sub2\",\"png\"],[761,\"radar_bolt_cutters\",\"png\"],\r\n [762,\"radar_rappel_gear\",\"png\"],[763,\"radar_keycard\",\"png\"],\r\n [764,\"radar_password\",\"png\"],[765,\"radar_island_heist_prep\",\"png\"],\r\n [766,\"radar_island_party\",\"png\"],[767,\"radar_control_tower\",\"png\"],\r\n [768,\"radar_underwater_gate\",\"png\"],[769,\"radar_power_switch\",\"png\"],\r\n [770,\"radar_compound_gate\",\"png\"],[771,\"radar_rappel_point\",\"png\"],\r\n [772,\"radar_keypad\",\"png\"],[773,\"radar_sub_controls\",\"png\"],\r\n [774,\"radar_sub_periscope\",\"png\"],[775,\"radar_sub_missile\",\"png\"],\r\n [776,\"radar_painting\",\"png\"],[777,\"radar_car_meet\",\"png\"],\r\n [778,\"radar_car_test_area\",\"png\"],[779,\"radar_auto_shop_property\",\"png\"],\r\n [780,\"radar_docks_export\",\"png\"],[781,\"radar_prize_car\",\"png\"],\r\n [782,\"radar_test_car\",\"png\"],[783,\"radar_car_robbery_board\",\"png\"],\r\n [784,\"radar_car_robbery_prep\",\"png\"],[785,\"radar_street_race_series\",\"png\"],\r\n [786,\"radar_pursuit_series\",\"png\"],[787,\"radar_car_meet_organiser\",\"png\"],\r\n [788,\"radar_securoserv\",\"png\"],[789,\"radar_bounty_collectibles\",\"png\"],\r\n [790,\"radar_movie_collectibles\",\"png\"],[791,\"radar_trailer_ramp\",\"png\"],\r\n [792,\"radar_race_organiser\",\"png\"],[793,\"radar_chalkboard_list\",\"png\"],\r\n [794,\"radar_export_vehicle\",\"png\"],[795,\"radar_train\",\"png\"],\r\n [796,\"radar_heist_diamond\",\"png\"],[797,\"radar_heist_doomsday\",\"png\"],\r\n [798,\"radar_heist_island\",\"png\"],[799,\"radar_slamvan2\",\"png\"],\r\n [800,\"radar_crusader\",\"png\"],[801,\"radar_construction_outfit\",\"png\"],\r\n [802,\"radar_overlay_jammed\",\"png\"],[803,\"radar_heist_island_unavailable\",\"png\"],\r\n [804,\"radar_heist_diamond_unavailable\",\"png\"],[805,\"radar_heist_doomsday_unavailable\",\"png\"],\r\n [806,\"radar_placeholder_7\",\"png\"],[807,\"radar_placeholder_8\",\"png\"],\r\n [808,\"radar_placeholder_9\",\"png\"],[809,\"radar_featured_series\",\"png\"],\r\n [810,\"radar_vehicle_for_sale\",\"png\"],[811,\"radar_van_keys\",\"png\"],\r\n [812,\"radar_suv_service\",\"png\"],[813,\"radar_security_contract\",\"png\"],\r\n [814,\"radar_safe\",\"png\"],[815,\"radar_ped_r\",\"png\"],[816,\"radar_ped_e\",\"png\"],\r\n [817,\"radar_payphone\",\"png\"],[818,\"radar_patriot3\",\"png\"],\r\n [819,\"radar_music_studio\",\"png\"],[820,\"radar_jubilee\",\"png\"],\r\n [821,\"radar_granger2\",\"png\"],[822,\"radar_explosive_charge\",\"png\"],\r\n [823,\"radar_deity\",\"png\"],[824,\"radar_d_champion\",\"png\"],[825,\"radar_buffalo4\",\"png\"],\r\n [826,\"radar_agency\",\"png\"],[827,\"radar_biker_bar\",\"png\"],\r\n [828,\"radar_simeon_overlay\",\"png\"],[829,\"radar_junk_skydive\",\"png\"],\r\n [830,\"radar_luxury_car_showroom\",\"png\"],[831,\"radar_car_showroom\",\"png\"],\r\n [832,\"radar_car_showroom_simeon\",\"png\"],[833,\"radar_flaming_skull\",\"png\"],\r\n [834,\"radar_weapon_ammo\",\"png\"],[835,\"radar_community_series\",\"png\"],\r\n [836,\"radar_cayo_series\",\"png\"],[837,\"radar_clubhouse_contract\",\"png\"],\r\n [838,\"radar_agent_ulp\",\"png\"],[839,\"radar_acid\",\"png\"],[840,\"radar_acid_lab\",\"png\"],\r\n [841,\"radar_dax_overlay\",\"png\"],[842,\"radar_dead_drop_package\",\"png\"],\r\n [843,\"radar_downtown_cab\",\"png\"],[844,\"radar_gun_van\",\"png\"],\r\n [845,\"radar_stash_house\",\"png\"],[846,\"radar_tractor\",\"png\"],\r\n [847,\"radar_warehouse_juggalo\",\"png\"],[848,\"radar_warehouse_juggalo_dax\",\"png\"],\r\n [849,\"radar_weapon_crowbar\",\"png\"],[850,\"radar_duffel_bag\",\"png\"],\r\n [851,\"radar_oil_tanker\",\"png\"],[852,\"radar_acid_lab_tent\",\"png\"],\r\n [853,\"radar_van_burrito\",\"png\"],[854,\"radar_acid_boost\",\"png\"],\r\n [855,\"radar_ped_gang_leader\",\"png\"],[856,\"radar_multistorey_garage\",\"png\"],\r\n [857,\"radar_seized_asset_sales\",\"png\"],[858,\"radar_cayo_attrition\",\"png\"],\r\n [859,\"radar_bicycle\",\"png\"],[860,\"radar_bicycle_trial\",\"png\"],\r\n [861,\"radar_raiju\",\"png\"],[862,\"radar_conada2\",\"png\"],\r\n [863,\"radar_overlay_ready_for_sell\",\"png\"],[864,\"radar_overlay_missing_supplies\",\"png\"],\r\n [865,\"radar_streamer216\",\"png\"],[866,\"radar_signal_jammer\",\"png\"],\r\n [867,\"radar_salvage_yard\",\"png\"],[868,\"radar_robbery_prep_equipment\",\"png\"],\r\n [869,\"radar_robbery_prep_overlay\",\"png\"],[870,\"radar_yusuf\",\"png\"],\r\n [871,\"radar_vincent\",\"png\"],[872,\"radar_vinewood_garage\",\"png\"],\r\n [873,\"radar_lstb\",\"png\"],[874,\"radar_cctv_workstation\",\"png\"],\r\n [875,\"radar_hacking_device\",\"png\"],[876,\"radar_race_drag\",\"png\"],\r\n [877,\"radar_race_drift\",\"png\"],[878,\"radar_casino_prep\",\"png\"],\r\n [879,\"radar_planning_wall\",\"png\"],[880,\"radar_weapon_crate\",\"png\"],\r\n [881,\"radar_weapon_snowball\",\"png\"],[882,\"radar_train_signals_green\",\"png\"],\r\n [883,\"radar_train_signals_red\",\"png\"],[884,\"radar_office_transporter\",\"png\"],\r\n [885,\"radar_yankton_survival\",\"png\"],[886,\"radar_daily_bounty\",\"png\"],\r\n [887,\"radar_bounty_target\",\"png\"],[888,\"radar_filming_schedule\",\"png\"],\r\n [889,\"radar_pizza_this\",\"png\"],[890,\"radar_aircraft_carrier\",\"png\"],\r\n [891,\"radar_weapon_emp\",\"png\"],[892,\"radar_maude_eccles\",\"png\"],\r\n [893,\"radar_bail_bonds_office\",\"png\"],[894,\"radar_weapon_emp_mine\",\"png\"],\r\n [895,\"radar_zombie_disease\",\"png\"],[896,\"radar_zombie_proximity\",\"png\"],\r\n [897,\"radar_zombie_fire\",\"png\"],[898,\"radar_animal_possessed\",\"png\"],\r\n [899,\"radar_mobile_phone\",\"png\"],[900,\"radar_garment_factory\",\"png\"],\r\n [901,\"radar_garment_factory_for_sale\",\"png\"],[902,\"radar_garment_factory_equipment\",\"png\"],\r\n [903,\"radar_field_hangar\",\"png\"],[904,\"radar_field_hangar_for_sale\",\"png\"],\r\n [905,\"radar_cargobob_ch53\",\"png\"],[906,\"radar_chopper_lift_ammo\",\"png\"],\r\n [907,\"radar_chopper_lift_armor\",\"png\"],[908,\"radar_chopper_lift_explosives\",\"png\"],\r\n [909,\"radar_chopper_lift_upgrade\",\"png\"],[910,\"radar_chopper_lift_weapon\",\"png\"],\r\n [911,\"radar_cargo_ship\",\"png\"],[912,\"radar_submarine_missile\",\"png\"],\r\n [913,\"radar_propeller_engine\",\"png\"],[914,\"radar_shark\",\"png\"],\r\n [915,\"radar_fast_travel\",\"png\"],[916,\"radar_plane_duster2\",\"png\"],\r\n [917,\"radar_plane_titan2\",\"png\"],[918,\"radar_collectible\",\"png\"],\r\n [919,\"radar_field_hangar_discount\",\"png\"],[920,\"radar_garment_factory_discount\",\"png\"],\r\n [921,\"radar_weapon_gusenberg_sweeper\",\"png\"],[922,\"radar_weapon_tear_gas\",\"png\"],\r\n [923,\"radar_dog\",\"png\"],[924,\"radar_bobcat_security\",\"png\"],\r\n [925,\"radar_smoke_shop\",\"png\"],[926,\"radar_smoke_shop_for_sale\",\"png\"],\r\n [927,\"radar_smoke_shop_attention\",\"png\"],[928,\"radar_helitours\",\"png\"],\r\n [929,\"radar_helitours_for_sale\",\"png\"],[930,\"radar_helitours_attention\",\"png\"],\r\n [931,\"radar_car_wash_business\",\"png\"],[932,\"radar_car_wash_business_for_sale\",\"png\"],\r\n [933,\"radar_car_wash_business_attention\",\"png\"],[934,\"radar_attention\",\"png\"],\r\n [935,\"radar_alarm\",\"png\"],[936,\"radar_helitours_discount\",\"png\"],\r\n [937,\"radar_smoke_shop_discount\",\"png\"],[938,\"radar_car_wash_business_discount\",\"png\"],\r\n [939,\"radar_real_estate\",\"png\"],[940,\"radar_medical_courier\",\"png\"],\r\n [941,\"radar_gruppe_sechs\",\"png\"],[942,\"radar_fire_station\",\"png\"],\r\n [943,\"radar_fire_truck\",\"png\"],[944,\"radar_alpha_mail\",\"png\"],\r\n [945,\"radar_ls_meteor\",\"png\"],[946,\"radar_four20_survival\",\"png\"],\r\n [947,\"radar_community_mission_series\",\"png\"],[948,\"radar_property_mansion\",\"png\"],\r\n [949,\"radar_ai_keypad\",\"png\"],[950,\"radar_taxi_self_drive\",\"png\"],\r\n [951,\"radar_train_subway\",\"png\"],[952,\"radar_trashbag\",\"png\"],\r\n [953,\"radar_mission_creator\",\"png\"],[954,\"radar_cat\",\"png\"],\r\n [955,\"radar_mansion_ai_m\",\"png\"],[956,\"radar_mansion_ai_f\",\"png\"],\r\n [957,\"radar_mansion_ai_gang\",\"png\"],\r\n];\r\n\r\nconst BLIP_BASE = \"https://docs.fivem.net/blips/\";\r\n\r\nexport function blipUrl(name: string, ext: string) {\r\n return `${BLIP_BASE}${name}.${ext}`;\r\n}\r\n\r\n// ── Blip colors: [id, label, hex] ──────────────────────────────────────────\r\n\r\nconst BLIP_COLORS: [number, string, string][] = [\r\n [0,\"White\",\"#FFFFFF\"],[1,\"Red\",\"#E54141\"],[2,\"Green\",\"#3FA83F\"],\r\n [3,\"Blue\",\"#5B8CCF\"],[4,\"White\",\"#FFFFFF\"],[5,\"Yellow\",\"#F0D453\"],\r\n [6,\"Light Red\",\"#E88888\"],[7,\"Violet\",\"#8C5FA8\"],[8,\"Pink\",\"#E878C8\"],\r\n [9,\"Light Orange\",\"#F0A861\"],[10,\"Light Brown\",\"#C1A470\"],[11,\"Light Green\",\"#94D468\"],\r\n [12,\"Light Blue\",\"#68C8E8\"],[13,\"Light Purple\",\"#B898E8\"],[14,\"Dark Purple\",\"#583E8E\"],\r\n [15,\"Cyan\",\"#48C8B8\"],[16,\"Light Yellow\",\"#E8E898\"],[17,\"Orange\",\"#E87830\"],\r\n [18,\"Light Blue\",\"#78A8E8\"],[19,\"Dark Pink\",\"#C83878\"],[20,\"Dark Yellow\",\"#A0A038\"],\r\n [21,\"Dark Orange\",\"#B07828\"],[22,\"Light Gray\",\"#B0B0B0\"],[23,\"Light Pink\",\"#E8A8C0\"],\r\n [24,\"Lemon Green\",\"#88F068\"],[25,\"Forest Green\",\"#388038\"],[26,\"Electric Blue\",\"#2060E0\"],\r\n [27,\"Bright Purple\",\"#9840E0\"],[28,\"Dark Yellow\",\"#7C7C28\"],[29,\"Dark Blue\",\"#283878\"],\r\n [30,\"Dark Cyan\",\"#287078\"],[31,\"Light Brown\",\"#A08858\"],[32,\"Light Blue\",\"#78B0E8\"],\r\n [33,\"Light Yellow\",\"#E8E868\"],[34,\"Light Pink\",\"#F0A0C0\"],[35,\"Light Red\",\"#E07868\"],\r\n [36,\"Beige\",\"#D8C898\"],[37,\"White\",\"#FFFFFF\"],[38,\"Blue\",\"#4870A0\"],\r\n [39,\"Light Gray\",\"#909898\"],[40,\"Dark Gray\",\"#585858\"],[41,\"Pink Red\",\"#E07088\"],\r\n [42,\"Blue\",\"#5090B8\"],[43,\"Light Green\",\"#88C868\"],[44,\"Light Orange\",\"#E09048\"],\r\n [45,\"White\",\"#F0F0F0\"],[46,\"Gold\",\"#D8B838\"],[47,\"Orange\",\"#E07020\"],\r\n];\r\n\r\n// ── Data for Select ────────────────────────────────────────────────────────\r\n\r\nconst BLIP_ICON_DATA: ComboboxItem[] = BLIP_ENTRIES.map(([id, name]) => ({\r\n value: String(id),\r\n label: `${id} — ${name}`,\r\n}));\r\n\r\nconst BLIP_COLOR_DATA: ComboboxItem[] = BLIP_COLORS.map(([id, label]) => ({\r\n value: String(id),\r\n label: `${id} — ${label}`,\r\n}));\r\n\r\n// lookup maps for rendering\r\nconst blipEntryMap = new Map(BLIP_ENTRIES.map(([id, name, ext]) => [String(id), { id, name, ext }]));\r\nconst blipColorMap = new Map(BLIP_COLORS.map(([id, label, hex]) => [String(id), { id, label, hex }]));\r\n\r\n// ── Public lookups for any consumer wanting raw access (e.g. <BlipMarker>\r\n// in cfx-react's Map subsystem). Wrappers around the internal maps that\r\n// take a number/string id and normalise it to the string-keyed lookup.\r\n\r\n/** Look up a blip entry by sprite id. Returns `{ id, name, ext }` or undefined. */\r\nexport function getBlipEntry(spriteId: number | string | null | undefined) {\r\n if (spriteId == null) return undefined;\r\n return blipEntryMap.get(String(spriteId));\r\n}\r\n\r\n/** Look up a blip color by color id. Returns `{ id, label, hex }` or undefined. */\r\nexport function getBlipColor(colorId: number | string | null | undefined) {\r\n if (colorId == null) return undefined;\r\n return blipColorMap.get(String(colorId));\r\n}\r\n\r\n/** Convenience: build the sprite URL straight from a sprite id. */\r\nexport function blipUrlForSprite(spriteId: number | string | null | undefined): string | null {\r\n const entry = getBlipEntry(spriteId);\r\n return entry ? blipUrl(entry.name, entry.ext) : null;\r\n}\r\n\r\n// ── Render helpers ─────────────────────────────────────────────────────────\r\n\r\nconst renderBlipOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const entry = blipEntryMap.get(option.value);\r\n if (!entry) return option.label;\r\n return (\r\n <Group gap=\"sm\" wrap=\"nowrap\">\r\n <Image\r\n src={blipUrl(entry.name, entry.ext)}\r\n alt={entry.name}\r\n w={24} h={24}\r\n fit=\"contain\"\r\n style={{ imageRendering: \"pixelated\" }}\r\n />\r\n <Text size=\"xs\" truncate>\r\n {entry.id} — {entry.name}\r\n </Text>\r\n </Group>\r\n );\r\n};\r\n\r\nconst renderColorOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const entry = blipColorMap.get(option.value);\r\n if (!entry) return option.label;\r\n return (\r\n <Group gap=\"sm\" wrap=\"nowrap\">\r\n <Box\r\n w={24} h={24}\r\n style={{\r\n borderRadius: 4,\r\n backgroundColor: entry.hex,\r\n border: \"1px solid rgba(255,255,255,0.15)\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <Text size=\"xs\" truncate>\r\n {entry.id} — {entry.label}\r\n </Text>\r\n </Group>\r\n );\r\n};\r\n\r\n// ── BlipIconSelect ─────────────────────────────────────────────────────────\r\n\r\nexport type BlipIconSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"searchable\" | \"renderOption\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipIconSelect({ value, onChange, label = \"Blip Icon\", size = \"xs\", ...rest }: BlipIconSelectProps) {\r\n const entry = value != null ? blipEntryMap.get(String(value)) : undefined;\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n searchable\r\n data={BLIP_ICON_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n renderOption={renderBlipOption}\r\n maxDropdownHeight={300}\r\n nothingFoundMessage=\"No results\"\r\n leftSection={\r\n entry ? (\r\n <Image\r\n src={blipUrl(entry.name, entry.ext)}\r\n alt={entry.name}\r\n w={18} h={18}\r\n fit=\"contain\"\r\n style={{ imageRendering: \"pixelated\" }}\r\n />\r\n ) : undefined\r\n }\r\n />\r\n );\r\n}\r\n\r\n// ── BlipColorSelect ────────────────────────────────────────────────────────\r\n\r\nexport type BlipColorSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"searchable\" | \"renderOption\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipColorSelect({ value, onChange, label = \"Blip Color\", size = \"xs\", ...rest }: BlipColorSelectProps) {\r\n const entry = value != null ? blipColorMap.get(String(value)) : undefined;\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n searchable\r\n data={BLIP_COLOR_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n renderOption={renderColorOption}\r\n maxDropdownHeight={300}\r\n nothingFoundMessage=\"No results\"\r\n leftSection={\r\n entry ? (\r\n <Box\r\n w={18} h={18}\r\n style={{\r\n borderRadius: 4,\r\n backgroundColor: entry.hex,\r\n border: \"1px solid rgba(255,255,255,0.15)\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n ) : undefined\r\n }\r\n />\r\n );\r\n}\r\n\r\n// ── BlipDisplaySelect ──────────────────────────────────────────────────────\r\n// Sets the FiveM blip's display behaviour. Most server owners only want one\r\n// of the four meaningful patterns; the duplicate ids are exposed verbatim so\r\n// existing saved values keep displaying correctly.\r\n\r\nconst BLIP_DISPLAY_DATA: { value: string; label: string }[] = [\r\n { value: \"2\", label: \"2 — Main map + minimap (selectable)\" },\r\n { value: \"3\", label: \"3 — Main map only (selectable)\" },\r\n { value: \"4\", label: \"4 — Main map only (selectable)\" },\r\n { value: \"5\", label: \"5 — Minimap only\" },\r\n { value: \"6\", label: \"6 — Main map + minimap (selectable)\" },\r\n { value: \"8\", label: \"8 — Main map + minimap (not selectable)\" },\r\n { value: \"9\", label: \"9 — Minimap only\" },\r\n { value: \"10\", label: \"10 — Main map + minimap (not selectable)\" },\r\n];\r\n\r\nexport type BlipDisplaySelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipDisplaySelect({ value, onChange, label = \"Blip Display\", size = \"xs\", ...rest }: BlipDisplaySelectProps) {\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n data={BLIP_DISPLAY_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n allowDeselect={false}\r\n maxDropdownHeight={300}\r\n />\r\n );\r\n}\r\n","\r\nconst colorNames = {\r\n AliceBlue: { r: 240, g: 248, b: 255 },\r\n AntiqueWhite: { r: 250, g: 235, b: 215 },\r\n Aqua: { r: 0, g: 255, b: 255 },\r\n Aquamarine: { r: 127, g: 255, b: 212 },\r\n Azure: { r: 240, g: 255, b: 255 },\r\n Beige: { r: 245, g: 245, b: 220 },\r\n Bisque: { r: 255, g: 228, b: 196 },\r\n Black: { r: 0, g: 0, b: 0 },\r\n BlanchedAlmond: { r: 255, g: 235, b: 205 },\r\n Blue: { r: 0, g: 0, b: 255 },\r\n BlueViolet: { r: 138, g: 43, b: 226 },\r\n Brown: { r: 165, g: 42, b: 42 },\r\n BurlyWood: { r: 222, g: 184, b: 135 },\r\n CadetBlue: { r: 95, g: 158, b: 160 },\r\n Chartreuse: { r: 127, g: 255, b: 0 },\r\n Chocolate: { r: 210, g: 105, b: 30 },\r\n Coral: { r: 255, g: 127, b: 80 },\r\n CornflowerBlue: { r: 100, g: 149, b: 237 },\r\n Cornsilk: { r: 255, g: 248, b: 220 },\r\n Crimson: { r: 220, g: 20, b: 60 },\r\n Cyan: { r: 0, g: 255, b: 255 },\r\n DarkBlue: { r: 0, g: 0, b: 139 },\r\n DarkCyan: { r: 0, g: 139, b: 139 },\r\n DarkGoldenRod: { r: 184, g: 134, b: 11 },\r\n DarkGray: { r: 169, g: 169, b: 169 },\r\n DarkGreen: { r: 0, g: 100, b: 0 },\r\n DarkKhaki: { r: 189, g: 183, b: 107 },\r\n DarkMagenta: { r: 139, g: 0, b: 139 },\r\n DarkOliveGreen: { r: 85, g: 107, b: 47 },\r\n DarkOrange: { r: 255, g: 140, b: 0 },\r\n DarkOrchid: { r: 153, g: 50, b: 204 },\r\n DarkRed: { r: 139, g: 0, b: 0 },\r\n DarkSalmon: { r: 233, g: 150, b: 122 },\r\n DarkSeaGreen: { r: 143, g: 188, b: 143 },\r\n DarkSlateBlue: { r: 72, g: 61, b: 139 },\r\n DarkSlateGray: { r: 47, g: 79, b: 79 },\r\n DarkTurquoise: { r: 0, g: 206, b: 209 },\r\n DarkViolet: { r: 148, g: 0, b: 211 },\r\n DeepPink: { r: 255, g: 20, b: 147 },\r\n DeepSkyBlue: { r: 0, g: 191, b: 255 },\r\n DimGray: { r: 105, g: 105, b: 105 },\r\n DodgerBlue: { r: 30, g: 144, b: 255 },\r\n FireBrick: { r: 178, g: 34, b: 34 },\r\n FloralWhite: { r: 255, g: 250, b: 240 },\r\n ForestGreen: { r: 34, g: 139, b: 34 },\r\n Fuchsia: { r: 255, g: 0, b: 255 },\r\n Gainsboro: { r: 220, g: 220, b: 220 },\r\n GhostWhite: { r: 248, g: 248, b: 255 },\r\n Gold: { r: 255, g: 215, b: 0 },\r\n GoldenRod: { r: 218, g: 165, b: 32 },\r\n Gray: { r: 128, g: 128, b: 128 },\r\n Green: { r: 0, g: 128, b: 0 },\r\n GreenYellow: { r: 173, g: 255, b: 47 },\r\n HoneyDew: { r: 240, g: 255, b: 240 },\r\n HotPink: { r: 255, g: 105, b: 180 },\r\n IndianRed: { r: 205, g: 92, b: 92 },\r\n Indigo: { r: 75, g: 0, b: 130 },\r\n Ivory: { r: 255, g: 255, b: 240 },\r\n Khaki: { r: 240, g: 230, b: 140 },\r\n Lavender: { r: 230, g: 230, b: 250 },\r\n LavenderBlush: { r: 255, g: 240, b: 245 },\r\n LawnGreen: { r: 124, g: 252, b: 0 },\r\n LemonChiffon: { r: 255, g: 250, b: 205 },\r\n LightBlue: { r: 173, g: 216, b: 230 },\r\n LightCoral: { r: 240, g: 128, b: 128 },\r\n LightCyan: { r: 224, g: 255, b: 255 },\r\n LightGoldenRodYellow: { r: 250, g: 250, b: 210 },\r\n LightGray: { r: 211, g: 211, b: 211 },\r\n LightGreen: { r: 144, g: 238, b: 144 },\r\n LightPink: { r: 255, g: 182, b: 193 },\r\n LightSalmon: { r: 255, g: 160, b: 122 },\r\n LightSeaGreen: { r: 32, g: 178, b: 170 },\r\n LightSkyBlue: { r: 135, g: 206, b: 250 },\r\n LightSlateGray: { r: 119, g: 136, b: 153 },\r\n LightSteelBlue: { r: 176, g: 196, b: 222 },\r\n LightYellow: { r: 255, g: 255, b: 224 },\r\n Lime: { r: 0, g: 255, b: 0 },\r\n LimeGreen: { r: 50, g: 205, b: 50 },\r\n Linen: { r: 250, g: 240, b: 230 },\r\n Magenta: { r: 255, g: 0, b: 255 },\r\n Maroon: { r: 128, g: 0, b: 0 }, // Maroon\r\n MediumAquaMarine: { r: 102, g: 205, b: 170 },\r\n MediumBlue: { r: 0, g: 0, b: 205 },\r\n MediumOrchid: { r: 186, g: 85, b: 211 },\r\n MediumPurple: { r: 147, g: 112, b: 219 },\r\n MediumSeaGreen: { r: 60, g: 179, b: 113 },\r\n MediumSlateBlue: { r: 123, g: 104, b: 238 },\r\n MediumSpringGreen: { r: 0, g: 250, b: 154 },\r\n MediumTurquoise: { r: 72, g: 209, b: 204 },\r\n MediumVioletRed: { r: 199, g: 21, b: 133 },\r\n MidnightBlue: { r: 25, g: 25, b: 112 },\r\n MintCream: { r: 245, g: 255, b: 250 },\r\n MistyRose: { r: 255, g: 228, b: 225 },\r\n Moccasin: { r: 255, g: 228, b: 181 },\r\n NavajoWhite: { r: 255, g: 222, b: 173 },\r\n Navy: { r: 0, g: 0, b: 128 },\r\n OldLace: { r: 253, g: 245, b: 230 },\r\n Olive: { r: 128, g: 128, b: 0 },\r\n OliveDrab: { r: 107, g: 142, b: 35 },\r\n Orange: { r: 255, g: 165, b: 0 },\r\n OrangeRed: { r: 255, g: 69, b: 0 },\r\n Orchid: { r: 218, g: 112, b: 214 },\r\n PaleGoldenRod: { r: 238, g: 232, b: 170 },\r\n PaleGreen: { r: 152, g: 251, b: 152 },\r\n PaleTurquoise: { r: 175, g: 238, b: 238 },\r\n PaleVioletRed: { r: 219, g: 112, b: 147 },\r\n PapayaWhip: { r: 255, g: 239, b: 213 },\r\n PeachPuff: { r: 255, g: 218, b: 185 },\r\n Peru: { r: 205, g: 133, b: 63 },\r\n Pink: { r: 255, g: 192, b: 203 },\r\n Plum: { r: 221, g: 160, b: 221 },\r\n PowderBlue: { r: 176, g: 224, b: 230 },\r\n Purple: { r: 128, g: 0, b: 128 },\r\n RebeccaPurple: { r: 102, g: 51, b: 153 },\r\n Red: { r: 255, g: 0, b: 0 },\r\n RosyBrown: { r: 188, g: 143, b: 143 },\r\n RoyalBlue: { r: 65, g: 105, b: 225 },\r\n SaddleBrown: { r: 139, g: 69, b: 19 },\r\n Salmon: { r: 250, g: 128, b: 114 },\r\n SandyBrown: { r: 244, g: 164, b: 96 },\r\n SeaGreen: { r: 46, g: 139, b: 87 },\r\n SeaShell: { r: 255, g: 245, b: 238 },\r\n Sienna: { r: 160, g: 82, b: 45 },\r\n Silver: { r: 192, g: 192, b: 192 },\r\n SkyBlue: { r: 135, g: 206, b: 235 },\r\n SlateBlue: { r: 106, g: 90, b: 205 },\r\n SlateGray: { r: 112, g: 128, b: 144 },\r\n Snow: { r: 255, g: 250, b: 250 },\r\n SpringGreen: { r: 0, g: 255, b: 127 },\r\n SteelBlue: { r: 70, g: 130, b: 180 },\r\n Tan: { r: 210, g: 180, b: 140 },\r\n Teal: { r: 0, g: 128, b: 128 },\r\n Thistle: { r: 216, g: 191, b: 216 },\r\n Tomato: { r: 255, g: 99, b: 71 },\r\n Turquoise: { r: 64, g: 224, b: 208 },\r\n Violet: { r: 238, g: 130, b: 238 },\r\n Wheat: { r: 245, g: 222, b: 179 },\r\n White: { r: 255, g: 255, b: 255 },\r\n WhiteSmoke: { r: 245, g: 245, b: 245 },\r\n Yellow: { r: 255, g: 255, b: 0 },\r\n YellowGreen: { r: 154, g: 205, b: 50 }\r\n};\r\n\r\n\r\n\r\n\r\nexport function colorWithAlpha(color: string, alpha: number): string {\r\n const lowerCasedColor = color.toLowerCase() as keyof typeof colorNames;\r\n \r\n if (colorNames[lowerCasedColor]) {\r\n const rgb = colorNames[lowerCasedColor];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n }\r\n \r\n // If color is in hex format (#RRGGBB)\r\n if (/^#([A-Fa-f0-9]{6})$/.test(color)) {\r\n const hex = color.slice(1);\r\n const bigint = parseInt(hex, 16);\r\n const r = (bigint >> 16) & 255;\r\n const g = (bigint >> 8) & 255;\r\n const b = bigint & 255;\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n \r\n // If color is in rgb format (rgb(r, g, b))\r\n if (/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/.test(color)) {\r\n const result = color.match(/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/);\r\n if (result) {\r\n return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha})`;\r\n }\r\n }\r\n \r\n // Default to original color if format is not recognized\r\n return color;\r\n}","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { z } from \"zod\";\n\n/**\n * Per-resource theme override block.\n *\n * Single source of truth for the shape + defaults that were previously\n * duplicated across `components/ThemeOverrideSection.tsx` and\n * `utils/useSettings.ts`. Both now import from here.\n *\n * Data shape (driven by a schema block on the consumer side):\n * theme: {\n * useOverride: boolean,\n * primaryColor: string, // \"dirk\" | \"custom\" | mantine palette name\n * primaryShade: 0..9,\n * customTheme: string[10], // hex stops\n * }\n */\n\n/**\n * The 10-stop hex palette used as the fallback custom theme. This exact tuple\n * was duplicated in ThemeOverrideSection (DEFAULT_PALETTE) and useSettings\n * (customTheme). Keep it as a 10-tuple — Mantine `MantineColorsTuple` expects\n * exactly ten stops.\n */\nexport const DEFAULT_PALETTE: string[] = [\n \"#f0f4ff\",\n \"#d9e3ff\",\n \"#bfcfff\",\n \"#a6bbff\",\n \"#8ca7ff\",\n \"#7393ff\",\n \"#5a7fff\",\n \"#406bff\",\n \"#2547ff\",\n \"#0b33ff\",\n];\n\n/**\n * Zod schema for the theme override block. `customTheme` is validated as an\n * array of strings (the editor enforces the 10-length shape at the UI layer\n * by falling back to DEFAULT_PALETTE when the count is wrong).\n */\nexport const ThemeOverrideSchema = z.object({\n useOverride: z.boolean(),\n primaryColor: z.string(),\n primaryShade: z.number(),\n customTheme: z.array(z.string()),\n});\n\nexport type ThemeOverrideValue = z.infer<typeof ThemeOverrideSchema>;\n\n/**\n * Canonical default theme override block. Used as the merge fallback in\n * ThemeOverrideSection and (the palette portion) as the default custom theme\n * in useSettings.\n */\nexport const defaultThemeOverride: ThemeOverrideValue = {\n useOverride: false,\n primaryColor: \"dirk\",\n primaryShade: 5,\n customTheme: DEFAULT_PALETTE,\n};\n","import { MantineColorsTuple } from \"@mantine/core\";\r\nimport { create } from \"zustand\";\r\nimport { DEFAULT_PALETTE } from \"../types/theme\";\r\n\r\nexport type SettingsState = {\r\n game: \"fivem\" | \"rdr3\";\r\n currency: string;\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n resourceVersion?: string;\r\n customTheme?: MantineColorsTuple;\r\n overideResourceName?: string;\r\n serverName?: string;\r\n logo?: string;\r\n language?: string;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n currency: \"$\",\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n resourceVersion: \"dev\",\r\n customTheme: DEFAULT_PALETTE as unknown as MantineColorsTuple,\r\n}));\r\n\r\n// registerInitialFetch<Partial<SettingsState>>('GET_SETTINGS', undefined).then((data) => {\r\n// if (!data) {\r\n// console.warn('No settings data received from GET_SETTINGS fetch.');\r\n// return;\r\n// }\r\n// useSettings.setState({\r\n// ...data,\r\n// });\r\n// })\r\n","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\nimport { useSettings } from \"./useSettings\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const overrideResourceName = useSettings.getState().overideResourceName;\r\n\r\n // Resource-name resolution:\r\n // 1. NUI iframes expose `window.GetParentResourceName` — use that.\r\n // 2. DUIs don't have it, but DirkProvider sets `overideResourceName`\r\n // once it mounts, so consumer DUIs that wait until then resolve fine.\r\n // 3. If NEITHER is available (e.g. a DUI before its DirkProvider has\r\n // mounted, which happens for module-level `registerInitialFetch`\r\n // calls in `locales.ts`), there's no valid resource to call. Skip\r\n // the fetch entirely — firing it against a placeholder URL just\r\n // produces a doomed network request + an \"Uncaught (in promise)\r\n // TypeError: Failed to fetch\" in older consumer builds that\r\n // lacked the try/catch fallback below. Caller can rely on the\r\n // mockData return or refetch once context is established.\r\n const hasResourceContext =\r\n typeof (window as any).GetParentResourceName === \"function\" ||\r\n !!overrideResourceName;\r\n\r\n if (!hasResourceContext) {\r\n return (mockData ?? ({} as T));\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : overrideResourceName as string;\r\n\r\n try {\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n } catch {\r\n return (mockData ?? ({} as T));\r\n }\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n runFetches().catch(() => {});\r\n }, []);\r\n};\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string, mockData?: T): Promise<T> => { \r\n return fetchNui<T>('FETCH_LUA_TABLE', { tableName }, mockData);\r\n} \r\n\r\nexport const registerInitialLuaTableFetch = <T>(tableName: string, mockData?: T): Promise<T> => { \r\n return registerInitialFetch<T>('FETCH_LUA_TABLE', { tableName }, mockData);\r\n} \r\n\r\n\r\n\r\n// useage example:\r\n// registerInitialLuaTableFetch<{ [key: string]: string }>('my_lua_table', { key1: 'value1', key2: 'value2' }); \r\n","import { create } from \"zustand\";\r\nimport { fetchNui, registerInitialFetch } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\nconst reportedMissing = new Set<string>();\r\nfunction reportMissingLocale(key: string) {\r\n if (!key || reportedMissing.has(key)) return;\r\n reportedMissing.add(key);\r\n fetchNui('REPORT_MISSING_LOCALE', { key }).catch(() => {});\r\n}\r\n\r\n\r\n// Package-level locale defaults for dirk-cfx-react's own chrome (the ConfigPanel\r\n// buttons, modals, etc.). Merged UNDER the consumer's locale dict on every\r\n// load/update, so a consumer that doesn't define these keys still renders\r\n// English (never the raw key), and any consumer CAN override them (e.g. a\r\n// Spanish es.json that provides the same keys).\r\nconst PACKAGE_DEFAULTS: LocalesProps = {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\",\r\n \"cfgpanel_discard\": \"Discard\",\r\n \"cfgpanel_manual_edit\": \"Manual Edit\",\r\n \"cfgpanel_reset_defaults\": \"Reset Defaults\",\r\n \"cfgpanel_version\": \"Version\",\r\n \"cfgpanel_back_title\": \"Back to script list\",\r\n \"cfgpanel_undo\": \"Undo\",\r\n \"cfgpanel_redo\": \"Redo\",\r\n \"cfgpanel_save\": \"Save\",\r\n \"cfgpanel_saving\": \"Saving...\",\r\n \"cfgpanel_history\": \"History\",\r\n \"cfgpanel_reset_title\": \"Reset to Defaults\",\r\n \"cfgpanel_reset_desc\": \"This will permanently reset ALL config back to the defaults. Every value you have configured will be overwritten. This cannot be undone.\",\r\n \"cfgpanel_reset_confirm\": \"Reset Config\",\r\n \"cfgpanel_discard_title\": \"Discard Unsaved Changes?\",\r\n \"cfgpanel_discard_desc_back\": \"You have unsaved changes. Going back now will discard them.\",\r\n \"cfgpanel_discard_desc_close\": \"You have unsaved changes. Closing now will discard them.\",\r\n \"cfgpanel_discard_confirm_back\": \"Go Back Without Saving\",\r\n \"cfgpanel_discard_confirm_close\": \"Close Without Saving\",\r\n \"cfgpanel_json_title\": \"Config JSON\",\r\n \"cfgpanel_cancel\": \"Cancel\",\r\n \"cfgpanel_apply\": \"Apply\",\r\n \"cfgpanel_history_title\": \"Config History\",\r\n \"cfgpanel_close\": \"Close\",\r\n};\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: { ...PACKAGE_DEFAULTS },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists) reportMissingLocale(key);\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function\r\nexport const locale = localeStore.getState().locale;\r\n\r\nregisterInitialFetch<LocalesProps>('GET_LOCALES', undefined).then((data) => {\r\n localeStore.setState({ locales: { ...PACKAGE_DEFAULTS, ...data } });\r\n}).catch(() => {})\r\n\r\n// dirk_lib broadcasts UPDATE_DIRK_LIB_LOCALES whenever an admin changes the\r\n// `language` setting, so the dict updates live without a resource restart.\r\nif (typeof window !== \"undefined\") {\r\n window.addEventListener(\"message\", (event) => {\r\n const msg = event.data;\r\n if (!msg || msg.action !== \"UPDATE_DIRK_LIB_LOCALES\") return;\r\n if (!msg.data || typeof msg.data !== \"object\") return;\r\n // Defensive: never overwrite a populated dict with an empty one. dirk_lib\r\n // and consumer dui.lua listeners can both fire mid-table.wipe/repopulate\r\n // inside lib.locale(), and a stray {} broadcast would silently snap the\r\n // whole NUI back to raw keys (e.g. \"ModifyRod\" instead of the translation).\r\n if (Object.keys(msg.data).length === 0) return;\r\n localeStore.setState({ locales: { ...PACKAGE_DEFAULTS, ...(msg.data as LocalesProps) } });\r\n });\r\n}","// ------------------ Game <-> Map Conversion ------------------\r\nexport const mapCenter: [number, number] = [-119.43, 58.84]\r\nexport const latPr100 = 1.421\r\n\r\n/** Convert game world coordinates -> Leaflet map coordinates */\r\nexport function gameToMap(x: number, y: number): [number, number] {\r\n return [\r\n mapCenter[0] + (latPr100 / 100) * y, // lng\r\n mapCenter[1] + (latPr100 / 100) * x, // lat\r\n ]\r\n}\r\n\r\n/** Convert Leaflet map coordinates -> game world coordinates */\r\nexport function mapToGame(lat: number, lng: number): [number, number] {\r\n return [\r\n ((lng - mapCenter[1]) * 100) / latPr100,\r\n ((lat - mapCenter[0]) * 100) / latPr100,\r\n ]\r\n}\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\n\r\nexport type InventoryItem = {\r\n name: string;\r\n label: string;\r\n weight: number;\r\n image: string;\r\n};\r\n\r\nexport type InventoryItems = Record<string, InventoryItem>;\r\n\r\nexport const useItems = create<InventoryItems>(() => ({}));\r\n\r\nexport const useItemsList = (excludeItemNames: string[] = []): InventoryItem[] => {\r\n const excludeSet = new Set(excludeItemNames);\r\n return Object.values(useItems.getState()).filter((item) => !excludeSet.has(item.name));\r\n};\r\n\r\nexport const getItemImageUrl = (itemName: string): string => {\r\n return useItems.getState()[itemName]?.image || \"\";\r\n};\r\n\r\nregisterInitialFetch<InventoryItems>(\"FETCH_ALL_ITEMS\", null, {\r\n item1: { name: \"item1\", label: \"Item 1\", weight: 0.5, image: \"item1.png\" },\r\n item2: { name: \"item2\", label: \"Item 2\", weight: 1.0, image: \"item2.png\" },\r\n item3: { name: \"item3\", label: \"Item 3\", weight: 2.5, image: \"item3.png\" },\r\n}).then((fetchedItems) => {\r\n if (!fetchedItems) return;\r\n useItems.setState(fetchedItems);\r\n}).catch(() => {});\r\n","import { create } from \"zustand\";\r\nimport { fetchNui } from \"./fetchNui\";\r\n\r\n// Shape mirrors lib.framework.Group / lib.framework.Grade in dirk_lib.\r\n// payment is QB/qbx `payment` ⊕ ESX `salary`; nil on ND core.\r\n// bankAuth is qbx-native; defaults to isBoss on frameworks without it.\r\nexport type FrameworkGrade = {\r\n grade: number;\r\n name: string;\r\n label: string;\r\n payment?: number;\r\n isBoss: boolean;\r\n bankAuth: boolean;\r\n};\r\n\r\nexport type FrameworkGroup = {\r\n name: string;\r\n label: string;\r\n type: \"job\" | \"gang\";\r\n category?: string;\r\n whitelisted?: boolean;\r\n defaultDuty?: boolean;\r\n offDutyPay?: boolean;\r\n grades: FrameworkGrade[];\r\n};\r\n\r\ntype FrameworkGroupsBundle = {\r\n jobs: FrameworkGroup[];\r\n gangs: FrameworkGroup[];\r\n};\r\n\r\ntype FrameworkGroupsStore = FrameworkGroupsBundle & {\r\n loaded: boolean;\r\n};\r\n\r\nexport const useFrameworkGroups = create<FrameworkGroupsStore>(() => ({\r\n jobs: [],\r\n gangs: [],\r\n loaded: false,\r\n}));\r\n\r\n// Lazy fetch — only fires when a group picker actually mounts (GroupName /\r\n// GroupRank call ensureFrameworkGroups() in an effect). This used to run at\r\n// module load in EVERY consumer NUI, so every player hit the\r\n// dirk_lib:getFrameworkGroups server callback on resource start even when no\r\n// group picker was ever shown — pure wasted work for gameplay-only UIs.\r\n//\r\n// `frameworkGroupsRequested` is a module-scoped (shared, singleton) guard set\r\n// synchronously before the await, so any number of pickers mounting at once\r\n// collapse to a SINGLE round-trip. On success it stays set (never refetches).\r\n// On failure it is reset so a later picker-mount can retry a transient error;\r\n// picker mounts are sparse + user-driven, so this can't spam the callback.\r\nlet frameworkGroupsRequested = false;\r\nexport function ensureFrameworkGroups(): void {\r\n if (frameworkGroupsRequested) return;\r\n frameworkGroupsRequested = true;\r\n fetchNui<FrameworkGroupsBundle>(\"GET_FRAMEWORK_GROUPS\", undefined)\r\n .then((data) => {\r\n useFrameworkGroups.setState({\r\n jobs: Array.isArray(data?.jobs) ? data.jobs : [],\r\n gangs: Array.isArray(data?.gangs) ? data.gangs : [],\r\n loaded: true,\r\n });\r\n })\r\n .catch(() => {\r\n frameworkGroupsRequested = false; // allow a later picker-mount to retry\r\n useFrameworkGroups.setState({ loaded: true });\r\n });\r\n}\r\n\r\n// Helper for components that don't care about the job/gang split.\r\nexport function selectAllGroups(state: FrameworkGroupsStore): FrameworkGroup[] {\r\n return [...state.jobs, ...state.gangs];\r\n}\r\n","export const INPUT_MAPPER_PRIMARY_OPTIONS = [\r\n \"DIGITALBUTTON_AXIS\",\r\n \"GAME_CONTROLLED\",\r\n \"JOYSTICK_AXIS\",\r\n \"JOYSTICK_AXIS_NEGATIVE\",\r\n \"JOYSTICK_AXIS_POSITIVE\",\r\n \"JOYSTICK_BUTTON\",\r\n \"JOYSTICK_IAXIS\",\r\n \"JOYSTICK_POV\",\r\n \"JOYSTICK_POV_AXIS\",\r\n \"KEYBOARD\",\r\n \"MKB_AXIS\",\r\n \"MOUSE_ABSOLUTEAXIS\",\r\n \"MOUSE_BUTTON\",\r\n \"MOUSE_CENTEREDAXIS\",\r\n \"MOUSE_NORMALIZED\",\r\n \"MOUSE_RELATIVEAXIS\",\r\n \"MOUSE_SCALEDAXIS\",\r\n \"MOUSE_WHEEL\",\r\n \"PAD_ANALOGBUTTON\",\r\n \"PAD_AXIS\",\r\n \"PAD_DEBUGBUTTON\",\r\n \"PAD_DIGITALBUTTON\",\r\n \"TOUCHPAD_ABSOLUTE_AXIS\",\r\n \"TOUCHPAD_CENTERED_AXIS\",\r\n] as const;\r\n\r\nconst KEYBOARD_KEYS = [\r\n \"BACK\", \"TAB\", \"RETURN\", \"PAUSE\", \"CAPITAL\", \"ESCAPE\", \"SPACE\", \"PAGEUP\", \"PAGEDOWN\",\r\n \"END\", \"HOME\", \"LEFT\", \"UP\", \"RIGHT\", \"DOWN\", \"INSERT\", \"DELETE\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\",\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"F1\", \"F2\", \"F3\", \"F4\", \"F5\", \"F6\", \"F7\", \"F8\", \"F9\", \"F10\", \"F11\", \"F12\",\r\n \"NUMPAD0\", \"NUMPAD1\", \"NUMPAD2\", \"NUMPAD3\", \"NUMPAD4\", \"NUMPAD5\", \"NUMPAD6\", \"NUMPAD7\", \"NUMPAD8\", \"NUMPAD9\",\r\n \"MULTIPLY\", \"ADD\", \"SUBTRACT\", \"DECIMAL\", \"DIVIDE\", \"NUMPADENTER\",\r\n \"LSHIFT\", \"RSHIFT\", \"LCONTROL\", \"RCONTROL\", \"LMENU\", \"RMENU\",\r\n \"LWIN\", \"RWIN\", \"APPS\", \"NUMLOCK\", \"SCROLL\",\r\n \"OEM_1\", \"SEMICOLON\", \"EQUALS\", \"PLUS\", \"COMMA\", \"MINUS\", \"PERIOD\", \"SLASH\", \"OEM_2\", \"OEM_3\", \"GRAVE\",\r\n \"LBRACKET\", \"OEM_4\", \"BACKSLASH\", \"OEM_5\", \"RBRACKET\", \"OEM_6\", \"APOSTROPHE\", \"OEM_7\", \"OEM_102\",\r\n] as const;\r\n\r\nconst MOUSE_BUTTON_KEYS = [\r\n \"MOUSE_LEFT\",\r\n \"MOUSE_RIGHT\",\r\n \"MOUSE_MIDDLE\",\r\n \"MOUSE_EXTRABTN1\",\r\n \"MOUSE_EXTRABTN2\",\r\n \"MOUSE_EXTRABTN3\",\r\n \"MOUSE_EXTRABTN4\",\r\n \"MOUSE_EXTRABTN5\",\r\n \"IOM_WHEEL_UP\",\r\n \"IOM_WHEEL_DOWN\",\r\n] as const;\r\n\r\nconst MOUSE_WHEEL_KEYS = [\"IOM_WHEEL_UP\", \"IOM_WHEEL_DOWN\"] as const;\r\n\r\nconst MOUSE_AXIS_KEYS = [\r\n \"IOM_AXIS_X\",\r\n \"IOM_AXIS_Y\",\r\n \"IOM_AXIS_WHEEL\",\r\n \"IOM_AXIS_WHEEL_DELTA\",\r\n \"IOM_AXIS_WHEEL_RELATIVE\",\r\n \"IOM_IAXIS_X\",\r\n \"IOM_IAXIS_Y\",\r\n \"IOM_IAXIS_WHEEL\",\r\n \"IOM_IAXIS_WHEEL_DELTA\",\r\n \"IOM_IAXIS_WHEEL_RELATIVE\",\r\n \"IOM_AXIS_X_LEFT\",\r\n \"IOM_AXIS_X_RIGHT\",\r\n \"IOM_AXIS_Y_UP\",\r\n \"IOM_AXIS_Y_DOWN\",\r\n \"BASIC_MOUSE_AXIS_MAX\",\r\n \"MOUSE_AXIS_MAX\",\r\n] as const;\r\n\r\nconst PAD_BUTTON_KEYS = [\r\n \"L1_INDEX\",\r\n \"R1_INDEX\",\r\n \"L2_INDEX\",\r\n \"R2_INDEX\",\r\n \"L3_INDEX\",\r\n \"R3_INDEX\",\r\n \"LUP_INDEX\",\r\n \"LRIGHT_INDEX\",\r\n \"LDOWN_INDEX\",\r\n \"LLEFT_INDEX\",\r\n \"RUP_INDEX\",\r\n \"RRIGHT_INDEX\",\r\n \"RDOWN_INDEX\",\r\n \"RLEFT_INDEX\",\r\n \"SELECT_INDEX\",\r\n \"START_INDEX\",\r\n \"TOUCH_INDEX\",\r\n] as const;\r\n\r\nconst PAD_DEBUG_KEYS = [\r\n \"L1\",\r\n \"R1\",\r\n \"L2\",\r\n \"R2\",\r\n \"L3\",\r\n \"R3\",\r\n \"LUP\",\r\n \"LRIGHT\",\r\n \"LDOWN\",\r\n \"LLEFT\",\r\n \"RUP\",\r\n \"RRIGHT\",\r\n \"RDOWN\",\r\n \"RLEFT\",\r\n \"SELECT\",\r\n \"START\",\r\n \"TOUCH\",\r\n] as const;\r\n\r\nconst PAD_AXIS_KEYS = [\r\n \"IOM_AXIS_LX\",\r\n \"IOM_AXIS_LY\",\r\n \"IOM_AXIS_RX\",\r\n \"IOM_AXIS_RY\",\r\n \"IOM_AXIS_LUP\",\r\n \"IOM_AXIS_LDOWN\",\r\n \"IOM_AXIS_LLEFT\",\r\n \"IOM_AXIS_LRIGHT\",\r\n \"IOM_AXIS_LUR\",\r\n \"IOM_AXIS_LUL\",\r\n \"IOM_AXIS_LDR\",\r\n \"IOM_AXIS_LDL\",\r\n \"IOM_AXIS_RUP\",\r\n \"IOM_AXIS_RDOWN\",\r\n \"IOM_AXIS_RLEFT\",\r\n \"IOM_AXIS_RRIGHT\",\r\n \"IOM_AXIS_RUR\",\r\n \"IOM_AXIS_RUL\",\r\n \"IOM_AXIS_RDR\",\r\n \"IOM_AXIS_RDL\",\r\n \"IOM_AXIS_DPADX\",\r\n \"IOM_AXIS_DPADY\",\r\n \"IOM_AXIS_LY_UP\",\r\n \"IOM_AXIS_LY_DOWN\",\r\n \"IOM_AXIS_LX_LEFT\",\r\n \"IOM_AXIS_LX_RIGHT\",\r\n \"IOM_AXIS_RY_UP\",\r\n \"IOM_AXIS_RY_DOWN\",\r\n \"IOM_AXIS_RX_LEFT\",\r\n \"IOM_AXIS_RX_RIGHT\",\r\n] as const;\r\n\r\nconst JOYSTICK_AXIS_KEYS = Array.from({ length: 8 }, (_, i) => `IOM_JOYSTICK_AXIS${i + 1}`);\r\nconst JOYSTICK_BUTTON_KEYS = Array.from({ length: 32 }, (_, i) => `IOM_JOYSTICK_BUTTON${i + 1}`);\r\nconst JOYSTICK_POV_KEYS = Array.from({ length: 4 }, (_, p) => {\r\n const idx = p + 1;\r\n return [\r\n `IOM_POV${idx}_UP`,\r\n `IOM_POV${idx}_RIGHT`,\r\n `IOM_POV${idx}_DOWN`,\r\n `IOM_POV${idx}_LEFT`,\r\n ];\r\n}).flat();\r\n\r\nexport const INPUT_MAPPER_KEYS_BY_PRIMARY: Record<string, string[]> = {\r\n DIGITALBUTTON_AXIS: [],\r\n GAME_CONTROLLED: [],\r\n JOYSTICK_AXIS: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_AXIS_NEGATIVE: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_AXIS_POSITIVE: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_BUTTON: [...JOYSTICK_BUTTON_KEYS],\r\n JOYSTICK_IAXIS: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_POV: [...JOYSTICK_POV_KEYS],\r\n JOYSTICK_POV_AXIS: [...JOYSTICK_POV_KEYS],\r\n KEYBOARD: [...KEYBOARD_KEYS],\r\n MKB_AXIS: [],\r\n MOUSE_ABSOLUTEAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_BUTTON: [...MOUSE_BUTTON_KEYS],\r\n MOUSE_CENTEREDAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_NORMALIZED: [...MOUSE_AXIS_KEYS],\r\n MOUSE_RELATIVEAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_SCALEDAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_WHEEL: [...MOUSE_WHEEL_KEYS],\r\n PAD_ANALOGBUTTON: [...PAD_BUTTON_KEYS],\r\n PAD_AXIS: [...PAD_AXIS_KEYS],\r\n PAD_DEBUGBUTTON: [...PAD_DEBUG_KEYS],\r\n PAD_DIGITALBUTTON: [...PAD_BUTTON_KEYS],\r\n TOUCHPAD_ABSOLUTE_AXIS: [],\r\n TOUCHPAD_CENTERED_AXIS: [],\r\n};\r\n","// Curated list of FiveM control IDs (the IsControlPressed / DisableControlAction\r\n// numeric IDs). Sourced from https://docs.fivem.net/docs/game-references/controls/.\r\n// Not every control is included — the full list is ~349 entries and most are\r\n// obscure cellphone-scroll / replay-editor inputs no script ever cares about.\r\n// What's here covers the practical surface for scene whitelisting, raid\r\n// keybinds, vehicle scripts, etc. Add more as needed.\r\n\r\nexport type GtaControl = {\r\n /** Numeric control ID passed to IsControlPressed / EnableControlAction. */\r\n id: number;\r\n /** Symbolic name as it appears in the FiveM docs (e.g. INPUT_LOOK_LR). */\r\n symbol: string;\r\n /** Friendly label suitable for UI display (e.g. \"Look Left/Right\"). */\r\n label: string;\r\n /** Default keyboard binding shown for context (e.g. \"Mouse X\", \"E\"). */\r\n defaultKey?: string;\r\n /** Group used for ordering and section headers in pickers. */\r\n group: GtaControlGroup;\r\n};\r\n\r\nexport type GtaControlGroup =\r\n | \"Camera\"\r\n | \"Movement\"\r\n | \"Combat\"\r\n | \"Cover\"\r\n | \"Vehicle\"\r\n | \"Vehicle (Plane/Heli)\"\r\n | \"Vehicle (Boat/Bike)\"\r\n | \"Phone\"\r\n | \"Frontend / UI\"\r\n | \"Multiplayer\"\r\n | \"Misc\";\r\n\r\nexport const GTA_CONTROLS: GtaControl[] = [\r\n // ── Camera ─────────────────────────────────────────────────────────────────\r\n { id: 0, symbol: \"INPUT_NEXT_CAMERA\", label: \"Switch Camera\", defaultKey: \"V\", group: \"Camera\" },\r\n { id: 1, symbol: \"INPUT_LOOK_LR\", label: \"Look Left/Right\", defaultKey: \"Mouse X\", group: \"Camera\" },\r\n { id: 2, symbol: \"INPUT_LOOK_UD\", label: \"Look Up/Down\", defaultKey: \"Mouse Y\", group: \"Camera\" },\r\n { id: 3, symbol: \"INPUT_LOOK_UP_ONLY\", label: \"Look Up Only\", group: \"Camera\" },\r\n { id: 4, symbol: \"INPUT_LOOK_DOWN_ONLY\", label: \"Look Down Only\", group: \"Camera\" },\r\n { id: 5, symbol: \"INPUT_LOOK_LEFT_ONLY\", label: \"Look Left Only\", group: \"Camera\" },\r\n { id: 6, symbol: \"INPUT_LOOK_RIGHT_ONLY\", label: \"Look Right Only\", group: \"Camera\" },\r\n { id: 8, symbol: \"INPUT_CINEMATIC_SLOWMO\", label: \"Cinematic Slowmo\", defaultKey: \"Insert\", group: \"Camera\" },\r\n { id: 26, symbol: \"INPUT_LOOK_BEHIND\", label: \"Look Behind\", defaultKey: \"C\", group: \"Camera\" },\r\n { id: 27, symbol: \"INPUT_PHONE\", label: \"Phone\", defaultKey: \"Up Arrow\", group: \"Phone\" },\r\n\r\n // ── Movement ───────────────────────────────────────────────────────────────\r\n { id: 21, symbol: \"INPUT_SPRINT\", label: \"Sprint\", defaultKey: \"Left Shift\", group: \"Movement\" },\r\n { id: 22, symbol: \"INPUT_JUMP\", label: \"Jump\", defaultKey: \"Space\", group: \"Movement\" },\r\n { id: 23, symbol: \"INPUT_ENTER\", label: \"Enter Vehicle\", defaultKey: \"F\", group: \"Movement\" },\r\n { id: 30, symbol: \"INPUT_MOVE_LR\", label: \"Move Left/Right\", group: \"Movement\" },\r\n { id: 31, symbol: \"INPUT_MOVE_UD\", label: \"Move Up/Down\", group: \"Movement\" },\r\n { id: 32, symbol: \"INPUT_MOVE_UP_ONLY\", label: \"Move Forward (W)\", group: \"Movement\" },\r\n { id: 33, symbol: \"INPUT_MOVE_DOWN_ONLY\", label: \"Move Back (S)\", group: \"Movement\" },\r\n { id: 34, symbol: \"INPUT_MOVE_LEFT_ONLY\", label: \"Move Left (A)\", group: \"Movement\" },\r\n { id: 35, symbol: \"INPUT_MOVE_RIGHT_ONLY\", label: \"Move Right (D)\", group: \"Movement\" },\r\n { id: 36, symbol: \"INPUT_DUCK\", label: \"Duck / Stealth\", defaultKey: \"Left Ctrl\", group: \"Movement\" },\r\n { id: 37, symbol: \"INPUT_SELECT_WEAPON\", label: \"Weapon Wheel\", defaultKey: \"Tab\", group: \"Combat\" },\r\n { id: 38, symbol: \"INPUT_PICKUP\", label: \"Pickup / Interact\", defaultKey: \"E\", group: \"Movement\" },\r\n\r\n // ── Combat ─────────────────────────────────────────────────────────────────\r\n { id: 24, symbol: \"INPUT_ATTACK\", label: \"Attack / Fire\", defaultKey: \"Mouse 1\", group: \"Combat\" },\r\n { id: 25, symbol: \"INPUT_AIM\", label: \"Aim\", defaultKey: \"Mouse 2\", group: \"Combat\" },\r\n { id: 45, symbol: \"INPUT_RELOAD\", label: \"Reload\", defaultKey: \"R\", group: \"Combat\" },\r\n { id: 47, symbol: \"INPUT_DETONATE\", label: \"Detonate\", defaultKey: \"G\", group: \"Combat\" },\r\n { id: 257, symbol: \"INPUT_ATTACK2\", label: \"Attack 2\", group: \"Combat\" },\r\n { id: 140, symbol: \"INPUT_MELEE_ATTACK_LIGHT\", label: \"Melee Light\", defaultKey: \"R\", group: \"Combat\" },\r\n { id: 141, symbol: \"INPUT_MELEE_ATTACK_HEAVY\", label: \"Melee Heavy\", defaultKey: \"Q\", group: \"Combat\" },\r\n { id: 142, symbol: \"INPUT_MELEE_ATTACK_ALTERNATE\", label: \"Melee Alternate\", defaultKey: \"Mouse 1\", group: \"Combat\" },\r\n { id: 263, symbol: \"INPUT_MELEE_ATTACK1\", label: \"Melee Attack 1\", group: \"Combat\" },\r\n { id: 264, symbol: \"INPUT_MELEE_ATTACK2\", label: \"Melee Attack 2\", group: \"Combat\" },\r\n\r\n // ── Cover ──────────────────────────────────────────────────────────────────\r\n { id: 44, symbol: \"INPUT_COVER\", label: \"Cover\", defaultKey: \"Q\", group: \"Cover\" },\r\n\r\n // ── Vehicle (general) ──────────────────────────────────────────────────────\r\n { id: 59, symbol: \"INPUT_VEH_MOVE_LR\", label: \"Vehicle Steering\", group: \"Vehicle\" },\r\n { id: 63, symbol: \"INPUT_VEH_MOVE_LEFT_ONLY\", label: \"Vehicle Steer Left\", group: \"Vehicle\" },\r\n { id: 64, symbol: \"INPUT_VEH_MOVE_RIGHT_ONLY\", label: \"Vehicle Steer Right\", group: \"Vehicle\" },\r\n { id: 71, symbol: \"INPUT_VEH_ACCELERATE\", label: \"Vehicle Accelerate\", defaultKey: \"W\", group: \"Vehicle\" },\r\n { id: 72, symbol: \"INPUT_VEH_BRAKE\", label: \"Vehicle Brake\", defaultKey: \"S\", group: \"Vehicle\" },\r\n { id: 73, symbol: \"INPUT_VEH_DUCK\", label: \"Vehicle Duck\", defaultKey: \"X\", group: \"Vehicle\" },\r\n { id: 74, symbol: \"INPUT_VEH_HEADLIGHT\", label: \"Headlights\", defaultKey: \"H\", group: \"Vehicle\" },\r\n { id: 75, symbol: \"INPUT_VEH_EXIT\", label: \"Exit Vehicle\", defaultKey: \"F\", group: \"Vehicle\" },\r\n { id: 76, symbol: \"INPUT_VEH_HANDBRAKE\", label: \"Handbrake\", defaultKey: \"Space\", group: \"Vehicle\" },\r\n { id: 80, symbol: \"INPUT_VEH_CIN_CAM\", label: \"Cinematic Cam\", defaultKey: \"R\", group: \"Vehicle\" },\r\n { id: 81, symbol: \"INPUT_VEH_NEXT_RADIO\", label: \"Radio Next\", group: \"Vehicle\" },\r\n { id: 82, symbol: \"INPUT_VEH_PREV_RADIO\", label: \"Radio Prev\", group: \"Vehicle\" },\r\n { id: 83, symbol: \"INPUT_VEH_NEXT_RADIO_TRACK\", label: \"Radio Next Track\", group: \"Vehicle\" },\r\n { id: 84, symbol: \"INPUT_VEH_PREV_RADIO_TRACK\", label: \"Radio Prev Track\", group: \"Vehicle\" },\r\n { id: 85, symbol: \"INPUT_VEH_RADIO_WHEEL\", label: \"Radio Wheel\", defaultKey: \"Q\", group: \"Vehicle\" },\r\n { id: 86, symbol: \"INPUT_VEH_HORN\", label: \"Horn\", defaultKey: \"E\", group: \"Vehicle\" },\r\n { id: 90, symbol: \"INPUT_VEH_AIM\", label: \"Vehicle Aim\", group: \"Vehicle\" },\r\n { id: 91, symbol: \"INPUT_VEH_ATTACK\", label: \"Vehicle Attack\", group: \"Vehicle\" },\r\n { id: 92, symbol: \"INPUT_VEH_ATTACK2\", label: \"Vehicle Attack 2\", group: \"Vehicle\" },\r\n { id: 99, symbol: \"INPUT_VEH_SELECT_NEXT_WEAPON\", label: \"Veh Next Weapon\", group: \"Vehicle\" },\r\n { id: 100, symbol: \"INPUT_VEH_SELECT_PREV_WEAPON\", label: \"Veh Prev Weapon\", group: \"Vehicle\" },\r\n\r\n // ── Vehicle (Plane/Heli) ───────────────────────────────────────────────────\r\n { id: 152, symbol: \"INPUT_VEH_FLY_THROTTLE_UP\", label: \"Plane Throttle Up\", defaultKey: \"W\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 153, symbol: \"INPUT_VEH_FLY_THROTTLE_DOWN\", label: \"Plane Throttle Down\", defaultKey: \"S\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 154, symbol: \"INPUT_VEH_FLY_YAW_LEFT\", label: \"Plane Yaw Left\", defaultKey: \"A\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 155, symbol: \"INPUT_VEH_FLY_YAW_RIGHT\", label: \"Plane Yaw Right\", defaultKey: \"D\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 158, symbol: \"INPUT_VEH_FLY_ATTACK\", label: \"Plane Attack\", defaultKey: \"Mouse 1\", group: \"Vehicle (Plane/Heli)\" },\r\n\r\n // ── Vehicle (Boat / Bike) ──────────────────────────────────────────────────\r\n { id: 198, symbol: \"INPUT_VEH_BICYCLE_PEDAL\", label: \"Bike Pedal\", group: \"Vehicle (Boat/Bike)\" },\r\n\r\n // ── Phone ──────────────────────────────────────────────────────────────────\r\n { id: 137, symbol: \"INPUT_FRONTEND_SOCIAL_CLUB_SECONDARY\", label: \"Toggle Phone (alt)\", group: \"Phone\" },\r\n\r\n // ── Frontend / UI ──────────────────────────────────────────────────────────\r\n { id: 199, symbol: \"INPUT_FRONTEND_PAUSE\", label: \"Pause Menu\", defaultKey: \"P\", group: \"Frontend / UI\" },\r\n { id: 200, symbol: \"INPUT_FRONTEND_PAUSE_ALTERNATE\", label: \"Pause Menu (alt)\", defaultKey: \"Esc\", group: \"Frontend / UI\" },\r\n { id: 201, symbol: \"INPUT_FRONTEND_ACCEPT\", label: \"Accept\", defaultKey: \"Enter\", group: \"Frontend / UI\" },\r\n { id: 202, symbol: \"INPUT_FRONTEND_CANCEL\", label: \"Cancel\", defaultKey: \"Esc\", group: \"Frontend / UI\" },\r\n { id: 244, symbol: \"INPUT_INTERACTION_MENU\", label: \"Interaction Menu\", defaultKey: \"M\", group: \"Frontend / UI\" },\r\n\r\n // ── Multiplayer ────────────────────────────────────────────────────────────\r\n { id: 245, symbol: \"INPUT_MP_TEXT_CHAT_ALL\", label: \"Chat (All)\", defaultKey: \"T\", group: \"Multiplayer\" },\r\n { id: 246, symbol: \"INPUT_MP_TEXT_CHAT_TEAM\", label: \"Chat (Team)\", defaultKey: \"Y\", group: \"Multiplayer\" },\r\n { id: 247, symbol: \"INPUT_MP_TEXT_CHAT_FRIENDS\", label: \"Chat (Friends)\", group: \"Multiplayer\" },\r\n { id: 248, symbol: \"INPUT_MP_TEXT_CHAT_CREW\", label: \"Chat (Crew)\", group: \"Multiplayer\" },\r\n { id: 249, symbol: \"INPUT_PUSH_TO_TALK\", label: \"Push To Talk\", defaultKey: \"N\", group: \"Multiplayer\" },\r\n\r\n // ── Misc ───────────────────────────────────────────────────────────────────\r\n { id: 51, symbol: \"INPUT_CONTEXT\", label: \"Context (E)\", defaultKey: \"E\", group: \"Misc\" },\r\n { id: 52, symbol: \"INPUT_CONTEXT_SECONDARY\", label: \"Context Secondary\", defaultKey: \"Q\", group: \"Misc\" },\r\n { id: 19, symbol: \"INPUT_CHARACTER_WHEEL\", label: \"Character Wheel\", defaultKey: \"Left Alt\", group: \"Misc\" },\r\n { id: 105, symbol: \"INPUT_HUD_SPECIAL\", label: \"Special Ability\", defaultKey: \"Caps Lock\", group: \"Misc\" },\r\n { id: 121, symbol: \"INPUT_MULTIPLAYER_INFO\", label: \"Player List\", defaultKey: \"Z\", group: \"Misc\" },\r\n { id: 170, symbol: \"INPUT_SAVE_REPLAY_CLIP\", label: \"Save Replay Clip\", defaultKey: \"F1\", group: \"Misc\" },\r\n { id: 288, symbol: \"INPUT_REPLAY_START_STOP_RECORDING\", label: \"Replay Record\", defaultKey: \"F1\", group: \"Misc\" },\r\n { id: 289, symbol: \"INPUT_REPLAY_START_STOP_RECORDING_SECONDARY\", label: \"Replay Record (alt)\", group: \"Misc\" },\r\n];\r\n\r\nconst BY_ID = new Map<number, GtaControl>(GTA_CONTROLS.map((c) => [c.id, c]));\r\n\r\nexport function getGtaControl(id: number): GtaControl | undefined {\r\n return BY_ID.get(id);\r\n}\r\n\r\n/** Format a control id as `Label (id)`, falling back to `Control id` if unknown. */\r\nexport function formatGtaControl(id: number): string {\r\n const c = BY_ID.get(id);\r\n if (!c) return `Control ${id}`;\r\n return c.defaultKey ? `${c.label} (${id} · ${c.defaultKey})` : `${c.label} (${id})`;\r\n}\r\n\r\n/** Group order used by ControlSelect / ControlMultiSelect for the dropdown headings. */\r\nexport const GTA_CONTROL_GROUP_ORDER: GtaControlGroup[] = [\r\n \"Camera\",\r\n \"Movement\",\r\n \"Combat\",\r\n \"Cover\",\r\n \"Vehicle\",\r\n \"Vehicle (Plane/Heli)\",\r\n \"Vehicle (Boat/Bike)\",\r\n \"Phone\",\r\n \"Frontend / UI\",\r\n \"Multiplayer\",\r\n \"Misc\",\r\n];\r\n","import { colorWithAlpha } from \"@/utils\";\r\nimport { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, useMantineTheme } from \"@mantine/core\";\r\n\r\nexport type BorderedIconProps = {\r\n icon: string;\r\n color?: string;\r\n fontSize?: string;\r\n hovered?: boolean;\r\n hoverable?: boolean;\r\n radius?: string;\r\n p?: string;\r\n}\r\n\r\nexport function BorderedIcon(props: BorderedIconProps){\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex\r\n bg='rgba(0, 0, 0, 0.5)'\r\n p={props.p || 'xs'}\r\n justify='center'\r\n align='center'\r\n style={{\r\n aspectRatio: '1/1', \r\n \r\n borderRadius: theme.radius.xs,\r\n // border: `2px solid var(--mantine-primary-color-9)`,\r\n outline: `0.2vh solid ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,\r\n boxShadow: `inset 0 0 2vh ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7], 0.5)}`\r\n }}\r\n \r\n >\r\n <FontAwesomeIcon\r\n icon={props.icon as IconName}\r\n color={colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade as number], props.hovered ? 0.9: 0.9)}\r\n style={{\r\n fontSize: props.fontSize ? props.fontSize: '2.5vh',\r\n }}\r\n />\r\n </Flex>\r\n )\r\n}","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, Image, Text } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport React from \"react\";\r\n\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Flex' implicitly has an 'any' type.\r\nexport const MotionFlex = motion.create(Flex) as React.ComponentType<any>;\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Text' implicitly has an 'any' type.\r\nexport const MotionText = motion.create(Text) as React.ComponentType<any>;\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Image' implicitly has an 'any' type.\r\nexport const MotionImage = motion.create(Image) as React.ComponentType<any>;\r\n\r\nexport const MotionIcon = motion.create(FontAwesomeIcon);\r\n\r\n\r\n\r\n\r\n","import { AnimatePresence } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport function Counter(props: {count: number, color?: string, style?: React.CSSProperties}) {\r\n return (\r\n <AnimatePresence>\r\n {props.count > 0 && (\r\n <MotionFlex\r\n key='counter'\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n\r\n fz='1.25vh'\r\n h='1.75vh'\r\n justify={'center'}\r\n align='center'\r\n bg={props.color || 'rgba(0, 0, 0, 0.51)'}\r\n style={{\r\n borderRadius: '50%',\r\n aspectRatio: '1/1',\r\n marginBottom: '0.3vh',\r\n fontFamily: 'Akrobat Bold',\r\n boxShadow: '0 0 5px rgba(0, 0, 0, 0.3)',\r\n ...props.style\r\n }}\r\n >\r\n {props.count}\r\n </MotionFlex> \r\n )}\r\n </AnimatePresence>\r\n\r\n )\r\n}","import React, { useRef, useEffect, useState } from 'react';\r\nimport { motion, useMotionValue } from 'framer-motion';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport type FloatingParticlesProps = {\r\n icons?: React.ReactNode[];\r\n particleCount?: number;\r\n color?: string;\r\n size?: number;\r\n speed?: 'slow' | 'medium' | 'fast';\r\n opacity?: number;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n mouseRepelDistance?: number;\r\n mouseRepelStrength?: number;\r\n backgroundColor?: string;\r\n}\r\n\r\nexport type ParticleState = {\r\n id: number;\r\n baseX: number;\r\n baseY: number;\r\n currentX: number;\r\n currentY: number;\r\n icon: React.ReactNode | null;\r\n animationDuration: number;\r\n}\r\n\r\n\r\n\r\nexport const FloatingParticles: React.FC<FloatingParticlesProps> = ({\r\n icons = [],\r\n particleCount = 55,\r\n color = '#00a552ff',\r\n size = 32,\r\n speed = 'slow',\r\n opacity = 0.3,\r\n style = {},\r\n mouseRepelDistance = 150,\r\n mouseRepelStrength = 50,\r\n backgroundColor = 'transparent',\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [particles, setParticles] = useState<ParticleState[]>([]);\r\n \r\n const mouseX = useMotionValue(0);\r\n const mouseY = useMotionValue(0);\r\n\r\n const durationMap = {\r\n slow: { base: 10, variance: 10 },\r\n medium: { base: 2, variance: 2},\r\n fast: { base: 4, variance: 2 },\r\n };\r\n\r\n const duration = durationMap[speed];\r\n\r\n const seededRandom = (seed: number) => {\r\n const x = Math.sin(seed) * 10000;\r\n return x - Math.floor(x);\r\n };\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const bounds = containerRef.current.getBoundingClientRect();\r\n\r\n const newParticles: ParticleState[] = [...Array(particleCount)].map((_, i) => {\r\n const seedX = i * 123.456;\r\n const seedY = i * 789.012;\r\n const seedDuration = i * 345.678;\r\n \r\n const baseX = seededRandom(seedX) * bounds.width;\r\n const baseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n id: i,\r\n baseX,\r\n baseY,\r\n currentX: baseX,\r\n currentY: baseY,\r\n icon: icons.length > 0 ? icons[i % icons.length] : null,\r\n animationDuration: duration.base + seededRandom(seedDuration) * duration.variance,\r\n };\r\n });\r\n\r\n setParticles(newParticles);\r\n }, [particleCount, icons.length, duration.base, duration.variance]);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const bounds = containerRef.current!.getBoundingClientRect();\r\n const x = e.clientX - bounds.left;\r\n const y = e.clientY - bounds.top;\r\n \r\n mouseX.set(x);\r\n mouseY.set(y);\r\n\r\n setParticles(prevParticles => \r\n prevParticles.map(particle => {\r\n const dx = x - particle.baseX;\r\n const dy = y - particle.baseY;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < mouseRepelDistance && distance > 0) {\r\n const force = (mouseRepelDistance - distance) / mouseRepelDistance;\r\n const repelX = (dx / distance) * force * mouseRepelStrength * -1;\r\n const repelY = (dy / distance) * force * mouseRepelStrength * -1;\r\n\r\n return {\r\n ...particle,\r\n currentX: particle.baseX + repelX,\r\n currentY: particle.baseY + repelY,\r\n };\r\n } else {\r\n return {\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n };\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setParticles(prevParticles =>\r\n prevParticles.map(particle => ({\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n }))\r\n );\r\n };\r\n\r\n const container = containerRef.current;\r\n container.addEventListener('mousemove', handleMouseMove);\r\n container.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n container.removeEventListener('mousemove', handleMouseMove);\r\n container.removeEventListener('mouseleave', handleMouseLeave);\r\n };\r\n }, [mouseX, mouseY, mouseRepelDistance, mouseRepelStrength]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (!containerRef.current) return;\r\n \r\n const bounds = containerRef.current.getBoundingClientRect();\r\n \r\n setParticles(prevParticles =>\r\n prevParticles.map((particle, i) => {\r\n const seedX = i * 123.456 + bounds.width;\r\n const seedY = i * 789.012 + bounds.height;\r\n \r\n const newBaseX = seededRandom(seedX) * bounds.width;\r\n const newBaseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n ...particle,\r\n baseX: newBaseX,\r\n baseY: newBaseY,\r\n currentX: newBaseX,\r\n currentY: newBaseY,\r\n };\r\n })\r\n );\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n style={{\r\n position: 'absolute',\r\n overflow: 'hidden',\r\n width: '100%',\r\n height: '100%',\r\n zIndex: -1,\r\n \r\n backgroundColor,\r\n ...style,\r\n }}\r\n >\r\n <div style={{ position: 'absolute', inset: 0, pointerEvents: 'none' }}>\r\n {particles.map((particle) => (\r\n <motion.div\r\n key={particle.id}\r\n style={{\r\n position: 'absolute',\r\n width: size,\r\n height: size,\r\n color,\r\n opacity,\r\n left: 0,\r\n top: 0,\r\n }}\r\n animate={{\r\n x: particle.currentX,\r\n y: particle.currentY,\r\n scale: [0.8, 1.1, 0.8],\r\n opacity: [opacity * 0.5, opacity, opacity * 0.5],\r\n // random rotate between 0 and 360 so that not all particles rotate the same\r\n rotate: particle.id % 2 === 0 ? [0, 360] : [360, 0],\r\n }}\r\n transition={{\r\n x: { type: \"spring\", stiffness: 150, damping: 20 },\r\n y: { type: \"spring\", stiffness: 150, damping: 20 },\r\n rotate: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n ease: 'linear',\r\n \r\n },\r\n scale: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 111.222) * 5,\r\n ease: 'easeInOut',\r\n },\r\n opacity: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 333.444) * 5,\r\n ease: 'easeInOut',\r\n },\r\n }}\r\n >\r\n {particle.icon ? (\r\n <div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n <FontAwesomeIcon icon={particle.icon as any} style={{ width: '70%', height: '70%' }} />\r\n </div>\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n }}\r\n />\r\n )}\r\n </motion.div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n","import { useMantineTheme, Flex, Text } from \"@mantine/core\";\r\n\r\nexport type InfoBoxProps = {\r\n leftSide: string;\r\n rightSide: string;\r\n};\r\n\r\nexport function InfoBox(props: InfoBoxProps) {\r\n const theme = useMantineTheme();\r\n\r\n\r\n return (\r\n <Flex\r\n w='fit-content'\r\n h='fit-content'\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n overflow: 'hidden',\r\n border: `0.2vh solid rgba(77,77,77,0.3)`\r\n }}\r\n align='center'\r\n >\r\n <Flex\r\n miw='4vh'\r\n p='xxs'\r\n bg='rgba(77,77,77,0.2)'\r\n direction='column'\r\n justify='center'\r\n align='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}>{props.leftSide}</Text>\r\n </Flex>\r\n\r\n <Flex\r\n p='xxs'\r\n flex={1}\r\n miw='4vh'\r\n bg='rgba(77,77,77,0.5)'\r\n direction='column'\r\n align='center'\r\n justify='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.rightSide}</Text>\r\n </Flex>\r\n\r\n </Flex>\r\n );\r\n}\r\n","import { useMantineTheme, Flex, Text, alpha, Tooltip } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\nimport { Variants } from \"framer-motion\";\r\nimport { colorWithAlpha } from \"@/utils\";\r\nimport { Info } from \"lucide-react\";\r\n\r\nexport type InputContainerProps = {\r\n title?:string;\r\n error?: string;\r\n description?:string;\r\n children?:React.ReactNode;\r\n w?:string | number;\r\n flex?:number | string;\r\n h?:string | number;\r\n bg?:string;\r\n p?:string | number;\r\n variants?: Variants;\r\n style?:React.CSSProperties;\r\n rightSection?:React.ReactNode;\r\n}\r\n\r\nexport function InputContainer(props: InputContainerProps){\r\n const theme = useMantineTheme()\r\n return (\r\n <MotionFlex\r\n w={props.w || '100%'}\r\n flex={props.flex}\r\n direction='column'\r\n h={props.h}\r\n gap={props.title ? 'xs' : 0}\r\n \r\n\r\n bg={props.bg || alpha(theme.colors.dark[9], 0.65)}\r\n p={props.p || 'sm'}\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n boxShadow: theme.shadows.sm,\r\n overflow: 'hidden',\r\n border: props.error ? `1px solid rgba(255, 100, 100, 0.8)` : '1px solid var(--mantine-color-dark-7)', \r\n ...props.style,\r\n }}\r\n variants={props.variants}\r\n >\r\n\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n >\r\n {(props.title || props.description) && (\r\n <Flex\r\n align='center'\r\n flex={1}\r\n p={props.p == '0' ? 'sm' : 0}\r\n >\r\n {props.title && (\r\n <Text\r\n size=\"sm\"\r\n style={{\r\n lineHeight: '1.25vh',\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.title}</Text>\r\n )}\r\n {props.description && (\r\n <Tooltip\r\n label={props.description}\r\n position=\"top-end\"\r\n withArrow\r\n multiline\r\n maw=\"22vh\"\r\n styles={{\r\n tooltip: {\r\n background: alpha(theme.colors.dark[7], 0.95),\r\n border: `0.1vh solid rgba(255,255,255,0.1)`,\r\n color: 'rgba(255,255,255,0.75)',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.3vh',\r\n lineHeight: 1.3,\r\n padding: '0.6vh 0.8vh',\r\n letterSpacing: '0.03em',\r\n },\r\n }}\r\n >\r\n <Flex align='center' justify='center' style={{ marginLeft: 'auto', cursor: 'help' }}>\r\n <Info size=\"1.6vh\" color={alpha(theme.colors[theme.primaryColor][5], 0.45)} />\r\n </Flex>\r\n </Tooltip>\r\n )}\r\n </Flex>\r\n )}\r\n {props.error && (\r\n <Text\r\n size='xs'\r\n c={theme.colors.red[9]}\r\n fw={600}\r\n mb='auto'\r\n lh='0.8'\r\n >\r\n {props.error}\r\n </Text>\r\n )}\r\n {props.rightSection && (\r\n <Flex>\r\n {props.rightSection}\r\n </Flex>\r\n )}\r\n </Flex>\r\n {props.children} \r\n </MotionFlex>\r\n )\r\n}","import { create } from 'zustand';\r\n\r\n// Import sounds as URLs (TypeScript-safe)\r\nimport clickSoundUrl from './click_sound.mp3';\r\nimport hoverSoundUrl from './hover_sound.mp3';\r\n\r\n// Define a type for the store state and actions\r\ntype AudioPlayerStore = {\r\n play: (sound: string) => void;\r\n stop: (sound: string) => void;\r\n};\r\n\r\n// Create the store using Zustand\r\nexport const useAudio = create<AudioPlayerStore>(() => {\r\n const audioRefs: Record<string, HTMLAudioElement> = {};\r\n\r\n // Predefined sounds\r\n const sounds: Record<string, string> = {\r\n click: clickSoundUrl,\r\n hover: hoverSoundUrl,\r\n };\r\n\r\n // Initialize audio elements for each sound\r\n for (const [key, src] of Object.entries(sounds)) {\r\n audioRefs[key] = new Audio(src);\r\n }\r\n\r\n return {\r\n play: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.currentTime = 0;\r\n audio.volume = 0.1;\r\n audio.play();\r\n },\r\n stop: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.pause();\r\n audio.currentTime = 0;\r\n },\r\n };\r\n});\r\n","\r\nimport { useAudio } from \"@/hooks/useAudio/store\";\r\nimport { colorWithAlpha } from \"@/utils\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { alpha, Flex, FlexProps, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { MotionFlex, MotionIcon, MotionText } from \"./Motion\";\r\n\r\n\r\nexport type SegmentProps = {\r\n label: string;\r\n value: string;\r\n icon?: string; // Optional icon for the segment\r\n rightSection?: React.ReactNode;\r\n color?: string;\r\n}\r\n\r\nexport type SegmentedControlProps = {\r\n w?: string; // Width of the entire control\r\n multi?: boolean; // Optional prop to allow multiple selections\r\n value?: string | string[]; // Controlled value, if provided\r\n onChange?: (value: string | string[]) => void; // Callback for value change\r\n fz?: string; // Font size for the segments\r\n justify?: FlexProps['justify']; \r\n items: SegmentProps[];\r\n sounds?: boolean;\r\n roundEdges?: boolean;\r\n color?: string;\r\n} & FlexProps;\r\n\r\nexport function SegmentedControl(props: SegmentedControlProps) {\r\n const theme = useMantineTheme();\r\n const play = useAudio((state) => state.play);\r\n\r\n const handleChange = (newValue: string | string[]) => {\r\n if (props.sounds) play('click');\r\n if (props.onChange) {\r\n props.onChange(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Flex\r\n bg='rgba(33, 33, 33, 0.6)'\r\n w={props.w || 'fit-content'}\r\n style={{\r\n borderRadius: props.roundEdges !== false ? theme.radius.xs : 0,\r\n overflow: 'hidden',\r\n }}\r\n {...props}\r\n >\r\n {props.items.map((item, index) => (\r\n <motion.div\r\n key={index}\r\n initial={{ x: -100, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, delay: index * 0.1, ease: 'easeInOut' }}\r\n\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flex: 1,\r\n }}\r\n >\r\n <Segment\r\n key={item.value}\r\n label={item.label}\r\n value={item.value}\r\n icon={item.icon}\r\n rightSection={item.rightSection}\r\n fz={props.fz}\r\n color={props.color}\r\n selected={!props.multi ? props.value === item.value : Array.isArray(props.value) && props.value.includes(item.value)}\r\n onClick={() => {\r\n\r\n if (props.multi) {\r\n const newValue = Array.isArray(props.value)\r\n ? props.value.includes(item.value)\r\n ? props.value.filter((v) => v !== item.value)\r\n : [...props.value, item.value]\r\n : [item.value];\r\n\r\n handleChange(newValue);\r\n } else {\r\n handleChange(item.value);\r\n }\r\n }}\r\n />\r\n </motion.div>\r\n ))}\r\n </Flex>\r\n )\r\n}\r\n\r\nfunction Segment(props: SegmentProps & {\r\n selected: boolean;\r\n onClick: () => void;\r\n fz?: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n\r\n return (\r\n <MotionFlex\r\n onClick={props.onClick}\r\n w='100%'\r\n direction=\"column\"\r\n align=\"center\"\r\n // p='xs'\r\n h='100%'\r\n bg={props.selected ? props.color ? colorWithAlpha(props.color, 0.2) : colorWithAlpha(theme.colors[theme.primaryColor][theme.primaryShade as number], 0.2) : 'transparent'}\r\n pos=\"relative\"\r\n style={{\r\n // position: \"relative\",\r\n cursor: \"pointer\",\r\n }}\r\n justify={'center'}\r\n whileHover={{ scale: 1.05 }}\r\n whileTap={{ scale: 0.95 }}\r\n >\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n // bg='red'\r\n p='xs'\r\n >\r\n \r\n {props.icon && \r\n <MotionIcon\r\n icon={props.icon as IconProp}\r\n // size='sm'\r\n initial={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n animate={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n exit={{\r\n color: 'inherit',\r\n }}\r\n style={{\r\n fontSize: theme.fontSizes.xs,\r\n marginBottom: '0.2vh',\r\n }}\r\n />\r\n }\r\n <MotionText\r\n size={props.fz || 'xs'}\r\n initial={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'rgba(255, 255, 255, 0.7)', \r\n }}\r\n animate={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'rgba(255, 255, 255, 0.7)', \r\n }}\r\n exit={{\r\n color: 'rgba(255, 255, 255, 0.7)',\r\n }}\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.label.toUpperCase()}</MotionText>\r\n {props.rightSection}\r\n </Flex>\r\n\r\n {/* Enhanced bottom border with smooth animation */}\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scaleX: props.selected ? 1 : 0,\r\n opacity: props.selected ? 1 : 0,\r\n }}\r\n transition={{\r\n duration: 0.3,\r\n ease: [0.4, 0, 0.2, 1], // Custom easing curve for smooth feel\r\n }}\r\n style={{\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n height: '0.2vh',\r\n backgroundColor: props.color || theme.colors[theme.primaryColor][5],\r\n transformOrigin: 'center',\r\n }}\r\n />\r\n </MotionFlex>\r\n );\r\n}","import { createContext, useContext, useRef } from \"react\";\r\nimport { create, StoreApi, useStore } from \"zustand\";\r\nimport {SegmentedControl, SegmentProps} from \"./SegmentedControl\";\r\n\r\nexport type NavigationStore = {\r\n pageId: string;\r\n}\r\n\r\nexport const NavigationContext = createContext<StoreApi<NavigationStore> | null>(null);\r\n\r\nexport function useNavigation<T>(selector: (state: NavigationStore) => T){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigation must be used within a NavigationProvider');\r\n }\r\n return useStore(navigation, selector);\r\n}\r\n\r\n// Hook to get the store API for setting state\r\nexport function useNavigationStore(){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigationStore must be used within a NavigationProvider');\r\n }\r\n return navigation;\r\n}\r\n\r\nexport function NavigationProvider({ children, defaultPage }: { children: React.ReactNode, defaultPage?: string }){\r\n const storeRef = useRef<StoreApi<NavigationStore>>(\r\n create<NavigationStore>(() => ({\r\n pageId: defaultPage || 'home',\r\n }))\r\n );\r\n\r\n return (\r\n <NavigationContext.Provider value={storeRef.current}>\r\n {children}\r\n </NavigationContext.Provider>\r\n );\r\n}\r\n\r\nexport function NavBar(props: {\r\n items: SegmentProps[];\r\n}){\r\n const pageId = useNavigation((state) => state.pageId);\r\n const store = useNavigationStore();\r\n \r\n return (\r\n <SegmentedControl\r\n sounds\r\n w='100%'\r\n value={pageId}\r\n items={props.items}\r\n onChange={(value) => {\r\n store.setState({ pageId: value as string });\r\n }}\r\n />\r\n )\r\n}","import { motion, Variants } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport type ProgressProps = {\r\n progress: number; // 0 - 100 range\r\n segments: number; // Number of segments (e.g., 5, 10, etc.)\r\n size?: string | number;\r\n};\r\n\r\nconst containerVariants: Variants = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: {\r\n staggerChildren: 0.1,\r\n delayChildren: 0.05,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n transition: {\r\n staggerChildren: 0.05,\r\n staggerDirection: -1,\r\n }\r\n }\r\n};\r\n\r\n// Child item variants\r\nconst itemVariants: Variants = {\r\n hidden: { \r\n opacity: 0, \r\n x: 20,\r\n scale: 0.95,\r\n },\r\n visible: {\r\n opacity: 1,\r\n x: 0,\r\n scale: 1,\r\n transition: {\r\n type: \"spring\",\r\n stiffness: 300,\r\n damping: 24,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n x: -10,\r\n scale: 0.95,\r\n transition: {\r\n duration: 0.2,\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nexport function SegmentedProgress(props: ProgressProps) {\r\n const progressPerSegment = 100 / props.segments; // Percentage per segment\r\n const filledSegments = Math.floor(props.progress / progressPerSegment);\r\n const partialFill = (props.progress % progressPerSegment) / progressPerSegment; // 0 to 1 range for partial fill\r\n\r\n return (\r\n <MotionFlex \r\n w=\"100%\" \r\n h={props.size || '1vh'}\r\n gap='xs'\r\n initial='hidden'\r\n animate='visible'\r\n variants={containerVariants}\r\n >\r\n {[...Array(props.segments)].map((_, index) => {\r\n const isFilled = index < filledSegments;\r\n const isPartial = index === filledSegments;\r\n\r\n return (\r\n <motion.div\r\n key={index}\r\n variants={itemVariants}\r\n style={{\r\n flex: 1,\r\n height: \"100%\",\r\n background: isFilled\r\n ? \"rgba(255, 255, 255, 0.8)\"\r\n : isPartial\r\n ? `linear-gradient(to right, rgba(255, 255, 255, 0.8) ${partialFill * 100}%, rgba(255, 255, 255, 0.2) ${partialFill * 100}%)`\r\n : \"rgba(255, 255, 255, 0.2)\",\r\n transition: \"background 0.3s ease\",\r\n }}\r\n />\r\n );\r\n })}\r\n </MotionFlex>\r\n );\r\n}","import { colorWithAlpha } from \"@/utils\";\r\nimport { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { Flex, MantineSize, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { BorderedIcon } from \"./BorderedIcon\";\r\nimport { useSettings } from \"@/utils/useSettings\";\r\n\r\nexport type ButtonProps = {\r\n icon: string;\r\n onClick?: () => void;\r\n};\r\n\r\nexport type TitleSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport type TitleProps = {\r\n title: string;\r\n description: string;\r\n icon: string;\r\n iconColor?: string;\r\n bg?: string;\r\n w?: string;\r\n removeBorder?: boolean;\r\n borderColor?: string;\r\n p?: string;\r\n /**\r\n * Scale of the whole block — icon, title text, description text, and inner\r\n * spacing all follow this single value. Defaults to \"md\" to preserve the\r\n * historical look so existing consumers don't shift.\r\n */\r\n size?: TitleSize;\r\n rightSection?: React.ReactNode;\r\n};\r\n\r\ntype SizePreset = {\r\n iconFontSize: string;\r\n iconPadding: string;\r\n titleSize: MantineSize | string;\r\n titleLineHeight: string;\r\n descriptionSize: MantineSize | string;\r\n innerGap: MantineSize | string;\r\n bottomPad: MantineSize | string;\r\n};\r\n\r\nfunction getSizePreset(size: TitleSize, themeMdFontSize: string): SizePreset {\r\n switch (size) {\r\n case \"xs\":\r\n return { iconFontSize: \"1.2vh\", iconPadding: \"xxs\", titleSize: \"xxs\", titleLineHeight: \"1.2vh\", descriptionSize: \"xxs\", innerGap: \"xs\", bottomPad: \"xs\" };\r\n case \"sm\":\r\n return { iconFontSize: \"1.6vh\", iconPadding: \"xxs\", titleSize: \"xs\", titleLineHeight: \"1.6vh\", descriptionSize: \"xxs\", innerGap: \"xs\", bottomPad: \"xs\" };\r\n case \"lg\":\r\n return { iconFontSize: \"2.6vh\", iconPadding: \"sm\", titleSize: \"md\", titleLineHeight: \"2.6vh\", descriptionSize: \"sm\", innerGap: \"sm\", bottomPad: \"sm\" };\r\n case \"xl\":\r\n return { iconFontSize: \"3.2vh\", iconPadding: \"sm\", titleSize: \"lg\", titleLineHeight: \"3.2vh\", descriptionSize: \"md\", innerGap: \"md\", bottomPad: \"md\" };\r\n case \"md\":\r\n default:\r\n return { iconFontSize: themeMdFontSize, iconPadding: \"xs\", titleSize: \"sm\", titleLineHeight: themeMdFontSize, descriptionSize: \"xs\", innerGap: \"sm\", bottomPad: \"sm\" };\r\n }\r\n}\r\n\r\nexport function Title(props: TitleProps) {\r\n const game = useSettings((state) => state.game);\r\n const theme = useMantineTheme();\r\n const preset = getSizePreset(props.size ?? \"md\", theme.fontSizes.md);\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n bg={props.bg || \"transparent\"}\r\n gap=\"xs\"\r\n w={props.w || \"100%\"}\r\n p={props.p || \"unset\"}\r\n pb={!props.p ? preset.bottomPad : props.p}\r\n style={{\r\n userSelect: \"none\",\r\n borderBottom: props.removeBorder ? \"none\" : `0.3vh solid ${props.borderColor || colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`,\r\n }}\r\n >\r\n <Flex align=\"center\" justify={\"center\"}>\r\n <Flex align=\"center\" gap={preset.innerGap} pr=\"xs\">\r\n <BorderedIcon\r\n icon={props.icon as IconName}\r\n fontSize={preset.iconFontSize}\r\n color={props.iconColor}\r\n p={preset.iconPadding}\r\n />\r\n <Flex direction=\"column\" gap=\"0.25vh\">\r\n <Text\r\n p=\"0\"\r\n size={preset.titleSize as MantineSize}\r\n style={{\r\n lineHeight: preset.titleLineHeight,\r\n fontFamily: game == \"fivem\" ? \"Akrobat Bold\" : \"Red Dead\",\r\n letterSpacing: \"0.05em\",\r\n textTransform: \"uppercase\",\r\n }}\r\n >\r\n {props.title}\r\n </Text>\r\n <Text\r\n size={preset.descriptionSize as MantineSize}\r\n c=\"grey\"\r\n style={{ whiteSpace: \"normal\", wordWrap: \"break-word\" }}\r\n >\r\n {props.description}\r\n </Text>\r\n </Flex>\r\n </Flex>\r\n <Flex ml=\"auto\" align=\"center\" gap=\"xs\">\r\n {props.rightSection}\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n );\r\n}\r\n","\r\nimport { Flex, Progress, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\n\r\nexport function LevelBanner(props: {\r\n exp: number;\r\n level: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n\r\n color?: string;\r\n}){ \r\n return (\r\n <MotionFlex\r\n // bg='rgba(77, 77, 77, 0.3)'\r\n w='35vh'\r\n pos='absolute'\r\n left='50%'\r\n align='center'\r\n gap='xs'\r\n style={{\r\n \r\n borderRadius: useMantineTheme().radius.xxs,\r\n }}\r\n // direction={'column'}\r\n initial={{ opacity: 0, y: -10, transform: 'translateX(-50%)' }}\r\n animate={{ opacity: 1, y: 0, transform: 'translateX(-50%)' }}\r\n exit={{ opacity: 0, y: -10, transform: 'translateX(-50%)' }}\r\n transition={{ duration: 0.3 }}\r\n direction={'column'}\r\n >\r\n <Flex\r\n w='100%'\r\n justify={'space-between'}\r\n >\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.9)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n }}\r\n >LVL {props.level}</Text>\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.7)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n }}\r\n >{props.exp}/{props.nextLevelXP} XP</Text>\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.7)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em', \r\n }}\r\n >LVL {props.level + 1}</Text>\r\n </Flex>\r\n <Progress\r\n color={props.color}\r\n w='100%'\r\n size='sm'\r\n value={props.progressToLevel}\r\n />\r\n </MotionFlex>\r\n\r\n )\r\n}\r\n\r\n","import { colorWithAlpha, locale } from \"@/utils\";\r\nimport { Flex, RingProgress, Text, alpha, useMantineTheme } from \"@mantine/core\";\r\n\r\nexport function LevelPanel(props: {\r\n exp: number;\r\n level: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n text?: string;\r\n color?: string;\r\n}){\r\n const theme = useMantineTheme();\r\n\r\n return (\r\n <Flex\r\n w='fit-content'\r\n pr='8vh'\r\n pl='8vh'\r\n \r\n bg='linear-gradient(180deg, rgba(30, 30, 30, 0.82) 0%, rgba(30, 30, 30, 0.3) 50%, rgba(30, 30, 30, 0.6) 100%)' \r\n style={{\r\n borderRadius: theme.radius.xs,\r\n boxShadow: theme.shadows.sm,\r\n outline: '0.2vh solid rgba(255,255,255,0.1)',\r\n }}\r\n justify={'center'}\r\n align={'center'}\r\n direction={'column'}\r\n p='sm'\r\n >\r\n\r\n <RingProgress\r\n size={190}\r\n roundCaps\r\n thickness={10}\r\n sections={[{ value: props.progressToLevel, color:colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.9) }]}\r\n label={\r\n <Flex\r\n justify={'center'}\r\n align={'center'}\r\n direction={'column'}\r\n >\r\n <Text\r\n size='6vh'\r\n c={colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.9)}\r\n style={{\r\n fontFamily: 'Akrobat Black',\r\n textShadow: `0 0 10px ${colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.7)}`, \r\n }}\r\n >\r\n {props.level}\r\n </Text>\r\n </Flex>\r\n }\r\n />\r\n <Text\r\n size='sm'\r\n style={{\r\n fontFamily: 'Akrobat Black',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >\r\n {props.text || locale('Level')}\r\n </Text>\r\n <Text\r\n size='xs'\r\n c='rgba(255,255,255,0.6)'\r\n >\r\n {props.exp}/{props.nextLevelXP} {locale('EXP')}\r\n </Text>\r\n </Flex>\r\n )\r\n}\r\n","import { alpha, Flex, Portal, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { X } from \"lucide-react\";\r\nimport React, { useRef } from \"react\";\r\n\r\nexport type ModalProps = {\r\n title: string;\r\n icon?: React.ElementType;\r\n iconColor?: string;\r\n description?: string;\r\n badge?: { label: string; color: string };\r\n onClose: () => void;\r\n width?: string;\r\n maxHeight?: string;\r\n height?: string;\r\n zIndex?: number;\r\n clickOutside?: boolean;\r\n children: React.ReactNode;\r\n};\r\n\r\nexport function Modal({\r\n title,\r\n icon: Icon,\r\n iconColor,\r\n description,\r\n badge,\r\n onClose,\r\n width = \"52vh\",\r\n maxHeight = \"85vh\",\r\n height,\r\n zIndex = 100,\r\n clickOutside = true,\r\n children,\r\n}: ModalProps) {\r\n const theme = useMantineTheme();\r\n const pointerDownOnOverlay = useRef(false);\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n zIndex,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n background: \"rgba(0,0,0,0.65)\",\r\n }}\r\n onPointerDown={(e) => {\r\n pointerDownOnOverlay.current = e.target === e.currentTarget;\r\n }}\r\n onClick={(e) => {\r\n if (clickOutside && e.target === e.currentTarget && pointerDownOnOverlay.current) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.96, y: 8 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.98),\r\n border: `0.1vh solid ${theme.colors.dark[7]}`,\r\n borderRadius: theme.radius.sm,\r\n width,\r\n maxHeight,\r\n height,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n userSelect: \"none\",\r\n }}\r\n >\r\n {/* Header */}\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n style={{\r\n borderBottom: `0.1vh solid ${theme.colors.dark[7]}`,\r\n flexShrink: 0,\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"xs\">\r\n {Icon && (\r\n <Icon\r\n color={iconColor ?? \"rgba(255,255,255,0.6)\"}\r\n size=\"2vh\"\r\n />\r\n )}\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"sm\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n >\r\n {title}\r\n </Text>\r\n {badge && (\r\n <div\r\n style={{\r\n background: alpha(badge.color, 0.12),\r\n border: `0.1vh solid ${alpha(badge.color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: `0 ${theme.spacing.xxs}`,\r\n }}\r\n >\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c={badge.color}\r\n >\r\n {badge.label}\r\n </Text>\r\n </div>\r\n )}\r\n </Flex>\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: theme.spacing.xxs,\r\n borderRadius: theme.radius.xs,\r\n display: \"flex\",\r\n }}\r\n >\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Description */}\r\n {description && (\r\n <Flex px=\"sm\" pt=\"xs\">\r\n <Text\r\n ff=\"Akrobat Regular\"\r\n size=\"xs\"\r\n c=\"rgba(255,255,255,0.65)\"\r\n style={{ lineHeight: 1.5 }}\r\n >\r\n {description}\r\n </Text>\r\n </Flex>\r\n )}\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, minHeight: 0, display: \"flex\", flexDirection: \"column\" }}>\r\n {children}\r\n </div>\r\n </motion.div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Button, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\n\r\nexport type PromptButton = {\r\n icon?: string;\r\n text: string;\r\n color?: string;\r\n variant?: 'filled' | 'outline' | 'light' | 'subtle' | 'default';\r\n onClick: () => void;\r\n}\r\n\r\nexport type Prompt = {\r\n message: string;\r\n buttons: PromptButton[];\r\n};\r\n\r\nexport function PromptModal(props: Prompt) {\r\n const theme = useMantineTheme();\r\n return (\r\n <MotionFlex\r\n gap='sm'\r\n direction={'column'}\r\n flex={1}\r\n >\r\n <Text\r\n size='xs'\r\n c='rgba(255, 255, 255, 0.8)'\r\n >{props.message}</Text>\r\n <Flex\r\n gap='sm'\r\n >\r\n {props.buttons.map((button, index) => (\r\n <Button\r\n key={index}\r\n variant={button.variant}\r\n color={button.color}\r\n flex={0.5}\r\n onClick={button.onClick}\r\n leftSection={button.icon ? (\r\n <FontAwesomeIcon\r\n icon={button.icon as IconProp}\r\n style={{\r\n fontSize: theme.fontSizes.xs,\r\n }}\r\n />\r\n ): undefined}\r\n >\r\n {button.text}\r\n </Button>\r\n ))}\r\n </Flex>\r\n </MotionFlex>\r\n )\r\n} \r\n\r\n","import { createContext, useContext, useRef } from \"react\";\r\nimport { create, StoreApi, useStore } from \"zustand\";\r\nimport { Modal } from \"./Modal\";\r\nimport { AnimatePresence } from \"framer-motion\";\r\nimport React from \"react\";\r\n\r\nexport type StoreModalProps = {\r\n children: React.ReactNode;\r\n title: string;\r\n icon?: React.ElementType;\r\n iconColor?: string;\r\n description?: string;\r\n badge?: { label: string; color: string };\r\n height?: string;\r\n width?: string;\r\n maxHeight?: string;\r\n zIndex?: number;\r\n clickOutside?: boolean;\r\n};\r\n\r\ntype ModalStore = {\r\n active: StoreModalProps | null;\r\n}\r\n\r\nexport const ModalContext = createContext<StoreApi<ModalStore> | null>(null);\r\n\r\nexport function useModal<T>(selector: (state: ModalStore) => T): T {\r\n const modal = useContext(ModalContext);\r\n if(!modal){\r\n throw new Error('useModal must be used within a ModalProvider');\r\n }\r\n return useStore(modal, selector);\r\n}\r\n\r\nfunction StoreModal() {\r\n const active = useModal((state) => state.active);\r\n const { hideModal } = useModalActions();\r\n\r\n return (\r\n <AnimatePresence>\r\n {active && (\r\n <Modal\r\n title={active.title}\r\n icon={active.icon}\r\n iconColor={active.iconColor}\r\n description={active.description}\r\n badge={active.badge}\r\n onClose={hideModal}\r\n width={active.width}\r\n maxHeight={active.maxHeight}\r\n height={active.height}\r\n zIndex={active.zIndex}\r\n clickOutside={active.clickOutside}\r\n >\r\n {active.children}\r\n </Modal>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ModalProvider({ children }: { children: React.ReactNode }){\r\n const storeRef = useRef<StoreApi<ModalStore>>(\r\n create<ModalStore>(() => ({\r\n active: null,\r\n }))\r\n );\r\n\r\n return (\r\n <ModalContext.Provider value={storeRef.current}>\r\n <StoreModal/>\r\n {children}\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport function useModalActions() {\r\n const modal = useContext(ModalContext);\r\n if (!modal) throw new Error(\"useModalActions must be used within a ModalProvider\");\r\n\r\n const showModal = (openModal: StoreModalProps) => {\r\n modal.setState({ active: openModal });\r\n };\r\n\r\n const hideModal = () => {\r\n modal.setState({ active: null });\r\n };\r\n\r\n return { showModal, hideModal };\r\n}\r\n\r\n","import { alpha, Flex, Portal, Text, TextInput, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { AlertTriangle, Trash2, X } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\n\r\nexport type ConfirmModalProps = {\r\n title: string;\r\n description: string;\r\n confirmLabel?: string;\r\n /** If provided, user must type this exact string to enable the confirm button */\r\n confirmText?: string;\r\n onConfirm: () => void;\r\n onClose: () => void;\r\n zIndex?: number;\r\n};\r\n\r\nexport function ConfirmModal({\r\n title,\r\n description,\r\n confirmLabel = \"Delete\",\r\n confirmText,\r\n onConfirm,\r\n onClose,\r\n zIndex = 200,\r\n}: ConfirmModalProps) {\r\n const theme = useMantineTheme();\r\n const [typed, setTyped] = useState(\"\");\r\n const canConfirm = !confirmText || typed === confirmText;\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n zIndex,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n background: \"rgba(0,0,0,0.7)\",\r\n }}\r\n onClick={onClose}\r\n >\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.95, y: 8 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: 8 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n onClick={(e) => e.stopPropagation()}\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.98),\r\n border: `0.1vh solid ${alpha(\"#ef4444\", 0.3)}`,\r\n borderRadius: theme.radius.sm,\r\n width: \"44vh\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Header */}\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n style={{\r\n borderBottom: `0.1vh solid ${alpha(\"#ef4444\", 0.2)}`,\r\n background: alpha(\"#ef4444\", 0.06),\r\n flexShrink: 0,\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"xs\">\r\n <AlertTriangle size=\"1.8vh\" color=\"#ef4444\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"sm\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"#ef4444\"\r\n >\r\n {title}\r\n </Text>\r\n </Flex>\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: theme.spacing.xxs,\r\n borderRadius: theme.radius.xs,\r\n display: \"flex\",\r\n }}\r\n >\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Body */}\r\n <Flex direction=\"column\" gap=\"sm\" p=\"sm\">\r\n <Text\r\n ff=\"Akrobat Regular\"\r\n size=\"xs\"\r\n c=\"rgba(255,255,255,0.65)\"\r\n style={{ lineHeight: 1.5 }}\r\n >\r\n {description}\r\n </Text>\r\n\r\n {confirmText && (\r\n <Flex direction=\"column\" gap=\"xxs\">\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.07em\"\r\n c=\"rgba(255,255,255,0.35)\"\r\n >\r\n Type{\" \"}\r\n <Text component=\"span\" ff=\"Akrobat Bold\" c=\"#ef4444\">\r\n {confirmText}\r\n </Text>{\" \"}\r\n to confirm\r\n </Text>\r\n <TextInput\r\n size=\"xs\"\r\n placeholder={confirmText}\r\n value={typed}\r\n onChange={(e) => setTyped(e.currentTarget.value)}\r\n styles={(t) => ({\r\n input: {\r\n backgroundColor: alpha(t.colors.dark[7], 0.5),\r\n border: `0.1vh solid ${alpha(\r\n typed === confirmText\r\n ? \"#ef4444\"\r\n : t.colors.dark[5],\r\n 0.5\r\n )}`,\r\n color: \"rgba(255,255,255,0.85)\",\r\n fontFamily: \"Akrobat Regular\",\r\n },\r\n })}\r\n autoFocus\r\n />\r\n </Flex>\r\n )}\r\n </Flex>\r\n\r\n {/* Footer */}\r\n <Flex\r\n justify=\"flex-end\"\r\n gap=\"xs\"\r\n px=\"sm\"\r\n py=\"sm\"\r\n style={{\r\n borderTop: `0.1vh solid ${theme.colors.dark[7]}`,\r\n flexShrink: 0,\r\n }}\r\n >\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{\r\n background: \"transparent\",\r\n border: `0.1vh solid ${theme.colors.dark[6]}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.5vh 1vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n }}\r\n >\r\n <X size=\"1.4vh\" color=\"rgba(255,255,255,0.4)\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"rgba(255,255,255,0.4)\"\r\n >\r\n Cancel\r\n </Text>\r\n </motion.button>\r\n\r\n <motion.button\r\n onClick={() => {\r\n if (canConfirm) {\r\n onConfirm();\r\n onClose();\r\n }\r\n }}\r\n whileHover={\r\n canConfirm\r\n ? {\r\n background: alpha(\"#ef4444\", 0.22),\r\n borderColor: alpha(\"#ef4444\", 0.6),\r\n }\r\n : undefined\r\n }\r\n whileTap={canConfirm ? { scale: 0.97 } : undefined}\r\n style={{\r\n background: alpha(\"#ef4444\", canConfirm ? 0.14 : 0.05),\r\n border: `0.1vh solid ${alpha(\r\n \"#ef4444\",\r\n canConfirm ? 0.45 : 0.15\r\n )}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.5vh 1vh\",\r\n cursor: canConfirm ? \"pointer\" : \"not-allowed\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n opacity: canConfirm ? 1 : 0.45,\r\n transition: \"opacity 0.15s\",\r\n }}\r\n >\r\n <Trash2 size=\"1.4vh\" color=\"#ef4444\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"#ef4444\"\r\n >\r\n {confirmLabel}\r\n </Text>\r\n </motion.button>\r\n </Flex>\r\n </motion.div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n}\r\n","// Yellow ⚠ warning banner shown at the top of any scriptConfig admin panel\r\n// when one or more configured items aren't registered in the player's\r\n// inventory items table.\r\n//\r\n// Driven by dirk_lib's `<scriptName>:getMissingItems` callback (server-side\r\n// audit walks the schema's x-installItem / x-installItemList annotations,\r\n// cross-references `lib.inventory.item(name)`, and returns the missing names\r\n// + ready-to-paste install snippets per format).\r\n//\r\n// Auto-mounted by ConfigPanel above its tab AnimatePresence so it survives\r\n// tab switches without remounting. Consumers can suppress it by passing\r\n// `suppressMissingItemsBanner` to ConfigPanel.\r\n//\r\n// To use this in another consumer: nothing to do. ConfigPanel mounts it.\r\n// Just annotate the consumer's schema.json with x-installItem /\r\n// x-installItemList on item-name fields, and dirk_lib does the rest.\r\n\r\nimport { alpha, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { AlertTriangle, ChevronDown, Check, Copy, RefreshCw } from \"lucide-react\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { create } from \"zustand\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\n\r\ntype MissingItem = {\r\n name: string;\r\n label?: string;\r\n weight?: number;\r\n description?: string;\r\n};\r\n\r\ntype AuditPayload = {\r\n missing: MissingItem[];\r\n snippets: { ox: string; qb: string; esx: string };\r\n};\r\n\r\ntype AuditResponse = {\r\n success: boolean;\r\n _error?: string;\r\n data?: AuditPayload;\r\n};\r\n\r\ntype TabId = \"ox\" | \"qb\" | \"esx\";\r\n\r\nconst TABS: { id: TabId; label: string }[] = [\r\n { id: \"ox\", label: \"ox_inventory\" },\r\n { id: \"qb\", label: \"qb-inventory\" },\r\n { id: \"esx\", label: \"ESX legacy SQL\" },\r\n];\r\n\r\n// Module-level audit store. Persists across component re-mounts (ConfigPanel\r\n// keys its tab content by activeTab, so each tab switch unmounts + remounts\r\n// children). Stored data survives, fetch fires once per panel session.\r\ntype AuditStore = {\r\n data: AuditPayload | null;\r\n loaded: boolean;\r\n inFlight: boolean;\r\n refresh: () => Promise<void>;\r\n};\r\n\r\nexport const useMissingItemsAudit = create<AuditStore>((set, get) => ({\r\n data: null,\r\n loaded: false,\r\n inFlight: false,\r\n refresh: async () => {\r\n if (get().inFlight) return;\r\n set({ inFlight: true });\r\n try {\r\n const res = await fetchNui<AuditResponse>(\"GET_MISSING_ITEMS\", undefined, {\r\n success: true,\r\n data: { missing: [], snippets: { ox: \"\", qb: \"\", esx: \"\" } },\r\n });\r\n if (res?.success && res.data) {\r\n set({ data: res.data, loaded: true });\r\n } else {\r\n set({ loaded: true });\r\n }\r\n } catch {\r\n set({ loaded: true });\r\n } finally {\r\n set({ inFlight: false });\r\n }\r\n },\r\n}));\r\n\r\nexport function MissingItemsBanner() {\r\n const theme = useMantineTheme();\r\n const audit = useMissingItemsAudit((s) => s.data);\r\n const loaded = useMissingItemsAudit((s) => s.loaded);\r\n const inFlight = useMissingItemsAudit((s) => s.inFlight);\r\n const refresh = useMissingItemsAudit((s) => s.refresh);\r\n const [expanded, setExpanded] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>(\"ox\");\r\n const [hoveredTab, setHoveredTab] = useState<TabId | null>(null);\r\n const [copied, setCopied] = useState<TabId | null>(null);\r\n\r\n // First fetch — only when not yet loaded. Re-mount across tab switches\r\n // re-fires this useEffect but the `loaded` guard blocks the second hit.\r\n useEffect(() => {\r\n if (!loaded) refresh();\r\n }, [loaded, refresh]);\r\n\r\n const handleCopy = useCallback((tab: TabId) => {\r\n if (!audit) return;\r\n const text = audit.snippets[tab] ?? \"\";\r\n navigator.clipboard.writeText(text).then(() => {\r\n setCopied(tab);\r\n setTimeout(() => setCopied((c) => (c === tab ? null : c)), 1500);\r\n }).catch(() => {});\r\n }, [audit]);\r\n\r\n const handleRefresh = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n refresh();\r\n }, [refresh]);\r\n\r\n if (!audit || audit.missing.length === 0) return null;\r\n\r\n const warnColor = \"#f59e0b\"; // amber\r\n const names = audit.missing.map((m) => m.name);\r\n\r\n return (\r\n <div\r\n style={{\r\n background: alpha(warnColor, 0.06),\r\n border: `0.1vh solid ${alpha(warnColor, 0.35)}`,\r\n borderLeft: `0.3vh solid ${warnColor}`,\r\n borderRadius: theme.radius.xs,\r\n margin: \"0.6vh 1vh\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Summary row */}\r\n <Flex align=\"center\" gap=\"0.8vh\" p=\"0.8vh 1vh\" style={{ cursor: \"pointer\" }} onClick={() => setExpanded((e) => !e)}>\r\n <AlertTriangle size=\"1.8vh\" color={warnColor} strokeWidth={2.5} />\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0 }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.07em\" c={warnColor}>\r\n {audit.missing.length === 1\r\n ? \"1 item missing from your inventory\"\r\n : `${audit.missing.length} items missing from your inventory`}\r\n </Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.5)\" lineClamp={1} style={{ fontFamily: \"monospace\" }}>\r\n {names.join(\", \")}\r\n </Text>\r\n </Flex>\r\n {/* Refresh button — re-runs the audit. Bounded: server callback, no\r\n event listener loops. */}\r\n <button\r\n onClick={handleRefresh}\r\n disabled={inFlight}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n padding: \"0.3vh\",\r\n cursor: inFlight ? \"wait\" : \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n opacity: inFlight ? 0.4 : 0.7,\r\n }}\r\n title=\"Re-check\"\r\n >\r\n <motion.span\r\n animate={{ rotate: inFlight ? 360 : 0 }}\r\n transition={inFlight ? { duration: 1, repeat: Infinity, ease: \"linear\" } : { duration: 0 }}\r\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n >\r\n <RefreshCw size=\"1.5vh\" color={alpha(warnColor, 0.7)} />\r\n </motion.span>\r\n </button>\r\n <motion.div\r\n animate={{ rotate: expanded ? 180 : 0 }}\r\n transition={{ duration: 0.18 }}\r\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n >\r\n <ChevronDown size=\"1.8vh\" color={alpha(warnColor, 0.7)} />\r\n </motion.div>\r\n </Flex>\r\n\r\n {/* Expandable code view */}\r\n <AnimatePresence initial={false}>\r\n {expanded && (\r\n <motion.div\r\n key=\"expanded\"\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n style={{ overflow: \"hidden\", borderTop: `0.1vh solid ${alpha(warnColor, 0.18)}` }}\r\n >\r\n {/* Tab strip — plain buttons. Framer-motion's whileHover/whileTap\r\n caused two glitches we don't need: a shrink-spring on click\r\n and stuck hover-tint on the previously-active tab until you\r\n hover it again. CSS-driven hover state is sync'd with React\r\n state cleanly. */}\r\n <Flex gap=\"0\" style={{ borderBottom: `0.1vh solid ${alpha(warnColor, 0.18)}` }}>\r\n {TABS.map((tab) => {\r\n const active = tab.id === activeTab;\r\n const hovered = hoveredTab === tab.id;\r\n let bg: string = \"transparent\";\r\n if (active) bg = alpha(warnColor, 0.12);\r\n else if (hovered) bg = alpha(warnColor, 0.08);\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={(e) => { e.stopPropagation(); setActiveTab(tab.id); }}\r\n onMouseEnter={() => setHoveredTab(tab.id)}\r\n onMouseLeave={() => setHoveredTab((h) => (h === tab.id ? null : h))}\r\n style={{\r\n flex: 1,\r\n background: bg,\r\n border: \"none\",\r\n borderBottom: active ? `0.2vh solid ${warnColor}` : \"0.2vh solid transparent\",\r\n padding: \"0.3vh 1vh\",\r\n cursor: active ? \"default\" : \"pointer\",\r\n color: active ? warnColor : \"rgba(255,255,255,0.5)\",\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"var(--mantine-font-size-xxs)\",\r\n letterSpacing: \"0.07em\",\r\n textTransform: \"uppercase\",\r\n transition: \"background 0.12s\",\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n );\r\n })}\r\n </Flex>\r\n\r\n <CodeView\r\n code={audit.snippets[activeTab] ?? \"\"}\r\n copied={copied === activeTab}\r\n onCopy={(e) => { e.stopPropagation(); handleCopy(activeTab); }}\r\n warnColor={warnColor}\r\n />\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nfunction CodeView({\r\n code,\r\n copied,\r\n onCopy,\r\n warnColor,\r\n}: {\r\n code: string;\r\n copied: boolean;\r\n onCopy: (e: React.MouseEvent) => void;\r\n warnColor: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n const [hovered, setHovered] = useState(false);\r\n const lines = code === \"\" ? [\"\"] : code.split(\"\\n\");\r\n const lineNumWidth = String(lines.length).length;\r\n\r\n const copyBg = copied\r\n ? alpha(\"#22c55e\", 0.15)\r\n : hovered\r\n ? alpha(warnColor, 0.18)\r\n : alpha(warnColor, 0.1);\r\n\r\n return (\r\n <div style={{ position: \"relative\" }}>\r\n <button\r\n onClick={onCopy}\r\n onMouseEnter={() => setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n style={{\r\n position: \"absolute\",\r\n top: \"0.6vh\",\r\n right: \"0.8vh\",\r\n zIndex: 2,\r\n background: copyBg,\r\n border: `0.1vh solid ${alpha(copied ? \"#22c55e\" : warnColor, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.4vh 0.7vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n transition: \"background 0.12s\",\r\n }}\r\n >\r\n {copied\r\n ? <Check size=\"1.4vh\" color=\"#22c55e\" />\r\n : <Copy size=\"1.4vh\" color={warnColor} />}\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={copied ? \"#22c55e\" : warnColor}>\r\n {copied ? \"Copied\" : \"Copy\"}\r\n </Text>\r\n </button>\r\n\r\n <div style={{\r\n background: alpha(theme.colors.dark[9], 0.6),\r\n maxHeight: \"40vh\",\r\n overflowY: \"auto\",\r\n overflowX: \"auto\",\r\n padding: \"0.6vh 0\",\r\n }}>\r\n <table style={{ borderCollapse: \"collapse\", width: \"100%\", fontFamily: \"monospace\", fontSize: \"1.2vh\", lineHeight: 1.5 }}>\r\n <tbody>\r\n {lines.map((line, i) => (\r\n <tr key={i}>\r\n <td style={{\r\n width: `${lineNumWidth + 2}ch`,\r\n textAlign: \"right\",\r\n padding: \"0 0.8vh 0 1vh\",\r\n color: \"rgba(255,255,255,0.25)\",\r\n userSelect: \"none\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"top\",\r\n }}>{i + 1}</td>\r\n <td style={{\r\n padding: \"0 1vh\",\r\n color: \"rgba(255,255,255,0.85)\",\r\n whiteSpace: \"pre\",\r\n verticalAlign: \"top\",\r\n }}>{line || \"\"}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport React, { createContext, useContext, useMemo, useRef } from \"react\";\r\nimport { createStore, StoreApi, useStore } from \"zustand\";\r\n\r\n/* ======================================================\r\n Type Utilities\r\n====================================================== */\r\n\r\ntype PathValue<T, P extends string> = P extends keyof T\r\n ? T[P]\r\n : P extends `${infer K}.${infer R}`\r\n ? K extends keyof T\r\n ? PathValue<T[K], R>\r\n : never\r\n : never;\r\n\r\ntype Paths<T> = T extends object\r\n ? {\r\n [K in keyof T]: K extends string\r\n ? T[K] extends object\r\n ? T[K] extends any[] | Date | Function\r\n ? K\r\n : K | `${K}.${Paths<T[K]>}`\r\n : K\r\n : never;\r\n }[keyof T]\r\n : never;\r\n\r\ntype LoosePaths<T> = Paths<T> | (string & {});\r\n\r\n/* ======================================================\r\n Utilities\r\n====================================================== */\r\n\r\nfunction getNested(obj: any, path: string): any {\r\n return path.split(\".\").reduce((acc, key) => (acc ? acc[key] : undefined), obj);\r\n}\r\n\r\nfunction setNested(obj: any, path: string, value: any): any {\r\n const keys = path.split(\".\");\r\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\r\n let current = root;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n const nextKey = keys[i + 1];\r\n const isIndex = !isNaN(Number(nextKey));\r\n\r\n const existing = current[key];\r\n\r\n current[key] =\r\n existing != null\r\n ? Array.isArray(existing)\r\n ? [...existing]\r\n : { ...existing }\r\n : isIndex\r\n ? []\r\n : {};\r\n\r\n current = current[key];\r\n }\r\n\r\n current[keys[keys.length - 1]] = value;\r\n return root;\r\n}\r\n\r\nfunction deleteNested(obj: any, path: string): any {\r\n const keys = path.split(\".\");\r\n const newObj = { ...obj };\r\n let current = newObj;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!current[key]) return obj;\r\n current[key] = { ...current[key] };\r\n current = current[key];\r\n }\r\n\r\n delete current[keys[keys.length - 1]];\r\n return newObj;\r\n}\r\n\r\nfunction isPlainObject(value: any): value is Record<string, any> {\r\n return (\r\n value !== null &&\r\n typeof value === \"object\" &&\r\n !Array.isArray(value) &&\r\n !(value instanceof Date)\r\n );\r\n}\r\n\r\nfunction collectChangedPaths(values: any, initial: any, prefix = \"\"): string[] {\r\n if (Object.is(values, initial)) return [];\r\n\r\n const valuesIsObj = isPlainObject(values);\r\n const initialIsObj = isPlainObject(initial);\r\n const valuesIsArr = Array.isArray(values);\r\n const initialIsArr = Array.isArray(initial);\r\n\r\n if (valuesIsArr || initialIsArr) {\r\n const maxLen = Math.max(values?.length ?? 0, initial?.length ?? 0);\r\n const fields: string[] = [];\r\n for (let i = 0; i < maxLen; i++) {\r\n const nextPrefix = prefix ? `${prefix}.${i}` : `${i}`;\r\n fields.push(...collectChangedPaths(values?.[i], initial?.[i], nextPrefix));\r\n }\r\n return fields;\r\n }\r\n\r\n if (valuesIsObj || initialIsObj) {\r\n const keys = new Set([\r\n ...Object.keys(values ?? {}),\r\n ...Object.keys(initial ?? {}),\r\n ]);\r\n const fields: string[] = [];\r\n for (const key of keys) {\r\n const nextPrefix = prefix ? `${prefix}.${key}` : key;\r\n fields.push(...collectChangedPaths(values?.[key], initial?.[key], nextPrefix));\r\n }\r\n return fields;\r\n }\r\n\r\n return prefix ? [prefix] : [];\r\n}\r\n\r\nfunction computeChangedState<T>(\r\n values: Partial<T>,\r\n initialVals: Partial<T>\r\n): { fields: string[]; partial: Partial<T> } {\r\n const fields = collectChangedPaths(values, initialVals);\r\n let partial: Partial<T> = {};\r\n\r\n for (const path of fields) {\r\n partial = setNested(partial, path, getNested(values, path));\r\n }\r\n\r\n return { fields, partial };\r\n}\r\n\r\nfunction flattenRules(\r\n rules: any,\r\n prefix = \"\"\r\n): Record<string, ValidatorFn> {\r\n const result: Record<string, ValidatorFn> = {};\r\n\r\n for (const key in rules) {\r\n const fullPath = prefix ? `${prefix}.${key}` : key;\r\n const val = rules[key];\r\n\r\n if (typeof val === \"function\") result[fullPath] = val;\r\n else if (typeof val === \"object\")\r\n Object.assign(result, flattenRules(val, fullPath));\r\n }\r\n\r\n return result;\r\n}\r\n\r\nasync function runRule(\r\n rule: ValidatorFn,\r\n value: any,\r\n values: any\r\n): Promise<string | null> {\r\n const result = rule(value, values);\r\n return result instanceof Promise ? await result : result;\r\n}\r\n\r\n/* ======================================================\r\n Types\r\n====================================================== */\r\n\r\nexport type ValidatorFn<T = any> =\r\n | ((value: any, values: Partial<T>) => string | null)\r\n | ((value: any, values: Partial<T>) => Promise<string | null>);\r\n\r\nexport type ValidationRules<T> = {\r\n [K in keyof T]?: T[K] extends object\r\n ? ValidationRules<T[K]>\r\n : ValidatorFn<T>;\r\n};\r\n\r\nexport type FormState<T> = {\r\n values: Partial<T>;\r\n initialValues: Partial<T>;\r\n errors: Record<string, string>;\r\n\r\n partialChanged: Partial<T>;\r\n\r\n getInputProps: (path: string) => {\r\n value: any;\r\n error?: string;\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n };\r\n\r\n setValue: (path: string, value: any, options?: { validate?: boolean }) => void;\r\n setInitialValues: (newInitialValues: Partial<T>) => void;\r\n\r\n setError: (path: string, message: string) => void;\r\n clearError: (path: string) => void;\r\n\r\n validate: () => Promise<boolean>;\r\n validateField: (path: string) => Promise<boolean>;\r\n\r\n reset: () => void;\r\n reinitialize: (newValues: Partial<T>) => void;\r\n\r\n back: () => void;\r\n forward: () => void;\r\n canBack: boolean;\r\n canForward: boolean;\r\n\r\n changedFields: string[];\r\n changedCount: number;\r\n resetChangeCount: () => void;\r\n\r\n onSubmit?: (form: FormState<T>) => void;\r\n submit: () => Promise<void>;\r\n};\r\n\r\n/* ======================================================\r\n Store\r\n====================================================== */\r\n\r\nexport function createFormStore<T>(\r\n initialValues: Partial<T>,\r\n validationRules?: ValidationRules<T>,\r\n onSubmit?: (form: FormState<T>) => void\r\n) {\r\n const flatRules = validationRules ? flattenRules(validationRules) : {};\r\n\r\n const history: Partial<T>[] = [];\r\n const future: Partial<T>[] = [];\r\n const changed = new Set<string>();\r\n\r\n return createStore<FormState<T>>((set, get) => ({\r\n initialValues,\r\n values: initialValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n onSubmit,\r\n\r\n submit: async () => {\r\n const state = get();\r\n const isValid = await state.validate();\r\n if (isValid && state.onSubmit) {\r\n state.onSubmit(get());\r\n }\r\n },\r\n\r\n getInputProps: (path: string) => {\r\n return {\r\n value: getNested(get().values, path) ?? \"\",\r\n error: get().errors[path],\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\r\n get().setValue(path, e.target.value, { validate: true });\r\n },\r\n };\r\n },\r\n\r\n resetChangeCount: () => {\r\n changed.clear();\r\n set({ changedFields: [], changedCount: 0, partialChanged: {} });\r\n },\r\n\r\n setInitialValues: (newInitialValues) =>\r\n set({ initialValues: newInitialValues }),\r\n\r\n setValue: (path, value, options) => {\r\n const state = get();\r\n const currentValues = state.values;\r\n const newValues = setNested(currentValues, path, value);\r\n\r\n const oldValue = getNested(state.initialValues, path);\r\n const hasChanged = value !== oldValue;\r\n\r\n history.push(currentValues);\r\n future.length = 0;\r\n\r\n let newPartial = state.partialChanged;\r\n\r\n if (hasChanged) {\r\n changed.add(path);\r\n newPartial = setNested(newPartial, path, value);\r\n } else {\r\n changed.delete(path);\r\n newPartial = deleteNested(newPartial, path);\r\n }\r\n\r\n set({\r\n values: newValues,\r\n partialChanged: newPartial,\r\n canBack: history.length > 0,\r\n canForward: false,\r\n changedFields: Array.from(changed),\r\n changedCount: changed.size,\r\n });\r\n\r\n if (!options?.validate) return;\r\n\r\n const rule = flatRules[path];\r\n if (!rule) return;\r\n\r\n Promise.resolve(runRule(rule, value, newValues)).then((error) => {\r\n if (error)\r\n set((s) => ({ errors: setNested(s.errors, path, error) }));\r\n else\r\n set((s) => ({ errors: deleteNested(s.errors, path) }));\r\n });\r\n },\r\n\r\n setError: (path, message) =>\r\n set((s) => ({ errors: setNested(s.errors, path, message) })),\r\n\r\n clearError: (path) =>\r\n set((s) => ({ errors: deleteNested(s.errors, path) })),\r\n\r\n validateField: async (path) => {\r\n const state = get();\r\n const rule = flatRules[path];\r\n if (!rule) return true;\r\n\r\n const value = getNested(state.values, path);\r\n const error = await runRule(rule, value, state.values);\r\n\r\n if (error) {\r\n set((s) => ({ errors: setNested(s.errors, path, error) }));\r\n return false;\r\n }\r\n\r\n set((s) => ({ errors: deleteNested(s.errors, path) }));\r\n return true;\r\n },\r\n\r\n validate: async () => {\r\n const state = get();\r\n let isValid = true;\r\n let newErrors: Record<string, string> = {};\r\n\r\n for (const path in flatRules) {\r\n const rule = flatRules[path];\r\n const value = getNested(state.values, path);\r\n const error = await runRule(rule, value, state.values);\r\n\r\n if (error) {\r\n isValid = false;\r\n newErrors = setNested(newErrors, path, error);\r\n }\r\n }\r\n\r\n set({ errors: newErrors });\r\n return isValid;\r\n },\r\n\r\n reset: () => {\r\n history.length = 0;\r\n future.length = 0;\r\n changed.clear();\r\n\r\n set({\r\n values: get().initialValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n });\r\n },\r\n\r\n reinitialize: (newValues) => {\r\n history.length = 0;\r\n future.length = 0;\r\n changed.clear();\r\n\r\n set({\r\n values: newValues,\r\n initialValues: newValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n });\r\n },\r\n\r\n back: () => {\r\n if (!history.length) return;\r\n\r\n const prev = history.pop()!;\r\n future.push(get().values);\r\n\r\n const { fields, partial } = computeChangedState(prev, get().initialValues);\r\n\r\n set({\r\n values: prev,\r\n partialChanged: partial,\r\n canBack: history.length > 0,\r\n canForward: true,\r\n changedFields: fields,\r\n changedCount: fields.length,\r\n });\r\n },\r\n\r\n forward: () => {\r\n if (!future.length) return;\r\n\r\n const next = future.pop()!;\r\n history.push(get().values);\r\n\r\n const { fields, partial } = computeChangedState(next, get().initialValues);\r\n\r\n set({\r\n values: next,\r\n partialChanged: partial,\r\n canBack: true,\r\n canForward: future.length > 0,\r\n changedFields: fields,\r\n changedCount: fields.length,\r\n });\r\n },\r\n }));\r\n}\r\n\r\n/* ======================================================\r\n Context + Hook\r\n====================================================== */\r\n\r\nconst FormContext = createContext<StoreApi<FormState<any>> | null>(null);\r\n\r\nexport function FormProvider<T>({\r\n initialValues,\r\n validate,\r\n onSubmit,\r\n children,\r\n}: {\r\n initialValues: Partial<T>;\r\n validate?: ValidationRules<T>;\r\n onSubmit?: (form: FormState<T>) => void;\r\n children: React.ReactNode;\r\n}) {\r\n const storeRef = useRef(\r\n createFormStore<T>(initialValues, validate, onSubmit)\r\n );\r\n\r\n return (\r\n <FormContext.Provider value={storeRef.current}>\r\n {children}\r\n </FormContext.Provider>\r\n );\r\n}\r\n\r\nexport function useForm<T>() {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useForm must be used inside <FormProvider>\");\r\n }\r\n const state = useStore(store) as FormState<T>;\r\n\r\n const changedFields = useMemo(() => {\r\n return collectChangedPaths(state.values, state.initialValues);\r\n }, [state.values, state.initialValues]);\r\n\r\n return { ...state, changedFields, changedCount: changedFields.length } as FormState<T>;\r\n}\r\n\r\nexport function useFormField<T, P extends LoosePaths<T> = LoosePaths<T>>(\r\n path: P\r\n): P extends Paths<T> ? PathValue<T, P> | undefined : any {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormField must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => getNested(s.values, path));\r\n}\r\n\r\nexport function useFormFields<T, P extends LoosePaths<T> = LoosePaths<T>>(\r\n ...paths: P[]\r\n): { [K in P]: K extends Paths<T> ? PathValue<T, K> | undefined : any } {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormFields must be used inside <FormProvider>\");\r\n }\r\n \r\n return useStore(store, (s) => {\r\n const result = {} as { [K in P]: K extends Paths<T> ? PathValue<T, K> | undefined : any };\r\n for (const path of paths) {\r\n result[path] = getNested(s.values, path);\r\n }\r\n return result;\r\n });\r\n}\r\n\r\nexport function useFormError(path: string) {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormError must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => s.errors[path]);\r\n}\r\n\r\nexport function useFormErrors(...paths: string[]) {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormErrors must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => {\r\n const result: Record<string, string | undefined> = {};\r\n for (const path of paths) {\r\n result[path] = s.errors[path];\r\n }\r\n return result;\r\n });\r\n}\r\n\r\nexport function useFormActions<T>() {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormActions must be used inside <FormProvider>\");\r\n }\r\n return store.getState() as Pick<\r\n FormState<T>,\r\n | \"setValue\"\r\n | \"setError\"\r\n | \"clearError\"\r\n | \"validate\"\r\n | \"validateField\"\r\n | \"reset\"\r\n | \"reinitialize\"\r\n | \"back\"\r\n | \"forward\"\r\n | \"canBack\"\r\n | \"canForward\"\r\n | \"submit\"\r\n >;\r\n}","// Drop-in replacement for React's useState that survives unmount/remount.\r\n//\r\n// Why: ConfigPanel returns null when closed, which tears down the entire\r\n// React tree under it. Local component state (active tab, current edit\r\n// target, search text, view-mode toggles, etc.) is lost. Admins who close\r\n// and reopen the panel land back at the default state every time.\r\n//\r\n// useAdminState writes to a module-scope store keyed by an arbitrary\r\n// string. The store survives close/reopen because the NUI iframe stays\r\n// alive across SetNuiFocus toggles — only React unmounts.\r\n//\r\n// Reset scope: keys live for the lifetime of the iframe (= until the\r\n// resource restarts or the player reloads the NUI). That's exactly what\r\n// admins want — \"remember where I was in this session, but don't carry\r\n// over after a restart\".\r\n//\r\n// Usage:\r\n// const [activeTab, setActiveTab] = useAdminState(\"labs:viewMode\", \"list\");\r\n//\r\n// Key collisions: state is scoped per dirk-cfx-react module-scope, which\r\n// is per-iframe — so two different consumer resources can both use the key\r\n// \"viewMode\" without colliding. Within a single consumer, keep keys unique\r\n// (prefix with section name: \"labs:viewMode\", \"shells:editingId\" etc).\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\ntype Listener = () => void;\r\n\r\nconst store: Map<string, unknown> = new Map();\r\nconst listeners: Map<string, Set<Listener>> = new Map();\r\n\r\nfunction notify(key: string) {\r\n const ls = listeners.get(key);\r\n if (!ls) return;\r\n ls.forEach((fn) => fn());\r\n}\r\n\r\n/**\r\n * Like `useState` but the value persists in a module-scope store across\r\n * unmount/remount cycles. Identical API otherwise.\r\n *\r\n * @param key Stable string identifying this slot. Must be unique per\r\n * intended slot within the consumer's iframe.\r\n * @param initial Initial value if no value has been stored under `key` yet.\r\n */\r\nexport function useAdminState<T>(key: string, initial: T): [T, (v: T | ((prev: T) => T)) => void] {\r\n // useState here is just for triggering re-renders on cross-component\r\n // updates. The real value lives in the module-scope `store`.\r\n const [, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n const set = listeners.get(key) ?? new Set<Listener>();\r\n listeners.set(key, set);\r\n const handler = () => setTick((t) => t + 1);\r\n set.add(handler);\r\n return () => {\r\n set.delete(handler);\r\n if (set.size === 0) listeners.delete(key);\r\n };\r\n }, [key]);\r\n\r\n const value = (store.has(key) ? store.get(key) : initial) as T;\r\n\r\n const setValue = (v: T | ((prev: T) => T)) => {\r\n const next = typeof v === \"function\" ? (v as (p: T) => T)(value) : v;\r\n store.set(key, next);\r\n notify(key);\r\n };\r\n\r\n return [value, setValue];\r\n}\r\n\r\n/** Imperative clear — useful for \"reset everything\" admin actions. */\r\nexport function clearAdminState(key?: string) {\r\n if (key) {\r\n store.delete(key);\r\n notify(key);\r\n } else {\r\n const keys = Array.from(store.keys());\r\n store.clear();\r\n keys.forEach(notify);\r\n }\r\n}\r\n","import { fetchNui } from \"@/utils\";\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { create } from \"zustand\";\r\n\r\ntype ScriptConfigUpdateMeta<T> = {\r\n client_version?: number;\r\n latestVersion?: number;\r\n latestData?: Partial<T>;\r\n changed_paths?: Array<{ path: string; old: unknown; new: unknown }>;\r\n lastEditor?: { source?: number; name?: string; identifier?: string };\r\n};\r\n\r\nexport type ScriptConfigHistoryChange = {\r\n path: string;\r\n old: unknown;\r\n new: unknown;\r\n};\r\n\r\nexport type ScriptConfigHistoryEntry = {\r\n at_unix: number;\r\n at_utc: string;\r\n script: string;\r\n admin?: { source?: number; name?: string; identifier?: string };\r\n expected_version?: number;\r\n applied_version?: number;\r\n changes: ScriptConfigHistoryChange[];\r\n};\r\n\r\nexport type ScriptConfigHistoryRequest = {\r\n offset?: number;\r\n limit?: number;\r\n query?: string;\r\n path?: string;\r\n admin?: string;\r\n fromUnix?: number;\r\n toUnix?: number;\r\n};\r\n\r\nexport type ScriptConfigHistoryResponse = {\r\n success: boolean;\r\n _error?: string;\r\n data?: {\r\n items: ScriptConfigHistoryEntry[];\r\n total: number;\r\n limit: number;\r\n offset: number;\r\n nextOffset?: number;\r\n };\r\n};\r\n\r\ntype NuiResponse<T> = {\r\n success: boolean;\r\n message?: string;\r\n _error?: string;\r\n meta?: ScriptConfigUpdateMeta<T>;\r\n};\r\n\r\n// ── Singleton registry ────────────────────────────────────────────────────────\r\n\r\nexport interface ScriptConfigInstance<T = any> {\r\n store: { getState: () => T; setState: (partial: Partial<T> | ((prev: T) => T)) => void };\r\n updateConfig: (newConfig: Partial<T>) => Promise<NuiResponse<T>>;\r\n resetConfig: () => Promise<{ success: boolean; _error?: string }>;\r\n getHistory: (params?: ScriptConfigHistoryRequest) => Promise<ScriptConfigHistoryResponse>;\r\n fetchConfig: () => Promise<T | null>;\r\n}\r\n\r\nlet _instance: ScriptConfigInstance | null = null;\r\n\r\nexport function getScriptConfigInstance<T = any>(): ScriptConfigInstance<T> {\r\n if (!_instance) throw new Error(\"[dirk-cfx-react] createScriptConfig must be called before using ConfigPanel\");\r\n return _instance as ScriptConfigInstance<T>;\r\n}\r\n\r\nexport function createScriptConfig<T>(defaultValue: T) {\r\n const store = create<T>(() => defaultValue);\r\n let clientVersion = 0;\r\n\r\n const useScriptConfigHooks = () => {\r\n useNuiEvent<{ config?: Partial<T>; clientVersion?: number }>(\"UPDATE_SCRIPT_CONFIG\", (data) => {\r\n if (!data) return;\r\n\r\n if (typeof data.clientVersion === \"number\") {\r\n clientVersion = data.clientVersion as number;\r\n }\r\n\r\n if (data.config && typeof data.config === \"object\") {\r\n store.setState((prev) => ({ ...prev, ...(data.config as Partial<T>) }));\r\n }\r\n });\r\n };\r\n\r\n const fetchScriptConfig = async (): Promise<T | null> => {\r\n try {\r\n const response = await fetchNui<{\r\n success: boolean;\r\n data?: { config: T; clientVersion: number };\r\n }>(\"GET_FULL_SCRIPT_CONFIG\");\r\n\r\n if (response?.success && response.data?.config) {\r\n store.setState(() => response.data!.config as T);\r\n if (typeof response.data.clientVersion === \"number\") {\r\n clientVersion = response.data.clientVersion;\r\n }\r\n return response.data.config;\r\n }\r\n } catch { /* fallback to current store state */ }\r\n return null;\r\n };\r\n\r\n const updateScriptConfig = async (newConfig: Partial<T>): Promise<NuiResponse<T>> => {\r\n store.setState((prev) => ({ ...prev, ...newConfig }));\r\n\r\n const response = await fetchNui<NuiResponse<T>>(\"UPDATE_SCRIPT_CONFIG\", {\r\n data: newConfig,\r\n expectedVersion: clientVersion,\r\n });\r\n\r\n if (response?.meta?.client_version != null) {\r\n clientVersion = response.meta.client_version as number;\r\n }\r\n\r\n if (response?.success === false && response?.meta?.latestData) {\r\n store.setState((prev) => ({ ...prev, ...(response.meta!.latestData as Partial<T>) }));\r\n }\r\n\r\n return response;\r\n };\r\n\r\n const getScriptConfigHistory = async (\r\n params: ScriptConfigHistoryRequest = {}\r\n ): Promise<ScriptConfigHistoryResponse> => {\r\n return fetchNui<ScriptConfigHistoryResponse>('GET_SCRIPT_CONFIG_HISTORY', params);\r\n };\r\n\r\n const resetConfig = async (): Promise<{ success: boolean; _error?: string }> => {\r\n const response = await fetchNui<{ success: boolean; _error?: string }>('RESET_SCRIPT_CONFIG');\r\n if (response?.success) {\r\n const fresh = await fetchScriptConfig();\r\n if (fresh) {\r\n store.setState(() => fresh);\r\n }\r\n }\r\n return response;\r\n };\r\n\r\n _instance = {\r\n store,\r\n updateConfig: updateScriptConfig,\r\n resetConfig,\r\n getHistory: getScriptConfigHistory,\r\n fetchConfig: fetchScriptConfig,\r\n };\r\n\r\n return {store, updateScriptConfig, resetConfig, getScriptConfigHistory, useScriptConfigHooks, fetchScriptConfig}\r\n}\r\n","// Shared store for \"in-world admin tools\" — flows where the React admin UI\r\n// releases NUI focus, lets the player do something in the game world, and\r\n// resolves a Promise when they confirm or cancel.\r\n//\r\n// Every tool (capture position, place object, etc.) plugs into the same\r\n// store so AdminOverlays can render at most one InstructionPanel at a time\r\n// and the tool's start() returns a typed Promise. Lua side fires the\r\n// matching SendNUIMessage('<TOOL_ID>_RESULT' / '<TOOL_ID>_CANCELLED'),\r\n// which AdminOverlays routes back to whichever tool is active.\r\nimport { create } from \"zustand\";\r\n\r\nexport type ActiveTool<Result = unknown> = {\r\n /** Tool id matching the SendNUIMessage event names from Lua. */\r\n id: string;\r\n /** Title shown in the InstructionPanel header. */\r\n title: string;\r\n /** Optional sub-text under the title. */\r\n hint?: string;\r\n /** Key bindings shown as labelled key caps. */\r\n keys?: { key: string; action: string }[];\r\n /** Resolve handler for the in-flight Promise. */\r\n resolve: (v: Result | null) => void;\r\n};\r\n\r\ntype AdminToolStore = {\r\n active: ActiveTool | null;\r\n /**\r\n * Begin a tool flow. Returns a Promise resolving to the tool's typed\r\n * result (or null on cancel / replacement). Replaces any currently-active\r\n * tool by cancelling it first — only one in-world prompt at a time.\r\n */\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) => Promise<Result | null>;\r\n /** Settle the currently-active tool with a value (called by SendNUIMessage handler). */\r\n resolveActive: (value: unknown) => void;\r\n /** Cancel the currently-active tool (called by SendNUIMessage handler or programmatic cancel). */\r\n cancelActive: () => void;\r\n};\r\n\r\nexport const useAdminToolStore = create<AdminToolStore>((set, get) => ({\r\n active: null,\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) =>\r\n new Promise<Result | null>((resolve) => {\r\n const prev = get().active;\r\n if (prev) prev.resolve(null); // bump the previous tool out\r\n set({ active: { ...spec, resolve: resolve as ActiveTool[\"resolve\"] } });\r\n }),\r\n resolveActive: (value) => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(value);\r\n set({ active: null });\r\n },\r\n cancelActive: () => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(null);\r\n set({ active: null });\r\n },\r\n}));\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/fonts.css';\r\nimport './styles/notify.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nlibrary.add(fas, far, fab);\r\n\r\nimport theme from \"@/theme\";\r\nimport { BackgroundImage, MantineColorShade, MantineColorsTuple, MantineProvider } from \"@mantine/core\";\r\nimport { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { fetchNui, isEnvBrowser } from \"@/utils\";\r\nimport { localeStore } from \"@/utils/locales\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { SettingsState, useSettings } from \"@/utils/useSettings\";\r\nimport { getScriptConfigInstance } from \"@/hooks/useScriptConfig\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { AdminOverlays } from \"@/components/AdminTools/AdminOverlays\";\r\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\r\n\r\n// Shared QueryClient for every consumer of <DirkProvider>. Hooks in this\r\n// library (usePlayers, ConfigPanel's history pagination, MissingItemsBanner\r\n// audit, etc.) all consume this so consumers don't need to wire their own\r\n// QueryClientProvider. Defaults match what ConfigPanel previously used in\r\n// its private QueryClient so the move doesn't change refetch cadence.\r\n//\r\n// Consumers that already wrap in their own outer QueryClientProvider (e.g.\r\n// dirk_fishing's App.tsx) still work — react-query picks the nearest\r\n// provider in the tree, and \"nearest\" here means this inner one. Anything\r\n// inside DirkProvider uses this client; anything outside uses the consumer's\r\n// outer one (if present).\r\nexport const dirkQueryClient = new QueryClient({\r\n defaultOptions: { queries: { staleTime: 30_000, gcTime: 5 * 60_000 } },\r\n});\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n overideResourceName?: string;\r\n themeOverride?: any;\r\n};\r\n\r\n// Shape DirkProvider looks for at `scriptConfig.theme` to detect a per-resource\r\n// theme override. Consumers opt in by adding a `theme` block to their schema.json\r\n// with these four fields — DirkProvider auto-detects and applies it. Resources\r\n// with no `theme` block (or `useOverride: false`) follow the global dirk_lib\r\n// theme as before. No bridge component, no extra wiring required from consumers.\r\ntype ScriptConfigThemeOverride = {\r\n useOverride?: boolean;\r\n primaryColor?: string;\r\n primaryShade?: number;\r\n customTheme?: MantineColorsTuple | string[];\r\n};\r\n\r\nexport function DirkProvider({ children, overideResourceName, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // Subscribe to locale changes so the entire tree re-renders when an admin\r\n // updates `language` via dirk_lib's scriptConfig — components calling\r\n // `locale(\"Foo\")` directly (no hook) get fresh strings on the next render.\r\n const _locales = localeStore((s) => s.locales);\r\n void _locales;\r\n\r\n // Per-resource theme override snapshot, read from `scriptConfig.theme` when\r\n // the consumer has a scriptConfig registered. Updated by the subscription\r\n // below; survives Mantine recomputes via useMemo deps.\r\n const [scTheme, setScTheme] = useState<ScriptConfigThemeOverride | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n useSettings.setState({\r\n overideResourceName,\r\n });\r\n }, [overideResourceName]);\r\n\r\n useEffect(() => {\r\n fetchNui('NUI_READY').catch(() => {});\r\n Promise.all([\r\n fetchNui<Partial<SettingsState>>('GET_SETTINGS'),\r\n fetchNui<{ version?: string }>('GET_RESOURCE_VERSION', undefined, { version: 'dev' }),\r\n ]).then(([data, resourceInfo]) => {\r\n useSettings.setState({\r\n ...data,\r\n resourceVersion: resourceInfo?.version || 'dev',\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n }, []);\r\n\r\n // Live updates: dirk_lib broadcasts UPDATE_DIRK_LIB_SETTINGS whenever an admin\r\n // changes appearance/localization via the scriptConfig UI. Merge the partial\r\n // patch into the settings store so theme / currency / branding update live\r\n // without a resource restart. Per-resource theme override is handled below\r\n // via the scriptConfig subscription — pushes here can flow through unchanged.\r\n useNuiEvent<Partial<SettingsState>>('UPDATE_DIRK_LIB_SETTINGS', (data) => {\r\n if (!data || typeof data !== 'object') return;\r\n useSettings.setState(data);\r\n });\r\n\r\n // ── Per-resource theme auto-detect ────────────────────────────────────────\r\n // If the consumer has called createScriptConfig() (i.e. has a registered\r\n // scriptConfig instance) AND their schema has a `theme` block with\r\n // `useOverride: true`, DirkProvider uses those theme values instead of\r\n // dirk_lib's global appearance. Consumers don't have to write any glue\r\n // code — they just add the `theme` block to schema.json and a Theme tab\r\n // (via ThemeOverrideSection) to their configurator. Everything else is\r\n // handled here.\r\n //\r\n // We also forward UPDATE_SCRIPT_CONFIG pushes into the store so this works\r\n // whether or not the consumer remembers to call useScriptConfigHooks().\r\n useNuiEvent<{ config?: Record<string, unknown>; clientVersion?: number }>(\r\n 'UPDATE_SCRIPT_CONFIG',\r\n (data) => {\r\n if (!data || !data.config || typeof data.config !== 'object') return;\r\n try {\r\n const inst = getScriptConfigInstance<Record<string, unknown>>();\r\n inst.store.setState((prev) => ({ ...prev, ...(data.config as Record<string, unknown>) }));\r\n } catch {\r\n // No scriptConfig instance registered — consumer doesn't use scriptConfig, ignore.\r\n }\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n let unsubscribe: (() => void) | undefined;\r\n try {\r\n const inst = getScriptConfigInstance<{ theme?: ScriptConfigThemeOverride }>();\r\n\r\n // Seed from whatever's already in the store (covers cases where the\r\n // store was hydrated before DirkProvider mounted, e.g. by an upstream\r\n // ConfigPanel open).\r\n setScTheme((inst.store.getState() as { theme?: ScriptConfigThemeOverride })?.theme ?? null);\r\n\r\n // Subscribe to store mutations so live edits / hydration completion\r\n // re-trigger the override application.\r\n const subscribable = inst.store as unknown as {\r\n subscribe?: (listener: (s: { theme?: ScriptConfigThemeOverride }) => void) => () => void;\r\n };\r\n if (typeof subscribable.subscribe === 'function') {\r\n unsubscribe = subscribable.subscribe((s) => {\r\n setScTheme(s?.theme ?? null);\r\n });\r\n }\r\n\r\n // Proactive hydration. The dirk_lib cold-start push that populates the\r\n // scriptConfig store is timing-sensitive (may fire before the NUI\r\n // iframe is ready). A single GET_FULL_SCRIPT_CONFIG round-trip on\r\n // mount removes that race entirely — the server callback blocks until\r\n // scriptConfig is hydrated, so the override block is guaranteed\r\n // populated before the first paint that depends on it.\r\n inst.fetchConfig?.().then((full) => {\r\n if (full && typeof full === 'object') {\r\n setScTheme((full as { theme?: ScriptConfigThemeOverride }).theme ?? null);\r\n }\r\n }).catch(() => {});\r\n } catch {\r\n // No scriptConfig instance — consumer doesn't use scriptConfig at all.\r\n // Fall through silently; global theme behaviour is unchanged.\r\n }\r\n return () => { unsubscribe?.(); };\r\n }, []);\r\n\r\n const overrideActive = scTheme?.useOverride === true;\r\n const effectivePrimaryColor = overrideActive ? (scTheme!.primaryColor ?? primaryColor) : primaryColor;\r\n const effectivePrimaryShade = overrideActive ? (scTheme!.primaryShade ?? primaryShade) : primaryShade;\r\n const effectiveCustomTheme = overrideActive\r\n ? ((scTheme!.customTheme as MantineColorsTuple | undefined) ?? customTheme)\r\n : customTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () => mergeMantineThemeSafe(\r\n { ...theme, primaryColor: effectivePrimaryColor, primaryShade: effectivePrimaryShade as MantineColorShade },\r\n effectiveCustomTheme,\r\n themeOverride\r\n ),\r\n [effectivePrimaryColor, effectivePrimaryShade, effectiveCustomTheme, themeOverride]\r\n );\r\n\r\n useEffect(() => {\r\n document.body.style.fontFamily =\r\n game === \"rdr3\"\r\n ? '\"Red Dead\", sans-serif'\r\n : '\"Akrobat Regular\", sans-serif';\r\n }, [game]);\r\n\r\n const content = isEnvBrowser() ? (\r\n <BackgroundImage\r\n w=\"100vw\"\r\n h=\"100vh\"\r\n src={game === \"fivem\"\r\n ? \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n >\r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n children\r\n );\r\n\r\n return (\r\n <QueryClientProvider client={dirkQueryClient}>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n <DirkErrorBoundary>\r\n {content}\r\n {/* Auto-mounted. Renders nothing unless an admin tool is active.\r\n Consumers never have to wire this up themselves — every admin\r\n tool flow that uses useAdminToolStore.begin() gets the\r\n bottom-right InstructionPanel + NUI message routing for free. */}\r\n <AdminOverlays />\r\n </DirkErrorBoundary>\r\n </MantineProvider>\r\n </QueryClientProvider>\r\n );\r\n}\r\n","import { alpha, Box, Flex, JsonInput, Loader, Text, TextInput, useMantineTheme } from \"@mantine/core\";\r\nimport { notifications } from \"@mantine/notifications\";\r\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\r\nimport { locale } from \"../utils/locales\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport {\r\n ArrowLeft, Check, ChevronDown, Code2, Filter, History, Redo2, RotateCcw,\r\n Save as SaveIcon, Search, Undo2, User, X, XCircle,\r\n} from \"lucide-react\";\r\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport type { UIEvent } from \"react\";\r\nimport { ConfirmModal } from \"./ConfirmModal\";\r\nimport { Modal } from \"./Modal\";\r\nimport { MissingItemsBanner, useMissingItemsAudit } from \"./MissingItemsBanner\";\r\nimport { MotionFlex } from \"./Motion\";\r\nimport { FormProvider, useForm, useFormActions } from \"../hooks/useForm\";\r\nimport { useAdminState } from \"../hooks/useAdminState\";\r\nimport { useSettings } from \"../utils/useSettings\";\r\nimport { dirkQueryClient } from \"../providers/DirkProvider\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\nimport { getScriptConfigInstance } from \"../hooks/useScriptConfig\";\r\nimport type {\r\n ScriptConfigHistoryEntry,\r\n ScriptConfigHistoryRequest,\r\n ScriptConfigHistoryResponse,\r\n} from \"../hooks/useScriptConfig\";\r\n\r\n// ── Types ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface NavItem {\r\n id: string;\r\n icon: React.ElementType;\r\n label: string;\r\n}\r\n\r\nexport interface ConfigPanelProps<T extends Record<string, any> = Record<string, any>> {\r\n navItems: readonly NavItem[];\r\n title: string;\r\n subtitle?: string;\r\n open: boolean;\r\n /** Defaults to fetchNui(\"CLOSE_ADMIN_SECTION\") */\r\n onClose?: () => void;\r\n children: (activeTab: string) => React.ReactNode;\r\n /** Default config for reset */\r\n defaultConfig: T;\r\n /** Zod schema for JSON validation (.safeParse) */\r\n schema?: { safeParse: (data: unknown) => { success: boolean; data?: T; error?: { issues: { path: PropertyKey[]; message: string }[] } } };\r\n /** Reset confirm typed text (e.g. \"dirk_fishing\") */\r\n resetConfirmText?: string;\r\n width?: string;\r\n height?: string;\r\n /** Skip the auto-mounted MissingItemsBanner. Default: false (banner shown).\r\n The banner self-hides when nothing is missing, so leaving it on costs\r\n nothing visually. */\r\n suppressMissingItemsBanner?: boolean;\r\n}\r\n\r\n// ── NavItem Button ────────────────────────────────────────────────────────────\r\n\r\nfunction NavItemButton({\r\n icon: Icon, label, active, onClick,\r\n}: {\r\n icon: React.ElementType;\r\n label: string;\r\n active: boolean;\r\n onClick: () => void;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n return (\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: active ? alpha(color, 0.15) : \"rgba(255,255,255,0.04)\" }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{\r\n width: \"100%\",\r\n background: active ? alpha(color, 0.12) : \"transparent\",\r\n border: \"none\",\r\n borderLeft: `0.2vh solid ${active ? color : \"transparent\"}`,\r\n borderRadius: `0 ${theme.radius.xs} ${theme.radius.xs} 0`,\r\n padding: \"0.7vh 1vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.7vh\",\r\n transition: \"border-color 0.15s, background 0.15s\",\r\n }}\r\n >\r\n <Icon color={active ? color : \"rgba(255,255,255,0.35)\"} />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.06em\" c={active ? color : \"rgba(255,255,255,0.35)\"}>\r\n {label}\r\n </Text>\r\n {active && (\r\n <motion.div\r\n layoutId=\"nav-active-dot\"\r\n style={{ marginLeft: \"auto\", width: \"0.4vh\", height: \"0.4vh\", borderRadius: \"50%\", background: color }}\r\n />\r\n )}\r\n </motion.button>\r\n );\r\n}\r\n\r\n// ── Config JSON Modal ─────────────────────────────────────────────────────────\r\n\r\nfunction ConfigJsonModal<T extends Record<string, any>>({\r\n onClose, schema,\r\n}: {\r\n onClose: () => void;\r\n schema?: ConfigPanelProps<T>[\"schema\"];\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const form = useForm<T>();\r\n const [json, setJson] = useState(() => JSON.stringify(form.values, null, 2));\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const handleSave = () => {\r\n try {\r\n const parsed = JSON.parse(json);\r\n if (schema) {\r\n const result = schema.safeParse(parsed);\r\n if (!result.success) {\r\n setError(result.error!.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"\\n\"));\r\n return;\r\n }\r\n const current = form.values as T;\r\n (Object.keys(result.data!) as (keyof T)[]).forEach((key) => {\r\n if (JSON.stringify(result.data![key]) !== JSON.stringify(current[key])) {\r\n form.setValue(key as string, result.data![key]);\r\n }\r\n });\r\n } else {\r\n const current = form.values as T;\r\n (Object.keys(parsed) as (keyof T)[]).forEach((key) => {\r\n if (JSON.stringify(parsed[key]) !== JSON.stringify(current[key])) {\r\n form.setValue(key as string, parsed[key]);\r\n }\r\n });\r\n }\r\n onClose();\r\n } catch (e: any) {\r\n setError(e.message);\r\n }\r\n };\r\n\r\n return (\r\n <Modal title={locale(\"cfgpanel_json_title\")} icon={Code2} iconColor={color} onClose={onClose} width=\"60vh\" maxHeight=\"80vh\" zIndex={200}>\r\n <Box flex={1} p=\"0.8vh\" style={{ overflowY: \"auto\" }}>\r\n <JsonInput\r\n value={json}\r\n spellCheck={false}\r\n onChange={setJson}\r\n rows={22}\r\n formatOnBlur\r\n validationError=\"Invalid JSON\"\r\n styles={() => ({\r\n input: { fontFamily: \"monospace\", fontSize: \"1.3vh\", lineHeight: 1.6, resize: \"none\" },\r\n })}\r\n />\r\n {error && <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"#ef4444\" mt=\"xxs\">{error}</Text>}\r\n </Box>\r\n <Flex justify=\"flex-end\" gap=\"xs\" px=\"sm\" py=\"xs\" style={{ borderTop: `0.1vh solid ${theme.colors.dark[7]}`, flexShrink: 0 }}>\r\n <motion.button onClick={onClose} whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: \"transparent\", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c=\"rgba(255,255,255,0.4)\">{locale(\"cfgpanel_cancel\")}</Text>\r\n </motion.button>\r\n <motion.button onClick={handleSave} whileHover={{ background: alpha(color, 0.25) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: alpha(color, 0.14), border: `0.1vh solid ${alpha(color, 0.4)}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <Check color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c={color}>{locale(\"cfgpanel_apply\")}</Text>\r\n </motion.button>\r\n </Flex>\r\n </Modal>\r\n );\r\n}\r\n\r\n// ── History helpers ───────────────────────────────────────────────────────────\r\n\r\nfunction formatValue(value: unknown): string {\r\n if (value === null) return \"null\";\r\n if (value === undefined) return \"undefined\";\r\n if (typeof value === \"string\") return value;\r\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\r\n try { return JSON.stringify(value); } catch { return String(value); }\r\n}\r\n\r\nfunction formatHistoryDateTime(entry: ScriptConfigHistoryEntry): string {\r\n if (entry.at_unix) {\r\n const date = new Date(entry.at_unix * 1000);\r\n if (!Number.isNaN(date.getTime())) {\r\n return date.toLocaleString(undefined, { year: \"numeric\", month: \"short\", day: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" });\r\n }\r\n }\r\n if (entry.at_utc) {\r\n const date = new Date(entry.at_utc);\r\n if (!Number.isNaN(date.getTime())) {\r\n return date.toLocaleString(undefined, { year: \"numeric\", month: \"short\", day: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" });\r\n }\r\n }\r\n return \"Unknown time\";\r\n}\r\n\r\nfunction historyEntryKey(entry: ScriptConfigHistoryEntry, index: number) {\r\n return `${entry.at_unix}-${entry.applied_version}-${index}`;\r\n}\r\n\r\n// ── History sub-components ────────────────────────────────────────────────────\r\n\r\nfunction ChangeDetails({ entry }: { entry: ScriptConfigHistoryEntry }) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex direction=\"column\" gap=\"0.45vh\" p=\"0.8vh\" style={{ border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, borderRadius: theme.radius.xs, background: alpha(theme.colors.dark[9], 0.35) }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">\r\n Version {entry.expected_version ?? \"?\"} {\"\\u2192\"} {entry.applied_version ?? \"?\"}\r\n </Text>\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"minmax(18vh, 22vh) minmax(0, 1fr) minmax(0, 1fr)\", gap: \"0.1vh\", border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.9)}`, borderRadius: theme.radius.xs, overflow: \"hidden\", background: alpha(theme.colors.dark[6], 0.8) }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>Path</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>From</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>To</Text>\r\n {(entry.changes || []).map((change, idx) => {\r\n const bg = idx % 2 === 0 ? alpha(theme.colors.dark[9], 0.5) : alpha(theme.colors.dark[8], 0.42);\r\n return [\r\n <Text key={`${idx}-p`} ff=\"Akrobat Bold\" size=\"xxs\" c=\"#8ad1ff\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\" }}>{change.path}</Text>,\r\n <Text key={`${idx}-o`} ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.5)\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\", whiteSpace: \"pre-wrap\" }}>{formatValue(change.old)}</Text>,\r\n <Text key={`${idx}-n`} ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.78)\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\", whiteSpace: \"pre-wrap\" }}>{formatValue(change.new)}</Text>,\r\n ];\r\n })}\r\n </div>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction HistoryTableRow({ entry, expanded, onToggle }: { entry: ScriptConfigHistoryEntry; expanded: boolean; onToggle: () => void }) {\r\n const theme = useMantineTheme();\r\n const admin = entry.admin?.name || entry.admin?.identifier || \"unknown\";\r\n const firstPath = entry.changes?.[0]?.path || \"-\";\r\n const changeCount = entry.changes?.length || 0;\r\n const versionText = `${entry.expected_version ?? \"?\"} \\u2192 ${entry.applied_version ?? \"?\"}`;\r\n\r\n return (\r\n <motion.div layout initial={{ opacity: 0, y: 6 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.16, ease: \"easeOut\" }}>\r\n <Flex direction=\"column\" gap=\"0.45vh\">\r\n <motion.button onClick={onToggle} whileHover={{ scale: 1.002 }} whileTap={{ scale: 0.997 }} transition={{ duration: 0.12 }}\r\n style={{ background: expanded ? alpha(theme.colors.dark[7], 0.45) : alpha(theme.colors.dark[8], 0.35), border: `0.1vh solid ${expanded ? alpha(theme.colors[theme.primaryColor][5], 0.35) : alpha(theme.colors.dark[6], 0.75)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.75vh\", cursor: \"pointer\", textAlign: \"left\" }}>\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"2.2vh 20vh 12vh 6vh 1fr minmax(16vh, auto)\", gap: \"0.8vh\", alignItems: \"center\" }}>\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <motion.div animate={{ rotate: expanded ? 0 : -90 }} transition={{ duration: 0.18, ease: \"easeOut\" }}>\r\n <ChevronDown size=\"1.5vh\" color={expanded ? \"rgba(255,255,255,0.6)\" : \"rgba(255,255,255,0.45)\"} />\r\n </motion.div>\r\n </div>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.75)\" lineClamp={1}>{formatHistoryDateTime(entry)}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\" lineClamp={1}>{admin}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\">{changeCount}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.58)\" lineClamp={1}>{firstPath}</Text>\r\n <Text ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\">{versionText}</Text>\r\n </div>\r\n </motion.button>\r\n <AnimatePresence initial={false}>\r\n {expanded && (\r\n <motion.div key=\"details\" initial={{ opacity: 0, height: 0, y: -4 }} animate={{ opacity: 1, height: \"auto\", y: 0 }} exit={{ opacity: 0, height: 0, y: -4 }} transition={{ duration: 0.2, ease: \"easeInOut\" }} style={{ overflow: \"hidden\" }}>\r\n <ChangeDetails entry={entry} />\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </Flex>\r\n </motion.div>\r\n );\r\n}\r\n\r\nfunction HistoryTableHeader() {\r\n const theme = useMantineTheme();\r\n return (\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"2.2vh 20vh 12vh 6vh 1fr minmax(16vh, auto)\", gap: \"0.8vh\", alignItems: \"center\", border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, borderRadius: theme.radius.xs, background: alpha(theme.colors.dark[8], 0.55), padding: \"0.55vh 0.75vh\" }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.35)\"> </Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Time</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Admin</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">#</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">First Change</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Version</Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ── History Modal ─────────────────────────────────────────────────────────────\r\n\r\nfunction ConfigHistoryModal({\r\n onClose,\r\n}: {\r\n onClose: () => void;\r\n}) {\r\n const { getHistory } = getScriptConfigInstance();\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const [queryInput, setQueryInput] = useState(\"\");\r\n const [pathInput, setPathInput] = useState(\"\");\r\n const [adminInput, setAdminInput] = useState(\"\");\r\n const [query, setQuery] = useState(\"\");\r\n const [path, setPath] = useState(\"\");\r\n const [admin, setAdmin] = useState(\"\");\r\n const [expandedKey, setExpandedKey] = useState<string | null>(null);\r\n\r\n const filters = useMemo(() => ({ query, path, admin }), [query, path, admin]);\r\n\r\n const historyQuery = useInfiniteQuery({\r\n queryKey: [\"scriptConfigHistory\", filters],\r\n initialPageParam: 0,\r\n queryFn: async ({ pageParam }) => {\r\n const response = await getHistory({\r\n offset: pageParam,\r\n limit: 25,\r\n query: filters.query || undefined,\r\n path: filters.path || undefined,\r\n admin: filters.admin || undefined,\r\n });\r\n if (!response?.success || !response.data) {\r\n throw new Error(response?._error || \"Failed to load config history\");\r\n }\r\n return response.data;\r\n },\r\n getNextPageParam: (lastPage) => lastPage.nextOffset,\r\n });\r\n\r\n const rows = historyQuery.data?.pages.flatMap((page) => page.items) ?? [];\r\n const total = historyQuery.data?.pages[0]?.total ?? 0;\r\n\r\n const handleListScroll = (e: UIEvent<HTMLDivElement>) => {\r\n const el = e.currentTarget;\r\n if (el.scrollHeight - el.scrollTop - el.clientHeight < 280 && historyQuery.hasNextPage && !historyQuery.isFetchingNextPage) {\r\n historyQuery.fetchNextPage();\r\n }\r\n };\r\n\r\n return (\r\n <Modal title={locale(\"cfgpanel_history_title\")} icon={History} iconColor={color} onClose={onClose} width=\"88vh\" maxHeight=\"82vh\" zIndex={260}>\r\n <Flex direction=\"column\" style={{ flex: 1, minHeight: 0 }}>\r\n <Flex gap=\"xs\" p=\"sm\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[7], 0.8)}` }}>\r\n <TextInput leftSection={<Search size=\"1.4vh\" />} placeholder=\"Search path/admin/value\" value={queryInput} onChange={(e) => setQueryInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <TextInput leftSection={<Filter size=\"1.4vh\" />} placeholder=\"Path filter (e.g. basic.weightUnit)\" value={pathInput} onChange={(e) => setPathInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <TextInput leftSection={<User size=\"1.4vh\" />} placeholder=\"Admin filter\" value={adminInput} onChange={(e) => setAdminInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <motion.button\r\n onClick={() => { setExpandedKey(null); setQuery(queryInput.trim()); setPath(pathInput.trim().toLowerCase()); setAdmin(adminInput.trim().toLowerCase()); }}\r\n whileHover={{ background: alpha(color, 0.2) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: alpha(color, 0.12), border: `0.1vh solid ${alpha(color, 0.35)}`, borderRadius: theme.radius.xs, padding: \"0.55vh 0.85vh\", cursor: \"pointer\" }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={color}>Apply</Text>\r\n </motion.button>\r\n </Flex>\r\n\r\n <Flex direction=\"column\" gap=\"xs\" p=\"sm\" style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }} onScroll={handleListScroll}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">\r\n {historyQuery.isFetching && !historyQuery.data ? \"Loading history...\" : `${total} entries`}\r\n </Text>\r\n <HistoryTableHeader />\r\n {historyQuery.isError && <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"#ef4444\">{(historyQuery.error as Error).message}</Text>}\r\n {!historyQuery.isLoading && rows.length === 0 && !historyQuery.isError && (\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"rgba(255,255,255,0.45)\">No history found for current filters.</Text>\r\n )}\r\n <AnimatePresence initial={false}>\r\n {rows.map((entry, index) => {\r\n const key = historyEntryKey(entry, index);\r\n return <HistoryTableRow key={key} entry={entry} expanded={expandedKey === key} onToggle={() => setExpandedKey(expandedKey === key ? null : key)} />;\r\n })}\r\n </AnimatePresence>\r\n {(historyQuery.isFetchingNextPage || historyQuery.isLoading) && (\r\n <Flex justify=\"center\" py=\"sm\"><Loader size=\"sm\" color={color} /></Flex>\r\n )}\r\n </Flex>\r\n </Flex>\r\n <Flex justify=\"flex-end\" gap=\"xs\" px=\"sm\" py=\"xs\" style={{ borderTop: `0.1vh solid ${theme.colors.dark[7]}`, flexShrink: 0 }}>\r\n <motion.button onClick={onClose} whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: \"transparent\", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <X color=\"rgba(255,255,255,0.4)\" size=\"1.5vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c=\"rgba(255,255,255,0.4)\">{locale(\"cfgpanel_close\")}</Text>\r\n </motion.button>\r\n </Flex>\r\n </Modal>\r\n );\r\n}\r\n\r\n// ── ConfigPanel Inner ─────────────────────────────────────────────────────────\r\n\r\nfunction ConfigPanelInner<T extends Record<string, any>>({\r\n navItems, title, subtitle, children, isSaving, onClose,\r\n schema, resetConfirmText, defaultConfig,\r\n width, height, suppressMissingItemsBanner,\r\n}: Omit<ConfigPanelProps<T>, \"open\" | \"onClose\"> & { isSaving: boolean; onClose: () => void }) {\r\n const { updateConfig, resetConfig, getHistory } = getScriptConfigInstance<T>();\r\n const form = useForm<T>();\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const version = useSettings((s) => s.resourceVersion);\r\n // useAdminState so the selected tab survives close/reopen. The whole\r\n // ConfigPanel tree unmounts on close (line ~670: `if (!open) return null`),\r\n // so plain useState would reset to navItems[0] every time.\r\n const [activeTab, setActiveTab] = useAdminState(\"__dirkConfigPanel:activeTab\", navItems[0]?.id ?? \"\");\r\n const firstMountRef = useRef(true);\r\n const [jsonOpen, setJsonOpen] = useState(false);\r\n const [historyOpen, setHistoryOpen] = useState(false);\r\n const [resetOpen, setResetOpen] = useState(false);\r\n const [pendingAction, setPendingAction] = useState<\"close\" | \"back\" | null>(null);\r\n const changedCount = form.changedCount ?? 0;\r\n const isDirty = changedCount > 0;\r\n\r\n const goBack = () => fetchNui(\"CONFIG_PANEL_BACK\");\r\n\r\n const handleBack = () => {\r\n if (isDirty) {\r\n setPendingAction(\"back\");\r\n return;\r\n }\r\n goBack();\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyDown(e: KeyboardEvent) {\r\n if (e.key !== \"Escape\") return;\r\n if (isDirty) {\r\n e.preventDefault();\r\n setPendingAction(\"close\");\r\n return;\r\n }\r\n onClose();\r\n }\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\r\n }, [isDirty, onClose]);\r\n\r\n return (\r\n <>\r\n <AnimatePresence>{jsonOpen && <ConfigJsonModal onClose={() => setJsonOpen(false)} schema={schema} />}</AnimatePresence>\r\n <AnimatePresence>{historyOpen && <ConfigHistoryModal onClose={() => setHistoryOpen(false)} />}</AnimatePresence>\r\n <AnimatePresence>\r\n {resetOpen && (\r\n <ConfirmModal\r\n title={locale(\"cfgpanel_reset_title\")}\r\n description={locale(\"cfgpanel_reset_desc\")}\r\n confirmLabel={locale(\"cfgpanel_reset_confirm\")}\r\n confirmText={resetConfirmText}\r\n onConfirm={async () => {\r\n setResetOpen(false);\r\n const result = await resetConfig();\r\n if (result?.success) {\r\n const { store } = getScriptConfigInstance<T>();\r\n form.reinitialize(cloneConfig(store.getState()));\r\n // Mirror the save-success toast so the admin gets visible\r\n // feedback that the reset actually applied — previously the\r\n // modal just closed silently and admins had no way to tell\r\n // whether it had worked.\r\n notifications.show({\r\n color: \"green\",\r\n title: locale(\"ConfigResetSuccessTitle\"),\r\n message: locale(\"ConfigResetSuccessBody\"),\r\n autoClose: 3000,\r\n });\r\n return;\r\n }\r\n const err = result?._error || \"Unknown\";\r\n console.warn(`[ConfigPanel] config reset failed: ${err}`);\r\n notifications.show({\r\n color: \"red\",\r\n title: locale(\"ConfigResetFailedTitle\"),\r\n message: locale(\"ConfigResetFailedBody\", err),\r\n autoClose: 6000,\r\n });\r\n }}\r\n onClose={() => setResetOpen(false)}\r\n zIndex={300}\r\n />\r\n )}\r\n </AnimatePresence>\r\n <AnimatePresence>\r\n {pendingAction !== null && (\r\n <ConfirmModal\r\n title={locale(\"cfgpanel_discard_title\")}\r\n description={\r\n pendingAction === \"back\"\r\n ? locale(\"cfgpanel_discard_desc_back\")\r\n : locale(\"cfgpanel_discard_desc_close\")\r\n }\r\n confirmLabel={pendingAction === \"back\" ? locale(\"cfgpanel_discard_confirm_back\") : locale(\"cfgpanel_discard_confirm_close\")}\r\n onConfirm={() => {\r\n const action = pendingAction;\r\n setPendingAction(null);\r\n if (action === \"back\") goBack();\r\n else onClose();\r\n }}\r\n onClose={() => setPendingAction(null)}\r\n zIndex={300}\r\n />\r\n )}\r\n </AnimatePresence>\r\n\r\n <MotionFlex\r\n pos=\"absolute\" left=\"50%\" top=\"50%\"\r\n bg={alpha(theme.colors.dark[9], 0.9)}\r\n w={width ?? \"120vh\"} h={height ?? \"80vh\"} bdrs=\"sm\"\r\n style={{\r\n userSelect: \"none\", overflow: \"hidden\",\r\n transform: \"translate(-50%, -50%)\",\r\n boxShadow: \"0 0 10px rgba(0,0,0,0.5)\",\r\n border: `0.1vh solid ${theme.colors.dark[7]}`,\r\n }}\r\n direction=\"row\"\r\n initial={{ scale: 0.3, opacity: 0, transform: \"translate(-50%, -50%)\" }}\r\n animate={{ scale: 1, opacity: 1, transform: \"translate(-50%, -50%)\" }}\r\n exit={{ scale: 0.3, opacity: 0, transform: \"translate(-50%, -50%)\" }}\r\n >\r\n {/* ── Sidebar ── */}\r\n <Flex direction=\"column\" style={{ width: \"18vh\", flexShrink: 0, borderRight: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, background: alpha(theme.colors.dark[8], 0.6), overflow: \"hidden\" }}>\r\n <Flex align=\"center\" gap=\"0.6vh\" px=\"sm\" py=\"sm\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[6], 0.5)}`, flexShrink: 0 }}>\r\n <motion.button\r\n title={locale(\"cfgpanel_back_title\")}\r\n onClick={handleBack}\r\n whileHover={{ background: alpha(color, 0.16), borderColor: alpha(color, 0.45) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n aspectRatio: \"1 / 1\",\r\n height: \"2.4vh\",\r\n background: alpha(color, 0.08),\r\n border: `0.1vh solid ${alpha(color, 0.3)}`,\r\n borderRadius: theme.radius.xs,\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n <ArrowLeft size=\"1.4vh\" color={color} />\r\n </motion.button>\r\n <Flex direction=\"column\" style={{ minWidth: 0, flex: 1, lineHeight: 1, overflow: \"hidden\" }}>\r\n <Text size=\"md\" ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.04em\" truncate>{title}</Text>\r\n {subtitle && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.08em\" c={color} truncate>\r\n {subtitle}\r\n </Text>\r\n )}\r\n </Flex>\r\n </Flex>\r\n\r\n {/* Quick controls */}\r\n <Flex gap=\"xxs\" px=\"xs\" py=\"xs\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[6], 0.4)}`, flexShrink: 0 }}>\r\n <motion.button title={locale(\"cfgpanel_undo\")} onClick={() => form.canBack && form.back()} disabled={!form.canBack}\r\n whileHover={form.canBack ? { background: \"rgba(255,255,255,0.07)\" } : undefined}\r\n whileTap={form.canBack ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: \"transparent\", border: `0.1vh solid ${alpha(theme.colors.dark[5], form.canBack ? 0.6 : 0.3)}`, borderRadius: theme.radius.xs, cursor: form.canBack ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: form.canBack ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <Undo2 size=\"1.5vh\" color=\"rgba(255,255,255,0.7)\" />\r\n </motion.button>\r\n <motion.button title={locale(\"cfgpanel_redo\")} onClick={() => form.canForward && form.forward()} disabled={!form.canForward}\r\n whileHover={form.canForward ? { background: \"rgba(255,255,255,0.07)\" } : undefined}\r\n whileTap={form.canForward ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: \"transparent\", border: `0.1vh solid ${alpha(theme.colors.dark[5], form.canForward ? 0.6 : 0.3)}`, borderRadius: theme.radius.xs, cursor: form.canForward ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: form.canForward ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <Redo2 size=\"1.5vh\" color=\"rgba(255,255,255,0.7)\" />\r\n </motion.button>\r\n <motion.button title={isSaving ? locale(\"cfgpanel_saving\") : isDirty ? `${locale(\"cfgpanel_save\")} (${changedCount})` : locale(\"cfgpanel_save\")}\r\n onClick={() => isDirty && !isSaving && form.submit()} disabled={!isDirty || isSaving}\r\n whileHover={isDirty && !isSaving ? { background: alpha(color, 0.25), borderColor: alpha(color, 0.5) } : undefined}\r\n whileTap={isDirty && !isSaving ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: isDirty ? alpha(color, 0.14) : \"transparent\", border: `0.1vh solid ${isDirty ? alpha(color, 0.35) : alpha(theme.colors.dark[5], 0.3)}`, borderRadius: theme.radius.xs, cursor: isDirty && !isSaving ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: isDirty ? 1 : 0.35, transition: \"opacity 0.2s, background 0.15s\" }}>\r\n {isSaving ? <Loader size=\"1.5vh\" color={color} type=\"dots\" /> : <SaveIcon color={isDirty ? color : \"rgba(255,255,255,0.35)\"} size=\"1.5vh\" />}\r\n </motion.button>\r\n <motion.button title={locale(\"cfgpanel_history\")} onClick={() => setHistoryOpen(true)}\r\n whileHover={{ background: alpha(\"#22d3ee\", 0.16), borderColor: alpha(\"#22d3ee\", 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: alpha(\"#22d3ee\", 0.07), border: `0.1vh solid ${alpha(\"#22d3ee\", 0.25)}`, borderRadius: theme.radius.xs, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\r\n <History color=\"#22d3ee\" size=\"1.5vh\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Nav items */}\r\n <Flex direction=\"column\" gap=\"xxs\" p=\"xs\" style={{ flex: 1, overflowY: \"auto\" }}>\r\n {navItems.map((item) => (\r\n <NavItemButton key={item.id} icon={item.icon} label={item.label} active={activeTab === item.id} onClick={() => setActiveTab(item.id)} />\r\n ))}\r\n </Flex>\r\n\r\n {/* Bottom actions */}\r\n <Flex direction=\"column\" p=\"xs\" gap=\"xs\" style={{ borderTop: `0.1vh solid ${alpha(theme.colors.dark[6], 0.5)}`, flexShrink: 0 }}>\r\n <motion.button onClick={() => isDirty && form.reset()} disabled={!isDirty}\r\n whileHover={isDirty ? { background: alpha(\"#f97316\", 0.12), borderColor: alpha(\"#f97316\", 0.45) } : undefined}\r\n whileTap={isDirty ? { scale: 0.97 } : undefined}\r\n style={{ width: \"100%\", background: \"transparent\", border: `0.1vh solid ${isDirty ? alpha(\"#f97316\", 0.35) : alpha(theme.colors.dark[5], 0.3)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: isDirty ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\", opacity: isDirty ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <XCircle color={isDirty ? \"#f97316\" : \"rgba(255,255,255,0.35)\"} size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={isDirty ? \"#f97316\" : \"rgba(255,255,255,0.35)\"}>{locale(\"cfgpanel_discard\")}</Text>\r\n </motion.button>\r\n\r\n <div style={{ height: \"0.05vh\", background: \"rgba(255,255,255,0.07)\", margin: \"0.1vh 0\" }} />\r\n\r\n <motion.button onClick={() => setJsonOpen(true)}\r\n whileHover={{ background: alpha(color, 0.16), borderColor: alpha(color, 0.45) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ width: \"100%\", background: alpha(color, 0.07), border: `0.1vh solid ${alpha(color, 0.28)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\" }}>\r\n <Code2 color={color} size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>{locale(\"cfgpanel_manual_edit\")}</Text>\r\n </motion.button>\r\n\r\n <motion.button onClick={() => setResetOpen(true)}\r\n whileHover={{ background: alpha(\"#ef4444\", 0.16), borderColor: alpha(\"#ef4444\", 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ width: \"100%\", background: alpha(\"#ef4444\", 0.07), border: `0.1vh solid ${alpha(\"#ef4444\", 0.25)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\" }}>\r\n <RotateCcw color=\"#ef4444\" size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c=\"#ef4444\">{locale(\"cfgpanel_reset_defaults\")}</Text>\r\n </motion.button>\r\n\r\n {version && (\r\n <Text size=\"0.95vh\" c=\"dimmed\" ta=\"center\" style={{ letterSpacing: \"0.04em\", opacity: 0.8 }}>\r\n {locale(\"cfgpanel_version\")} {version}\r\n </Text>\r\n )}\r\n </Flex>\r\n </Flex>\r\n\r\n {/* ── Right column: banner stacked above content ── */}\r\n {/* Wrapped in a column flex so the banner sits on top of the tab\r\n content. The parent MotionFlex is `direction=\"row\"` for sidebar +\r\n content-area, so without this wrapper the banner becomes a third\r\n column and gets squeezed to the left edge of the content area. */}\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0, overflow: \"hidden\" }}>\r\n {/* Above the AnimatePresence so it doesn't unmount on every tab\r\n switch. Self-hides when nothing's missing; consumers can disable\r\n entirely via `suppressMissingItemsBanner`. */}\r\n {!suppressMissingItemsBanner && <MissingItemsBanner />}\r\n\r\n <AnimatePresence mode=\"wait\">\r\n <motion.div key={activeTab} initial={firstMountRef.current ? (firstMountRef.current = false, false) : { opacity: 0, y: 4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }} transition={{ duration: 0.15 }}\r\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", overflowY: \"auto\" }}>\r\n {children(activeTab)}\r\n </motion.div>\r\n </AnimatePresence>\r\n </Flex>\r\n </MotionFlex>\r\n </>\r\n );\r\n}\r\n\r\n// ── Utility ───────────────────────────────────────────────────────────────────\r\n\r\nfunction cloneConfig<T>(value: T): T {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n}\r\n\r\n// ── ServerOnly Fetcher (merges x-serverOnly paths into form on admin open) ───\r\n\r\nfunction ServerOnlyFetcher<T extends Record<string, any>>() {\r\n const { fetchConfig } = getScriptConfigInstance<T>();\r\n const { reinitialize } = useFormActions<T>();\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n fetchConfig().then((full) => {\r\n if (!cancelled && full) reinitialize(full as Partial<T>);\r\n }).catch(() => {});\r\n return () => { cancelled = true; };\r\n }, []);\r\n\r\n return null;\r\n}\r\n\r\n// ── Public ConfigPanel ────────────────────────────────────────────────────────\r\n\r\nconst defaultOnClose = () => fetchNui(\"CLOSE_ADMIN_SECTION\");\r\n\r\nexport function ConfigPanel<T extends Record<string, any>>(props: ConfigPanelProps<T>) {\r\n const { open, onClose = defaultOnClose } = props;\r\n const { store, updateConfig } = getScriptConfigInstance<T>();\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n if (!open) return null;\r\n\r\n // No internal QueryClientProvider — DirkProvider now mounts a shared\r\n // client (dirkQueryClient) that this component, the missing-items audit,\r\n // usePlayers etc. all consume. Invalidations below use the same client.\r\n return (\r\n <>\r\n <FormProvider<T>\r\n initialValues={cloneConfig(store.getState())}\r\n onSubmit={async (form) => {\r\n if (isSaving) return;\r\n setIsSaving(true);\r\n try {\r\n const result: any = await updateConfig(form.values as T);\r\n if (result?.success) {\r\n form.reinitialize(cloneConfig(form.values as T));\r\n dirkQueryClient.invalidateQueries({ queryKey: [\"scriptConfigHistory\"] });\r\n // Re-run the missing-items audit since item-name fields might\r\n // have changed in this save. One-shot per save — not an event\r\n // listener loop, no spam.\r\n useMissingItemsAudit.getState().refresh();\r\n notifications.show({\r\n color: \"green\",\r\n title: locale(\"ConfigSaveSuccessTitle\"),\r\n message: locale(\"ConfigSaveSuccessBody\"),\r\n autoClose: 3000,\r\n });\r\n return;\r\n }\r\n form.reinitialize(cloneConfig(store.getState()));\r\n const err = result?._error || \"Unknown\";\r\n console.warn(`[ConfigPanel] config save failed: ${err}`);\r\n // Map common server-side error codes to friendlier copy. Falls\r\n // back to the raw code so unknown errors still surface something\r\n // visible instead of swallowing silently.\r\n const titleKey = err === \"NoPermission\" ? \"ConfigSaveNoPermissionTitle\"\r\n : err === \"VersionConflict\" ? \"ConfigSaveVersionConflictTitle\"\r\n : err === \"NotReady\" ? \"ConfigSaveNotReadyTitle\"\r\n : \"ConfigSaveFailedTitle\";\r\n const bodyKey = err === \"NoPermission\" ? \"ConfigSaveNoPermissionBody\"\r\n : err === \"VersionConflict\" ? \"ConfigSaveVersionConflictBody\"\r\n : err === \"NotReady\" ? \"ConfigSaveNotReadyBody\"\r\n : \"ConfigSaveFailedBody\";\r\n notifications.show({\r\n color: \"red\",\r\n title: locale(titleKey),\r\n message: locale(bodyKey, err),\r\n autoClose: 6000,\r\n });\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n }}\r\n >\r\n <ServerOnlyFetcher<T> />\r\n <AnimatePresence>\r\n {open && (\r\n <ConfigPanelInner<T>\r\n {...props}\r\n onClose={onClose}\r\n isSaving={isSaving}\r\n />\r\n )}\r\n </AnimatePresence>\r\n </FormProvider>\r\n </>\r\n );\r\n}\r\n","import { Flex, Image, Select, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AlertTriangle } from \"lucide-react\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { locale } from \"../utils/locales\";\r\nimport { useItems, useItemsList } from \"../utils/useItems\";\r\n\r\nexport type SelectItemProps = {\r\n label: string;\r\n value: string;\r\n onChange: (value: string) => void;\r\n style?: React.CSSProperties;\r\n excludeItemNames?: string[];\r\n};\r\n\r\nconst MISSING_COLOR = \"#f59e0b\"; // amber — matches MissingItemsBanner\r\n\r\nfunction LazyImage({ src, style }: { src: string; style?: React.CSSProperties }) {\r\n const [visible, setVisible] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n observer.disconnect();\r\n }\r\n });\r\n if (ref.current) observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n // No alt — when an item's image src 404s the alt string would render in\r\n // place of the image and blow the cell out, throwing the input layout\r\n // off (clicking the icon area then misses the input click target).\r\n return (\r\n <div ref={ref} style={{ width: \"4vh\", height: \"4vh\" }}>\r\n {visible && <Image src={src} fit=\"contain\" style={style} />}\r\n </div>\r\n );\r\n}\r\n\r\nexport function SelectItem(props: SelectItemProps) {\r\n const invItems = useItems();\r\n\r\n // True when something IS configured but it's not registered in the player's\r\n // items table. Drives all the amber styling below.\r\n const isMissing = !!props.value && !invItems[props.value];\r\n\r\n const formattedItems = useMemo(() => {\r\n const seen = new Set<string>();\r\n const list = useItemsList(props.excludeItemNames ?? [])\r\n .filter((item) => {\r\n if (seen.has(item.name)) return false;\r\n seen.add(item.name);\r\n return true;\r\n })\r\n .map((item) => ({ value: item.name, label: item.label, image: item.image }));\r\n\r\n // If the configured value isn't in the inventory items table, prepend a\r\n // synthetic entry so Mantine has something to match `value` against —\r\n // otherwise the input renders blank with no signal that anything's\r\n // configured. The raw item name doubles as the displayed label.\r\n if (isMissing) {\r\n list.unshift({ value: props.value, label: props.value, image: \"\" });\r\n }\r\n return list;\r\n // `useItemsList` already depends on `invItems` internally; `isMissing`\r\n // captures the value-vs-inventory delta so this list rebuilds whenever\r\n // the configured value or the items table changes.\r\n }, [invItems, props.excludeItemNames, props.value, isMissing]);\r\n\r\n return (\r\n <Select\r\n maxDropdownHeight=\"30vh\"\r\n label={locale(props.label)}\r\n size=\"xs\"\r\n flex={1}\r\n style={props.style}\r\n limit={50}\r\n value={props.value}\r\n onChange={(v) => props.onChange(v as string)}\r\n data={formattedItems}\r\n allowDeselect={false}\r\n searchable\r\n // Amber-tint the input text when the configured value isn't registered\r\n // — a glance is enough to spot which field is broken.\r\n styles={isMissing ? { input: { color: MISSING_COLOR } } : undefined}\r\n // Portal the dropdown so it isn't clipped by overflow:hidden parents\r\n // (e.g. live-editor side panels) and stack it above modal content.\r\n comboboxProps={{ withinPortal: true, zIndex: 2000 }}\r\n leftSectionWidth=\"4vh\"\r\n // Pointer events off on the leftSection so clicks anywhere on the\r\n // input (including over the item icon) bubble through to the input\r\n // and open the dropdown.\r\n leftSectionPointerEvents=\"none\"\r\n leftSection={\r\n isMissing ? (\r\n <Flex align=\"center\" justify=\"center\" w=\"4vh\" h=\"4vh\">\r\n <AlertTriangle size=\"2vh\" color={MISSING_COLOR} strokeWidth={2.5} />\r\n </Flex>\r\n ) : props.value ? (\r\n <Image\r\n fallbackSrc=\"/placeholder.png\"\r\n src={invItems[props.value]?.image || \"\"}\r\n fit=\"contain\"\r\n maw=\"4vh\"\r\n style={{ aspectRatio: \"1 / 1\" }}\r\n />\r\n ) : null\r\n }\r\n nothingFoundMessage={locale(\"NoItemsFound\")}\r\n renderOption={(item) => {\r\n const optionMissing = !invItems[item.option.value] && item.option.value === props.value;\r\n if (optionMissing) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" w=\"100%\">\r\n <Flex align=\"center\" justify=\"center\" w=\"4vh\" h=\"4vh\" style={{ flexShrink: 0 }}>\r\n <AlertTriangle size=\"2vh\" color={MISSING_COLOR} strokeWidth={2.5} />\r\n </Flex>\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0 }}>\r\n <Text size=\"sm\" c={MISSING_COLOR} style={{ fontFamily: \"monospace\" }}>\r\n {item.option.value}\r\n </Text>\r\n <Text size=\"xxs\" c=\"dimmed\">\r\n {locale(\"ItemNotInInventory\")}\r\n </Text>\r\n </Flex>\r\n <div style={{\r\n background: \"rgba(245,158,11,0.12)\",\r\n border: `0.1vh solid ${MISSING_COLOR}59`,\r\n borderRadius: \"0.3vh\",\r\n padding: \"0.1vh 0.6vh\",\r\n }}>\r\n <Text size=\"xxs\" c={MISSING_COLOR} ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.06em\">\r\n {locale(\"Missing\")}\r\n </Text>\r\n </div>\r\n </Flex>\r\n );\r\n }\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" w=\"100%\">\r\n <LazyImage\r\n src={invItems[item.option.value]?.image || \"\"}\r\n style={{ aspectRatio: \"1 / 1\" }}\r\n />\r\n <Flex direction=\"column\">\r\n <Text size=\"sm\">{item.option.label}</Text>\r\n <Text size=\"xxs\" c=\"dimmed\">{item.option.value}</Text>\r\n </Flex>\r\n </Flex>\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n","import { alpha, Flex, NumberInput, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Crosshair, Eye, EyeOff, MapPin, RotateCcw, Trash2 } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\nimport { locale } from \"../utils/locales\";\r\n\r\nexport type Vector4Value = { x: number; y: number; z: number; w: number };\r\n\r\nexport type PositionPickerProps = {\r\n label?: string;\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n /**\r\n * If set, the picker treats `value` as an offset from this entity reference\r\n * (e.g. \"shell\"). The Lua side must handle GET_POSITION + relativeTo by\r\n * returning (playerCoords - entityCoords) instead of world coords, and must\r\n * resolve the same reference when previewing.\r\n */\r\n relativeTo?: string;\r\n /** Optional NUI event name to fetch the current position. Defaults to GET_POSITION. */\r\n fetchEvent?: string;\r\n /** Optional NUI event name to draw a marker at the value. Defaults to PREVIEW_POSITION. */\r\n previewEvent?: string;\r\n /** Optional NUI event name to clear the preview marker. Defaults to STOP_PREVIEW_POSITION. */\r\n stopPreviewEvent?: string;\r\n description?: string;\r\n showHeading?: boolean;\r\n};\r\n\r\nconst ZERO: Vector4Value = { x: 0, y: 0, z: 0, w: 0 };\r\n\r\nexport function PositionPicker(props: PositionPickerProps) {\r\n const {\r\n label,\r\n value,\r\n onChange,\r\n relativeTo,\r\n fetchEvent = \"GET_POSITION\",\r\n previewEvent = \"PREVIEW_POSITION\",\r\n stopPreviewEvent = \"STOP_PREVIEW_POSITION\",\r\n description,\r\n showHeading = true,\r\n } = props;\r\n\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n const [previewing, setPreviewing] = useState(false);\r\n const previewingRef = useRef(false);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (previewingRef.current) {\r\n fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {});\r\n }\r\n };\r\n }, [stopPreviewEvent, relativeTo]);\r\n\r\n const set = <K extends keyof Vector4Value>(key: K, val: number) => {\r\n const next = { ...value, [key]: val };\r\n onChange(next);\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const grab = async () => {\r\n try {\r\n const resp = await fetchNui<Vector4Value | null>(fetchEvent, { relativeTo }, value);\r\n if (resp && typeof resp === \"object\") {\r\n const next: Vector4Value = {\r\n x: Number(resp.x ?? 0),\r\n y: Number(resp.y ?? 0),\r\n z: Number(resp.z ?? 0),\r\n w: Number(resp.w ?? 0),\r\n };\r\n onChange(next);\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {});\r\n }\r\n }\r\n } catch {\r\n // ignore — Lua side may not be wired up yet\r\n }\r\n };\r\n\r\n const togglePreview = async () => {\r\n const nextState = !previewing;\r\n setPreviewing(nextState);\r\n previewingRef.current = nextState;\r\n if (nextState) {\r\n await fetchNui(previewEvent, { value, relativeTo }).catch(() => {});\r\n } else {\r\n await fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const reset = () => {\r\n onChange({ ...ZERO });\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const numberStyles = {\r\n input: { textAlign: \"right\" as const, fontFamily: \"monospace\" },\r\n };\r\n\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n gap=\"xxs\"\r\n p=\"xs\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.35),\r\n border: \"0.1vh solid rgba(255,255,255,0.05)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n {(label || description) && (\r\n <Flex justify=\"space-between\" align=\"center\" gap=\"xs\">\r\n <Flex direction=\"column\" gap={0} style={{ minWidth: 0 }}>\r\n {label && (\r\n <Flex align=\"center\" gap=\"xxs\">\r\n <MapPin size=\"1.4vh\" color={alpha(color, 0.7)} />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"rgba(255,255,255,0.75)\"\r\n >\r\n {locale(label)}\r\n </Text>\r\n {relativeTo && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={alpha(color, 0.5)} lts=\"0.05em\">\r\n · {locale(\"RelativeTo\")} {relativeTo}\r\n </Text>\r\n )}\r\n </Flex>\r\n )}\r\n {description && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"dimmed\" lh={1.3}>\r\n {locale(description)}\r\n </Text>\r\n )}\r\n </Flex>\r\n\r\n <Flex gap=\"xxs\" style={{ flexShrink: 0 }}>\r\n <PickerButton tooltip={locale(\"GrabMyPosition\")} onClick={grab} color={color}>\r\n <Crosshair size=\"1.4vh\" color={color} />\r\n </PickerButton>\r\n <PickerButton\r\n tooltip={previewing ? locale(\"StopPreview\") : locale(\"PreviewInWorld\")}\r\n onClick={togglePreview}\r\n color={color}\r\n active={previewing}\r\n >\r\n {previewing ? (\r\n <EyeOff size=\"1.4vh\" color={color} />\r\n ) : (\r\n <Eye size=\"1.4vh\" color={alpha(color, 0.7)} />\r\n )}\r\n </PickerButton>\r\n <PickerButton tooltip={locale(\"Reset\")} onClick={reset} color=\"#ef4444\">\r\n <RotateCcw size=\"1.4vh\" color=\"#ef4444\" />\r\n </PickerButton>\r\n </Flex>\r\n </Flex>\r\n )}\r\n\r\n <Flex gap=\"xxs\">\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"X\"\r\n value={value.x}\r\n onChange={(v) => set(\"x\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"Y\"\r\n value={value.y}\r\n onChange={(v) => set(\"y\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"Z\"\r\n value={value.z}\r\n onChange={(v) => set(\"z\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n {showHeading && (\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"W\"\r\n value={value.w}\r\n onChange={(v) => set(\"w\", Number(v))}\r\n decimalScale={2}\r\n step={1}\r\n min={0}\r\n max={360}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n )}\r\n </Flex>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction PickerButton({\r\n children,\r\n onClick,\r\n tooltip,\r\n color,\r\n active,\r\n}: {\r\n children: React.ReactNode;\r\n onClick: () => void;\r\n tooltip: string;\r\n color: string;\r\n active?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Tooltip label={tooltip} position=\"top\" withArrow>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: active ? alpha(color, 0.22) : alpha(color, 0.08),\r\n border: `0.1vh solid ${alpha(color, active ? 0.5 : 0.3)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.4vh 0.6vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n {children}\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\n// ── Compact row pieces ───────────────────────────────────────────────────────\r\n// Lower-friction siblings of <PositionPicker> for cases where you want a\r\n// scannable list of positions instead of a single full editor. Use these\r\n// when each row in a list should expose Set / Goto actions and just show\r\n// the resulting `vector4(x, y, z, w)` underneath — no inline number inputs.\r\n//\r\n// Lua side must register `GET_POSITION` (returns current world coords + heading)\r\n// and `GOTO_POSITION` (teleports the player to {x,y,z,w}). dirk_druglabsv2's\r\n// `src/client/shellEditor.lua` is the canonical example.\r\n\r\nfunction fmtV4(n: number) {\r\n return Number.isFinite(n) ? n.toFixed(2) : \"0.00\";\r\n}\r\n\r\n/** Read-only `vector4(x, y, z, w)` line in the same boxed style as PositionPicker. */\r\nexport function Vector4Display({ value }: { value: Vector4Value }) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex\r\n align=\"center\"\r\n gap=\"xs\"\r\n p=\"xs\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.35),\r\n border: \"0.1vh solid rgba(255,255,255,0.05)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n <Text\r\n ff=\"monospace\"\r\n size=\"xxs\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n style={{ flex: 1, letterSpacing: \"0.02em\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}\r\n >\r\n vector4({fmtV4(value.x)}, {fmtV4(value.y)}, {fmtV4(value.z)}, {fmtV4(value.w)})\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n/** Reusable styled action button used by Set/Goto/etc. */\r\nfunction Vector4ActionButton({\r\n icon,\r\n label,\r\n tooltip,\r\n onClick,\r\n color,\r\n compact,\r\n}: {\r\n icon: React.ReactNode;\r\n label: string;\r\n tooltip: string;\r\n onClick: () => void;\r\n color: string;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Tooltip label={tooltip} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n {icon}\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {label}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\n/** Grabs the player's current world coords+heading via `GET_POSITION`. */\r\nexport function WorldPositionSetButton({\r\n value,\r\n onChange,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const grab = async () => {\r\n try {\r\n const resp = await fetchNui<Vector4Value | null>(\"GET_POSITION\", {}, value);\r\n if (!resp || typeof resp !== \"object\") return;\r\n onChange({\r\n x: Number(resp.x ?? 0),\r\n y: Number(resp.y ?? 0),\r\n z: Number(resp.z ?? 0),\r\n w: Number(resp.w ?? 0),\r\n });\r\n } catch {\r\n // Lua surfaces a notify on failure\r\n }\r\n };\r\n return (\r\n <Vector4ActionButton\r\n icon={<Crosshair size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Set\")}\r\n tooltip={locale(\"SetWorldTooltip\")}\r\n onClick={grab}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n/** Teleports the player to the stored coords via `GOTO_POSITION`. */\r\nexport function WorldPositionGotoButton({\r\n value,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const goto = () => {\r\n fetchNui(\"GOTO_POSITION\", value).catch(() => {});\r\n };\r\n return (\r\n <Vector4ActionButton\r\n icon={<MapPin size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Goto\")}\r\n tooltip={locale(\"GotoWorldTooltip\")}\r\n onClick={goto}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n/** Red-tinted Delete button matching the Set/Goto styling. */\r\nexport function Vector4DeleteButton({\r\n onClick,\r\n compact,\r\n}: {\r\n onClick: () => void;\r\n compact?: boolean;\r\n}) {\r\n const color = \"#ef4444\";\r\n return (\r\n <Vector4ActionButton\r\n icon={<Trash2 size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Delete\")}\r\n tooltip={locale(\"Delete\")}\r\n onClick={onClick}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n","// Group / rank pickers backed by lib.framework on the Lua side.\r\n//\r\n// Two usage modes:\r\n//\r\n// Compound (group + rank pair):\r\n// <GroupSelect value={{ name: 'police', grade: 2 }} onChange={setValue} type=\"job\">\r\n// <GroupName />\r\n// <GroupRank />\r\n// </GroupSelect>\r\n//\r\n// Standalone (just the group name, no rank):\r\n// <GroupName value=\"police\" onChange={setName} type=\"job\" />\r\n//\r\n// <GroupRank> is compound-only — it reads the currently selected group\r\n// from context and lists that group's grades. Throws when used outside.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport React, { createContext, useContext, useEffect } from \"react\";\r\nimport {\r\n FrameworkGroup,\r\n ensureFrameworkGroups,\r\n selectAllGroups,\r\n useFrameworkGroups,\r\n} from \"../utils/useFrameworkGroups\";\r\nimport { locale } from \"../utils/locales\";\r\n\r\nexport type GroupValue = {\r\n name?: string;\r\n grade?: number;\r\n};\r\n\r\nexport type GroupType = \"job\" | \"gang\";\r\n\r\ntype GroupSelectContextShape = {\r\n value: GroupValue;\r\n onChange: (next: GroupValue) => void;\r\n type?: GroupType;\r\n};\r\n\r\nconst GroupSelectContext = createContext<GroupSelectContextShape | null>(null);\r\n\r\n// ── <GroupSelect> ────────────────────────────────────────────────────────────\r\n// Wrapper that owns the {name, grade} pair and exposes it to children via\r\n// context. Renders nothing of its own — children handle presentation. Pass\r\n// any layout props through `style` if needed (e.g. width).\r\n\r\nexport type GroupSelectProps = {\r\n value: GroupValue;\r\n onChange: (next: GroupValue) => void;\r\n type?: GroupType;\r\n children: React.ReactNode;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupSelect({\r\n value,\r\n onChange,\r\n type,\r\n children,\r\n style,\r\n}: GroupSelectProps) {\r\n return (\r\n <GroupSelectContext.Provider value={{ value, onChange, type }}>\r\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.4vh\", ...style }}>\r\n {children}\r\n </div>\r\n </GroupSelectContext.Provider>\r\n );\r\n}\r\n\r\n// ── filtering ────────────────────────────────────────────────────────────────\r\n\r\nfunction filterByType(\r\n jobs: FrameworkGroup[],\r\n gangs: FrameworkGroup[],\r\n type?: GroupType,\r\n): FrameworkGroup[] {\r\n if (type === \"job\") return jobs;\r\n if (type === \"gang\") return gangs;\r\n return [...jobs, ...gangs];\r\n}\r\n\r\n// ── <GroupName> ──────────────────────────────────────────────────────────────\r\n// Group dropdown. Works standalone (own value/onChange) OR inside\r\n// <GroupSelect> (reads context, ignores standalone props). When the name\r\n// changes inside compound mode, the grade is reset to undefined since the\r\n// previous grade key may not exist in the new group.\r\n\r\nexport type GroupNameProps = {\r\n value?: string;\r\n onChange?: (name: string) => void;\r\n type?: GroupType;\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n size?: string;\r\n disabled?: boolean;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupName(props: GroupNameProps) {\r\n const ctx = useContext(GroupSelectContext);\r\n const jobs = useFrameworkGroups((s) => s.jobs);\r\n const gangs = useFrameworkGroups((s) => s.gangs);\r\n\r\n // Lazily pull jobs/gangs the first time a picker mounts (once process-wide,\r\n // guarded inside ensureFrameworkGroups). Replaces the old eager module-load\r\n // fetch that every consumer NUI ran whether or not a picker was ever shown.\r\n useEffect(() => {\r\n ensureFrameworkGroups();\r\n }, []);\r\n\r\n const inCompound = ctx !== null;\r\n const currentValue = inCompound ? ctx!.value.name : props.value;\r\n const filterType = inCompound ? ctx!.type : props.type;\r\n\r\n const list = filterByType(jobs, gangs, filterType);\r\n\r\n // When type is undefined we render Mantine's grouped data shape so the\r\n // user sees Jobs / Gangs sections in the dropdown.\r\n const data =\r\n filterType === undefined\r\n ? [\r\n { group: locale(\"Jobs\") || \"Jobs\", items: jobs.map((g) => ({ value: g.name, label: g.label })) },\r\n { group: locale(\"Gangs\") || \"Gangs\", items: gangs.map((g) => ({ value: g.name, label: g.label })) },\r\n ]\r\n : list.map((g) => ({ value: g.name, label: g.label }));\r\n\r\n return (\r\n <Select\r\n label={props.label}\r\n description={props.description}\r\n placeholder={props.placeholder ?? (locale(\"SelectGroup\") || \"Select…\")}\r\n size={props.size ?? \"xs\"}\r\n disabled={props.disabled}\r\n style={props.style}\r\n data={data as any}\r\n value={currentValue ?? null}\r\n searchable\r\n onChange={(v) => {\r\n const name = v ?? \"\";\r\n if (inCompound) {\r\n // Reset grade when the group changes — old grade likely invalid.\r\n ctx!.onChange({ name: name || undefined, grade: undefined });\r\n } else if (props.onChange) {\r\n props.onChange(name);\r\n }\r\n }}\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\n// ── <GroupRank> ──────────────────────────────────────────────────────────────\r\n// Grade dropdown for the currently-selected group. Compound-only. Disabled\r\n// when no group is selected or the group has no grades.\r\n\r\nexport type GroupRankProps = {\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n size?: string;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupRank(props: GroupRankProps) {\r\n const ctx = useContext(GroupSelectContext);\r\n if (ctx === null) {\r\n throw new Error(\"<GroupRank> must be a child of <GroupSelect>\");\r\n }\r\n const jobs = useFrameworkGroups((s) => s.jobs);\r\n const gangs = useFrameworkGroups((s) => s.gangs);\r\n\r\n // Defensive: ensure groups are fetched even if GroupRank renders without a\r\n // GroupName sibling. No-op after the first call (guarded).\r\n useEffect(() => {\r\n ensureFrameworkGroups();\r\n }, []);\r\n\r\n const all = [...jobs, ...gangs];\r\n const selectedGroup = all.find((g) => g.name === ctx.value.name) ?? null;\r\n const grades = selectedGroup?.grades ?? [];\r\n\r\n const data = grades.map((g) => ({\r\n value: String(g.grade),\r\n label: `${g.grade} — ${g.label || g.name}${g.isBoss ? \" (boss)\" : \"\"}`,\r\n }));\r\n\r\n return (\r\n <Select\r\n label={props.label}\r\n description={props.description}\r\n placeholder={props.placeholder ?? (locale(\"SelectGrade\") || \"Select grade…\")}\r\n size={props.size ?? \"xs\"}\r\n style={props.style}\r\n data={data}\r\n value={ctx.value.grade != null ? String(ctx.value.grade) : null}\r\n onChange={(v) => {\r\n ctx.onChange({\r\n ...ctx.value,\r\n grade: v != null ? Number(v) : undefined,\r\n });\r\n }}\r\n disabled={!selectedGroup || grades.length === 0}\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\n// Convenience namespace export so consumers can write\r\n// `<GroupSelect.Name>` / `<GroupSelect.Rank>` if they prefer.\r\nGroupSelect.Name = GroupName;\r\nGroupSelect.Rank = GroupRank;\r\n","import { createContext, useContext, type ReactNode } from \"react\";\r\nimport { Flex, Select, TextInput } from \"@mantine/core\";\r\nimport { INPUT_MAPPER_KEYS_BY_PRIMARY, INPUT_MAPPER_PRIMARY_OPTIONS } from \"@/utils/inputMapper\";\r\n\r\nexport type FiveMControls = {\r\n _type: string;\r\n _key: string;\r\n};\r\n\r\ntype KeyBindContextValue = {\r\n value: FiveMControls;\r\n onChange: (next: FiveMControls) => void;\r\n};\r\n\r\nconst KeyBindContext = createContext<KeyBindContextValue | null>(null);\r\n\r\nfunction useKeyBindContext(): KeyBindContextValue {\r\n const ctx = useContext(KeyBindContext);\r\n if (!ctx) {\r\n throw new Error(\"FiveMKeyBindInput.* must be used inside <FiveMKeyBindInput>\");\r\n }\r\n return ctx;\r\n}\r\n\r\ntype RootProps = {\r\n value: FiveMControls;\r\n onChange: (next: FiveMControls) => void;\r\n children: ReactNode;\r\n};\r\n\r\nfunction Root({ value, onChange, children }: RootProps) {\r\n return (\r\n <KeyBindContext.Provider value={{ value, onChange }}>\r\n <Flex gap=\"xs\" style={{ flex: 1 }}>\r\n {children}\r\n </Flex>\r\n </KeyBindContext.Provider>\r\n );\r\n}\r\n\r\ntype CategoryProps = {\r\n label?: string;\r\n};\r\n\r\nfunction Category({ label = \"Primary\" }: CategoryProps) {\r\n const { value, onChange } = useKeyBindContext();\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._type}\r\n data={[...INPUT_MAPPER_PRIMARY_OPTIONS]}\r\n onChange={(nextType) => {\r\n if (!nextType) return;\r\n\r\n const keyOptions = INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];\r\n const hasCurrentKey = keyOptions.includes(value._key);\r\n const nextKey = hasCurrentKey ? value._key : (keyOptions[0] ?? value._key);\r\n\r\n onChange({\r\n ...value,\r\n _type: nextType,\r\n _key: nextKey,\r\n });\r\n }}\r\n searchable\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\ntype KeyProps = {\r\n label?: string;\r\n};\r\n\r\nfunction Key({ label = \"Key\" }: KeyProps) {\r\n const { value, onChange } = useKeyBindContext();\r\n\r\n const keyOptions = INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];\r\n\r\n if (keyOptions.length === 0) {\r\n return (\r\n <TextInput\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._key}\r\n onChange={(e) => onChange({ ...value, _key: e.currentTarget.value })}\r\n placeholder=\"Type key value\"\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._key}\r\n data={keyOptions}\r\n onChange={(nextKey) => {\r\n if (!nextKey) return;\r\n onChange({ ...value, _key: nextKey });\r\n }}\r\n searchable\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\nexport const FiveMKeyBindInput = Object.assign(Root, {\r\n Category,\r\n Key,\r\n});\r\n","// FiveM control-id pickers. These are for the numeric control IDs you pass\r\n// to IsControlPressed / DisableControlAction / EnableControlAction (the\r\n// ones documented at https://docs.fivem.net/docs/game-references/controls/),\r\n// not for keybind primary keys — for those use FiveMKeyBindInput.\r\n//\r\n// Two flavours:\r\n// • <ControlSelect> — single id, returns number\r\n// • <ControlMultiSelect> — array of ids, returns number[]\r\n//\r\n// Both accept arbitrary Mantine Select / MultiSelect props so callers can\r\n// style/portal/disable as they need. Custom (uncatalogued) IDs the data\r\n// already contains in `value` are still rendered — they just appear in a\r\n// \"Custom\" group so the user can see and remove them.\r\n\r\nimport { MultiSelect, Select } from \"@mantine/core\";\r\nimport type { MultiSelectProps, SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_CONTROLS,\r\n GTA_CONTROL_GROUP_ORDER,\r\n formatGtaControl,\r\n type GtaControl,\r\n type GtaControlGroup,\r\n} from \"@/utils/gtaControls\";\r\n\r\n// Build the grouped Mantine data once per module-load. Each group entry is\r\n// `{ group: name, items: [{ value, label }, ...] }`.\r\nfunction buildGroupedData(extraIds: number[] = []) {\r\n // Dedupe by id — Mantine throws \"Duplicate options\" if two entries share\r\n // the same value. First occurrence wins so the catalogue order in\r\n // GTA_CONTROLS stays authoritative.\r\n const groups = new Map<GtaControlGroup, GtaControl[]>();\r\n const seen = new Set<number>();\r\n for (const c of GTA_CONTROLS) {\r\n if (seen.has(c.id)) continue;\r\n seen.add(c.id);\r\n if (!groups.has(c.group)) groups.set(c.group, []);\r\n groups.get(c.group)!.push(c);\r\n }\r\n\r\n const data = GTA_CONTROL_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((c) => ({\r\n value: String(c.id),\r\n label: formatGtaControl(c.id),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom (uncatalogued) ids in a \"Custom\" group so they're visible\r\n // in the dropdown rather than disappearing. Without this, MultiSelect drops\r\n // the chip silently when the value isn't in `data`.\r\n const knownIds = new Set(GTA_CONTROLS.map((c) => c.id));\r\n const customs = extraIds.filter((id) => !knownIds.has(id));\r\n if (customs.length > 0) {\r\n // The \"Custom\" group label is just a heading for unrecognised IDs the\r\n // caller has in their data — it's not a real GtaControlGroup, so cast\r\n // through unknown.\r\n data.push({\r\n group: \"Custom\" as unknown as GtaControlGroup,\r\n items: customs.map((id) => ({ value: String(id), label: `Control ${id}` })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\n// ── Single-control Select ──────────────────────────────────────────────────\r\n\r\nexport type ControlSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number | null | undefined;\r\n onChange: (id: number | null) => void;\r\n};\r\n\r\nexport function ControlSelect({\r\n value,\r\n onChange,\r\n label = \"Control\",\r\n size = \"xs\",\r\n searchable = true,\r\n ...rest\r\n}: ControlSelectProps) {\r\n const data = buildGroupedData(value != null ? [value] : []);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching controls\"\r\n {...rest}\r\n data={data}\r\n value={value != null ? String(value) : null}\r\n onChange={(v) => onChange(v == null ? null : Number(v))}\r\n />\r\n );\r\n}\r\n\r\n// ── Multi-control MultiSelect ──────────────────────────────────────────────\r\n\r\nexport type ControlMultiSelectProps = Omit<MultiSelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number[];\r\n onChange: (ids: number[]) => void;\r\n};\r\n\r\nexport function ControlMultiSelect({\r\n value,\r\n onChange,\r\n label = \"Controls\",\r\n size = \"xs\",\r\n searchable = true,\r\n ...rest\r\n}: ControlMultiSelectProps) {\r\n const data = buildGroupedData(value);\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching controls\"\r\n {...rest}\r\n data={data}\r\n value={value.map(String)}\r\n onChange={(vals) => onChange(vals.map((v) => Number(v)).filter((n) => Number.isFinite(n)))}\r\n />\r\n );\r\n}\r\n","import { alpha, Loader, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Check, X } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\n\r\ntype SaveState = \"idle\" | \"pending\" | \"success\" | \"error\";\r\n\r\nexport function AsyncSaveButton({\r\n onSave,\r\n color,\r\n label = \"Save Changes\",\r\n style,\r\n}: {\r\n onSave: () => Promise<any>;\r\n color: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n}) {\r\n const theme = useMantineTheme();\r\n const [state, setState] = useState<SaveState>(\"idle\");\r\n\r\n const handleClick = async () => {\r\n if (state === \"pending\") return;\r\n setState(\"pending\");\r\n try {\r\n const result = await onSave();\r\n setState(result?.success === false ? \"error\" : \"success\");\r\n } catch {\r\n setState(\"error\");\r\n }\r\n setTimeout(() => setState(\"idle\"), 2000);\r\n };\r\n\r\n const c = state === \"error\" ? \"#ef4444\" : color;\r\n\r\n return (\r\n <motion.button\r\n onClick={handleClick}\r\n disabled={state === \"pending\"}\r\n whileHover={state === \"pending\" ? {} : { background: alpha(c, 0.25) }}\r\n whileTap={state === \"pending\" ? {} : { scale: 0.98 }}\r\n style={{\r\n background: alpha(c, 0.14),\r\n border: `0.1vh solid ${alpha(c, 0.4)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: `${theme.spacing.xxs} ${theme.spacing.xs}`,\r\n cursor: state === \"pending\" ? \"default\" : \"pointer\",\r\n display: \"flex\", alignItems: \"center\",\r\n justifyContent: \"center\", gap: theme.spacing.xxs,\r\n transition: \"background 0.2s, border-color 0.2s\",\r\n alignSelf: \"flex-end\",\r\n ...style,\r\n }}\r\n >\r\n {state === \"pending\"\r\n ? <Loader size=\"1.4vh\" color={c} type=\"oval\" />\r\n : state === \"error\"\r\n ? <X size=\"1.4vh\" color={c} />\r\n : <Check size=\"1.4vh\" color={c} />\r\n }\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.06em\" c={c}>\r\n {state === \"success\" ? \"Saved!\" : state === \"error\" ? \"Failed!\" : label}\r\n </Text>\r\n </motion.button>\r\n );\r\n}\r\n","import { Flex, Text } from \"@mantine/core\";\r\nimport { locale } from \"@/utils\";\r\nimport { LucideProps } from \"lucide-react\";\r\nimport { ComponentType } from \"react\";\r\n\r\nexport type AdminPageTitleProps = {\r\n title: string;\r\n icon: ComponentType<LucideProps>;\r\n color: string;\r\n};\r\n\r\nexport function AdminPageTitle(props: AdminPageTitleProps) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\">\r\n <props.icon color={props.color} />\r\n <Text ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.1em\" size=\"sm\" c=\"rgba(255,255,255,0.6)\">\r\n {locale(props.title)}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n","// Shared \"label + description + Switch on the right\" panel used across\r\n// configurators (BasicSection, BackstoriesSection, ThemeOverrideSection, …).\r\n// Centralising it here means a single visual style — dark[5] tinted\r\n// background, faint white outline, primary-colored track when on — instead of\r\n// each consumer hand-rolling slightly different borders/colours.\r\n//\r\n// Variants:\r\n// • default — tall row with description, used at the top of a tab/section\r\n// • compact — smaller padding + sm switch, for nested editor cards (e.g.\r\n// waypoint useNavmesh inside the SceneEditor walk-path block)\r\n//\r\n// `thumbIcon` supports the Lock-on-thumb pattern used by gated toggles.\r\n\r\nimport { alpha, Flex, Switch, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { ReactNode } from \"react\";\r\n\r\nexport type SwitchPanelProps = {\r\n label: ReactNode;\r\n description?: ReactNode;\r\n checked: boolean;\r\n onChange: (v: boolean) => void;\r\n disabled?: boolean;\r\n /** Icon rendered on the Switch's thumb (e.g. a Lock when locked). */\r\n thumbIcon?: ReactNode;\r\n /** Compact variant — used for nested rows inside an editor card. */\r\n compact?: boolean;\r\n};\r\n\r\nexport function SwitchPanel({\r\n label,\r\n description,\r\n checked,\r\n onChange,\r\n disabled,\r\n thumbIcon,\r\n compact,\r\n}: SwitchPanelProps) {\r\n const theme = useMantineTheme();\r\n const pc = theme.colors[theme.primaryColor];\r\n\r\n const bg = compact\r\n ? alpha(theme.colors.dark[6], 0.5)\r\n : alpha(theme.colors.dark[5], 0.35);\r\n const border = compact\r\n ? \"0.1vh solid rgba(255,255,255,0.04)\"\r\n : \"0.1vh solid rgba(255,255,255,0.05)\";\r\n\r\n return (\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px={compact ? \"xs\" : \"xs\"}\r\n py={compact ? \"xxs\" : \"xs\"}\r\n style={{\r\n background: bg,\r\n border,\r\n borderRadius: theme.radius.xs,\r\n opacity: disabled ? 0.5 : 1,\r\n }}\r\n >\r\n <Flex direction=\"column\" gap=\"xxs\" style={{ flex: 1, minWidth: 0 }}>\r\n {typeof label === \"string\" ? (\r\n compact ? (\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n >\r\n {label}\r\n </Text>\r\n ) : (\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"rgba(255,255,255,0.85)\">\r\n {label}\r\n </Text>\r\n )\r\n ) : (\r\n label\r\n )}\r\n {description && (\r\n typeof description === \"string\" ? (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={compact ? \"rgba(255,255,255,0.4)\" : \"rgba(255,255,255,0.45)\"}>\r\n {description}\r\n </Text>\r\n ) : (\r\n description\r\n )\r\n )}\r\n </Flex>\r\n <Switch\r\n checked={checked}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.currentTarget.checked)}\r\n size={compact ? \"sm\" : \"md\"}\r\n thumbIcon={thumbIcon}\r\n styles={{\r\n track: {\r\n background: checked ? alpha(pc[6], 0.4) : \"rgba(255,255,255,0.08)\",\r\n borderColor: checked ? alpha(pc[6], 0.6) : \"rgba(255,255,255,0.1)\",\r\n },\r\n }}\r\n />\r\n </Flex>\r\n );\r\n}\r\n","import { ActionIcon, Flex, Stack, Text } from \"@mantine/core\";\r\nimport { ChevronDown, ChevronUp, FlaskConical } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { isEnvBrowser } from \"../../utils/misc\";\r\n\r\nexport interface TestBedItem {\r\n key: string;\r\n label: string;\r\n active: boolean;\r\n onToggle: (next: boolean) => void;\r\n}\r\n\r\nexport type TestBedPlacement = \"top-left\" | \"top-center\" | \"top-right\";\r\n\r\nexport interface TestBedProps {\r\n items: TestBedItem[];\r\n /** localStorage key used to persist toggled state across reloads. Default: \"testbed:open-state\". */\r\n storageKey?: string;\r\n /** Disable localStorage persistence entirely. Default: false. */\r\n disablePersistence?: boolean;\r\n /** Header label shown in the collapsed pill. Default: \"TestBed\". */\r\n title?: string;\r\n /** Where to anchor the floating panel. Default: \"top-left\". */\r\n placement?: TestBedPlacement;\r\n}\r\n\r\nconst placementStyle = (placement: TestBedPlacement): React.CSSProperties => {\r\n switch (placement) {\r\n case \"top-center\":\r\n return { top: \"1vh\", left: \"50%\", transform: \"translateX(-50%)\" };\r\n case \"top-right\":\r\n return { top: \"1vh\", right: \"1vh\" };\r\n case \"top-left\":\r\n default:\r\n return { top: \"1vh\", left: \"1vh\" };\r\n }\r\n};\r\n\r\nconst loadPersistedState = (storageKey: string): Record<string, boolean> => {\r\n try {\r\n const raw = localStorage.getItem(storageKey);\r\n return raw ? JSON.parse(raw) : {};\r\n } catch {\r\n return {};\r\n }\r\n};\r\n\r\nconst savePersistedState = (storageKey: string, state: Record<string, boolean>) => {\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(state));\r\n } catch {}\r\n};\r\n\r\nexport function TestBed({\r\n items,\r\n storageKey = \"testbed:open-state\",\r\n disablePersistence = false,\r\n title = \"TestBed\",\r\n placement = \"top-left\",\r\n}: TestBedProps) {\r\n const [open, setOpen] = useState(false);\r\n const itemsRef = useRef(items);\r\n itemsRef.current = items;\r\n\r\n useEffect(() => {\r\n if (!isEnvBrowser() || disablePersistence) return;\r\n const persisted = loadPersistedState(storageKey);\r\n itemsRef.current.forEach((item) => {\r\n const persistedValue = persisted[item.key];\r\n if (typeof persistedValue === \"boolean\" && persistedValue !== item.active) {\r\n item.onToggle(persistedValue);\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (!isEnvBrowser()) return null;\r\n\r\n const toggle = (item: TestBedItem) => {\r\n const next = !item.active;\r\n item.onToggle(next);\r\n if (!disablePersistence) {\r\n const persisted = loadPersistedState(storageKey);\r\n persisted[item.key] = next;\r\n savePersistedState(storageKey, persisted);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n ...placementStyle(placement),\r\n zIndex: 2147483647,\r\n pointerEvents: \"auto\",\r\n fontSize: \"1.4vh\",\r\n }}\r\n >\r\n <Flex\r\n align=\"center\"\r\n gap=\"xs\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n onClick={() => setOpen((v) => !v)}\r\n style={{\r\n cursor: \"pointer\",\r\n background: \"rgba(0,0,0,0.55)\",\r\n backdropFilter: \"blur(0.6vh)\",\r\n WebkitBackdropFilter: \"blur(0.6vh)\",\r\n border: \"0.1vh solid rgba(255,255,255,0.1)\",\r\n borderRadius: \"var(--mantine-radius-sm)\",\r\n userSelect: \"none\",\r\n minWidth: \"16vh\",\r\n }}\r\n >\r\n <FlaskConical size={14} color=\"rgba(255,255,255,0.7)\" />\r\n <Text\r\n size=\"xs\"\r\n ff=\"Akrobat Bold\"\r\n tt=\"uppercase\"\r\n lts=\"0.08em\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n style={{ flex: 1 }}\r\n >\r\n {title}\r\n </Text>\r\n <ActionIcon size=\"xs\" variant=\"transparent\" c=\"rgba(255,255,255,0.6)\">\r\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\r\n </ActionIcon>\r\n </Flex>\r\n\r\n {open && (\r\n <Stack\r\n gap={4}\r\n mt=\"xxs\"\r\n p=\"xs\"\r\n style={{\r\n background: \"rgba(0,0,0,0.55)\",\r\n backdropFilter: \"blur(0.6vh)\",\r\n WebkitBackdropFilter: \"blur(0.6vh)\",\r\n border: \"0.1vh solid rgba(255,255,255,0.1)\",\r\n borderRadius: \"var(--mantine-radius-sm)\",\r\n minWidth: \"16vh\",\r\n maxHeight: \"80vh\",\r\n overflowY: \"auto\",\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Flex\r\n key={item.key}\r\n align=\"center\"\r\n justify=\"space-between\"\r\n gap=\"xs\"\r\n px=\"xs\"\r\n py=\"xxs\"\r\n onClick={() => toggle(item)}\r\n style={{\r\n cursor: \"pointer\",\r\n borderRadius: \"var(--mantine-radius-xs)\",\r\n background: item.active ? \"rgba(245,158,11,0.15)\" : \"rgba(255,255,255,0.03)\",\r\n border: `0.1vh solid ${item.active ? \"rgba(245,158,11,0.35)\" : \"rgba(255,255,255,0.05)\"}`,\r\n userSelect: \"none\",\r\n }}\r\n >\r\n <Text\r\n size=\"xs\"\r\n ff=\"Akrobat Bold\"\r\n c={item.active ? \"#f59e0b\" : \"rgba(255,255,255,0.75)\"}\r\n >\r\n {item.label}\r\n </Text>\r\n <Text\r\n size=\"xxs\"\r\n ff=\"Akrobat Bold\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c={item.active ? \"#f59e0b\" : \"rgba(255,255,255,0.35)\"}\r\n >\r\n {item.active ? \"On\" : \"Off\"}\r\n </Text>\r\n </Flex>\r\n ))}\r\n </Stack>\r\n )}\r\n </div>\r\n );\r\n}\r\n","// Per-resource theme override editor. Rendered inside a consumer resource's\r\n// configurator (e.g. dirk_multichar, dirk_fishing) to let admins decouple\r\n// that resource's theme from dirk_lib's global appearance.\r\n//\r\n// Data shape (driven by a schema block on the consumer side):\r\n// theme: {\r\n// useOverride: boolean,\r\n// primaryColor: string, // \"dirk\" | \"custom\" | mantine palette name\r\n// primaryShade: 0..9,\r\n// customTheme: string[10], // hex stops\r\n// }\r\n//\r\n// The override flag goes through the same scriptConfig path as everything\r\n// else — the resource's GET_SETTINGS callback is responsible for deciding\r\n// whether to push the global theme keys or the override keys to NUI on\r\n// hydration. DirkProvider's UPDATE_DIRK_LIB_SETTINGS listener gates global\r\n// pushes when the consumer has its own override active (see useSettings).\r\n//\r\n// Reset-to-global = flip the override switch off. The saved palette stays so\r\n// admins can re-enable without re-picking colours. A separate wipe trash icon\r\n// nukes the local palette back to the schema default.\r\n\r\nimport { generateColors } from \"@mantine/colors-generator\";\r\nimport {\r\n ActionIcon,\r\n ColorInput,\r\n Flex,\r\n NumberInput,\r\n Popover,\r\n Select,\r\n Switch,\r\n Text,\r\n useMantineTheme,\r\n} from \"@mantine/core\";\r\nimport { Palette, RotateCcw } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport { useFormActions, useFormField } from \"@/hooks/useForm\";\r\nimport { locale } from \"@/utils/locales\";\r\nimport {\r\n DEFAULT_PALETTE,\r\n defaultThemeOverride as DEFAULT_VALUE,\r\n type ThemeOverrideValue,\r\n} from \"@/types/theme\";\r\nimport { AdminPageTitle } from \"./AdminPageTitle\";\r\nimport { SwitchPanel } from \"./SwitchPanel\";\r\n\r\n// NOTE: `ThemeOverrideValue` is intentionally NOT re-exported here anymore — it\r\n// now lives in `@/types/theme` (single source of truth, shared with\r\n// useSettings) and is surfaced via the top-level `types` barrel. Re-exporting\r\n// it from this module too would create an ambiguous `export *` at src/index.ts.\r\n\r\nconst MANTINE_COLOR_OPTIONS = [\r\n \"dirk\",\r\n \"red\",\r\n \"pink\",\r\n \"grape\",\r\n \"violet\",\r\n \"indigo\",\r\n \"blue\",\r\n \"cyan\",\r\n \"teal\",\r\n \"green\",\r\n \"lime\",\r\n \"yellow\",\r\n \"orange\",\r\n].map((value) => ({ value, label: value }));\r\n\r\nfunction GroupLabel({ label }: { label: string }) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" mt=\"xxs\">\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.07em\" c=\"rgba(255,255,255,0.2)\">\r\n {label}\r\n </Text>\r\n <div style={{ flex: 1, height: \"0.05vh\", background: \"rgba(255,255,255,0.06)\" }} />\r\n </Flex>\r\n );\r\n}\r\n\r\nexport type ThemeOverrideSectionProps = {\r\n /**\r\n * Schema path the consumer stores its override block under. Defaults to\r\n * \"theme\" — matches the recommended schema key.\r\n */\r\n schemaKey?: string;\r\n /**\r\n * Optional title for the AdminPageTitle. Defaults to the localized\r\n * \"Theme\" string with a fallback.\r\n */\r\n title?: string;\r\n};\r\n\r\nexport function ThemeOverrideSection({\r\n schemaKey = \"theme\",\r\n title,\r\n}: ThemeOverrideSectionProps) {\r\n const mantineTheme = useMantineTheme();\r\n const color = mantineTheme.colors[mantineTheme.primaryColor][5];\r\n\r\n const raw = useFormField<Record<string, ThemeOverrideValue>>(schemaKey as never) as\r\n | Partial<ThemeOverrideValue>\r\n | undefined;\r\n // Normalise — the form field could be undefined at first paint, and any of\r\n // the inner fields could be missing if the schema default block hasn't\r\n // fully hydrated. Merge against DEFAULT_VALUE so the inputs always have\r\n // something to render.\r\n const value: ThemeOverrideValue = {\r\n useOverride: raw?.useOverride ?? DEFAULT_VALUE.useOverride,\r\n primaryColor: raw?.primaryColor ?? DEFAULT_VALUE.primaryColor,\r\n primaryShade: raw?.primaryShade ?? DEFAULT_VALUE.primaryShade,\r\n customTheme:\r\n Array.isArray(raw?.customTheme) && raw!.customTheme.length === 10\r\n ? (raw!.customTheme as string[])\r\n : DEFAULT_VALUE.customTheme,\r\n };\r\n\r\n const { setValue } = useFormActions<Record<string, ThemeOverrideValue>>();\r\n const set = <K extends keyof ThemeOverrideValue>(key: K, val: ThemeOverrideValue[K]) =>\r\n setValue(schemaKey as never, { ...value, [key]: val } as never);\r\n\r\n const useCustom = value.primaryColor === \"custom\";\r\n const editable = value.useOverride;\r\n\r\n const setSwatch = (index: number, hex: string) => {\r\n const next = [...value.customTheme];\r\n next[index] = hex;\r\n set(\"customTheme\", next);\r\n };\r\n\r\n const generateFromBase = (hex: string) => {\r\n try {\r\n const generated = generateColors(hex);\r\n set(\"customTheme\", generated as unknown as string[]);\r\n } catch {\r\n // invalid colour — ignore\r\n }\r\n };\r\n\r\n const resetPalette = () => set(\"customTheme\", DEFAULT_PALETTE);\r\n\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n gap=\"xs\"\r\n p=\"sm\"\r\n style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }}\r\n >\r\n <AdminPageTitle\r\n icon={Palette}\r\n title={title || locale(\"Theme\") || \"Theme\"}\r\n color={color}\r\n />\r\n\r\n {/* Master toggle — flipping this off resets the resource to follow the\r\n global dirk_lib theme. The saved palette is preserved so re-enabling\r\n doesn't lose work. Uses the shared SwitchPanel so the outline + Switch\r\n styling match every other configurator section. */}\r\n <SwitchPanel\r\n label={locale(\"OverrideGlobalTheme\") || \"Override global theme\"}\r\n description={\r\n locale(\"OverrideGlobalThemeDesc\") ||\r\n \"When on, this resource uses its own primary colour and palette instead of dirk_lib's. Turn off to fall back to the global theme — your custom palette is kept.\"\r\n }\r\n checked={value.useOverride}\r\n onChange={(v) => set(\"useOverride\", v)}\r\n />\r\n\r\n <div\r\n style={{\r\n opacity: editable ? 1 : 0.4,\r\n pointerEvents: editable ? \"auto\" : \"none\",\r\n transition: \"opacity 0.15s\",\r\n }}\r\n >\r\n <GroupLabel label={locale(\"PrimaryColor\") || \"Primary Colour\"} />\r\n\r\n <Switch\r\n label={locale(\"UseCustomPalette\") || \"Use custom palette\"}\r\n size=\"md\"\r\n mt=\"xs\"\r\n checked={useCustom}\r\n onChange={(e) => set(\"primaryColor\", e.currentTarget.checked ? \"custom\" : \"dirk\")}\r\n styles={{\r\n label: {\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"0.65em\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n color: \"rgba(255,255,255,0.35)\",\r\n },\r\n }}\r\n />\r\n\r\n <Flex gap=\"xs\" mt=\"xs\">\r\n {!useCustom && (\r\n <Select\r\n label={locale(\"MantinePalette\") || \"Mantine palette\"}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value.primaryColor}\r\n data={MANTINE_COLOR_OPTIONS}\r\n allowDeselect={false}\r\n onChange={(v) => v && set(\"primaryColor\", v)}\r\n />\r\n )}\r\n <NumberInput\r\n label={locale(\"Shade\") || \"Shade\"}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n min={0}\r\n max={9}\r\n value={value.primaryShade}\r\n onChange={(v) => set(\"primaryShade\", Number(v))}\r\n />\r\n </Flex>\r\n\r\n {useCustom && (\r\n <>\r\n <Flex align=\"center\" justify=\"space-between\" mt=\"sm\">\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.07em\"\r\n c=\"rgba(255,255,255,0.2)\"\r\n >\r\n {locale(\"CustomPalette\") || \"Custom palette\"}\r\n </Text>\r\n <ActionIcon\r\n size=\"sm\"\r\n variant=\"subtle\"\r\n onClick={resetPalette}\r\n title={locale(\"ResetPalette\") || \"Reset palette\"}\r\n >\r\n <RotateCcw size=\"1.4vh\" />\r\n </ActionIcon>\r\n </Flex>\r\n\r\n <ColorInput\r\n label={locale(\"BaseColor\") || \"Base colour\"}\r\n size=\"xs\"\r\n value={value.customTheme[value.primaryShade] ?? value.customTheme[5] ?? \"#000000\"}\r\n onChange={generateFromBase}\r\n eyeDropperIcon={<></>}\r\n />\r\n\r\n <Flex gap=\"xxs\" mt=\"xxs\">\r\n {value.customTheme.map((swatch, i) => (\r\n <SwatchTile\r\n key={i}\r\n index={i}\r\n value={swatch}\r\n isPrimary={i === value.primaryShade}\r\n onChange={(v) => setSwatch(i, v)}\r\n />\r\n ))}\r\n </Flex>\r\n </>\r\n )}\r\n </div>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction SwatchTile({\r\n index,\r\n value,\r\n isPrimary,\r\n onChange,\r\n}: {\r\n index: number;\r\n value: string;\r\n isPrimary: boolean;\r\n onChange: (v: string) => void;\r\n}) {\r\n const [opened, setOpened] = useState(false);\r\n return (\r\n <Popover opened={opened} onChange={setOpened} position=\"bottom\" withArrow zIndex={10000}>\r\n <Popover.Target>\r\n <button\r\n onClick={() => setOpened((o) => !o)}\r\n title={`${index} · ${value}`}\r\n style={{\r\n flex: 1,\r\n aspectRatio: \"1 / 1\",\r\n background: value,\r\n border: isPrimary\r\n ? \"0.2vh solid rgba(255,255,255,0.85)\"\r\n : \"0.1vh solid rgba(255,255,255,0.15)\",\r\n borderRadius: \"0.4vh\",\r\n cursor: \"pointer\",\r\n padding: 0,\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n justifyContent: \"flex-end\",\r\n position: \"relative\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"0.9vh\",\r\n lineHeight: 1,\r\n padding: \"0.2vh 0.3vh\",\r\n color: \"rgba(0,0,0,0.55)\",\r\n background: \"rgba(255,255,255,0.55)\",\r\n borderRadius: \"0.25vh\",\r\n margin: \"0.2vh\",\r\n }}\r\n >\r\n {index}\r\n </span>\r\n </button>\r\n </Popover.Target>\r\n <Popover.Dropdown p=\"xs\">\r\n <ColorInput\r\n size=\"xs\"\r\n value={value}\r\n onChange={onChange}\r\n format=\"hex\"\r\n eyeDropperIcon={<></>}\r\n />\r\n </Popover.Dropdown>\r\n </Popover>\r\n );\r\n}\r\n","// Fetches normalised player lists from dirk_lib's admin tool subsystem.\r\n//\r\n// Two modes, controlled by `includeOffline`:\r\n// • false (default) → online-only. Fast, cheap, refreshed every ~5s.\r\n// • true → DB-backed search across online + offline players.\r\n// Filtered server-side by `search`. Cap of 50.\r\n//\r\n// Caching: react-query handles dedupe + stale-while-revalidate, keyed on\r\n// (mode, search, limit). Multiple <PlayerSelect>s on screen share one\r\n// fetch. Typing \"j\" → \"jo\" → \"joh\" creates separate cache entries — each\r\n// stays cached for 5 minutes (gcTime) so re-typing reuses instantly.\r\n//\r\n// Admin gating: lives behind the ADMIN_TOOL_QUERY perm check on the\r\n// server. Outside an open admin panel, fetches return empty arrays.\r\n\r\nimport { useQuery, keepPreviousData } from \"@tanstack/react-query\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\n\r\nexport type Player = {\r\n /** Server id when online, null when offline. */\r\n id: number | null;\r\n /** Persistent identifier — citizenid (qb/qbx) or license (esx). */\r\n citizenId: string;\r\n /** Steam/Discord display name from GetPlayerName(src). Blank for some\r\n * framework + offline combos (ESX users table doesn't store it). */\r\n name: string;\r\n /** First name + last name from the framework's character data. */\r\n charName: string;\r\n online: boolean;\r\n};\r\n\r\nexport type UsePlayersOptions = {\r\n /** When true, hits the DB and returns offline + online matches.\r\n * When false (default), returns only currently-connected players. */\r\n includeOffline?: boolean;\r\n /** Required when includeOffline=true; ignored otherwise. Server-side\r\n * filtered (LIKE) across char name, citizenId, account name. */\r\n search?: string;\r\n /** Default 50, max 50 (capped server-side). */\r\n limit?: number;\r\n /** Override staleTime — how long the cache stays fresh before background\r\n * refetch. Default 5s for online, 30s for search. */\r\n staleTimeMs?: number;\r\n /** Set to e.g. 10000 to auto-refresh every 10s. Off by default. */\r\n refetchIntervalMs?: number;\r\n};\r\n\r\nexport type UsePlayersResult = {\r\n players: Player[];\r\n isLoading: boolean;\r\n isFetching: boolean;\r\n error: Error | null;\r\n refresh: () => void;\r\n};\r\n\r\nexport function usePlayers(opts: UsePlayersOptions = {}): UsePlayersResult {\r\n const {\r\n includeOffline = false,\r\n search = \"\",\r\n limit = 50,\r\n staleTimeMs,\r\n refetchIntervalMs,\r\n } = opts;\r\n\r\n const query = useQuery<Player[]>({\r\n queryKey: includeOffline\r\n ? [\"dirk:players\", \"search\", search.trim().toLowerCase(), limit]\r\n : [\"dirk:players\", \"online\"],\r\n queryFn: async () => {\r\n const toolId = includeOffline ? \"searchPlayers\" : \"getOnlinePlayers\";\r\n const payload = includeOffline\r\n ? { id: toolId, value: { search: search.trim(), limit } }\r\n : { id: toolId };\r\n const result = await fetchNui<Player[] | null>(\r\n \"ADMIN_TOOL_QUERY\",\r\n payload,\r\n // Browser-dev fallback. Returns a couple of mock players so the\r\n // dev shell isn't blank.\r\n includeOffline\r\n ? [\r\n { id: 1, citizenId: \"ABC12345\", name: \"Dev User\", charName: \"John Doe\", online: true },\r\n { id: null, citizenId: \"DEF67890\", name: \"\", charName: \"Jane Offline\", online: false },\r\n ]\r\n : [\r\n { id: 1, citizenId: \"ABC12345\", name: \"Dev User\", charName: \"John Doe\", online: true },\r\n ],\r\n );\r\n return Array.isArray(result) ? result : [];\r\n },\r\n staleTime: staleTimeMs ?? (includeOffline ? 30_000 : 5_000),\r\n gcTime: 5 * 60_000,\r\n refetchInterval: refetchIntervalMs ?? false,\r\n refetchOnWindowFocus: false,\r\n placeholderData: includeOffline ? keepPreviousData : undefined,\r\n });\r\n\r\n return {\r\n players: query.data ?? [],\r\n isLoading: query.isLoading,\r\n isFetching: query.isFetching,\r\n error: (query.error as Error | null) ?? null,\r\n refresh: () => query.refetch(),\r\n };\r\n}\r\n","// Player picker. Drop-in Mantine <Select> wrapper around usePlayers().\r\n//\r\n// Default mode (online only):\r\n// <PlayerSelect value={citizenId} onChange={p => set('owner', p?.id)} />\r\n//\r\n// Search-driven offline support (includes the persistent players table):\r\n// <PlayerSelect includeOffline value={citizenId} onChange={p => set('owner', p?.citizenId)} />\r\n//\r\n// `value` is a citizenId string (or null). `onChange` receives the full\r\n// Player object so callers pick what to persist — server id for live\r\n// targeting, citizenId for persistent ownership.\r\n//\r\n// Each row renders with a colored status dot on the right:\r\n// • green for online (id is non-null)\r\n// • red for offline (id is null)\r\n//\r\n// In offline mode, typing into the input triggers debounced server-side\r\n// searches (300ms). react-query caches each unique search so retyping is\r\n// instant. A 🔄 refresh button in the rightSection forces a fresh fetch.\r\n\r\nimport { ActionIcon, Group, Loader, Select, Text, type SelectProps, useMantineTheme } from \"@mantine/core\";\r\nimport { RefreshCw } from \"lucide-react\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { usePlayers, type Player } from \"../../hooks/usePlayers\";\r\n\r\nexport type PlayerSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"rightSection\" | \"renderOption\"> & {\r\n value: string | null;\r\n onChange: (player: Player | null) => void;\r\n /** When true, runs a DB-backed search across offline + online. Enables\r\n * the search box behaviour. Default false (online only). */\r\n includeOffline?: boolean;\r\n /** Cap on results returned (max 50, server-enforced). */\r\n limit?: number;\r\n /** Localisable label overrides. Defaults are English. Pass locale()'d\r\n * strings from the consumer to translate the dropdown chrome. */\r\n loadingLabel?: string;\r\n onlineLabel?: string;\r\n offlineLabel?: string;\r\n refreshLabel?: string;\r\n};\r\n\r\nconst DEBOUNCE_MS = 300;\r\nconst ONLINE_COLOR = \"#3FA83F\"; // green\r\nconst OFFLINE_COLOR = \"#E54141\"; // red\r\n\r\nexport function PlayerSelect({\r\n value,\r\n onChange,\r\n includeOffline = false,\r\n limit = 50,\r\n searchable: searchableProp,\r\n placeholder,\r\n nothingFoundMessage: nothingFoundMessageProp,\r\n loadingLabel = \"Loading…\",\r\n onlineLabel = \"Online\",\r\n offlineLabel = \"Offline\",\r\n refreshLabel = \"Refresh player list\",\r\n ...rest\r\n}: PlayerSelectProps) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n // Local search input + debounced version we feed the hook — avoids a\r\n // request per keystroke.\r\n const [searchInput, setSearchInput] = useState(\"\");\r\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n\r\n const { players, isFetching, refresh } = usePlayers({\r\n includeOffline,\r\n search: includeOffline ? debouncedSearch : undefined,\r\n limit,\r\n });\r\n\r\n // Online first, then alphabetical by charName — admins want to see the\r\n // currently-connected players at the top of the list.\r\n const sortedPlayers = useMemo(\r\n () =>\r\n [...players].sort((a, b) => {\r\n if (a.online !== b.online) return a.online ? -1 : 1;\r\n return a.charName.localeCompare(b.charName);\r\n }),\r\n [players],\r\n );\r\n\r\n const playerByCitizen = useMemo(() => {\r\n const m = new Map<string, Player>();\r\n for (const p of sortedPlayers) m.set(p.citizenId, p);\r\n return m;\r\n }, [sortedPlayers]);\r\n\r\n const data = useMemo(() => {\r\n const items = sortedPlayers.map((p) => ({\r\n value: p.citizenId,\r\n label: formatLabel(p),\r\n }));\r\n // If the controlled value isn't in the current player list (e.g. a\r\n // persistent lab owner who isn't online and hasn't been searched yet),\r\n // inject a synthetic option so Mantine can render the value text\r\n // instead of falling back to the placeholder.\r\n if (value && !items.some((i) => i.value === value)) {\r\n items.unshift({ value, label: value });\r\n }\r\n return items;\r\n }, [sortedPlayers, value]);\r\n\r\n const selectedPlayer = value ? playerByCitizen.get(value) ?? null : null;\r\n const selectedLabel = selectedPlayer ? formatLabel(selectedPlayer) : null;\r\n\r\n // Debounce the search → debouncedSearch. Short-circuit when the input\r\n // exactly matches the currently-selected player's formatted label —\r\n // Mantine auto-fills the search input with the selected option's label\r\n // after a pick, and we don't want that to trigger a phantom search\r\n // (which would empty the data list, fall back to the synthetic option\r\n // with raw citizenId, then flip back via keepPreviousData → visible\r\n // label cycling between formatted name and raw id).\r\n useEffect(() => {\r\n if (!includeOffline) return;\r\n if (selectedLabel && searchInput === selectedLabel) return;\r\n const t = setTimeout(() => setDebouncedSearch(searchInput), DEBOUNCE_MS);\r\n return () => clearTimeout(t);\r\n }, [searchInput, includeOffline, selectedLabel]);\r\n\r\n // Custom row renderer — name on the left, colored dot on the right.\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const p = playerByCitizen.get(option.value);\r\n if (!p) return option.label;\r\n return (\r\n <Group justify=\"space-between\" wrap=\"nowrap\" gap=\"xs\" style={{ width: \"100%\" }}>\r\n <Text size=\"xs\" truncate style={{ flex: 1 }}>\r\n {formatLabel(p)}\r\n </Text>\r\n <StatusDot online={p.online} onlineLabel={onlineLabel} offlineLabel={offlineLabel} />\r\n </Group>\r\n );\r\n };\r\n\r\n return (\r\n <Select\r\n {...rest}\r\n data={data}\r\n value={value ?? null}\r\n onChange={(v) => {\r\n if (!v) return onChange(null);\r\n const player = playerByCitizen.get(v) ?? null;\r\n onChange(player);\r\n }}\r\n searchable={searchableProp ?? true}\r\n searchValue={includeOffline ? searchInput : undefined}\r\n onSearchChange={includeOffline ? setSearchInput : undefined}\r\n placeholder={placeholder}\r\n nothingFoundMessage={isFetching ? loadingLabel : (nothingFoundMessageProp ?? \"No players found\")}\r\n maxDropdownHeight={300}\r\n renderOption={renderOption}\r\n leftSection={selectedPlayer ? <StatusDot online={selectedPlayer.online} onlineLabel={onlineLabel} offlineLabel={offlineLabel} /> : undefined}\r\n rightSectionWidth=\"3.5vh\"\r\n rightSectionPointerEvents=\"all\"\r\n rightSection={\r\n <ActionIcon\r\n variant=\"subtle\"\r\n size=\"sm\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n refresh();\r\n }}\r\n aria-label={refreshLabel}\r\n title={refreshLabel}\r\n style={{ marginRight: \"0.6vh\" }}\r\n >\r\n {isFetching ? <Loader size=\"1.2vh\" color={color} /> : <RefreshCw size=\"1.4vh\" color={color} />}\r\n </ActionIcon>\r\n }\r\n />\r\n );\r\n}\r\n\r\nfunction StatusDot({ online, onlineLabel, offlineLabel }: { online: boolean; onlineLabel: string; offlineLabel: string }) {\r\n return (\r\n <span\r\n title={online ? onlineLabel : offlineLabel}\r\n style={{\r\n display: \"inline-block\",\r\n width: \"0.9vh\",\r\n height: \"0.9vh\",\r\n borderRadius: \"50%\",\r\n backgroundColor: online ? ONLINE_COLOR : OFFLINE_COLOR,\r\n boxShadow: `0 0 0.4vh ${online ? ONLINE_COLOR : OFFLINE_COLOR}`,\r\n flexShrink: 0,\r\n }}\r\n />\r\n );\r\n}\r\n\r\nfunction formatLabel(p: Player): string {\r\n // \"John Doe · Dirk · #42\" (online with display name)\r\n // \"John Doe · #42\" (online, blank display name)\r\n // \"John Doe\" (offline)\r\n const parts: string[] = [p.charName || p.citizenId];\r\n if (p.online) {\r\n if (p.name) parts.push(p.name);\r\n if (p.id != null) parts.push(`#${p.id}`);\r\n }\r\n return parts.join(\" · \");\r\n}\r\n","// Per-resource ACCESS-OVERRIDES editor. Rendered inside a consumer resource's\n// configurator (e.g. dirk_weed, dirk_fishing) to let admins grant access to a\n// resource's admin/config panel to specific groups (jobs / gangs / ACE groups)\n// and individual players (by identifier) — on top of whatever dirk_lib's\n// global admin gate already allows.\n//\n// Data shape (driven by a schema block on the consumer side):\n// access: {\n// groups: string[], // job / gang / ACE group names\n// identifiers: string[], // persistent player ids as PlayerSelect yields\n// // them — citizenid (qb/qbx) or license (esx).\n// }\n//\n// dirk_lib's server-side check matches each stored id against BOTH the\n// framework's persistent id (lib.player.identifier — what we store here, so it\n// works even for players granted while offline) AND raw FiveM identifiers\n// (GetPlayerIdentifiers — license:/discord:/…), so a hand-entered license: also\n// works.\n//\n// Editor-ONLY. This component just edits the block — it does NOT enforce\n// anything. Enforcement is entirely server-side in dirk_lib, which reads the\n// same scriptConfig path and decides whether a given source is allowed.\n//\n// Mirrors ThemeOverrideSection's idiom: AdminPageTitle header, a short\n// description, then editable rows. Each list normalises against an empty array\n// so the inputs always render even before the schema block hydrates.\n\nimport { ActionIcon, Flex, Text, useMantineTheme } from \"@mantine/core\";\nimport { ShieldCheck, Plus, Trash2, Users, UserRound } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useFormActions, useFormField } from \"@/hooks/useForm\";\nimport { locale } from \"@/utils/locales\";\nimport { AdminPageTitle } from \"./AdminPageTitle\";\nimport { GroupName } from \"./GroupSelect\";\nimport { PlayerSelect } from \"./AdminTools/PlayerSelect\";\n\n// locale() returns the **key itself** on miss (see utils/locales.ts), so the\n// classic `locale(k) || fallback` pattern never falls through. This helper\n// returns `fallback` whenever locale gave us the key back unchanged.\nconst t = (key: string, fallback: string) => {\n const v = locale(key);\n return v === key ? fallback : v;\n};\n\nexport type AccessOverrideValue = {\n /** Job / gang / ACE group names allowed to access this resource. */\n groups: string[];\n /** Persistent player ids (citizenid on qb/qbx, license on esx — what\n * PlayerSelect yields). dirk_lib also matches raw FiveM identifiers. */\n identifiers: string[];\n};\n\nconst DEFAULT_VALUE: AccessOverrideValue = {\n groups: [],\n identifiers: [],\n};\n\nfunction SectionLabel({ icon: Icon, label }: { icon: typeof Users; label: string }) {\n return (\n <Flex align=\"center\" gap=\"xs\" mt=\"xs\">\n <Icon size=\"1.4vh\" color=\"rgba(255,255,255,0.3)\" />\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.07em\" c=\"rgba(255,255,255,0.2)\">\n {label}\n </Text>\n <div style={{ flex: 1, height: \"0.05vh\", background: \"rgba(255,255,255,0.06)\" }} />\n </Flex>\n );\n}\n\nfunction EmptyHint({ text }: { text: string }) {\n return (\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.25)\" ta=\"center\" py=\"xs\">\n {text}\n </Text>\n );\n}\n\nexport type AccessOverrideSectionProps = {\n /**\n * Schema path the consumer stores its access block under. Defaults to\n * \"access\" — matches the recommended schema key.\n */\n schemaKey?: string;\n /**\n * Optional title for the AdminPageTitle. Defaults to the localized\n * \"Access\" string with a fallback.\n */\n title?: string;\n /**\n * Optional description shown under the title. Defaults to a localized\n * explanation with a fallback.\n */\n description?: string;\n /**\n * Restrict the group picker to \"job\" or \"gang\" only. Omit to allow any\n * group (jobs + gangs grouped in the dropdown). Forwarded to GroupName.\n */\n groupType?: \"job\" | \"gang\";\n /**\n * When true, the player picker searches offline players (DB-backed) too.\n * Defaults to true so admins can grant access to players who aren't online.\n */\n includeOffline?: boolean;\n};\n\nexport function AccessOverrideSection({\n schemaKey = \"access\",\n title,\n description,\n groupType,\n includeOffline = true,\n}: AccessOverrideSectionProps) {\n const mantineTheme = useMantineTheme();\n const color = mantineTheme.colors[mantineTheme.primaryColor][5];\n\n const raw = useFormField<Record<string, AccessOverrideValue>>(schemaKey as never) as\n | Partial<AccessOverrideValue>\n | undefined;\n\n // Normalise — the form field could be undefined at first paint, and either\n // inner array could be missing if the schema default block hasn't fully\n // hydrated. Merge against DEFAULT_VALUE so the lists always render.\n const value: AccessOverrideValue = {\n groups: Array.isArray(raw?.groups) ? (raw!.groups as string[]) : DEFAULT_VALUE.groups,\n identifiers: Array.isArray(raw?.identifiers)\n ? (raw!.identifiers as string[])\n : DEFAULT_VALUE.identifiers,\n };\n\n const { setValue } = useFormActions<Record<string, AccessOverrideValue>>();\n const set = <K extends keyof AccessOverrideValue>(key: K, val: AccessOverrideValue[K]) =>\n setValue(schemaKey as never, { ...value, [key]: val } as never);\n\n // An in-progress \"add\" row is LOCAL state only — it isn't written to the form\n // (and so never persists an empty \"\" entry to the DB) until a real value is\n // picked. Committed rows live in the form. Only one pending add row per list.\n const [addingGroup, setAddingGroup] = useState(false);\n const [addingPlayer, setAddingPlayer] = useState(false);\n\n // ── groups ──────────────────────────────────────────────────────────────\n const commitGroup = (name: string) => {\n if (!name) return;\n set(\"groups\", [...value.groups, name]);\n setAddingGroup(false);\n };\n const setGroup = (index: number, name: string) => {\n const next = [...value.groups];\n next[index] = name;\n set(\"groups\", next.filter((g) => g !== \"\"));\n };\n const removeGroup = (index: number) =>\n set(\"groups\", value.groups.filter((_, i) => i !== index));\n\n // ── identifiers ─────────────────────────────────────────────────────────\n const commitIdentifier = (id: string) => {\n if (!id) return;\n set(\"identifiers\", [...value.identifiers, id]);\n setAddingPlayer(false);\n };\n const setIdentifier = (index: number, id: string) => {\n const next = [...value.identifiers];\n next[index] = id;\n set(\"identifiers\", next.filter((x) => x !== \"\"));\n };\n const removeIdentifier = (index: number) =>\n set(\"identifiers\", value.identifiers.filter((_, i) => i !== index));\n\n return (\n <Flex\n direction=\"column\"\n gap=\"xs\"\n p=\"sm\"\n style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }}\n >\n <AdminPageTitle\n icon={ShieldCheck}\n title={title || t(\"Access\", \"Access\")}\n color={color}\n />\n\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.4)\">\n {description ||\n t(\n \"AccessOverrideDesc\",\n \"Grant access to this resource's admin panel to specific groups and players, in addition to your global dirk_lib admins. Enforcement is server-side.\",\n )}\n </Text>\n\n {/* ── Groups ──────────────────────────────────────────────────────── */}\n <SectionLabel icon={Users} label={t(\"AccessGroups\", \"Groups\")} />\n\n <Flex direction=\"column\" gap=\"xxs\">\n {value.groups.length === 0 && !addingGroup && (\n <EmptyHint text={t(\"AccessNoGroups\", \"No groups added.\")} />\n )}\n {value.groups.map((name, i) => (\n <Flex key={i} align=\"center\" gap=\"xs\">\n <GroupName\n value={name}\n onChange={(v) => setGroup(i, v)}\n type={groupType}\n placeholder={t(\"AccessPickGroup\", \"Pick a group…\")}\n style={{ flex: 1 }}\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => removeGroup(i)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n ))}\n {addingGroup && (\n <Flex align=\"center\" gap=\"xs\">\n <GroupName\n value=\"\"\n onChange={(v) => commitGroup(v)}\n type={groupType}\n placeholder={t(\"AccessPickGroup\", \"Pick a group…\")}\n style={{ flex: 1 }}\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => setAddingGroup(false)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n )}\n </Flex>\n\n {!addingGroup && (\n <AddRowButton label={t(\"AccessAddGroup\", \"Add group\")} onClick={() => setAddingGroup(true)} />\n )}\n\n {/* ── Players / identifiers ───────────────────────────────────────── */}\n <SectionLabel icon={UserRound} label={t(\"AccessPlayers\", \"Players\")} />\n\n <Flex direction=\"column\" gap=\"xxs\">\n {value.identifiers.length === 0 && !addingPlayer && (\n <EmptyHint text={t(\"AccessNoPlayers\", \"No players added.\")} />\n )}\n {value.identifiers.map((id, i) => (\n <Flex key={i} align=\"center\" gap=\"xs\">\n <PlayerSelect\n value={id || null}\n onChange={(p) => setIdentifier(i, p?.citizenId ?? \"\")}\n includeOffline={includeOffline}\n placeholder={t(\"AccessPickPlayer\", \"Pick a player…\")}\n style={{ flex: 1 }}\n size=\"xs\"\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => removeIdentifier(i)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n ))}\n {addingPlayer && (\n <Flex align=\"center\" gap=\"xs\">\n <PlayerSelect\n value={null}\n onChange={(p) => commitIdentifier(p?.citizenId ?? \"\")}\n includeOffline={includeOffline}\n placeholder={t(\"AccessPickPlayer\", \"Pick a player…\")}\n style={{ flex: 1 }}\n size=\"xs\"\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => setAddingPlayer(false)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n )}\n </Flex>\n\n {!addingPlayer && (\n <AddRowButton label={t(\"AccessAddPlayer\", \"Add player\")} onClick={() => setAddingPlayer(true)} />\n )}\n </Flex>\n );\n}\n\nfunction AddRowButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <Flex\n align=\"center\"\n justify=\"center\"\n gap=\"xs\"\n onClick={onClick}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }}\n py=\"xs\"\n style={{\n cursor: \"pointer\",\n border: \"0.1vh dashed rgba(255,255,255,0.12)\",\n borderRadius: \"0.4vh\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255,255,255,0.03)\";\n e.currentTarget.style.borderColor = \"rgba(255,255,255,0.2)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(255,255,255,0.12)\";\n }}\n >\n <Plus size=\"1.4vh\" color=\"rgba(255,255,255,0.4)\" />\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c=\"rgba(255,255,255,0.4)\">\n {label}\n </Text>\n </Flex>\n );\n}\n","// Curated list of GTA V AnimPostFX screen effects passed to AnimpostfxPlay().\r\n// Sourced from https://docs.altv.mp/gta/articles/references/animpost-fx.html\r\n// plus a handful of community-known effects (ULP_*, common cutscene overlays)\r\n// that ship in scene defaults across dirk_multichar / fishing / drug labs.\r\n//\r\n// Effects are grouped by what they're commonly used for so a picker can\r\n// present them with section headings instead of one giant alphabetical list.\r\n// Add new entries by appending to the right group — the picker reflows\r\n// automatically.\r\n\r\nexport type GtaAnimPostFx = {\r\n /** Effect name passed to AnimpostfxPlay(). Case-sensitive. */\r\n name: string;\r\n /** Friendly label for UI display. Defaults to the name if absent. */\r\n label?: string;\r\n /** Group used for ordering and section headers. */\r\n group: GtaAnimPostFxGroup;\r\n};\r\n\r\nexport type GtaAnimPostFxGroup =\r\n | \"Wake Up / Sleep\"\r\n | \"Character Switch\"\r\n | \"Cinematic Push-In\"\r\n | \"Death / Fail\"\r\n | \"Heist\"\r\n | \"Minigame\"\r\n | \"Drug / Trip\"\r\n | \"Color Filter / Tint\"\r\n | \"Multiplayer\"\r\n | \"Misc\";\r\n\r\nexport const GTA_ANIM_POST_FX_GROUP_ORDER: GtaAnimPostFxGroup[] = [\r\n \"Wake Up / Sleep\",\r\n \"Character Switch\",\r\n \"Cinematic Push-In\",\r\n \"Death / Fail\",\r\n \"Heist\",\r\n \"Minigame\",\r\n \"Drug / Trip\",\r\n \"Color Filter / Tint\",\r\n \"Multiplayer\",\r\n \"Misc\",\r\n];\r\n\r\nexport const GTA_ANIM_POST_FX: GtaAnimPostFx[] = [\r\n // ── Wake Up / Sleep (community-known; not in altV docs) ────────────────────\r\n { name: \"ULP_PlayerWakeUp\", label: \"Player Wake Up\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndNeutral\", label: \"Minigame End — Neutral\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndFranklin\", label: \"Minigame End — Franklin\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndMichael\", label: \"Minigame End — Michael\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndTrevor\", label: \"Minigame End — Trevor\", group: \"Wake Up / Sleep\" },\r\n\r\n // ── Character Switch (Franklin / Michael / Trevor / Neutral variants) ─────\r\n { name: \"SwitchHUDIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDFranklinOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDMichaelOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDTrevorOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklin\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklinOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelMid\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenTrevorOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenNeutralFIB5\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenNeutralOutHeist\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneFranklin\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneMichael\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneNeutral\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneTrevor\", group: \"Character Switch\" },\r\n { name: \"SwitchShortFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortFranklinMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortMichaelMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortNeutralIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortNeutralMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortTrevorMid\", group: \"Character Switch\" },\r\n { name: \"switch_cam_1\", group: \"Character Switch\" },\r\n { name: \"switch_cam_2\", group: \"Character Switch\" },\r\n\r\n // ── Cinematic Push-In (slow zoom intro to a character) ────────────────────\r\n { name: \"CamPushInFranklin\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInMichael\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInTrevor\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInNeutral\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastIntroScene\", label: \"Beast Intro\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastLaunch\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastTransition\", group: \"Cinematic Push-In\" },\r\n\r\n // ── Death / Fail (red tint, slow-mo blur) ─────────────────────────────────\r\n { name: \"DeathFailNeutralIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailFranklinIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMichaelIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailTrevorIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMPIn\", label: \"Death Fail — MP\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMPDark\", label: \"Death Fail — MP Dark\", group: \"Death / Fail\" },\r\n { name: \"DeathFailOut\", group: \"Death / Fail\" },\r\n { name: \"Rampage\", group: \"Death / Fail\" },\r\n { name: \"RampageOut\", group: \"Death / Fail\" },\r\n\r\n // ── Heist (celebration / locate / pass) ───────────────────────────────────\r\n { name: \"HeistCelebEnd\", group: \"Heist\" },\r\n { name: \"HeistCelebPass\", group: \"Heist\" },\r\n { name: \"HeistCelebPassBW\", label: \"Heist Celeb Pass (B/W)\", group: \"Heist\" },\r\n { name: \"HeistCelebToast\", group: \"Heist\" },\r\n { name: \"HeistLocate\", group: \"Heist\" },\r\n { name: \"HeistTripSkipFade\", group: \"Heist\" },\r\n\r\n // ── Minigame / Menu ───────────────────────────────────────────────────────\r\n { name: \"MenuMGIn\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistIn\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistIntro\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistOut\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistTint\", group: \"Minigame\" },\r\n { name: \"MenuMGSelectionIn\", group: \"Minigame\" },\r\n { name: \"MenuMGSelectionTint\", group: \"Minigame\" },\r\n { name: \"MenuMGTournamentIn\", group: \"Minigame\" },\r\n { name: \"MenuMGTournamentTint\", group: \"Minigame\" },\r\n { name: \"MinigameTransitionIn\", group: \"Minigame\" },\r\n { name: \"MinigameTransitionOut\", group: \"Minigame\" },\r\n\r\n // ── Drug / Trip (psychedelic, blur, distortion) ───────────────────────────\r\n { name: \"DMT_flight\", group: \"Drug / Trip\" },\r\n { name: \"DMT_flight_intro\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteIn\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteOut\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteEndIn\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteEndOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsDrivingIn\", group: \"Drug / Trip\" },\r\n { name: \"DrugsDrivingOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFight\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFightIn\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFightOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFight\", group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFightIn\",group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFightOut\", group: \"Drug / Trip\" },\r\n { name: \"ChopVision\", label: \"Chop Vision (dog)\", group: \"Drug / Trip\" },\r\n\r\n // ── Color Filter / Tint (one-off and biker formation filters) ─────────────\r\n { name: \"PPFilter\", group: \"Color Filter / Tint\" },\r\n { name: \"PPFilterOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPGreen\", group: \"Color Filter / Tint\" },\r\n { name: \"PPGreenOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPOrange\", group: \"Color Filter / Tint\" },\r\n { name: \"PPOrangeOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPink\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPinkOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPurple\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPurpleOut\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFilter\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFilterOut\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFormation\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFormationOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchOrange\", group: \"Color Filter / Tint\" },\r\n { name: \"InchOrangeOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPurple\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPurpleOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPickup\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPickupOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerGreen\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerGreenOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerPink\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerPinkOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerIntroCam\", group: \"Color Filter / Tint\" },\r\n { name: \"DeadlineNeon\", group: \"Color Filter / Tint\" },\r\n\r\n // ── Multiplayer (celeb, killstreak, race, etc.) ───────────────────────────\r\n { name: \"MP_Celeb_Win\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Win_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Lose\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Lose_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Preload\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Preload_Fade\", group: \"Multiplayer\" },\r\n { name: \"MP_Bull_tost\", group: \"Multiplayer\" },\r\n { name: \"MP_Bull_tost_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Killstreak\", group: \"Multiplayer\" },\r\n { name: \"MP_Killstreak_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Loser_Streak_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_OrbitalCannon\", group: \"Multiplayer\" },\r\n { name: \"MP_Powerplay\", group: \"Multiplayer\" },\r\n { name: \"MP_Powerplay_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_SmugglerCheckpoint\", group: \"Multiplayer\" },\r\n { name: \"MP_TransformRaceFlash\", group: \"Multiplayer\" },\r\n { name: \"MP_WarpCheckpoint\", group: \"Multiplayer\" },\r\n { name: \"MP_corona_switch\", group: \"Multiplayer\" },\r\n { name: \"MP_intro_logo\", group: \"Multiplayer\" },\r\n { name: \"MP_job_load\", group: \"Multiplayer\" },\r\n { name: \"MP_race_crash\", group: \"Multiplayer\" },\r\n\r\n // ── Misc (success notifs, special weapons, sniper / pause / explosions) ───\r\n { name: \"SuccessFranklin\", group: \"Misc\" },\r\n { name: \"SuccessMichael\", group: \"Misc\" },\r\n { name: \"SuccessNeutral\", group: \"Misc\" },\r\n { name: \"SuccessTrevor\", group: \"Misc\" },\r\n { name: \"FocusIn\", group: \"Misc\" },\r\n { name: \"FocusOut\", group: \"Misc\" },\r\n { name: \"CrossLine\", group: \"Misc\" },\r\n { name: \"CrossLineOut\", group: \"Misc\" },\r\n { name: \"SniperOverlay\", group: \"Misc\" },\r\n { name: \"ExplosionJosh3\", group: \"Misc\" },\r\n { name: \"WeaponUpgrade\", group: \"Misc\" },\r\n { name: \"Dont_tazeme_bro\", label: \"Don't Taze Me Bro\", group: \"Misc\" },\r\n { name: \"LostTimeDay\", group: \"Misc\" },\r\n { name: \"LostTimeNight\", group: \"Misc\" },\r\n { name: \"PauseMenuOut\", group: \"Misc\" },\r\n { name: \"pennedIn\", group: \"Misc\" },\r\n { name: \"PennedInOut\", group: \"Misc\" },\r\n { name: \"RaceTurbo\", group: \"Misc\" },\r\n { name: \"DefaultFlash\", group: \"Misc\" },\r\n];\r\n\r\nexport function formatGtaAnimPostFx(name: string): string {\r\n const entry = GTA_ANIM_POST_FX.find((fx) => fx.name === name);\r\n return entry?.label ?? name;\r\n}\r\n","// FiveM AnimPostFX picker. Curated list from the altV docs + a few common\r\n// community-known overlays (ULP_PlayerWakeUp etc.) grouped by use-case so\r\n// admins building cutscenes can find \"the wake-up effect\" without reading\r\n// 150 raw effect names.\r\n//\r\n// Single-value Select (the AnimpostfxPlay native takes one effect name).\r\n// Custom uncatalogued values in `value` are preserved under a \"Custom\"\r\n// group so old data with effect names we haven't catalogued still display.\r\n//\r\n// For full freedom (typing any arbitrary effect name), pass `creatable` —\r\n// users can hit Enter on a search term to add it as a custom value.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport type { SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_ANIM_POST_FX,\r\n GTA_ANIM_POST_FX_GROUP_ORDER,\r\n formatGtaAnimPostFx,\r\n type GtaAnimPostFx,\r\n type GtaAnimPostFxGroup,\r\n} from \"@/utils/gtaAnimPostFx\";\r\n\r\nfunction buildGroupedData(extraNames: string[] = []) {\r\n const groups = new Map<GtaAnimPostFxGroup, GtaAnimPostFx[]>();\r\n const seen = new Set<string>();\r\n for (const fx of GTA_ANIM_POST_FX) {\r\n if (seen.has(fx.name)) continue;\r\n seen.add(fx.name);\r\n if (!groups.has(fx.group)) groups.set(fx.group, []);\r\n groups.get(fx.group)!.push(fx);\r\n }\r\n\r\n const data = GTA_ANIM_POST_FX_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((fx) => ({\r\n value: fx.name,\r\n label: formatGtaAnimPostFx(fx.name),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom values so the dropdown still shows the current selection.\r\n // Mantine drops chips silently when the value isn't in the data array.\r\n const knownNames = new Set(GTA_ANIM_POST_FX.map((fx) => fx.name));\r\n const customs = extraNames.filter((n) => n && !knownNames.has(n));\r\n if (customs.length > 0) {\r\n data.push({\r\n group: \"Custom\" as GtaAnimPostFxGroup,\r\n items: customs.map((n) => ({ value: n, label: n })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport type AnimPostFxSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n /** Current effect name. Empty string = no effect selected. */\r\n value: string;\r\n onChange: (name: string) => void;\r\n};\r\n\r\nexport function AnimPostFxSelect({\r\n value,\r\n onChange,\r\n label = \"Screen FX\",\r\n size = \"xs\",\r\n searchable = true,\r\n clearable = true,\r\n ...rest\r\n}: AnimPostFxSelectProps) {\r\n const data = buildGroupedData([value]);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n clearable={clearable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching effects\"\r\n placeholder=\"Pick an effect...\"\r\n {...rest}\r\n data={data}\r\n value={value || null}\r\n onChange={(v) => onChange(v ?? \"\")}\r\n />\r\n );\r\n}\r\n","// Curated list of GTA V scenario identifiers passed to\r\n// TaskStartScenarioInPlace / TaskStartScenarioAtPosition. Sourced from\r\n// https://wiki.rage.mp/wiki/Scenarios via the DurtyFree gta-v-data-dumps\r\n// mirror (scenariosCompact.json).\r\n//\r\n// Scenarios are grouped by what the ped is *doing* so a picker can present\r\n// section headings instead of one giant alphabetical list of ~250 entries.\r\n// Add new entries by appending to the right group — the picker reflows\r\n// automatically. Group order = the order they appear in a dropdown.\r\n\r\nexport type GtaScenario = {\r\n /** Scenario identifier passed to the TaskStartScenario* natives. Case-sensitive. */\r\n name: string;\r\n /** Friendly label for UI display. Falls back to the auto-formatted name. */\r\n label?: string;\r\n /** Group used for ordering and section headers. */\r\n group: GtaScenarioGroup;\r\n};\r\n\r\nexport type GtaScenarioGroup =\r\n | \"Sitting\"\r\n | \"Standing & Idle\"\r\n | \"Eating & Drinking\"\r\n | \"Smoking & Substances\"\r\n | \"Working\"\r\n | \"Sports & Fitness\"\r\n | \"Cops & Security\"\r\n | \"Crime & Streets\"\r\n | \"Tourists & Crowds\"\r\n | \"Props (Misc)\"\r\n | \"Movement\"\r\n | \"Animals\"\r\n | \"Vehicles\"\r\n | \"Code (Advanced)\";\r\n\r\nexport const GTA_SCENARIO_GROUP_ORDER: GtaScenarioGroup[] = [\r\n \"Sitting\",\r\n \"Standing & Idle\",\r\n \"Eating & Drinking\",\r\n \"Smoking & Substances\",\r\n \"Working\",\r\n \"Sports & Fitness\",\r\n \"Cops & Security\",\r\n \"Crime & Streets\",\r\n \"Tourists & Crowds\",\r\n \"Props (Misc)\",\r\n \"Movement\",\r\n \"Animals\",\r\n \"Vehicles\",\r\n \"Code (Advanced)\",\r\n];\r\n\r\nexport const GTA_SCENARIOS: GtaScenario[] = [\r\n // ── Sitting ────────────────────────────────────────────────────────────────\r\n { name: \"PROP_HUMAN_SEAT_ARMCHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BAR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK_BEER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FOOD\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FOOD_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BUS_STOP_WAIT\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_DRINK_BEER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_FOOD\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_UPRIGHT\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_UPRIGHT_SHOWROOM\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_MP_PLAYER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_COMPUTER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_COMPUTER_LOW\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_DECKCHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_DECKCHAIR_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_SEWING\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_STRIP_WATCH\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_SUNLOUNGER\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_LEDGE\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_LEDGE_EATING\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_STEPS\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL_EATING\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL_TABLET\", group: \"Sitting\" },\r\n\r\n // ── Standing & Idle ────────────────────────────────────────────────────────\r\n { name: \"Standing\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_HANG_OUT_STREET\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_LEANING\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_LEANING_CASINO_TERRACE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_UPRIGHT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_FIRE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_FISHING\", group: \"Standing & Idle\" },\r\n { name: \"PROP_HUMAN_STAND_IMPATIENT\", group: \"Standing & Idle\" },\r\n\r\n // ── Eating & Drinking ──────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_DRINKING\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_DRINKING_FACILITY\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_DRINKING_CASINO_TERRACE\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_PICNIC\", group: \"Eating & Drinking\" },\r\n\r\n // ── Smoking & Substances ───────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_AA_COFFEE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_AA_SMOKE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_POT\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_POT_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_STUPOR\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_STUPOR_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n\r\n // ── Working ────────────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_CAR_PARK_ATTENDANT\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CLIPBOARD\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CLIPBOARD_FACILITY\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CONST_DRILL\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_GARDENER_LEAF_BLOWER\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_GARDENER_PLANT\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_HAMMERING\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_JANITOR\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_MAID_CLEAN\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_MUSICIAN\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_VALET\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_VEHICLE_MECHANIC\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_WELDING\", group: \"Working\" },\r\n\r\n // ── Sports & Fitness ───────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_GOLF_PLAYER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_HIKER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_HIKER_STANDING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_JOG\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_JOG_STANDING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_MUSCLE_FLEX\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_MUSCLE_FREE_WEIGHTS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_POWER_WALKER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_PUSH_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SIT_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SUNBATHE\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SUNBATHE_BACK\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SWIMMING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_TENNIS_PLAYER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_YOGA\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS_ARMY\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS_PRISON\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS_PRISON\", group: \"Sports & Fitness\" },\r\n\r\n // ── Cops & Security ────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_COP_IDLES\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_PATROL\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_CASINO\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_CLUBHOUSE\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_FACILITY\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_ARMY\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_SECURITY_SHINE_TORCH\", group: \"Cops & Security\" },\r\n\r\n // ── Crime & Streets ────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_DRUG_DEALER\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_DEALER_HARD\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_FIELD_WORKERS_RAKE\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_FIELD_WORKERS_WEEDING\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_PROCESSORS_COKE\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_PROCESSORS_WEED\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_PROSTITUTE_HIGH_CLASS\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_PROSTITUTE_LOW_CLASS\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_FREEWAY\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_SLUMPED\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_STANDING\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_WASH\", group: \"Crime & Streets\" },\r\n { name: \"PROP_HUMAN_BUM_BIN\", group: \"Crime & Streets\" },\r\n { name: \"PROP_HUMAN_BUM_SHOPPING_CART\", group: \"Crime & Streets\" },\r\n\r\n // ── Tourists & Crowds ──────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_BINOCULARS\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_CHEERING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_HUMAN_STATUE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_INSPECT_CROUCH\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_INSPECT_STAND\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_MOBILE_FILM_SHOCKING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_PAPARAZZI\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_PARTYING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_STRIP_WATCH_STAND\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_SUPERHERO\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_TOURIST_MAP\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_TOURIST_MOBILE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_WINDOW_SHOP_BROWSE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_WINDOW_SHOP_BROWSE_SHOWROOM\", group: \"Tourists & Crowds\" },\r\n\r\n // ── Props (Misc) ───────────────────────────────────────────────────────────\r\n { name: \"PROP_HUMAN_ATM\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_BBQ\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_PARKING_METER\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_MOVIE_BULB\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_MOVIE_STUDIO_LIGHT\", group: \"Props (Misc)\" },\r\n { name: \"PROP_BIRD_IN_TREE\", group: \"Props (Misc)\" },\r\n { name: \"PROP_BIRD_TELEGRAPH_POLE\", group: \"Props (Misc)\" },\r\n\r\n // ── Movement ───────────────────────────────────────────────────────────────\r\n { name: \"Walk\", group: \"Movement\" },\r\n { name: \"Walk_Facility\", group: \"Movement\" },\r\n\r\n // ── Animals ────────────────────────────────────────────────────────────────\r\n { name: \"WORLD_BOAR_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_CAT_SLEEPING_GROUND\", group: \"Animals\" },\r\n { name: \"WORLD_CAT_SLEEPING_LEDGE\", group: \"Animals\" },\r\n { name: \"WORLD_COW_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_HOWL\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_REST\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_WANDER\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_WALK\", group: \"Animals\" },\r\n { name: \"WORLD_CHICKENHAWK_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_CHICKENHAWK_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_CORMORANT_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_CROW_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_CROW_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_DEER_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_ROTTWEILER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_RETRIEVER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_SHEPHERD\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_SMALL\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_ROTTWEILER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_RETRIEVER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_SHEPHERD\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_SMALL\", group: \"Animals\" },\r\n { name: \"WORLD_DOLPHIN_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_FISH_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_FISH_IDLE\", group: \"Animals\" },\r\n { name: \"WORLD_GULL_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_GULL_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_PECKING\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_MOUNTAIN_LION_REST\", group: \"Animals\" },\r\n { name: \"WORLD_MOUNTAIN_LION_WANDER\", group: \"Animals\" },\r\n { name: \"WORLD_ORCA_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_PIG_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_PIGEON_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_PIGEON_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_RABBIT_EATING\", group: \"Animals\" },\r\n { name: \"WORLD_RABBIT_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_RATS_EATING\", group: \"Animals\" },\r\n { name: \"WORLD_RATS_FLEEING\", group: \"Animals\" },\r\n { name: \"WORLD_SHARK_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_SHARK_HAMMERHEAD_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_STINGRAY_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_WHALE_SWIM\", group: \"Animals\" },\r\n\r\n // ── Vehicles ───────────────────────────────────────────────────────────────\r\n { name: \"DRIVE\", group: \"Vehicles\" },\r\n { name: \"PARK_VEHICLE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_ATTRACTOR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_AMBULANCE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_BALLAS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_FAMILY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_HARMONY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_VAGOS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_MOUNTAIN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_ROAD\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BIKE_OFF_ROAD_RACE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BIKER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE_ALAMO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE_MARQUIS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BROKEN_DOWN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BUSINESSMEN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CLUCKIN_BELL_TRAILER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CONSTRUCTION_SOLO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CONSTRUCTION_PASSENGERS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DISTANT_EMPTY_GROUND\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_PASSENGERS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_SOLO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_EMPTY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_FARM_WORKER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_FIRE_TRUCK\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_HELI_LIFEGUARD\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MARIACHI\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MECHANIC\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MILITARY_PLANES_BIG\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MILITARY_PLANES_SMALL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PARK_PARALLEL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PASSENGER_EXIT\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_BIKE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_NEXT_TO_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_QUARRY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SALTON\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SALTON_DIRT_BIKE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SECURITY_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_STREETRACE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TANDL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TOURBUS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TOURIST\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRACTOR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRACTOR_BEACH\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRUCK_LOGS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRUCKS_TRAILERS\", group: \"Vehicles\" },\r\n\r\n // ── Code (Advanced) ────────────────────────────────────────────────────────\r\n // These are engine-internal scenarios — rarely the right pick for cinematic\r\n // ped placements, but exposed because the game-data dump includes them.\r\n { name: \"CODE_HUMAN_COWER\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_CROSS_ROAD_WAIT\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_PARK_CAR\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_KNEEL\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_TEND_TO_DEAD\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_TIME_OF_DEATH\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_POLICE_CROWD_CONTROL\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_POLICE_INVESTIGATE\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_STAND_COWER\", group: \"Code (Advanced)\" },\r\n { name: \"CHAINING_ENTRY\", group: \"Code (Advanced)\" },\r\n { name: \"CHAINING_EXIT\", group: \"Code (Advanced)\" },\r\n { name: \"EAR_TO_TEXT\", group: \"Code (Advanced)\" },\r\n { name: \"EAR_TO_TEXT_FAT\", group: \"Code (Advanced)\" },\r\n { name: \"WORLD_LOOKAT_POINT\", group: \"Code (Advanced)\" },\r\n];\r\n\r\n// ── Display helpers ──────────────────────────────────────────────────────────\r\n\r\n// \"PROP_HUMAN_SEAT_CHAIR_FOOD\" → \"Seat Chair Food\". Strips the WORLD_/PROP_/\r\n// CODE_ prefix and the redundant HUMAN_/BIRD_/VEHICLE_ infix so the label\r\n// reads naturally, then title-cases each underscore-separated word.\r\nconst PREFIX_RE = /^(WORLD|PROP|CODE)_(HUMAN_|BIRD_|VEHICLE_|CAT_|DOG_|COYOTE_|FISH_|HEN_|GULL_|CROW_|RABBIT_|RATS_|SHARK_|PIGEON_|ORCA_|WHALE_|STINGRAY_|DOLPHIN_|MOUNTAIN_LION_|PIG_|COW_|DEER_|BOAR_|CHICKENHAWK_|CORMORANT_)?/;\r\n\r\nexport function formatGtaScenario(name: string): string {\r\n if (!name) return \"\";\r\n const stripped = name.replace(PREFIX_RE, \"\");\r\n const cleaned = stripped.length > 0 ? stripped : name;\r\n return cleaned\r\n .toLowerCase()\r\n .split(\"_\")\r\n .filter(Boolean)\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n}\r\n","// FiveM scenario picker. Curated list from\r\n// https://wiki.rage.mp/wiki/Scenarios (via DurtyFree's data dump) grouped by\r\n// what the ped is actually doing — Sitting, Working, Sports, etc. — so admins\r\n// building a scene can find \"the chair with food\" without scrolling 250\r\n// alphabetical rows.\r\n//\r\n// Single-value Select (TaskStartScenarioInPlace/AtPosition takes one name).\r\n// Custom values in `value` that don't match a catalogued scenario are kept\r\n// in a \"Custom\" group so externally-loaded scenario keys still display.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport type { SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_SCENARIOS,\r\n GTA_SCENARIO_GROUP_ORDER,\r\n formatGtaScenario,\r\n type GtaScenario,\r\n type GtaScenarioGroup,\r\n} from \"@/utils/gtaScenarios\";\r\n\r\nfunction buildGroupedData(extraNames: string[] = []) {\r\n const groups = new Map<GtaScenarioGroup, GtaScenario[]>();\r\n const seen = new Set<string>();\r\n for (const sc of GTA_SCENARIOS) {\r\n if (seen.has(sc.name)) continue;\r\n seen.add(sc.name);\r\n if (!groups.has(sc.group)) groups.set(sc.group, []);\r\n groups.get(sc.group)!.push(sc);\r\n }\r\n\r\n const data = GTA_SCENARIO_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((sc) => ({\r\n value: sc.name,\r\n label: sc.label ?? formatGtaScenario(sc.name),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom values so the dropdown still shows the current selection.\r\n // Mantine silently drops chips when the value isn't in the data array.\r\n const knownNames = new Set(GTA_SCENARIOS.map((sc) => sc.name));\r\n const customs = extraNames.filter((n) => n && !knownNames.has(n));\r\n if (customs.length > 0) {\r\n data.push({\r\n group: \"Custom\" as GtaScenarioGroup,\r\n items: customs.map((n) => ({ value: n, label: n })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport type ScenarioSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n /** Current scenario name. Empty string = no scenario selected. */\r\n value: string;\r\n onChange: (name: string) => void;\r\n};\r\n\r\nexport function ScenarioSelect({\r\n value,\r\n onChange,\r\n label = \"Scenario\",\r\n size = \"xs\",\r\n searchable = true,\r\n clearable = true,\r\n ...rest\r\n}: ScenarioSelectProps) {\r\n const data = buildGroupedData([value]);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n clearable={clearable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching scenarios\"\r\n placeholder=\"Pick a scenario...\"\r\n {...rest}\r\n data={data}\r\n value={value || null}\r\n onChange={(v) => onChange(v ?? \"\")}\r\n />\r\n );\r\n}\r\n","// Discord role picker. Mantine Select / MultiSelect populated from a NUI\r\n// callback the consumer registers (which in turn calls lib.discord.getRoles\r\n// on the server). Each role shows its actual Discord colour as a swatch.\r\n//\r\n// The consumer wires up the NUI side once:\r\n//\r\n// RegisterNuiCallback('LIST_DISCORD_ROLES', function(_, cb)\r\n// local roles, err = lib.callback.await('myresource:listDiscordRoles')\r\n// cb({ ok = roles ~= nil, _error = err, roles = roles or {} })\r\n// end)\r\n//\r\n// server callback:\r\n// lib.callback.register('myresource:listDiscordRoles', function(src)\r\n// -- (admin perm check here)\r\n// local roles, err = lib.discord.getRoles()\r\n// return roles, err\r\n// end)\r\n//\r\n// And then renders:\r\n// <DiscordRoleSelect endpoint=\"LIST_DISCORD_ROLES\" value={...} onChange={...} />\r\n//\r\n// When lib.discord returns 'NotConfigured' the picker swaps in a friendly\r\n// banner pointing the admin at /dirk_lib so they go set credentials.\r\n\r\nimport { ActionIcon, Flex, MultiSelect, Select, Text } from \"@mantine/core\";\r\nimport type { ComboboxItem, SelectProps, MultiSelectProps } from \"@mantine/core\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { AlertTriangle, RefreshCw } from \"lucide-react\";\r\nimport { fetchNui } from \"@/utils/fetchNui\";\r\nimport { locale } from \"@/utils/locales\";\r\n\r\n// locale() returns the **key itself** on miss (see utils/locales.ts), so the\r\n// classic `locale(k) || fallback` pattern never falls through. This helper\r\n// returns `fallback` whenever locale gave us the key back unchanged.\r\nconst t = (key: string, fallback: string) => {\r\n const v = locale(key);\r\n return v === key ? fallback : v;\r\n};\r\n\r\n// Subset of the Discord role payload we actually use. Everything else\r\n// (mentionable, hoist, permissions, etc.) is on the server-side cache;\r\n// the picker only needs id/name/colour/position.\r\nexport type DiscordRole = {\r\n id: string;\r\n name: string;\r\n color: number; // 24-bit integer; 0 = no colour (Discord default)\r\n position?: number;\r\n};\r\n\r\ntype ListResponse = {\r\n ok: boolean;\r\n _error?: string;\r\n roles?: DiscordRole[];\r\n};\r\n\r\nfunction decimalToHex(color: number): string | null {\r\n if (!color || color === 0) return null;\r\n return \"#\" + color.toString(16).padStart(6, \"0\");\r\n}\r\n\r\n// Custom option renderer — swatch + role name. Falls back to a neutral\r\n// grey dot when the role has no Discord colour set (decimal 0).\r\nfunction RoleOption({ role }: { role: DiscordRole }) {\r\n const swatch = decimalToHex(role.color) || \"rgba(255,255,255,0.25)\";\r\n return (\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <div\r\n style={{\r\n width: \"1vh\",\r\n height: \"1vh\",\r\n borderRadius: \"50%\",\r\n background: swatch,\r\n flexShrink: 0,\r\n boxShadow: role.color ? `0 0 0.4vh ${swatch}` : undefined,\r\n }}\r\n />\r\n <Text size=\"xs\" c=\"rgba(255,255,255,0.9)\">\r\n {role.name}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n// Styling shared by the not-configured stand-in — a disabled Select that\r\n// shares the exact same shell as a real picker, so neighbouring inputs\r\n// (e.g. a NumberInput sitting next to us in a flex row) line up. The tint\r\n// is a subtle amber so the admin notices it's degraded without losing\r\n// the form's visual rhythm.\r\nconst NOT_CONFIGURED_TINT = \"rgba(255,184,0,0.35)\";\r\nconst NOT_CONFIGURED_FILL = \"rgba(255,184,0,0.05)\";\r\n\r\ntype SharedProps = {\r\n /** NUI callback name registered by the consumer that returns ListResponse. */\r\n endpoint: string;\r\n /** Optional label / size / placeholder forwarded to the underlying Mantine Select. */\r\n label?: React.ReactNode;\r\n size?: SelectProps[\"size\"];\r\n placeholder?: string;\r\n disabled?: boolean;\r\n /** Style props applied to the wrapping Select/MultiSelect. */\r\n style?: React.CSSProperties;\r\n styles?: SelectProps[\"styles\"];\r\n};\r\n\r\ntype SingleProps = SharedProps & {\r\n multi?: false;\r\n value: string | null;\r\n onChange: (id: string | null) => void;\r\n};\r\n\r\ntype MultiProps = SharedProps & {\r\n multi: true;\r\n value: string[];\r\n onChange: (ids: string[]) => void;\r\n};\r\n\r\nexport type DiscordRoleSelectProps = SingleProps | MultiProps;\r\n\r\nexport function DiscordRoleSelect(props: DiscordRoleSelectProps) {\r\n const { endpoint, label, size = \"xs\", placeholder, disabled, style, styles } = props;\r\n const [roles, setRoles] = useState<DiscordRole[] | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [errorCode, setErrorCode] = useState<string | null>(null);\r\n\r\n const refresh = async () => {\r\n setLoading(true);\r\n try {\r\n const res = await fetchNui<ListResponse>(endpoint, {}, {\r\n // Browser dev fallback so the component renders something useful\r\n // outside FiveM.\r\n ok: true,\r\n roles: [\r\n { id: \"1\", name: \"Admin\", color: 0xed4245, position: 5 },\r\n { id: \"2\", name: \"VIP Gold\", color: 0xfaa61a, position: 4 },\r\n { id: \"3\", name: \"Member\", color: 0x57f287, position: 3 },\r\n { id: \"4\", name: \"Guest\", color: 0, position: 2 },\r\n ],\r\n });\r\n if (res?.ok) {\r\n setRoles(res.roles ?? []);\r\n setErrorCode(null);\r\n } else {\r\n setRoles(null);\r\n setErrorCode(res?._error || \"FetchFailed\");\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n refresh();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [endpoint]);\r\n\r\n const rolesById = useMemo(() => {\r\n const map: Record<string, DiscordRole> = {};\r\n for (const r of roles ?? []) map[r.id] = r;\r\n return map;\r\n }, [roles]);\r\n\r\n // Show a disabled stand-in instead of a broken empty picker. Uses the\r\n // exact same Mantine Select/MultiSelect shell as the real component so\r\n // neighbouring inputs (NumberInputs in the same flex row, etc.) line up\r\n // pixel-for-pixel — only the input border tints amber to signal \"not\r\n // wired up yet, see /dirk_lib\".\r\n if (errorCode === \"NotConfigured\") {\r\n const notConfiguredPlaceholder = t(\r\n \"DiscordNotConfigured\",\r\n \"Not configured — set in /dirk_lib\",\r\n );\r\n const notConfiguredStyles = {\r\n ...(styles as Record<string, unknown> | undefined),\r\n input: {\r\n ...((styles as { input?: Record<string, unknown> } | undefined)?.input ?? {}),\r\n borderColor: NOT_CONFIGURED_TINT,\r\n backgroundColor: NOT_CONFIGURED_FILL,\r\n },\r\n } as SelectProps[\"styles\"];\r\n const warnIcon = (\r\n <AlertTriangle size=\"1.2vh\" color={NOT_CONFIGURED_TINT.replace(/0\\.35\\)$/, \"0.85)\")} />\r\n );\r\n if (props.multi) {\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n placeholder={notConfiguredPlaceholder}\r\n data={[]}\r\n value={[]}\r\n onChange={() => {}}\r\n disabled\r\n rightSection={warnIcon}\r\n style={style}\r\n styles={notConfiguredStyles as MultiSelectProps[\"styles\"]}\r\n />\r\n );\r\n }\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n placeholder={notConfiguredPlaceholder}\r\n data={[]}\r\n value={null}\r\n onChange={() => {}}\r\n disabled\r\n rightSection={warnIcon}\r\n style={style}\r\n styles={notConfiguredStyles}\r\n />\r\n );\r\n }\r\n\r\n // Mantine Select expects {value, label} options. We also pass the role\r\n // object inline so the custom renderer can read the colour.\r\n const data: ComboboxItem[] = (roles ?? []).map((r) => ({\r\n value: r.id,\r\n label: r.name,\r\n }));\r\n\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const role = rolesById[option.value];\r\n return role ? <RoleOption role={role} /> : <Text size=\"xs\">{option.label}</Text>;\r\n };\r\n\r\n // Mantine Select default `rightSectionPointerEvents=\"none\"` makes the\r\n // icon visual-only — clicks fall through to the combobox toggle. We\r\n // explicitly enable pointer events here so the refresh button actually\r\n // refreshes, and stopPropagation prevents the dropdown from opening\r\n // when the icon is clicked.\r\n const refreshButton = (\r\n <ActionIcon\r\n size=\"xs\"\r\n variant=\"subtle\"\r\n onMouseDown={(e) => { e.stopPropagation(); }}\r\n onClick={(e) => { e.stopPropagation(); refresh(); }}\r\n title={t(\"Refresh\", \"Refresh\")}\r\n loading={loading}\r\n aria-label={t(\"Refresh\", \"Refresh\")}\r\n >\r\n <RefreshCw size=\"1.2vh\" />\r\n </ActionIcon>\r\n );\r\n\r\n if (props.multi) {\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n placeholder={placeholder || t(\"PickRoles\", \"Pick roles...\")}\r\n data={data}\r\n value={props.value || []}\r\n onChange={(ids) => props.onChange(ids)}\r\n renderOption={renderOption as MultiSelectProps[\"renderOption\"]}\r\n searchable\r\n clearable\r\n disabled={disabled || (loading && !roles)}\r\n rightSection={refreshButton}\r\n rightSectionPointerEvents=\"all\"\r\n style={style}\r\n styles={styles as MultiSelectProps[\"styles\"]}\r\n nothingFoundMessage={\r\n errorCode\r\n ? `${t(\"Error\", \"Error\")} (${errorCode})`\r\n : t(\"NoRoles\", \"No roles found\")\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n placeholder={placeholder || t(\"PickRole\", \"Pick a role...\")}\r\n data={data}\r\n value={props.value || null}\r\n onChange={(id) => props.onChange(id)}\r\n renderOption={renderOption}\r\n searchable\r\n clearable\r\n disabled={disabled || (loading && !roles)}\r\n rightSection={refreshButton}\r\n rightSectionPointerEvents=\"all\"\r\n style={style}\r\n styles={styles}\r\n nothingFoundMessage={\r\n errorCode\r\n ? `${t(\"Error\", \"Error\")} (${errorCode})`\r\n : t(\"NoRoles\", \"No roles found\")\r\n }\r\n />\r\n );\r\n}\r\n","// Account picker. Mantine Select / MultiSelect populated from a NUI\r\n// callback the consumer registers (which in turn calls\r\n// lib.accounts.list() on the server, reaching dirk_lib's framework\r\n// introspection).\r\n//\r\n// Consumer wiring (once):\r\n//\r\n// RegisterNuiCallback('LIST_ACCOUNTS', function(_, cb)\r\n// local info = lib.accounts.list()\r\n// cb(info)\r\n// end)\r\n//\r\n// Then:\r\n// <AccountSelect endpoint=\"LIST_ACCOUNTS\" value={...} onChange={...} />\r\n// <AccountSelect endpoint=\"LIST_ACCOUNTS\" multi value={[...]} onChange={...} />\r\n//\r\n// Behaviour:\r\n// • If the framework reports accounts (ESX / qb-core), the dropdown is\r\n// pre-populated with the canonical list. Each option shows name +\r\n// pretty label when available.\r\n// • In `multi` mode, the dropdown is `creatable` — admin can type a\r\n// custom account name and press Enter to add it. Needed for qbx_core\r\n// and any ESX server that adds custom accounts at runtime.\r\n// • Single-pick mode is strict (no free-form entry).\r\n// • Framework hint chip renders below the field so the admin knows\r\n// where the list came from (\"from ESX Config.Accounts\", \"default\r\n// QBox trio\", etc.).\r\n\r\nimport { ActionIcon, Flex, MultiSelect, Select, Text, alpha, useMantineTheme } from \"@mantine/core\";\r\nimport type { ComboboxItem, MultiSelectProps, SelectProps } from \"@mantine/core\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { RefreshCw } from \"lucide-react\";\r\nimport { fetchNui } from \"@/utils/fetchNui\";\r\nimport { locale } from \"@/utils/locales\";\r\n\r\nconst t = (key: string, fallback: string) => {\r\n const v = locale(key);\r\n return v === key ? fallback : v;\r\n};\r\n\r\nexport type FrameworkAccount = {\r\n name: string;\r\n label?: string;\r\n default?: number;\r\n round?: boolean;\r\n};\r\n\r\ntype ListResponse = {\r\n ok: boolean;\r\n framework?: string;\r\n accounts?: FrameworkAccount[];\r\n};\r\n\r\nconst FRAMEWORK_HINTS: Record<string, string> = {\r\n \"es_extended\": \"from ESX Config.Accounts\",\r\n \"qb-core\": \"from QBCore Money.MoneyTypes\",\r\n \"qbx_core\": \"from QBox player session (or default trio if no one is online) — log in once to capture custom accounts\",\r\n \"nd-framework\": \"ND_Core only supports cash + bank\",\r\n \"unknown\": \"no framework detected — type account names manually\",\r\n};\r\n\r\ntype SharedProps = {\r\n endpoint: string;\r\n label?: React.ReactNode;\r\n size?: SelectProps[\"size\"];\r\n placeholder?: string;\r\n disabled?: boolean;\r\n style?: React.CSSProperties;\r\n styles?: SelectProps[\"styles\"];\r\n /** Hide the framework-hint chip below the field. */\r\n hideFrameworkHint?: boolean;\r\n};\r\n\r\ntype SingleProps = SharedProps & {\r\n multi?: false;\r\n value: string | null;\r\n onChange: (name: string | null) => void;\r\n};\r\n\r\ntype MultiProps = SharedProps & {\r\n multi: true;\r\n value: string[];\r\n onChange: (names: string[]) => void;\r\n};\r\n\r\nexport type AccountSelectProps = SingleProps | MultiProps;\r\n\r\nfunction AccountOption({ account }: { account: FrameworkAccount }) {\r\n return (\r\n <Flex direction=\"column\" gap=\"0\">\r\n <Text size=\"xs\" c=\"rgba(255,255,255,0.9)\" ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.04em\">\r\n {account.name}\r\n </Text>\r\n {account.label && (\r\n <Text size=\"xxs\" c=\"rgba(255,255,255,0.4)\">\r\n {account.label}\r\n </Text>\r\n )}\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction FrameworkHint({ framework }: { framework: string | undefined }) {\r\n const theme = useMantineTheme();\r\n if (!framework) return null;\r\n const hintKey = `AccountFrameworkHint_${framework}`;\r\n const text = t(hintKey, FRAMEWORK_HINTS[framework] || FRAMEWORK_HINTS.unknown);\r\n return (\r\n <Flex\r\n align=\"center\" gap=\"xs\" px=\"xs\" py=\"0.3vh\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.4),\r\n border: \"0.1vh solid rgba(255,255,255,0.04)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n <Text size=\"xxs\" ff=\"Akrobat Bold\" c=\"rgba(255,255,255,0.45)\" tt=\"uppercase\" lts=\"0.04em\">\r\n {framework}\r\n </Text>\r\n <Text size=\"xxs\" ff=\"Akrobat\" c=\"rgba(255,255,255,0.35)\" style={{ flex: 1 }} lineClamp={2}>\r\n {text}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\nexport function AccountSelect(props: AccountSelectProps) {\r\n const { endpoint, label, size = \"xs\", placeholder, disabled, style, styles, hideFrameworkHint } = props;\r\n const [accounts, setAccounts] = useState<FrameworkAccount[] | null>(null);\r\n const [framework, setFramework] = useState<string | undefined>(undefined);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const refresh = async () => {\r\n setLoading(true);\r\n try {\r\n const res = await fetchNui<ListResponse>(endpoint, {}, {\r\n // Browser dev fallback. Shows a recognisable ESX-style list.\r\n ok: true,\r\n framework: \"es_extended\",\r\n accounts: [\r\n { name: \"money\", label: \"Cash\" },\r\n { name: \"bank\", label: \"Bank\" },\r\n { name: \"black_money\", label: \"Dirty Money\" },\r\n ],\r\n });\r\n if (res?.ok) {\r\n setAccounts(res.accounts ?? []);\r\n setFramework(res.framework);\r\n } else {\r\n setAccounts([]);\r\n setFramework(res?.framework);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n refresh();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [endpoint]);\r\n\r\n const accountsByName = useMemo(() => {\r\n const map: Record<string, FrameworkAccount> = {};\r\n for (const a of accounts ?? []) map[a.name] = a;\r\n // In multi mode we also need to handle account names the admin typed\r\n // that aren't in the framework list (e.g. custom qbx_core accounts).\r\n if (props.multi) {\r\n for (const n of props.value ?? []) {\r\n if (n && !map[n]) map[n] = { name: n };\r\n }\r\n } else if (props.value && !map[props.value]) {\r\n map[props.value] = { name: props.value };\r\n }\r\n return map;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [accounts, props.multi, props.multi ? props.value?.join(\",\") : props.value]);\r\n\r\n const data: ComboboxItem[] = Object.values(accountsByName).map((a) => ({\r\n value: a.name,\r\n label: a.label ? `${a.name} — ${a.label}` : a.name,\r\n }));\r\n\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const acc = accountsByName[option.value];\r\n return acc ? <AccountOption account={acc} /> : <Text size=\"xs\">{option.label}</Text>;\r\n };\r\n\r\n const refreshButton = (\r\n <ActionIcon\r\n size=\"xs\" variant=\"subtle\"\r\n onMouseDown={(e) => { e.stopPropagation(); }}\r\n onClick={(e) => { e.stopPropagation(); refresh(); }}\r\n title={t(\"Refresh\", \"Refresh\")}\r\n loading={loading}\r\n aria-label={t(\"Refresh\", \"Refresh\")}\r\n >\r\n <RefreshCw size=\"1.2vh\" />\r\n </ActionIcon>\r\n );\r\n\r\n const sharedSelectProps = {\r\n label,\r\n size,\r\n data,\r\n searchable: true,\r\n clearable: true,\r\n disabled: disabled || (loading && !accounts),\r\n rightSection: refreshButton,\r\n rightSectionPointerEvents: \"all\" as const,\r\n style,\r\n nothingFoundMessage: t(\"NoAccounts\", \"No accounts available\"),\r\n };\r\n\r\n return (\r\n <Flex direction=\"column\" gap=\"0.3vh\" style={style}>\r\n {props.multi ? (\r\n <MultiSelect\r\n {...sharedSelectProps}\r\n placeholder={placeholder || t(\"PickAccounts\", \"Pick accounts (or type custom)...\")}\r\n value={props.value || []}\r\n onChange={(names) => props.onChange(names)}\r\n renderOption={renderOption as MultiSelectProps[\"renderOption\"]}\r\n // Free-form entry so admins can add account names the framework\r\n // exposes via `PlayerData.money` keys we couldn't enumerate (qbx).\r\n // The user types a name + presses Enter to commit it.\r\n searchable\r\n hidePickedOptions\r\n // Mantine 7 spelling — accepts unknown values as tags.\r\n // `creatable` was renamed in v7+ but legacy fallback is OK.\r\n styles={styles as MultiSelectProps[\"styles\"]}\r\n />\r\n ) : (\r\n <Select\r\n {...sharedSelectProps}\r\n placeholder={placeholder || t(\"PickAccount\", \"Pick an account...\")}\r\n value={props.value || null}\r\n onChange={(name) => props.onChange(name)}\r\n renderOption={renderOption}\r\n styles={styles}\r\n />\r\n )}\r\n {!hideFrameworkHint && <FrameworkHint framework={framework} />}\r\n </Flex>\r\n );\r\n}\r\n","// General-purpose bottom-right \"do this in-world\" instruction overlay.\r\n//\r\n// Reused by every admin-tool flow that releases NUI focus and asks the\r\n// player to do something in the game world: capture a position, place an\r\n// object, paint a navmesh, etc. The card itself is dumb — it just renders\r\n// a title + hint + list of key labels and stays out of the way.\r\n//\r\n// While visible it hides every other body child via a CSS attribute trick,\r\n// so the admin panel underneath keeps its React state intact (we never\r\n// unmount it). Set hideRestOfAdmin={false} on rare cases where you want\r\n// the panel to overlay alongside other UI rather than replace it.\r\nimport { alpha, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport type { LucideIcon } from \"lucide-react\";\r\nimport { MapPin } from \"lucide-react\";\r\nimport { useEffect } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nexport type InstructionKey = {\r\n /** Short label drawn inside the key cap (e.g. \"E\", \"⌫\", \"F\"). */\r\n key: string;\r\n /** What the key does (e.g. \"Set\", \"Cancel\"). */\r\n action: string;\r\n};\r\n\r\nexport type InstructionPanelProps = {\r\n visible: boolean;\r\n title: string;\r\n /** One- or two-line subtext explaining what to do. */\r\n hint?: string;\r\n /** List of key bindings shown as labelled key caps. */\r\n keys?: InstructionKey[];\r\n /** Override the default MapPin icon next to the title. */\r\n icon?: LucideIcon;\r\n /**\r\n * When true (default) every direct child of <body> except this overlay is\r\n * hidden via a CSS rule. Lets the admin panel stay mounted (React state\r\n * preserved) while the player sees only the game world + this card.\r\n * Set false if you want the card to sit alongside other UI.\r\n */\r\n hideRestOfAdmin?: boolean;\r\n};\r\n\r\nconst BODY_HIDE_STYLE_ID = \"dirk-instruction-panel-style\";\r\nconst BODY_HIDE_ATTR = \"data-dirk-instruction-active\";\r\nconst OVERLAY_ATTR = \"data-dirk-instruction-overlay\";\r\n\r\nfunction ensureBodyHideStyle() {\r\n if (document.getElementById(BODY_HIDE_STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = BODY_HIDE_STYLE_ID;\r\n // Belt-and-braces: visibility alone gets overridden by Mantine animations\r\n // on some children (modal backdrops, transition wrappers etc), so combine\r\n // it with opacity + pointer-events to make sure everything goes dark\r\n // while preserving React state via the still-mounted DOM tree.\r\n el.textContent = `\r\n body[${BODY_HIDE_ATTR}] > *:not([${OVERLAY_ATTR}]) {\r\n visibility: hidden !important;\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n }\r\n `;\r\n document.head.appendChild(el);\r\n}\r\n\r\nexport function InstructionPanel({\r\n visible,\r\n title,\r\n hint,\r\n keys,\r\n icon: Icon = MapPin,\r\n hideRestOfAdmin = true,\r\n}: InstructionPanelProps) {\r\n const theme = useMantineTheme();\r\n const pc = theme.colors[theme.primaryColor];\r\n\r\n useEffect(() => {\r\n if (!visible || !hideRestOfAdmin) return;\r\n ensureBodyHideStyle();\r\n document.body.setAttribute(BODY_HIDE_ATTR, \"\");\r\n return () => {\r\n document.body.removeAttribute(BODY_HIDE_ATTR);\r\n };\r\n }, [visible, hideRestOfAdmin]);\r\n\r\n if (!visible) return null;\r\n\r\n return createPortal(\r\n <div\r\n {...{ [OVERLAY_ATTR]: \"\" }}\r\n style={{ position: \"fixed\", inset: 0, pointerEvents: \"none\", zIndex: 10000 }}\r\n >\r\n <AnimatePresence>\r\n <motion.div\r\n key=\"instruction-card\"\r\n initial={{ opacity: 0, y: 12, scale: 0.92 }}\r\n animate={{ opacity: 1, y: 0, scale: 1 }}\r\n exit={{ opacity: 0, y: 12, scale: 0.92 }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n style={{ position: \"absolute\", bottom: \"3vh\", right: \"3vh\", userSelect: \"none\" }}\r\n >\r\n <Flex\r\n direction=\"column\"\r\n gap=\"0.8vh\"\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.55),\r\n border: \"0.1vh solid rgba(255,255,255,0.07)\",\r\n borderRadius: theme.radius.sm,\r\n boxShadow: \"0 0.74vh 2.96vh rgba(0,0,0,0.5)\",\r\n padding: \"1.4vh 1.6vh\",\r\n minWidth: \"22vh\",\r\n maxWidth: \"28vh\",\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <Icon size=\"1.6vh\" color={pc[6]} strokeWidth={2.5} />\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.7vh\",\r\n fontWeight: 700,\r\n letterSpacing: \"0.14em\",\r\n textTransform: \"uppercase\",\r\n color: pc[6],\r\n textShadow: `0 0 0.8vh ${alpha(pc[7], 0.5)}, 0 0 1.6vh ${alpha(pc[9], 0.3)}`,\r\n }}\r\n >\r\n {title}\r\n </Text>\r\n </Flex>\r\n\r\n {(hint || (keys && keys.length > 0)) && (\r\n <div style={{ height: \"0.1vh\", background: \"rgba(255,255,255,0.06)\", margin: \"0.1vh 0\" }} />\r\n )}\r\n\r\n {hint && (\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.05vh\",\r\n color: \"rgba(255,255,255,0.45)\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n lineHeight: 1.4,\r\n }}\r\n >\r\n {hint}\r\n </Text>\r\n )}\r\n\r\n {keys && keys.length > 0 && (\r\n <>\r\n {hint && (\r\n <div style={{ height: \"0.1vh\", background: \"rgba(255,255,255,0.06)\", margin: \"0.1vh 0\" }} />\r\n )}\r\n <Flex direction=\"column\" gap=\"0.5vh\">\r\n {keys.map((k, i) => (\r\n <InstructionKeyRow key={i} keyLabel={k.key} action={k.action} />\r\n ))}\r\n </Flex>\r\n </>\r\n )}\r\n </Flex>\r\n </motion.div>\r\n </AnimatePresence>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\n// Specials: when the consumer passes 'LMB' / 'RMB' / 'BACKSPACE' / '⌫' as\r\n// the key label, render an icon instead of plain text so the cap reads at\r\n// a glance. Anything else falls through to text rendering with extra\r\n// horizontal padding so long labels like 'ESC' / 'TAB' don't look cramped.\r\nfunction renderKeyContent(keyLabel: string): React.ReactNode {\r\n const normalized = keyLabel.trim().toUpperCase();\r\n if (normalized === \"LMB\") return <MouseIcon side=\"left\" />;\r\n if (normalized === \"RMB\") return <MouseIcon side=\"right\" />;\r\n if (normalized === \"BACKSPACE\" || keyLabel === \"⌫\") return <BackspaceIcon />;\r\n return (\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.2vh\",\r\n color: \"rgba(255,255,255,0.85)\",\r\n lineHeight: 1,\r\n padding: \"0 0.3vh\",\r\n }}\r\n >\r\n {keyLabel}\r\n </Text>\r\n );\r\n}\r\n\r\nfunction InstructionKeyRow({ keyLabel, action }: { keyLabel: string; action: string }) {\r\n // Special icon labels read better on a slightly wider cap (the mouse\r\n // glyph is wider than a letter). Text-only caps stay square.\r\n const normalized = keyLabel.trim().toUpperCase();\r\n const isIconKey = normalized === \"LMB\" || normalized === \"RMB\"\r\n || normalized === \"BACKSPACE\" || keyLabel === \"⌫\";\r\n const minWidth = isIconKey ? \"2.6vh\" : \"2.4vh\";\r\n\r\n return (\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <div\r\n style={{\r\n minWidth,\r\n height: \"2.4vh\",\r\n padding: \"0 0.4vh\",\r\n borderRadius: \"0.3vh\",\r\n border: \"0.15vh solid rgba(255,255,255,0.35)\",\r\n background: \"rgba(255,255,255,0.06)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n opacity: 0.85,\r\n filter: \"drop-shadow(0 0 0.3vh rgba(0,0,0,0.5))\",\r\n flexShrink: 0,\r\n boxSizing: \"border-box\",\r\n }}\r\n >\r\n {renderKeyContent(keyLabel)}\r\n </div>\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.05vh\",\r\n color: \"rgba(255,255,255,0.45)\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n }}\r\n >\r\n {action}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n// Inline mouse-body SVG with one half highlighted. Matches the visual\r\n// convention of left/right click hints used elsewhere in the dirk UIs\r\n// (e.g. dirk_fishing's DUI rod indicator).\r\nfunction MouseIcon({ side }: { side: \"left\" | \"right\" }) {\r\n const stroke = \"rgba(255,255,255,0.85)\";\r\n const fillActive = \"rgba(255,255,255,0.85)\";\r\n return (\r\n <svg viewBox=\"0 0 16 22\" width=\"1.4vh\" height=\"1.9vh\" fill=\"none\" stroke={stroke} strokeWidth=\"1.4\" strokeLinejoin=\"round\">\r\n {/* Mouse body */}\r\n <rect x=\"1\" y=\"1\" width=\"14\" height=\"20\" rx=\"6\" />\r\n {/* Centre divider */}\r\n <line x1=\"8\" y1=\"1\" x2=\"8\" y2=\"9\" />\r\n {/* Highlighted button — fill the left or right top quadrant */}\r\n <path\r\n d={\r\n side === \"left\"\r\n ? \"M 7.4 1.6 L 2 1.6 A 5 5 0 0 0 1 6 L 1 9 L 7.4 9 Z\"\r\n : \"M 8.6 1.6 L 14 1.6 A 5 5 0 0 1 15 6 L 15 9 L 8.6 9 Z\"\r\n }\r\n fill={fillActive}\r\n stroke=\"none\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction BackspaceIcon() {\r\n // Backspace key shape (chevron pointing left into a tag). Matches the\r\n // shape of a physical Backspace key on a US layout. Plain SVG so it\r\n // ships without an asset file.\r\n const stroke = \"rgba(255,255,255,0.85)\";\r\n return (\r\n <svg viewBox=\"0 0 22 16\" width=\"1.7vh\" height=\"1.3vh\" fill=\"none\" stroke={stroke} strokeWidth=\"1.4\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\r\n <path d=\"M 21 2 L 8 2 L 2 8 L 8 14 L 21 14 Z\" />\r\n <line x1=\"11\" y1=\"6\" x2=\"16\" y2=\"11\" />\r\n <line x1=\"16\" y1=\"6\" x2=\"11\" y2=\"11\" />\r\n </svg>\r\n );\r\n}\r\n","// Drop-in Set + Goto button pair for \"pick a world coord\" admin fields.\r\n//\r\n// Replaces the old immediate-grab WorldPositionSetButton / WorldPositionGotoButton\r\n// from PositionPicker.tsx with a walk-and-pick flow:\r\n//\r\n// 1. Set click → fetchNui('ADMIN_TOOL_BEGIN', { id: 'capturePosition' })\r\n// → dirk_lib's modules/scriptConfig/admin/tools/position.lua handler\r\n// 2. Lua releases NUI focus, polls E (set) / Backspace (cancel)\r\n// 3. On confirm → SendNUIMessage({ action: 'capturePosition_RESULT', data: {x,y,z,w} })\r\n// On cancel → SendNUIMessage({ action: 'capturePosition_CANCELLED' })\r\n// 4. AdminOverlays routes the message into useAdminToolStore.resolveActive /\r\n// cancelActive, which resolves the start() Promise.\r\n// 5. onChange fires with the captured value, admin re-shows automatically\r\n// via the body-attribute trick in InstructionPanel.\r\n//\r\n// Goto is straightforward — one-way fetchNui to the gotoCoord NUI callback.\r\nimport { alpha, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Crosshair, MapPin } from \"lucide-react\";\r\nimport { fetchNui } from \"../../utils/fetchNui\";\r\nimport { locale } from \"../../utils/locales\";\r\nimport type { Vector4Value } from \"../PositionPicker\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\nexport type WorldPositionPickerSlot = {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n /** Show only the Set button (no Goto). Defaults to false. */\r\n setOnly?: boolean;\r\n /** Show only the Goto button (no Set). Defaults to false. */\r\n gotoOnly?: boolean;\r\n};\r\n\r\nexport function WorldPositionPicker({ value, onChange, compact, setOnly, gotoOnly }: WorldPositionPickerSlot) {\r\n return (\r\n <>\r\n {!gotoOnly && <WorldPositionSetButton value={value} onChange={onChange} compact={compact} />}\r\n {!setOnly && <WorldPositionGotoButton value={value} compact={compact} />}\r\n </>\r\n );\r\n}\r\n\r\n// Internal: subcomponent of WorldPositionPicker. Not exported — consumers\r\n// use <WorldPositionPicker> which renders both Set and Goto together. The\r\n// legacy named exports of the same shape live in PositionPicker.tsx for\r\n// backwards-compat with the immediate-grab pattern; that file is being\r\n// phased out as consumers migrate to <WorldPositionPicker>.\r\nfunction WorldPositionSetButton({\r\n value,\r\n onChange,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const begin = useAdminToolStore((s) => s.begin);\r\n void value;\r\n\r\n const onClick = async () => {\r\n // Order matters: register the resolver in the store FIRST so it's ready\r\n // by the time Lua fires back the result, THEN kick off the Lua flow,\r\n // THEN await the eventual resolution.\r\n const instructions = {\r\n title: locale(\"PickPositionTitle\") || \"Pick Position\",\r\n hint: locale(\"PickPositionHint\") || \"Walk to where you want this set\",\r\n keys: [\r\n { key: \"E\", action: locale(\"Set\") || \"Set\" },\r\n { key: \"⌫\", action: locale(\"Cancel\") || \"Cancel\" },\r\n ],\r\n };\r\n const pendingResult = begin<Vector4Value>({ id: \"capturePosition\", ...instructions });\r\n // `instructions` goes in the fetchNui payload so the Lua handler can\r\n // drive lib.showInstructions itself — the bottom-right panel renders\r\n // from dirk_lib's NUI, not from React.\r\n fetchNui(\"ADMIN_TOOL_BEGIN\", { id: \"capturePosition\", instructions }).catch(() => {\r\n // If the NUI bridge fails, cancel the store entry so we don't leak.\r\n useAdminToolStore.getState().cancelActive();\r\n });\r\n const result = await pendingResult;\r\n if (result) onChange(result);\r\n };\r\n\r\n return (\r\n <Tooltip label={locale(\"SetWorldTooltip\")} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <Crosshair size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {locale(\"Set\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\nfunction WorldPositionGotoButton({\r\n value,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const onClick = () => {\r\n fetchNui(\"ADMIN_TOOL_INVOKE\", { id: \"gotoCoord\", value }).catch(() => {});\r\n };\r\n return (\r\n <Tooltip label={locale(\"GotoWorldTooltip\")} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <MapPin size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {locale(\"Goto\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n","// In-world door picker — React side.\r\n//\r\n// Mirrors the WorldPositionPicker pattern: tell the AdminTools store to\r\n// begin a tool flow (renders InstructionPanel bottom-right with title +\r\n// key hints), kick the Lua admin-tool handler over fetchNui, await the\r\n// SendNUIMessage result/cancel that AdminOverlays routes back via the\r\n// store.\r\n//\r\n// Wired to dirk_lib's modules/scriptConfig/admin/tools/door.lua which\r\n// drives lib.doorlock.pick — a multi-pick flow where the admin builds a\r\n// GROUP of 1-2 doors (single door / double-door pair) and confirms it\r\n// as one logical \"door entry\". Result shape mirrors that:\r\n//\r\n// {\r\n// doors: [\r\n// { model, coords, heading, isDoor },\r\n// { model, coords, heading, isDoor }, // present only on doubles\r\n// ]\r\n// }\r\n//\r\n// Usage:\r\n// const pickDoor = usePickDoor();\r\n// const picked = await pickDoor();\r\n// if (picked) console.log(picked.doors.length, 'doors picked');\r\n//\r\n// Drop-in button (matches WorldPositionPicker styling):\r\n// <DoorPickerButton onPick={picked => addLabDoor(picked.doors)} />\r\n\r\nimport { alpha, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { DoorOpen } from \"lucide-react\";\r\nimport { fetchNui } from \"../../utils/fetchNui\";\r\nimport { locale } from \"../../utils/locales\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\n/** A single picked door panel — one entity the admin LMB'd in-world. */\r\nexport type PickedDoor = {\r\n /** Door entity model hash. */\r\n model: number;\r\n /** Resolved model name (e.g. 'v_ilev_meth_loaddoor'). nil when the\r\n * hash isn't in dirk_lib's lookup table (custom prop, MLO asset). */\r\n modelName?: string | null;\r\n /** World coords of the door entity, snapshotted at pick time. */\r\n coords: { x: number; y: number; z: number };\r\n /** Door entity heading in degrees. */\r\n heading: number;\r\n /** True when IsEntityADoor() flagged the entity as a real door (vs a\r\n * prop the admin happened to aim at). Informational — pickers accept\r\n * any entity. */\r\n isDoor?: boolean;\r\n};\r\n\r\n/**\r\n * A confirmed pick from the multi-pick door tool. `doors` is 1-2 entries:\r\n * length 1 = single door, length 2 = double-door pair. Maps cleanly onto\r\n * ox_doorlock's single-door vs double-door spec.\r\n */\r\nexport type PickedDoorGroup = {\r\n doors: PickedDoor[];\r\n};\r\n\r\n/**\r\n * Returns a function that triggers the in-world door picker. Renders the\r\n * standard InstructionPanel while the player is aiming. Resolves with\r\n * `null` on cancel or backend failure.\r\n */\r\nexport function usePickDoor(): () => Promise<PickedDoorGroup | null> {\r\n const begin = useAdminToolStore((s) => s.begin);\r\n return async () => {\r\n // Order matters: register the resolver in the store FIRST so it's\r\n // primed by the time Lua fires the result, THEN kick the Lua flow.\r\n const pending = begin<PickedDoorGroup>({\r\n id: \"pickDoor\",\r\n title: locale(\"PickDoorTitle\"),\r\n hint: locale(\"PickDoorHint\"),\r\n keys: [\r\n { key: \"LMB\", action: locale(\"Toggle\") },\r\n { key: \"E\", action: locale(\"Confirm\") },\r\n { key: \"BACKSPACE\", action: locale(\"Cancel\") },\r\n ],\r\n });\r\n fetchNui(\"ADMIN_TOOL_BEGIN\", { id: \"pickDoor\" }).catch(() => {\r\n useAdminToolStore.getState().cancelActive();\r\n });\r\n return await pending;\r\n };\r\n}\r\n\r\n/**\r\n * Drop-in button — same styling as WorldPositionSetButton. Triggers the\r\n * picker on click and calls `onPick` with the result (or never fires on\r\n * cancel).\r\n */\r\nexport function DoorPickerButton({\r\n onPick,\r\n compact,\r\n label,\r\n tooltip,\r\n}: {\r\n onPick: (picked: PickedDoorGroup) => void;\r\n compact?: boolean;\r\n /** Override the button label. Defaults to locale(\"PickDoor\"). */\r\n label?: string;\r\n /** Override the tooltip. Defaults to locale(\"PickDoorTooltip\"). */\r\n tooltip?: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const pickDoor = usePickDoor();\r\n\r\n const onClick = async () => {\r\n const picked = await pickDoor();\r\n if (picked && picked.doors.length > 0) onPick(picked);\r\n };\r\n\r\n return (\r\n <Tooltip\r\n label={tooltip ?? locale(\"PickDoorTooltip\")}\r\n position=\"top\"\r\n withArrow\r\n withinPortal\r\n zIndex={2000}\r\n >\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <DoorOpen size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {label ?? locale(\"PickDoor\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n","// Shared GTA-V Leaflet map. Originally lived in dirk_fishing's Book/Map/\r\n// MapHandler.tsx — lifted here so every consumer that wants an admin or\r\n// guidebook map (druglabsv2 lab placement, fishing guidebook, future\r\n// scripts) renders the same tile layer + zoom + bounds without copying\r\n// 100 lines per repo.\r\n//\r\n// Use:\r\n// <Map initialCenter={gameToMap(myPos.x, myPos.y)}>\r\n// <ZoomControls/>\r\n// {markers}\r\n// </Map>\r\n//\r\n// Pair with <BlipMarker> for the standard GTA blip-as-marker. Custom\r\n// markers stay possible via @adamscybot/react-leaflet-component-marker's\r\n// <Marker icon={<jsx/>} /> pattern; this file only owns the container +\r\n// tile layer + zoom widget.\r\nimport { alpha, useMantineTheme } from \"@mantine/core\";\r\nimport { CRS, latLng, latLngBounds, Map as LeafletMapType, tileLayer, TileLayer } from \"leaflet\";\r\nimport \"leaflet/dist/leaflet.css\";\r\nimport { Minus, Plus } from \"lucide-react\";\r\nimport { memo, ReactNode, useEffect, useRef } from \"react\";\r\nimport { MapContainer, useMap } from \"react-leaflet\";\r\nimport { motion } from \"framer-motion\";\r\nimport { gameToMap } from \"../../utils/map\";\r\n\r\nexport type MapStyle = \"game\" | \"render\" | \"print\";\r\n\r\nexport type MapProps = {\r\n children?: ReactNode;\r\n initialZoom?: number;\r\n initialCenter?: [number, number];\r\n mapStyle?: MapStyle;\r\n className?: string;\r\n};\r\n\r\nconst MapImpl = memo(({\r\n children,\r\n initialZoom = 2.0,\r\n initialCenter = gameToMap(0, 0),\r\n mapStyle = \"game\",\r\n}: MapProps) => {\r\n const mapRef = useRef<LeafletMapType | null>(null);\r\n\r\n return (\r\n <MapContainer\r\n maxBoundsViscosity={1.0}\r\n preferCanvas={true}\r\n zoom={Math.round(initialZoom)}\r\n zoomSnap={1}\r\n zoomDelta={1}\r\n zoomControl={false}\r\n crs={CRS.Simple}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n overflow: 'hidden',\r\n outline: 'none !important',\r\n border: 'none !important',\r\n boxShadow: 'none !important',\r\n backgroundColor: '#384950',\r\n }}\r\n center={initialCenter}\r\n attributionControl={false}\r\n doubleClickZoom={false}\r\n inertia={false}\r\n zoomAnimation={false}\r\n ref={mapRef}\r\n maxBounds={[[-250, -250], [250, 250]]}\r\n >\r\n <MapLayer mapLayer={mapStyle} />\r\n {children}\r\n </MapContainer>\r\n );\r\n});\r\nMapImpl.displayName = 'DirkMap';\r\n\r\nexport const Map = MapImpl;\r\n\r\n// ── Tile layer ──────────────────────────────────────────────────────────────\r\n// Pulls Rockstar's hosted GTA-V tile pyramid. `game` is the standard\r\n// in-game map, `render` is the higher-detail satellite-style, `print` is\r\n// the cartographic/printable variant.\r\n\r\ntype MapLayerProps = {\r\n mapLayer: MapStyle;\r\n};\r\n\r\nexport const MapLayer = ({ mapLayer }: MapLayerProps) => {\r\n const map = useMap();\r\n const layerRef = useRef<TileLayer | null>(null);\r\n\r\n useEffect(() => {\r\n if (layerRef.current) {\r\n map.removeLayer(layerRef.current);\r\n }\r\n const layer = tileLayer(\r\n `https://s.rsg.sc/sc/images/games/GTAV/map/${mapLayer}/{z}/{x}/{y}.jpg`,\r\n {\r\n maxZoom: 6,\r\n minZoom: 4,\r\n bounds: latLngBounds(latLng(0.0, 128.0), latLng(-192.0, 0.0)),\r\n tileSize: 256,\r\n updateWhenZooming: false,\r\n keepBuffer: 2,\r\n opacity: 0.75,\r\n }\r\n );\r\n layer.addTo(map);\r\n layerRef.current = layer;\r\n\r\n return () => {\r\n if (layerRef.current) {\r\n map.removeLayer(layerRef.current);\r\n }\r\n };\r\n }, [mapLayer, map]);\r\n\r\n return null;\r\n};\r\n\r\n// ── ZoomControls ────────────────────────────────────────────────────────────\r\n// Generic + / − widget pinned top-right. Must be rendered inside <Map>.\r\n\r\nexport function ZoomControls() {\r\n const theme = useMantineTheme();\r\n const map = useMap();\r\n const buttons = [\r\n { Icon: Plus, fn: () => map.zoomIn() },\r\n { Icon: Minus, fn: () => map.zoomOut() },\r\n ];\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n right: '2vh',\r\n top: '2vh',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 999999,\r\n boxShadow: `0 0 1vh ${alpha(theme.colors.dark[9], 0.85)}`,\r\n background: alpha(theme.colors.dark[9], 0.85),\r\n borderRadius: theme.radius.xs,\r\n }}\r\n initial={{ opacity: 0, y: -20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -20 }}\r\n >\r\n {buttons.map(({ Icon, fn }, i) => (\r\n <motion.div\r\n key={i}\r\n whileHover={{ scale: 1.1, filter: 'brightness(1.5)' }}\r\n onClick={fn}\r\n style={{\r\n padding: theme.spacing.xs,\r\n cursor: 'pointer',\r\n display: 'flex',\r\n }}\r\n >\r\n <Icon size={34} color={theme.colors.gray[5]} />\r\n </motion.div>\r\n ))}\r\n </motion.div>\r\n );\r\n}\r\n","// Renders a GTA-V blip on a Leaflet map at the given world coords.\r\n// Uses the same sprite/color id system the game uses, looked up against\r\n// the BLIP_ENTRIES / BLIP_COLORS tables in BlipSelect.tsx so the visual\r\n// matches whatever the admin picked in <BlipIconSelect> / <BlipColorSelect>.\r\n//\r\n// The colour comes from the GTA blip palette and is applied as a tinted\r\n// background behind the white sprite, mimicking the in-game look. For\r\n// labs/shops/etc that have no blip configured, pass `fallbackSprite` and\r\n// `fallbackColor` and the marker still renders with a neutral look.\r\n//\r\n// Use:\r\n// <BlipMarker\r\n// position={{ x: lab.door.x, y: lab.door.y }}\r\n// sprite={lab.blip?.sprite}\r\n// color={lab.blip?.color}\r\n// onClick={() => openEdit(lab.name)}\r\n// selected={selectedId === lab.name}\r\n// />\r\nimport { Marker } from \"@adamscybot/react-leaflet-component-marker\";\r\nimport { alpha } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { useMemo, useState } from \"react\";\r\nimport { gameToMap } from \"../../utils/map\";\r\nimport { blipUrlForSprite, getBlipColor } from \"../BlipSelect\";\r\n\r\nexport type BlipMarkerProps = {\r\n /** Game-world coordinates. z is ignored; map is 2D. */\r\n position: { x: number; y: number };\r\n /** Blip sprite id (0..830ish) — see BLIP_ENTRIES. */\r\n sprite?: number | null;\r\n /** Blip color id (0..85) — see BLIP_COLORS. */\r\n color?: number | null;\r\n /** Display scale multiplier. Default 1.0 → ~3vh visual size. */\r\n scale?: number;\r\n /** Click handler. Fires `e.originalEvent.stopPropagation()` before yours. */\r\n onClick?: () => void;\r\n /** When true, marker gets a brighter glow + bigger size to indicate\r\n * this is the currently-selected entry. */\r\n selected?: boolean;\r\n /** When true, marker is rendered at low opacity and clicks no-op —\r\n * for \"this entry is broken / unavailable\" states. */\r\n disabled?: boolean;\r\n /** Sprite id used when `sprite` is null/missing. Defaults to 162\r\n * (radar_poi — neutral grey dot). */\r\n fallbackSprite?: number;\r\n /** Color id used when `color` is null/missing. Defaults to 0 (white). */\r\n fallbackColor?: number;\r\n};\r\n\r\nconst DEFAULT_SPRITE = 162; // radar_poi\r\nconst DEFAULT_COLOR = 5; // yellow — readable on the GTA map (color 0/white blends in)\r\n\r\nexport function BlipMarker({\r\n position,\r\n sprite,\r\n color,\r\n scale = 1,\r\n onClick,\r\n selected,\r\n disabled,\r\n fallbackSprite = DEFAULT_SPRITE,\r\n fallbackColor = DEFAULT_COLOR,\r\n}: BlipMarkerProps) {\r\n const [hovered, setHovered] = useState(false);\r\n\r\n const mapCoords = useMemo(() => gameToMap(position.x, position.y), [position.x, position.y]);\r\n\r\n const effectiveSprite = sprite ?? fallbackSprite;\r\n const effectiveColor = color ?? fallbackColor;\r\n const url = blipUrlForSprite(effectiveSprite);\r\n const colorHex = getBlipColor(effectiveColor)?.hex ?? \"#ffffff\";\r\n\r\n const handleClick = (e: any) => {\r\n e.originalEvent?.stopPropagation?.();\r\n if (disabled) return;\r\n onClick?.();\r\n };\r\n\r\n // Default ~1.8vh — Rockstar's sprite pngs are tiny (32px-ish), going much\r\n // bigger amplifies the pixelation. Scale prop lets consumers nudge up\r\n // for high-importance markers.\r\n const baseSize = 1.8 * scale;\r\n const size = `${baseSize}vh`;\r\n const ringSize = `${baseSize * 1.6}vh`;\r\n\r\n return (\r\n <Marker\r\n position={mapCoords}\r\n eventHandlers={onClick ? { click: handleClick } : undefined}\r\n icon={\r\n <motion.div\r\n onHoverStart={() => setHovered(true)}\r\n onHoverEnd={() => setHovered(false)}\r\n style={{\r\n position: \"relative\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n cursor: disabled ? \"not-allowed\" : onClick ? \"pointer\" : \"default\",\r\n opacity: disabled ? 0.35 : 1,\r\n width: size,\r\n height: size,\r\n }}\r\n animate={{ scale: hovered && !disabled ? 1.2 : selected ? 1.15 : 1 }}\r\n transition={{ duration: 0.15, ease: \"easeOut\" }}\r\n >\r\n {/* Selection / hover ring (no solid disk behind the sprite — the\r\n old version's white-tinted disk looked bad over the map). */}\r\n {(selected || hovered) && !disabled && (\r\n <motion.div\r\n style={{\r\n position: \"absolute\",\r\n width: ringSize,\r\n height: ringSize,\r\n borderRadius: \"50%\",\r\n border: `0.18vh solid ${alpha(colorHex, 0.85)}`,\r\n boxShadow: `0 0 1vh ${alpha(colorHex, 0.55)}`,\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n />\r\n )}\r\n\r\n {/* Tinted sprite via CSS mask. Rockstar's blip pngs are white\r\n silhouettes — using mask-image + background-color paints them\r\n in the blip's GTA color cleanly, no halo, no double-render.\r\n The stacked 1px drop-shadows in 4 cardinal directions fake a\r\n uniform 1px black outline (CSS has no native stroke for masked\r\n elements). Final big drop-shadow adds the soft halo for depth. */}\r\n {url && (\r\n <div\r\n style={{\r\n width: size,\r\n height: size,\r\n backgroundColor: colorHex,\r\n WebkitMaskImage: `url(${url})`,\r\n maskImage: `url(${url})`,\r\n WebkitMaskRepeat: \"no-repeat\",\r\n maskRepeat: \"no-repeat\",\r\n WebkitMaskPosition: \"center\",\r\n maskPosition: \"center\",\r\n WebkitMaskSize: \"contain\",\r\n maskSize: \"contain\",\r\n filter: [\r\n \"drop-shadow(0.12vh 0 0 #000)\",\r\n \"drop-shadow(-0.12vh 0 0 #000)\",\r\n \"drop-shadow(0 0.12vh 0 #000)\",\r\n \"drop-shadow(0 -0.12vh 0 #000)\",\r\n `drop-shadow(0 0 0.4vh ${alpha(\"#000\", 0.7)})`,\r\n ].join(\" \"),\r\n pointerEvents: \"none\",\r\n userSelect: \"none\",\r\n }}\r\n />\r\n )}\r\n </motion.div>\r\n }\r\n />\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/BlipSelect.tsx","../../src/utils/colorWithAlpha.ts","../../src/utils/misc.ts","../../src/types/theme.ts","../../src/utils/useSettings.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/utils/map.ts","../../src/utils/useItems.ts","../../src/utils/useFrameworkGroups.ts","../../src/utils/inputMapper.ts","../../src/utils/gtaControls.ts","../../src/components/BorderedIcon.tsx","../../src/components/Motion.tsx","../../src/components/Counter.tsx","../../src/components/FloatingParticles.tsx","../../src/components/InfoBox.tsx","../../src/components/InputContainer.tsx","../../src/hooks/useAudio/store.ts","../../src/components/SegmentedControl.tsx","../../src/components/Navigation.tsx","../../src/components/SegmentedProgress.tsx","../../src/components/Title.tsx","../../src/components/LevelBanner.tsx","../../src/components/LevelPanel.tsx","../../src/components/Modal.tsx","../../src/components/PromptModal.tsx","../../src/components/ModalStore.tsx","../../src/components/ConfirmModal.tsx","../../src/components/MissingItemsBanner.tsx","../../src/hooks/useForm.tsx","../../src/hooks/useAdminState.ts","../../src/hooks/useScriptConfig.ts","../../src/components/AdminTools/adminToolStore.ts","../../src/providers/DirkProvider.tsx","../../src/components/ConfigPanel.tsx","../../src/components/SelectItem.tsx","../../src/components/PositionPicker.tsx","../../src/components/GroupSelect.tsx","../../src/components/FiveMKeyBindInput.tsx","../../src/components/ControlSelect.tsx","../../src/components/AsyncSaveButton.tsx","../../src/components/AdminPageTitle.tsx","../../src/components/SwitchPanel.tsx","../../src/components/TestBed/main.tsx","../../src/components/ThemeOverrideSection.tsx","../../src/hooks/usePlayers.ts","../../src/components/AdminTools/PlayerSelect.tsx","../../src/components/AccessOverrideSection.tsx","../../src/utils/gtaAnimPostFx.ts","../../src/components/AnimPostFxSelect.tsx","../../src/utils/gtaScenarios.ts","../../src/components/ScenarioSelect.tsx","../../src/components/DiscordRoleSelect.tsx","../../src/components/AccountSelect.tsx","../../src/components/InstructionPanel.tsx","../../src/components/AdminTools/WorldPositionPicker.tsx","../../src/components/AdminTools/DoorPicker.tsx","../../src/components/Map/Map.tsx","../../src/components/Map/BlipMarker.tsx"],"names":["jsxs","Group","jsx","Image","Text","Box","Select","alpha","z","create","useMantineTheme","Flex","FontAwesomeIcon","motion","AnimatePresence","useRef","useState","useMotionValue","useEffect","Tooltip","Info","clickSoundUrl","hoverSoundUrl","createContext","useContext","useStore","store","Progress","RingProgress","Portal","X","Button","AlertTriangle","TextInput","t","Trash2","useCallback","RefreshCw","ChevronDown","Check","Copy","createStore","useMemo","library","fas","far","fab","QueryClient","Code2","JsonInput","useInfiniteQuery","History","Search","Filter","User","Loader","Fragment","notifications","ArrowLeft","Undo2","Redo2","SaveIcon","XCircle","RotateCcw","MapPin","Crosshair","EyeOff","Eye","NumberInput","MultiSelect","Switch","FlaskConical","ActionIcon","ChevronUp","Stack","generateColors","Palette","ColorInput","Popover","useQuery","keepPreviousData","ShieldCheck","Users","Plus","UserRound","buildGroupedData","createPortal","WorldPositionSetButton","WorldPositionGotoButton","DoorOpen","memo","MapContainer","CRS","Map","useMap","tileLayer","latLngBounds","latLng","Minus","Marker"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,YAAA,GAA2C;AAAA,EAC/C,CAAC,CAAA,EAAE,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACpG,CAAC,CAAA,EAAE,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3G,CAAC,CAAA,EAAE,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC9F,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5F,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACnG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACvF,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACvF,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC7F,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChG,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC3F,CAAC,EAAA,EAAG,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpG,CAAC,EAAA,EAAG,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,KAAK,CAAA;AAAA,EAC9E,CAAC,EAAA,EAAG,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACzF,CAAC,EAAA,EAAG,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC/F,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAChG,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtG,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpG,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClG,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACrG,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACnG,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAC9F,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC5F,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC/F,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,UAAA,EAAW,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EACpD,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACxF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC1F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACxD,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EACpF,CAAC,GAAA,EAAI,cAAA,EAAe,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACvD,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACvE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAClF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC3D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAC9E,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EACpD,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACtF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,8BAAA,EAA+B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,eAAA,EAAgB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,YAAA,EAAa,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACjE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC1E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC3E,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EACpE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAC9D,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACxE,CAAC,GAAA,EAAI,sBAAA,EAAuB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iCAAA,EAAkC,KAAK,CAAA;AAAA,EACzF,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EACzE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACtE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,+BAAA,EAAgC,KAAK,CAAA;AAAA,EACjF,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EACnE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAC7D,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,qBAAA,EAAsB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,6BAAA,EAA8B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC/E,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,4BAAA,EAA6B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EACrE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAC7E,CAAC,GAAA,EAAI,yBAAA,EAA0B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EACnF,CAAC,GAAA,EAAI,mCAAA,EAAoC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAC5E,CAAC,GAAA,EAAI,aAAA,EAAc,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,0BAAA,EAA2B,KAAK,CAAA;AAAA,EAC/D,CAAC,GAAA,EAAI,2BAAA,EAA4B,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kCAAA,EAAmC,KAAK,CAAA;AAAA,EACrF,CAAC,GAAA,EAAI,mBAAA,EAAoB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAClE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,kBAAA,EAAmB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,gCAAA,EAAiC,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,wBAAA,EAAyB,KAAK,CAAA;AAAA,EAChF,CAAC,GAAA,EAAI,iBAAA,EAAkB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,gBAAA,EAAiB,KAAK,CAAA;AAAA,EAC5D,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,WAAA,EAAY,KAAK,CAAA;AAAA,EAC1D,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAAE,CAAC,GAAA,EAAI,oBAAA,EAAqB,KAAK,CAAA;AAAA,EAChE,CAAC,GAAA,EAAI,uBAAA,EAAwB,KAAK;AACpC,CAAA;AAEA,IAAM,SAAA,GAAY,+BAAA;AAEX,SAAS,OAAA,CAAQ,MAAc,GAAA,EAAa;AACjD,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,IAAI,GAAG,CAAA,CAAA;AACnC;AAIA,IAAM,WAAA,GAA0C;AAAA,EAC9C,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,KAAA,EAAM,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9D,CAAC,CAAA,EAAE,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,QAAA,EAAS,SAAS,CAAA;AAAA,EAChE,CAAC,CAAA,EAAE,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,QAAA,EAAS,SAAS,CAAA;AAAA,EAAE,CAAC,CAAA,EAAE,MAAA,EAAO,SAAS,CAAA;AAAA,EACpE,CAAC,CAAA,EAAE,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,QAAA,EAAS,SAAS,CAAA;AAAA,EAC1E,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAClF,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EACnF,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,eAAA,EAAgB,SAAS,CAAA;AAAA,EACxF,CAAC,EAAA,EAAG,eAAA,EAAgB,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EACrF,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAClF,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EACnF,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAClE,CAAC,EAAA,EAAG,YAAA,EAAa,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,WAAA,EAAY,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,UAAA,EAAW,SAAS,CAAA;AAAA,EAC/E,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,aAAA,EAAc,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,cAAA,EAAe,SAAS,CAAA;AAAA,EAC/E,CAAC,EAAA,EAAG,OAAA,EAAQ,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,MAAA,EAAO,SAAS,CAAA;AAAA,EAAE,CAAC,EAAA,EAAG,QAAA,EAAS,SAAS;AACrE,CAAA;AAIA,IAAM,iBAAiC,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,MAAO;AAAA,EACvE,KAAA,EAAO,OAAO,EAAE,CAAA;AAAA,EAChB,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA,QAAA,EAAM,IAAI,CAAA;AACxB,CAAA,CAAE,CAAA;AAEF,IAAM,kBAAkC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,KAAK,CAAA,MAAO;AAAA,EACxE,KAAA,EAAO,OAAO,EAAE,CAAA;AAAA,EAChB,KAAA,EAAO,CAAA,EAAG,EAAE,CAAA,QAAA,EAAM,KAAK,CAAA;AACzB,CAAA,CAAE,CAAA;AAGF,IAAM,YAAA,GAAe,IAAI,GAAA,CAAI,YAAA,CAAa,IAAI,CAAC,CAAC,IAAI,IAAA,EAAM,GAAG,MAAM,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,IAAI,IAAA,EAAM,GAAA,EAAK,CAAC,CAAC,CAAA;AACnG,IAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAC,IAAI,KAAA,EAAO,GAAG,MAAM,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,IAAI,KAAA,EAAO,GAAA,EAAK,CAAC,CAAC,CAAA;AAO7F,SAAS,aAAa,QAAA,EAA8C;AACzE,EAAA,IAAI,QAAA,IAAY,MAAM,OAAO,MAAA;AAC7B,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AAC1C;AAGO,SAAS,aAAa,OAAA,EAA6C;AACxE,EAAA,IAAI,OAAA,IAAW,MAAM,OAAO,MAAA;AAC5B,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA;AACzC;AAGO,SAAS,iBAAiB,QAAA,EAA6D;AAC5F,EAAA,MAAM,KAAA,GAAQ,aAAa,QAAQ,CAAA;AACnC,EAAA,OAAO,QAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAClD;AAIA,IAAM,gBAAA,GAAgD,CAAC,EAAE,MAAA,EAAO,KAAM;AACpE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAC1B,EAAA,uBACEA,eAAA,CAACC,UAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,MAAK,QAAA,EACnB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,MAAM,GAAG,CAAA;AAAA,QAClC,KAAK,KAAA,CAAM,IAAA;AAAA,QACX,CAAA,EAAG,EAAA;AAAA,QAAI,CAAA,EAAG,EAAA;AAAA,QACV,GAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,EAAE,cAAA,EAAgB,WAAA;AAAY;AAAA,KACvC;AAAA,oBACAH,eAAA,CAACI,SAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,UAAQ,IAAA,EACrB,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,EAAA;AAAA,MAAG,UAAA;AAAA,MAAI,KAAA,CAAM;AAAA,KAAA,EACtB;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAM,iBAAA,GAAiD,CAAC,EAAE,MAAA,EAAO,KAAM;AACrE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAC1B,EAAA,uBACEJ,eAAA,CAACC,UAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EAAK,MAAK,QAAA,EACnB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACG,QAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAG,EAAA;AAAA,QAAI,CAAA,EAAG,EAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,CAAA;AAAA,UACd,iBAAiB,KAAA,CAAM,GAAA;AAAA,UACvB,MAAA,EAAQ,kCAAA;AAAA,UACR,UAAA,EAAY;AAAA;AACd;AAAA,KACF;AAAA,oBACAL,eAAA,CAACI,SAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,UAAQ,IAAA,EACrB,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,EAAA;AAAA,MAAG,UAAA;AAAA,MAAI,KAAA,CAAM;AAAA,KAAA,EACtB;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AASO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,aAAa,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAAwB;AAClH,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,GAAO,YAAA,CAAa,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,MAAA;AAEhE,EAAA,uBACEF,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,UAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,YAAA,EAAc,gBAAA;AAAA,MACd,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,YAAA;AAAA,MACpB,aACE,KAAA,mBACEJ,cAAA;AAAA,QAACC,UAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,MAAM,GAAG,CAAA;AAAA,UAClC,KAAK,KAAA,CAAM,IAAA;AAAA,UACX,CAAA,EAAG,EAAA;AAAA,UAAI,CAAA,EAAG,EAAA;AAAA,UACV,GAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,EAAE,cAAA,EAAgB,WAAA;AAAY;AAAA,OACvC,GACE;AAAA;AAAA,GAER;AAEJ;AASO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,cAAc,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAAyB;AACrH,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,GAAO,YAAA,CAAa,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,MAAA;AAEhE,EAAA,uBACED,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,UAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM,eAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,YAAA,EAAc,iBAAA;AAAA,MACd,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,YAAA;AAAA,MACpB,aACE,KAAA,mBACEJ,cAAA;AAAA,QAACG,QAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAG,EAAA;AAAA,UAAI,CAAA,EAAG,EAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,CAAA;AAAA,YACd,iBAAiB,KAAA,CAAM,GAAA;AAAA,YACvB,MAAA,EAAQ,kCAAA;AAAA,YACR,UAAA,EAAY;AAAA;AACd;AAAA,OACF,GACE;AAAA;AAAA,GAER;AAEJ;AAOA,IAAM,iBAAA,GAAwD;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,0CAAA,EAAsC;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,qCAAA,EAAiC;AAAA,EACvD,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,qCAAA,EAAiC;AAAA,EACvD,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,uBAAA,EAAmB;AAAA,EACzC,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,0CAAA,EAAsC;AAAA,EAC5D,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,8CAAA,EAA0C;AAAA,EAChE,EAAE,KAAA,EAAO,GAAA,EAAM,KAAA,EAAO,uBAAA,EAAmB;AAAA,EACzC,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,+CAAA;AACxB,CAAA;AAOO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,GAAQ,gBAAgB,IAAA,GAAO,IAAA,EAAM,GAAG,IAAA,EAAK,EAA2B;AAC3H,EAAA,uBACEH,cAAA;AAAA,IAACI,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,IAAO,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACtD,aAAA,EAAe,KAAA;AAAA,MACf,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAEJ;;;ACjmBA,IAAM,UAAA,GAAa;AAAA,EACjB,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC/B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAChC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACpC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC9B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACrC,eAAe,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACnC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,aAAa,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC7B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC5B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACrC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC9B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAClC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,sBAAsB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/C,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC3B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA;AAAA,EAC7B,kBAAkB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC3C,YAAY,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACjC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,mBAAmB,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,iBAAiB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACzC,cAAc,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,EACjC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACvC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACpC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACjC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA;AACpC,CAAA;AAKO,SAAS,cAAA,CAAe,OAAeC,OAAAA,EAAuB;AACnE,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAE1C,EAAA,IAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC/B,IAAA,MAAM,GAAA,GAAM,WAAW,eAAe,CAAA;AACtC,IAAA,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,IAAA,MAAM,CAAA,GAAK,UAAU,EAAA,GAAM,GAAA;AAC3B,IAAA,MAAM,CAAA,GAAK,UAAU,CAAA,GAAK,GAAA;AAC1B,IAAA,MAAM,IAAI,MAAA,GAAS,GAAA;AACnB,IAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,0CAAA,CAA2C,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,0CAA0C,CAAA;AACrE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,KAAKA,OAAK,CAAA,CAAA,CAAA;AAAA,IAChE;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT;;;AChLO,IAAM,YAAA,GAAe,MAAe,CAAE,MAAA,CAAe,YAAA;ACwBrD,IAAM,eAAA,GAA4B;AAAA,EACvC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAOmCC,MAAE,MAAA,CAAO;AAAA,EAC1C,WAAA,EAAaA,MAAE,OAAA,EAAQ;AAAA,EACvB,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,EACvB,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,EACvB,WAAA,EAAaA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ;AACjC,CAAC;AASM,IAAM,oBAAA,GAA2C;AAAA,EACtD,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa;AACf,CAAA;;;AC3CO,IAAM,WAAA,GAAcC,eAAsB,OAAO;AAAA,EACtD,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,OAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa,EAAA;AAAA,EACb,eAAA,EAAiB,KAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA,CAAE,CAAA;;;ACnBF,eAAsB,QAAA,CACpB,SAAA,EACA,IAAA,EACA,QAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC3B;AAEA,EAAA,IAAI,YAAA,EAAa,IAAK,QAAA,KAAa,MAAA,EAAW,OAAO,QAAA;AACrD,EAAA,IAAI,YAAA,EAAa,IAAK,QAAA,KAAa,MAAA,EAAW;AAC5C,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,yCAAyC,SAAS,CAAA,kEAAA;AAAA,KACpD;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,QAAA,EAAS,CAAE,mBAAA;AAcpD,EAAA,MAAM,qBACJ,OAAQ,MAAA,CAAe,qBAAA,KAA0B,UAAA,IACjD,CAAC,CAAC,oBAAA;AAEJ,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,OAAQ,YAAa,EAAC;AAAA,EACxB;AAEA,EAAA,MAAM,YAAA,GAAgB,MAAA,CAAe,qBAAA,GAChC,MAAA,CAAe,uBAAsB,GACtC,oBAAA;AAEJ,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,CAAA,QAAA,EAAW,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,OAAO,CAAA;AACxE,IAAA,OAAO,MAAM,KAAK,IAAA,EAAK;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAQ,YAAa,EAAC;AAAA,EACxB;AACF;AAgBA,eAAsB,oBAAA,CACpB,SAAA,EACA,IAAA,EACA,QAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAY,SAAA,EAAW,MAAM,QAAQ,CAAA;AAE3D,EAAA,OAAO,OAAA,EAAQ;AACjB;ACrEA,IAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,SAAS,oBAAoB,GAAA,EAAa;AACxC,EAAA,IAAI,CAAC,GAAA,IAAO,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,EAAG;AACtC,EAAA,eAAA,CAAgB,IAAI,GAAG,CAAA;AACvB,EAAA,QAAA,CAAS,yBAAyB,EAAE,GAAA,EAAK,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAC3D;AAQA,IAAM,gBAAA,GAAiC;AAAA,EACrC,eAAA,EAAiB,sOAAA;AAAA,EACjB,kBAAA,EAAoB,SAAA;AAAA,EACpB,sBAAA,EAAwB,aAAA;AAAA,EACxB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,kBAAA,EAAoB,SAAA;AAAA,EACpB,qBAAA,EAAuB,qBAAA;AAAA,EACvB,eAAA,EAAiB,MAAA;AAAA,EACjB,eAAA,EAAiB,MAAA;AAAA,EACjB,eAAA,EAAiB,MAAA;AAAA,EACjB,iBAAA,EAAmB,WAAA;AAAA,EACnB,kBAAA,EAAoB,SAAA;AAAA,EACpB,sBAAA,EAAwB,mBAAA;AAAA,EACxB,qBAAA,EAAuB,0IAAA;AAAA,EACvB,wBAAA,EAA0B,cAAA;AAAA,EAC1B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,4BAAA,EAA8B,6DAAA;AAAA,EAC9B,6BAAA,EAA+B,0DAAA;AAAA,EAC/B,+BAAA,EAAiC,wBAAA;AAAA,EACjC,gCAAA,EAAkC,sBAAA;AAAA,EAClC,qBAAA,EAAuB,aAAA;AAAA,EACvB,iBAAA,EAAmB,QAAA;AAAA,EACnB,gBAAA,EAAkB,OAAA;AAAA,EAClB,wBAAA,EAA0B,gBAAA;AAAA,EAC1B,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,WAAA,GAAcA,cAAAA,CAAyB,CAAC,GAAA,EAAK,GAAA,KAAQ;AAChE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,EAAE,GAAG,gBAAA,EAAiB;AAAA,IAC/B,MAAA,EAAQ,CAAC,GAAA,EAAA,GAAgB,IAAA,KAAoC;AAC3D,MAAA,MAAM,MAAA,GAAS,GAAA,EAAI,CAAE,OAAA,CAAQ,GAAG,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ,mBAAA,CAAoB,GAAG,CAAA;AACpC,MAAA,IAAI,cAAc,MAAA,IAAU,GAAA;AAC5B,MAAA,IAAI,KAAK,MAAA,EAAQ;AAIf,QAAA,WAAA,GAAc,WAAA,CAAY,QAAQ,KAAA,EAAO,MAAM,OAAO,IAAA,CAAK,KAAA,EAAM,IAAK,EAAE,CAAC,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,GACF;AACF,CAAC,CAAA;AAGM,IAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAS,CAAE,MAAA;AAE7C,oBAAA,CAAmC,aAAA,EAAe,MAAS,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC1E,EAAA,WAAA,CAAY,QAAA,CAAS,EAAE,OAAA,EAAS,EAAE,GAAG,gBAAA,EAAkB,GAAG,IAAA,EAAK,EAAG,CAAA;AACpE,CAAC,CAAA,CAAE,MAAM,MAAM;AAAC,CAAC,CAAA;AAIjB,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,KAAA,KAAU;AAC5C,IAAA,MAAM,MAAM,KAAA,CAAM,IAAA;AAClB,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,yBAAA,EAA2B;AACtD,IAAA,IAAI,CAAC,GAAA,CAAI,IAAA,IAAQ,OAAO,GAAA,CAAI,SAAS,QAAA,EAAU;AAK/C,IAAA,IAAI,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AACxC,IAAA,WAAA,CAAY,QAAA,CAAS,EAAE,OAAA,EAAS,EAAE,GAAG,kBAAkB,GAAI,GAAA,CAAI,IAAA,EAAsB,EAAG,CAAA;AAAA,EAC1F,CAAC,CAAA;AACH;;;AC7FO,IAAM,SAAA,GAA8B,CAAC,OAAA,EAAS,KAAK,CAAA;AACnD,IAAM,QAAA,GAAW,KAAA;AAGjB,SAAS,SAAA,CAAU,GAAW,CAAA,EAA6B;AAChE,EAAA,OAAO;AAAA,IACL,SAAA,CAAU,CAAC,CAAA,GAAK,QAAA,GAAW,GAAA,GAAO,CAAA;AAAA;AAAA,IAClC,SAAA,CAAU,CAAC,CAAA,GAAK,QAAA,GAAW,GAAA,GAAO;AAAA;AAAA,GACpC;AACF;ACEO,IAAM,QAAA,GAAWA,cAAAA,CAAuB,OAAO,EAAC,CAAE,CAAA;AAElD,IAAM,YAAA,GAAe,CAAC,gBAAA,GAA6B,EAAC,KAAuB;AAChF,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,gBAAgB,CAAA;AAC3C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvF,CAAA;AAMA,oBAAA,CAAqC,mBAAmB,IAAA,EAAM;AAAA,EAC5D,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,WAAA,EAAY;AAAA,EACzE,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,CAAA,EAAK,KAAA,EAAO,WAAA,EAAY;AAAA,EACzE,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,WAAA;AAC/D,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,YAAA,KAAiB;AACxB,EAAA,IAAI,CAAC,YAAA,EAAc;AACnB,EAAA,QAAA,CAAS,SAAS,YAAY,CAAA;AAChC,CAAC,CAAA,CAAE,MAAM,MAAM;AAAC,CAAC,CAAA;ACKV,IAAM,kBAAA,GAAqBA,eAA6B,OAAO;AAAA,EACpE,MAAM,EAAC;AAAA,EACP,OAAO,EAAC;AAAA,EACR,MAAA,EAAQ;AACV,CAAA,CAAE,CAAA;AAaF,IAAI,wBAAA,GAA2B,KAAA;AACxB,SAAS,qBAAA,GAA8B;AAC5C,EAAA,IAAI,wBAAA,EAA0B;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,QAAA,CAAgC,sBAAA,EAAwB,MAAS,CAAA,CAC9D,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,IAAA,kBAAA,CAAmB,QAAA,CAAS;AAAA,MAC1B,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA,CAAK,OAAO,EAAC;AAAA,MAC/C,KAAA,EAAO,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,GAAI,IAAA,CAAK,QAAQ,EAAC;AAAA,MAClD,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,IAAA,wBAAA,GAA2B,KAAA;AAC3B,IAAA,kBAAA,CAAmB,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EAC9C,CAAC,CAAA;AACL;;;ACpEO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB;AAAA,EACpB,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,UAAA;AAAA,EAC1E,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA,EACxD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC7C,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC7H,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpE,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,SAAA;AAAA,EACnG,UAAA;AAAA,EAAY,KAAA;AAAA,EAAO,UAAA;AAAA,EAAY,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,aAAA;AAAA,EACpD,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,UAAA;AAAA,EAAY,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,OAAA;AAAA,EACrD,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,QAAA;AAAA,EACnC,OAAA;AAAA,EAAS,WAAA;AAAA,EAAa,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAC/F,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,WAAA;AAAA,EAAa,OAAA;AAAA,EAAS,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,YAAA;AAAA,EAAc,OAAA;AAAA,EAAS;AACzF,CAAA;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACxB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,cAAA,EAAgB,gBAAgB,CAAA;AAE1D,IAAM,eAAA,GAAkB;AAAA,EACtB,YAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,eAAA,GAAkB;AAAA,EACtB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB;AAAA,EACpB,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,iBAAA,EAAoB,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,IAAM,oBAAA,GAAuB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,mBAAA,EAAsB,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC/F,IAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5D,EAAA,MAAM,MAAM,CAAA,GAAI,CAAA;AAChB,EAAA,OAAO;AAAA,IACL,UAAU,GAAG,CAAA,GAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,MAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,KAAA,CAAA;AAAA,IACb,UAAU,GAAG,CAAA,KAAA;AAAA,GACf;AACF,CAAC,EAAE,IAAA,EAAK;AAED,IAAM,4BAAA,GAAyD;AAAA,EACpE,oBAAoB,EAAC;AAAA,EACrB,iBAAiB,EAAC;AAAA,EAClB,aAAA,EAAe,CAAC,GAAG,kBAAkB,CAAA;AAAA,EACrC,sBAAA,EAAwB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EAC9C,sBAAA,EAAwB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EAC9C,eAAA,EAAiB,CAAC,GAAG,oBAAoB,CAAA;AAAA,EACzC,cAAA,EAAgB,CAAC,GAAG,kBAAkB,CAAA;AAAA,EACtC,YAAA,EAAc,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACnC,iBAAA,EAAmB,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACxC,QAAA,EAAU,CAAC,GAAG,aAAa,CAAA;AAAA,EAC3B,UAAU,EAAC;AAAA,EACX,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,YAAA,EAAc,CAAC,GAAG,iBAAiB,CAAA;AAAA,EACnC,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,kBAAA,EAAoB,CAAC,GAAG,eAAe,CAAA;AAAA,EACvC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,WAAA,EAAa,CAAC,GAAG,gBAAgB,CAAA;AAAA,EACjC,gBAAA,EAAkB,CAAC,GAAG,eAAe,CAAA;AAAA,EACrC,QAAA,EAAU,CAAC,GAAG,aAAa,CAAA;AAAA,EAC3B,eAAA,EAAiB,CAAC,GAAG,cAAc,CAAA;AAAA,EACnC,iBAAA,EAAmB,CAAC,GAAG,eAAe,CAAA;AAAA,EACtC,wBAAwB,EAAC;AAAA,EACzB,wBAAwB;AAC1B,CAAA;;;ACxJO,IAAM,YAAA,GAA6B;AAAA;AAAA,EAExC,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,iBAAA,EAAwB,UAAA,EAAY,SAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,SAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,sBAA2B,KAAA,EAAO,cAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,gBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,gBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,CAAA,EAAK,MAAA,EAAQ,yBAA2B,KAAA,EAAO,iBAAA,EAAiD,OAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,CAAA,EAAK,MAAA,EAAQ,wBAAA,EAA0B,OAAO,kBAAA,EAAyB,UAAA,EAAY,QAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,aAAA,EAAwB,UAAA,EAAY,GAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,EACrH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,OAAA,EAAwB,UAAA,EAAY,UAAA,EAAY,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGpH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,QAAA,EAAwB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,UAAA,EAAW;AAAA,EACzH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,YAAA,EAA2B,OAAO,MAAA,EAAwB,UAAA,EAAY,OAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,iBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,cAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,sBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,eAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,eAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,yBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,UAAA,EAAW;AAAA,EACzH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,YAAA,EAA2B,OAAO,gBAAA,EAAwB,UAAA,EAAY,WAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,KAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,mBAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAGxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,WAAA,EAA2B,OAAO,KAAA,EAAwB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,cAAA,EAA2B,OAAO,QAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,UAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,UAAA,EAAkD,OAAO,QAAA,EAAS;AAAA,EACvH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,0BAAA,EAAgC,OAAO,aAAA,EAAmB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,0BAAA,EAAgC,OAAO,aAAA,EAAmB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,8BAAA,EAAgC,OAAO,iBAAA,EAAmB,UAAA,EAAY,SAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,uBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,QAAA,EAAS;AAAA,EACvH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,uBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,QAAA,EAAS;AAAA;AAAA,EAGvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,aAAA,EAA2B,OAAO,OAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGrH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,qBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,4BAA6B,KAAA,EAAO,oBAAA,EAAgD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,6BAA6B,KAAA,EAAO,qBAAA,EAAgD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,sBAAA,EAA2B,OAAO,oBAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,iBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,YAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,cAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,qBAAA,EAA2B,OAAO,WAAA,EAAwB,UAAA,EAAY,OAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,eAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,wBAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,kBAAA,EAA+C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,kBAAA,EAA+C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,uBAAA,EAA2B,OAAO,aAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,gBAAA,EAA2B,OAAO,MAAA,EAAwB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,SAAA,EAAU;AAAA,EACvH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,iBAA2B,KAAA,EAAO,aAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,oBAA2B,KAAA,EAAO,gBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,qBAA2B,KAAA,EAAO,kBAAA,EAAkD,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,EAAA,EAAK,MAAA,EAAQ,gCAAgC,KAAA,EAAO,iBAAA,EAA6C,OAAO,SAAA,EAAU;AAAA,EACxH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,gCAAgC,KAAA,EAAO,iBAAA,EAA6C,OAAO,SAAA,EAAU;AAAA;AAAA,EAGxH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,2BAAA,EAA+B,OAAO,mBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,6BAAA,EAA+B,OAAO,qBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA+B,OAAO,gBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,yBAAA,EAA+B,OAAO,iBAAA,EAAuB,UAAA,EAAY,GAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACrI,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,sBAAA,EAA+B,OAAO,cAAA,EAAuB,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,sBAAA,EAAuB;AAAA;AAAA,EAGrI,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,2BAA2B,KAAA,EAAO,YAAA,EAAkD,OAAO,qBAAA,EAAsB;AAAA;AAAA,EAGpI,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,wCAAwC,KAAA,EAAO,oBAAA,EAAqC,OAAO,OAAA,EAAQ;AAAA;AAAA,EAGtH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,sBAAA,EAAkC,OAAO,YAAA,EAAsB,UAAA,EAAY,GAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,gCAAA,EAAkC,OAAO,kBAAA,EAAsB,UAAA,EAAY,KAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,uBAAA,EAAkC,OAAO,QAAA,EAAsB,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,uBAAA,EAAkC,OAAO,QAAA,EAAsB,UAAA,EAAY,KAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAAkC,OAAO,kBAAA,EAAsB,UAAA,EAAY,GAAA,EAAS,KAAA,EAAO,eAAA,EAAgB;AAAA;AAAA,EAG9H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,YAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,yBAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,8BAA8B,KAAA,EAAO,gBAAA,EAA6C,OAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,2BAA2B,KAAA,EAAO,aAAA,EAAgD,OAAO,aAAA,EAAc;AAAA,EAC1H,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,oBAAA,EAA2B,OAAO,cAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,aAAA,EAAc;AAAA;AAAA,EAG1H,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,eAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,yBAAA,EAA2B,OAAO,mBAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,EAAA,EAAK,MAAA,EAAQ,uBAAA,EAA2B,OAAO,iBAAA,EAAuB,UAAA,EAAY,UAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,mBAAA,EAA2B,OAAO,iBAAA,EAAuB,UAAA,EAAY,WAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,aAAA,EAAuB,UAAA,EAAY,GAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,wBAAA,EAA2B,OAAO,kBAAA,EAAuB,UAAA,EAAY,IAAA,EAAa,KAAA,EAAO,MAAA,EAAO;AAAA,EACnH,EAAE,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,mCAAA,EAAsC,OAAO,eAAA,EAAsB,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,MAAA,EAAO;AAAA,EACtH,EAAE,IAAI,GAAA,EAAK,MAAA,EAAQ,+CAA+C,KAAA,EAAO,qBAAA,EAA6B,OAAO,MAAA;AAC/G,CAAA;AAEA,IAAM,KAAA,GAAQ,IAAI,GAAA,CAAwB,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAOrE,SAAS,iBAAiB,EAAA,EAAoB;AACnD,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AACtB,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,QAAA,EAAW,EAAE,CAAA,CAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,UAAA,GAAa,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,EAAE,CAAA,MAAA,EAAM,CAAA,CAAE,UAAU,CAAA,CAAA,CAAA,GAAM,CAAA,EAAG,CAAA,CAAE,KAAK,KAAK,EAAE,CAAA,CAAA,CAAA;AAClF;AAGO,IAAM,uBAAA,GAA6C;AAAA,EACxD,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;ACnJO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,MAAM,QAAQC,oBAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,oBAAA;AAAA,MACH,CAAA,EAAG,MAAM,CAAA,IAAK,IAAA;AAAA,MACd,OAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,WAAA,EAAa,KAAA;AAAA,QAEb,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA;AAAA,QAE3B,OAAA,EAAS,CAAA,YAAA,EAAe,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QAC5G,SAAA,EAAW,CAAA,cAAA,EAAiB,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,OAClH;AAAA,MAGA,QAAA,kBAAAT,cAAAA;AAAA,QAACU,gCAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAO,cAAA,CAAe,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,KAAA,CAAM,YAAsB,GAAG,KAAA,CAAM,OAAA,GAAU,MAAK,GAAG,CAAA;AAAA,UAC1I,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GAAU;AAAA;AAC7C;AAAA;AACF;AAAA,GACF;AAEJ;ACpCO,IAAM,UAAA,GAAaC,mBAAA,CAAO,MAAA,CAAOF,SAAI;AAErC,IAAM,UAAA,GAAaE,mBAAA,CAAO,MAAA,CAAOT,SAAI;AAErC,IAAM,WAAA,GAAcS,mBAAA,CAAO,MAAA,CAAOV,UAAK;AAEvC,IAAM,UAAA,GAAaU,mBAAA,CAAO,MAAA,CAAOD,gCAAe;ACThD,SAAS,QAAQ,KAAA,EAAqE;AAC3F,EAAA,uBACEV,cAAAA,CAACY,4BAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,KAAA,GAAQ,qBACbZ,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MAEnB,EAAA,EAAG,QAAA;AAAA,MACH,CAAA,EAAE,QAAA;AAAA,MACF,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAM,QAAA;AAAA,MACN,EAAA,EAAI,MAAM,KAAA,IAAS,qBAAA;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,KAAA;AAAA,QACd,WAAA,EAAa,KAAA;AAAA,QACb,YAAA,EAAc,OAAA;AAAA,QACd,UAAA,EAAY,cAAA;AAAA,QACZ,SAAA,EAAW,4BAAA;AAAA,QACX,GAAG,KAAA,CAAM;AAAA,OACX;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM;AAAA,KAAA;AAAA,IAnBH;AAAA,GAoBN,EAEJ,CAAA;AAGJ;ACHO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAQ,EAAC;AAAA,EACT,aAAA,GAAgB,EAAA;AAAA,EAChB,KAAA,GAAQ,WAAA;AAAA,EACR,IAAA,GAAO,EAAA;AAAA,EACP,KAAA,GAAQ,MAAA;AAAA,EACR,OAAA,GAAU,GAAA;AAAA,EACV,QAAQ,EAAC;AAAA,EACT,kBAAA,GAAqB,GAAA;AAAA,EACrB,kBAAA,GAAqB,EAAA;AAAA,EACrB,eAAA,GAAkB;AACpB,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAea,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,cAAA,CAA0B,EAAE,CAAA;AAE9D,EAAA,MAAM,MAAA,GAASC,4BAAe,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAASA,4BAAe,CAAC,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA,EAAM,EAAE,IAAA,EAAM,EAAA,EAAI,UAAU,EAAA,EAAG;AAAA,IAC/B,MAAA,EAAQ,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,EAAC;AAAA,IAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA;AAAE,GAC/B;AAEA,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAElC,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiB;AACrC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,GAAA;AAC3B,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,EACzB,CAAA;AAEA,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,IAAA,MAAM,YAAA,GAAgC,CAAC,GAAG,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5E,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,eAAe,CAAA,GAAI,OAAA;AAEzB,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE3C,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,CAAA;AAAA,QACJ,KAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,CAAA,GAAI,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AAAA,QACnD,mBAAmB,QAAA,CAAS,IAAA,GAAO,YAAA,CAAa,YAAY,IAAI,QAAA,CAAS;AAAA,OAC3E;AAAA,IACF,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,YAAY,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,aAAA,EAAe,KAAA,CAAM,QAAQ,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,QAAQ,CAAC,CAAA;AAElE,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAS,qBAAA,EAAsB;AAC3D,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,IAAA;AAC7B,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,GAAA;AAE7B,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACZ,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAEZ,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,KAAY;AAC5B,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAE5C,UAAA,IAAI,QAAA,GAAW,kBAAA,IAAsB,QAAA,GAAW,CAAA,EAAG;AACjD,YAAA,MAAM,KAAA,GAAA,CAAS,qBAAqB,QAAA,IAAY,kBAAA;AAChD,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAC9D,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAE9D,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,QAAA,EAAU,SAAS,KAAA,GAAQ,MAAA;AAAA,cAC3B,QAAA,EAAU,SAAS,KAAA,GAAQ;AAAA,aAC7B;AAAA,UACF,CAAA,MAAO;AACL,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,UAAU,QAAA,CAAS,KAAA;AAAA,cACnB,UAAU,QAAA,CAAS;AAAA,aACrB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,MAAa;AAAA,UAC7B,GAAG,QAAA;AAAA,UACH,UAAU,QAAA,CAAS,KAAA;AAAA,UACnB,UAAU,QAAA,CAAS;AAAA,SACrB,CAAE;AAAA,OACJ;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,SAAA,CAAU,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACvD,IAAA,SAAA,CAAU,gBAAA,CAAiB,cAAc,gBAAgB,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAC1D,MAAA,SAAA,CAAU,mBAAA,CAAoB,cAAc,gBAAgB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,kBAAA,EAAoB,kBAAkB,CAAC,CAAA;AAE3D,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAC,UAAU,CAAA,KAAM;AACjC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,KAAA;AACnC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,MAAA;AAEnC,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC9C,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE9C,UAAA,OAAO;AAAA,YACL,GAAG,QAAA;AAAA,YACH,KAAA,EAAO,QAAA;AAAA,YACP,KAAA,EAAO,QAAA;AAAA,YACP,QAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEhB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,EAAA;AAAA,QAER,eAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,MAEA,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,QAAO,EACjE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,6BACdA,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,KAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAK;AAAA,WACP;AAAA,UACA,OAAA,EAAS;AAAA,YACP,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,KAAA,EAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,YACrB,SAAS,CAAC,OAAA,GAAU,GAAA,EAAK,OAAA,EAAS,UAAU,GAAG,CAAA;AAAA;AAAA,YAE/C,MAAA,EAAQ,QAAA,CAAS,EAAA,GAAK,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,CAAC,GAAA,EAAK,CAAC;AAAA,WACpD;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,MAAA,EAAQ;AAAA,cACN,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAM;AAAA,aAER;AAAA,YACA,KAAA,EAAO;AAAA,cACL,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA,aACR;AAAA,YACA,OAAA,EAAS;AAAA,cACP,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UAEC,QAAA,EAAA,QAAA,CAAS,IAAA,mBACRX,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,cAAA,EAAgB,QAAA,EAAS,EAC3G,QAAA,kBAAAA,cAAAA,CAACU,gCAAAA,EAAA,EAAgB,IAAA,EAAM,SAAS,IAAA,EAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA,EAAM,EAAG,CAAA,EACvF,oBAEAV,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF,SAAA;AAAA,QArDG,QAAA,CAAS;AAAA,OAwDjB,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACrPO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAG9B,EAAA,uBACEV,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,aAAA;AAAA,MACF,CAAA,EAAE,aAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,CAAA,8BAAA;AAAA,OACV;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,KAAA;AAAA,YACJ,CAAA,EAAE,KAAA;AAAA,YACF,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAM,QAAA;AAAA,YAEN,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAAI,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAS;AAAA,SACvB;AAAA,wBAEAF,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,KAAA;AAAA,YACF,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAI,KAAA;AAAA,YACJ,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,KAAA,EAAM,QAAA;AAAA,YACN,OAAA,EAAQ,QAAA;AAAA,YAER,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAU;AAAA;AACpB;AAAA;AAAA,GAEF;AAEJ;ACrCO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MACd,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,GAAG,KAAA,CAAM,CAAA;AAAA,MACT,GAAA,EAAK,KAAA,CAAM,KAAA,GAAQ,IAAA,GAAO,CAAA;AAAA,MAG1B,EAAA,EAAI,MAAM,EAAA,IAAMO,UAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,MAChD,CAAA,EAAG,MAAM,CAAA,IAAK,IAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,SAAA,EAAW,MAAM,OAAA,CAAQ,EAAA;AAAA,QACzB,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,kCAAA,CAAA,GAAuC,uCAAA;AAAA,QAC7D,GAAG,KAAA,CAAM;AAAA,OACX;AAAA,MACA,UAAU,KAAA,CAAM,QAAA;AAAA,MAGhB,QAAA,EAAA;AAAA,wBAAAP,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAEF,QAAA,EAAA;AAAA,cAAA,CAAA,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,WAAA,qBACrBX,eAAAA;AAAA,gBAACW,SAAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,QAAA;AAAA,kBACN,IAAA,EAAM,CAAA;AAAA,kBACN,CAAA,EAAG,KAAA,CAAM,CAAA,IAAK,GAAA,GAAM,IAAA,GAAO,CAAA;AAAA,kBAE1B,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,yBACLT,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,IAAA;AAAA,wBACL,KAAA,EAAO;AAAA,0BACL,UAAA,EAAY,QAAA;AAAA,0BACZ,UAAA,EAAY,cAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe;AAAA,yBACjB;AAAA,wBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,qBAAM;AAAA,oBAEf,KAAA,CAAM,+BACLF,cAAAA;AAAA,sBAACiB,YAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,KAAA,CAAM,WAAA;AAAA,wBACb,QAAA,EAAS,SAAA;AAAA,wBACT,SAAA,EAAS,IAAA;AAAA,wBACT,SAAA,EAAS,IAAA;AAAA,wBACT,GAAA,EAAI,MAAA;AAAA,wBACJ,MAAA,EAAQ;AAAA,0BACN,OAAA,EAAS;AAAA,4BACP,YAAYZ,UAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,4BAC5C,MAAA,EAAQ,CAAA,iCAAA,CAAA;AAAA,4BACR,KAAA,EAAO,wBAAA;AAAA,4BACP,UAAA,EAAY,cAAA;AAAA,4BACZ,QAAA,EAAU,OAAA;AAAA,4BACV,UAAA,EAAY,GAAA;AAAA,4BACZ,OAAA,EAAS,aAAA;AAAA,4BACT,aAAA,EAAe;AAAA;AACjB,yBACF;AAAA,wBAEA,QAAA,kBAAAL,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,QAAQ,MAAA,EAAO,EAChF,QAAA,kBAAAT,cAAAA,CAACkB,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAOb,WAAM,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAI,GAAG,CAAA,EAC9E;AAAA;AAAA;AACF;AAAA;AAAA,eAEJ;AAAA,cAED,KAAA,CAAM,yBACLL,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,kBACrB,EAAA,EAAI,GAAA;AAAA,kBACJ,EAAA,EAAG,MAAA;AAAA,kBACH,EAAA,EAAG,KAAA;AAAA,kBAEF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,cAED,MAAM,YAAA,oBACLF,eAACS,SAAAA,EAAA,EACE,gBAAM,YAAA,EACT;AAAA;AAAA;AAAA,SAEJ;AAAA,QACC,KAAA,CAAM;AAAA;AAAA;AAAA,GACT;AAEJ;ACnGO,IAAM,QAAA,GAAWF,eAAyB,MAAM;AACrD,EAAA,MAAM,YAA8C,EAAC;AAGrD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,KAAA,EAAOY,8BAAA;AAAA,IACP,KAAA,EAAOC;AAAA,GACT;AAGA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC/C,IAAA,SAAA,CAAU,GAAG,CAAA,GAAI,IAAI,KAAA,CAAM,GAAG,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,GAAA;AACf,MAAA,KAAA,CAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,IACA,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAAA,IACtB;AAAA,GACF;AACF,CAAC,CAAA;ACZO,SAAS,iBAAiB,KAAA,EAA8B;AAC9D,EAAA,MAAM,QAAQZ,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAE3C,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAgC;AACpD,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA;AAC9B,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,uBAAA;AAAA,MACH,CAAA,EAAG,MAAM,CAAA,IAAK,aAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,cAAc,KAAA,CAAM,UAAA,KAAe,KAAA,GAAQ,KAAA,CAAM,OAAO,EAAA,GAAK,CAAA;AAAA,QAC7D,QAAA,EAAU;AAAA,OACZ;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,gBAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BACtBT,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,OAAA,EAAS,EAAE,CAAA,EAAG,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,UAC/B,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,UAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,OAAO,KAAA,GAAQ,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,UAEnE,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,KAAA;AAAA,YACf,UAAA,EAAY,QAAA;AAAA,YACZ,IAAA,EAAM;AAAA,WACR;AAAA,UAEA,QAAA,kBAAAX,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,cAAc,IAAA,CAAK,YAAA;AAAA,cACnB,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,UAAU,CAAC,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,UAAU,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,KAAK,CAAA,IAAK,MAAM,KAAA,CAAM,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,cACnH,SAAS,MAAM;AAEb,gBAAA,IAAI,MAAM,KAAA,EAAO;AACf,kBAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GACtC,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,GAC7B,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAA,CAAK,KAAK,CAAA,GAC1C,CAAC,GAAG,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,GAC7B,CAAC,KAAK,KAAK,CAAA;AAEf,kBAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,gBACvB,CAAA,MAAO;AACL,kBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,gBACzB;AAAA,cACF;AAAA,aAAA;AAAA,YArBK,IAAA,CAAK;AAAA;AAsBZ,SAAA;AAAA,QAnCK;AAAA,OAqCR;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,QAAQ,KAAA,EAId;AACD,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAE9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,CAAA,EAAE,MAAA;AAAA,MACF,SAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAM,QAAA;AAAA,MAEN,CAAA,EAAE,MAAA;AAAA,MACF,EAAA,EAAI,MAAM,QAAA,GAAW,KAAA,CAAM,QAAQ,cAAA,CAAe,KAAA,CAAM,OAAO,GAAG,CAAA,GAAI,eAAe,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,MAAM,YAAsB,CAAA,EAAG,GAAG,CAAA,GAAI,aAAA;AAAA,MAC5J,GAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO;AAAA;AAAA,QAEL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAExB,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAEJ,CAAA,EAAE,IAAA;AAAA,YAGD,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,wBACLT,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,MAAM,KAAA,CAAM,IAAA;AAAA,kBAEZ,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,MAAM,SAAA,CAAU,EAAA;AAAA,oBAC1B,YAAA,EAAc;AAAA;AAChB;AAAA,eACF;AAAA,8BAEFA,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,MAAM,EAAA,IAAM,IAAA;AAAA,kBAClB,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAC/E;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe,OAAA;AAAA,oBACf,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA,QAAA,EAAA,KAAA,CAAM,MAAM,WAAA;AAAY;AAAA,eAAE;AAAA,cAC3B,KAAA,CAAM;AAAA;AAAA;AAAA,SACT;AAAA,wBAGAA,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS;AAAA,cACP,MAAA,EAAQ,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI,CAAA;AAAA,cAC7B,OAAA,EAAS,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI;AAAA,aAChC;AAAA,YACA,UAAA,EAAY;AAAA,cACV,QAAA,EAAU,GAAA;AAAA,cACV,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC;AAAA;AAAA,aACvB;AAAA,YACA,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,CAAA;AAAA,cACR,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,CAAA;AAAA,cACP,MAAA,EAAQ,OAAA;AAAA,cACR,eAAA,EAAiB,MAAM,KAAA,IAAS,KAAA,CAAM,OAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAAA,cAClE,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;ACrLO,IAAM,iBAAA,GAAoBU,oBAAgD,IAAI;AAE9E,SAAS,cAAiB,QAAA,EAAwC;AACvE,EAAA,MAAM,UAAA,GAAaC,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAOC,gBAAA,CAAS,YAAY,QAAQ,CAAA;AACtC;AAGO,SAAS,kBAAA,GAAoB;AAClC,EAAA,MAAM,UAAA,GAAaD,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,WAAA,EAAY,EAAuD;AAChH,EAAA,MAAM,QAAA,GAAWT,YAAAA;AAAA,IACfN,eAAwB,OAAO;AAAA,MAC7B,QAAQ,WAAA,IAAe;AAAA,KACzB,CAAE;AAAA,GACJ;AAEA,EAAA,uBACEP,eAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,QAAA,CAAS,SACzC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAO,KAAA,EAErB;AACA,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AACpD,EAAA,MAAMwB,SAAQ,kBAAA,EAAmB;AAEjC,EAAA,uBACExB,cAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAM,IAAA;AAAA,MACN,CAAA,EAAE,MAAA;AAAA,MACF,KAAA,EAAO,MAAA;AAAA,MACP,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAAwB,MAAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,OAAiB,CAAA;AAAA,MAC5C;AAAA;AAAA,GACF;AAEJ;ACjDA,IAAM,iBAAA,GAA8B;AAAA,EAClC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,GAAA;AAAA,MACjB,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AACpB;AAEJ,CAAA;AAGA,IAAM,YAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,EAAA;AAAA,IACH,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,GAAA;AAAA,MACX,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,GAAA;AAAA,IACH,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAIO,SAAS,kBAAkB,KAAA,EAAsB;AACtD,EAAA,MAAM,kBAAA,GAAqB,MAAM,KAAA,CAAM,QAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,kBAAkB,CAAA;AACrE,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,QAAA,GAAW,kBAAA,GAAsB,kBAAA;AAE5D,EAAA,uBACExB,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,MAAA;AAAA,MACF,CAAA,EAAG,MAAM,IAAA,IAAQ,KAAA;AAAA,MACjB,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,iBAAA;AAAA,MAET,QAAA,EAAA,CAAC,GAAG,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AAC5C,QAAA,MAAM,WAAW,KAAA,GAAQ,cAAA;AACzB,QAAA,MAAM,YAAY,KAAA,KAAU,cAAA;AAE5B,QAAA,uBACEA,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,QAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,CAAA;AAAA,cACN,MAAA,EAAQ,MAAA;AAAA,cACR,UAAA,EAAY,QAAA,GACR,0BAAA,GACA,SAAA,GACA,CAAA,mDAAA,EAAsD,cAAc,GAAG,CAAA,4BAAA,EAA+B,WAAA,GAAc,GAAG,CAAA,EAAA,CAAA,GACvH,0BAAA;AAAA,cACJ,UAAA,EAAY;AAAA;AACd,WAAA;AAAA,UAXK;AAAA,SAYP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;ACnDA,SAAS,aAAA,CAAc,MAAiB,eAAA,EAAqC;AAC3E,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,OAAO,SAAA,EAAW,KAAA,EAAO,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IAC1J,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,OAAO,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACzJ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACvJ,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,IACvJ,KAAK,IAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAE,YAAA,EAAc,eAAA,EAAiB,WAAA,EAAa,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,eAAA,EAAiB,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA;AAE3K;AAEO,SAAS,MAAM,KAAA,EAAmB;AACvC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC9C,EAAA,MAAM,QAAQH,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,SAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,IAAA,EAAM,KAAA,CAAM,UAAU,EAAE,CAAA;AACnE,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,EAAA,EAAI,MAAM,EAAA,IAAM,aAAA;AAAA,MAChB,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MACd,CAAA,EAAG,MAAM,CAAA,IAAK,OAAA;AAAA,MACd,IAAI,CAAC,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,YAAY,KAAA,CAAM,CAAA;AAAA,MACxC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,MAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA,GAAe,MAAA,GAAS,CAAA,YAAA,EAAe,MAAM,WAAA,IAAe,cAAA,CAAe,KAAA,CAAM,MAAA,CAAO,MAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,OAC1I;AAAA,MAEA,0BAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,SAAS,QAAA,EAC5B,QAAA,EAAA;AAAA,wBAAAX,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAK,MAAA,CAAO,QAAA,EAAU,EAAA,EAAG,IAAA,EAC5C,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,UAAU,MAAA,CAAO,YAAA;AAAA,cACjB,OAAO,KAAA,CAAM,SAAA;AAAA,cACb,GAAG,MAAA,CAAO;AAAA;AAAA,WACZ;AAAA,0BACAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,QAAA,EAC3B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAE,GAAA;AAAA,gBACF,MAAM,MAAA,CAAO,SAAA;AAAA,gBACb,KAAA,EAAO;AAAA,kBACL,YAAY,MAAA,CAAO,eAAA;AAAA,kBACnB,UAAA,EAAY,IAAA,IAAQ,OAAA,GAAU,cAAA,GAAiB,UAAA;AAAA,kBAC/C,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,aACT;AAAA,4BACAF,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,MAAM,MAAA,CAAO,eAAA;AAAA,gBACb,CAAA,EAAE,MAAA;AAAA,gBACF,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAU,UAAU,YAAA,EAAa;AAAA,gBAErD,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAF,cAAAA,CAACS,SAAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EAAO,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAChC,QAAA,EAAA,KAAA,CAAM,YAAA,EACT;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AC1GO,SAAS,YAAY,KAAA,EAO1B;AACA,EAAA,uBACEX,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,CAAA,EAAE,MAAA;AAAA,MACF,GAAA,EAAI,UAAA;AAAA,MACJ,IAAA,EAAK,KAAA;AAAA,MACL,KAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAI,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QAEL,YAAA,EAAcU,oBAAAA,EAAgB,CAAE,MAAA,CAAO;AAAA,OACzC;AAAA,MAEA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,MAC7D,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,WAAW,kBAAA,EAAmB;AAAA,MAC3D,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,MAC1D,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,MAC5B,SAAA,EAAW,QAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAV,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,MAAA;AAAA,YACF,OAAA,EAAS,eAAA;AAAA,YAET,QAAA,EAAA;AAAA,8BAAAX,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,MAAA;AAAA,oBAAK,KAAA,CAAM;AAAA;AAAA;AAAA,eAAM;AAAA,8BAClBJ,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,GAAA;AAAA,oBAAI,GAAA;AAAA,oBAAE,KAAA,CAAM,WAAA;AAAA,oBAAY;AAAA;AAAA;AAAA,eAAG;AAAA,8BACnCJ,eAAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,KAAA;AAAA,kBACL,CAAA,EAAE,0BAAA;AAAA,kBACF,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,MAAA;AAAA,oBAAK,MAAM,KAAA,GAAQ;AAAA;AAAA;AAAA;AAAE;AAAA;AAAA,SACxB;AAAA,wBACAF,cAAAA;AAAA,UAACyB,aAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,CAAA,EAAE,MAAA;AAAA,YACF,IAAA,EAAK,IAAA;AAAA,YACL,OAAO,KAAA,CAAM;AAAA;AAAA;AACf;AAAA;AAAA,GACF;AAGJ;ACnEO,SAAS,WAAW,KAAA,EAOzB;AACA,EAAA,MAAM,QAAQjB,oBAAAA,EAAgB;AAE9B,EAAA,uBACEV,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,aAAA;AAAA,MACF,EAAA,EAAG,KAAA;AAAA,MACH,EAAA,EAAG,KAAA;AAAA,MAEH,EAAA,EAAG,2GAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,SAAA,EAAW,MAAM,OAAA,CAAQ,EAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACX;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW,QAAA;AAAA,MACX,CAAA,EAAE,IAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC0B,iBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,GAAA;AAAA,YACN,SAAA,EAAS,IAAA;AAAA,YACT,SAAA,EAAW,EAAA;AAAA,YACX,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,MAAM,eAAA,EAAiB,KAAA,EAAM,eAAe,KAAA,CAAM,KAAA,IAAS,MAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,GAAG,CAAA;AAAA,YACrJ,uBACE1B,cAAAA;AAAA,cAACS,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,QAAA;AAAA,gBACT,KAAA,EAAO,QAAA;AAAA,gBACP,SAAA,EAAW,QAAA;AAAA,gBAEX,QAAA,kBAAAT,cAAAA;AAAA,kBAACE,SAAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,KAAA;AAAA,oBACL,CAAA,EAAG,cAAA,CAAe,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,CAAA;AAAA,oBACpG,KAAA,EAAO;AAAA,sBACL,UAAA,EAAY,eAAA;AAAA,sBACZ,UAAA,EAAY,CAAA,SAAA,EAAY,cAAA,CAAe,KAAA,CAAM,SAAS,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAAE,KAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,qBAC5H;AAAA,oBAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AACF;AAAA,SAEJ;AAAA,wBACAF,cAAAA;AAAA,UAACE,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,eAAA;AAAA,cACZ,aAAA,EAAe,QAAA;AAAA,cACf,aAAA,EAAe;AAAA,aACjB;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,OAAO;AAAA;AAAA,SAC/B;AAAA,wBACAJ,eAAAA;AAAA,UAACI,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,CAAA,EAAE,uBAAA;AAAA,YAED,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,GAAA;AAAA,cAAI,GAAA;AAAA,cAAE,KAAA,CAAM,WAAA;AAAA,cAAY,GAAA;AAAA,cAAE,OAAO,KAAK;AAAA;AAAA;AAAA;AAC/C;AAAA;AAAA,GACF;AAEJ;ACrDO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,SAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,MAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,YAAA,GAAe,IAAA;AAAA,EACf;AACF,CAAA,EAAe;AACb,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,oBAAA,GAAuBK,aAAO,KAAK,CAAA;AAEzC,EAAA,uBACEb,cAAAA,CAAC2B,WAAA,EAAA,EACC,QAAA,kBAAA3B,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MACA,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,QAAA,oBAAA,CAAqB,OAAA,GAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA;AAAA,MAChD,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,IAAI,gBAAgB,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,IAAiB,qBAAqB,OAAA,EAAS;AAChF,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAAb,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAC9C,KAAA,EAAO;AAAA,YACL,YAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,YAC5C,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,YAC3C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,KAAA;AAAA,YACA,SAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY;AAAA,WACd;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAP,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,eAAA;AAAA,gBACR,KAAA,EAAM,QAAA;AAAA,gBACN,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,cAAc,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,kBACjD,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAX,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,IAAA,oBACCT,cAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,SAAA,IAAa,uBAAA;AAAA,wBACpB,IAAA,EAAK;AAAA;AAAA,qBACP;AAAA,oCAEFA,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,EAAA,EAAG,cAAA;AAAA,wBACH,IAAA,EAAK,IAAA;AAAA,wBACL,EAAA,EAAG,WAAA;AAAA,wBACH,GAAA,EAAI,QAAA;AAAA,wBACJ,CAAA,EAAE,wBAAA;AAAA,wBAED,QAAA,EAAA;AAAA;AAAA,qBACH;AAAA,oBACC,yBACCF,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO;AAAA,0BACL,UAAA,EAAYK,UAAAA,CAAM,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,0BACnC,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,0BAC/C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,0BAC3B,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,yBACjC;AAAA,wBAEA,QAAA,kBAAAL,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,GAAG,KAAA,CAAM,KAAA;AAAA,4BAER,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AACF,mBAAA,EAEJ,CAAA;AAAA,kCACAF,cAAAA;AAAA,oBAACW,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,MAAA,EAAQ,MAAA;AAAA,wBACR,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,wBACvB,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS;AAAA,uBACX;AAAA,sBAEA,QAAA,kBAAAL,cAAAA,CAAC4B,aAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB;AAAA;AAAA;AACnC;AAAA;AAAA,aACF;AAAA,YAGC,WAAA,oBACC5B,cAAAA,CAACS,SAAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EACf,QAAA,kBAAAT,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,IAAA;AAAA,gBACL,CAAA,EAAE,wBAAA;AAAA,gBACF,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAI;AAAA,gBAExB,QAAA,EAAA;AAAA;AAAA,aACH,EACF,CAAA;AAAA,4BAIFF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,IAClE,QAAA,EACH;AAAA;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;AClJO,SAAS,YAAY,KAAA,EAAe;AACzC,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAI,IAAA;AAAA,MACJ,SAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAM,CAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAE,cAAAA;AAAA,UAACE,SAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,CAAA,EAAE,0BAAA;AAAA,YACF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SAAQ;AAAA,wBAChBF,cAAAA;AAAA,UAACS,SAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,IAAA;AAAA,YAEH,gBAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,0BAC1BT,cAAAA;AAAA,cAAC6B,WAAA;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAA,CAAO,OAAA;AAAA,gBAChB,OAAO,MAAA,CAAO,KAAA;AAAA,gBACd,IAAA,EAAM,GAAA;AAAA,gBACN,SAAS,MAAA,CAAO,OAAA;AAAA,gBAChB,WAAA,EAAa,MAAA,CAAO,IAAA,mBAClB7B,cAAAA;AAAA,kBAACU,gCAAAA;AAAA,kBAAA;AAAA,oBACC,MAAM,MAAA,CAAO,IAAA;AAAA,oBACb,KAAA,EAAO;AAAA,sBACL,QAAA,EAAU,MAAM,SAAA,CAAU;AAAA;AAC5B;AAAA,iBACF,GACC,MAAA;AAAA,gBAEF,QAAA,EAAA,MAAA,CAAO;AAAA,eAAA;AAAA,cAdH;AAAA,aAgBR;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;AChCO,IAAM,YAAA,GAAeW,oBAA2C,IAAI;AAEpE,SAAS,SAAY,QAAA,EAAuC;AACjE,EAAA,MAAM,KAAA,GAAQC,iBAAW,YAAY,CAAA;AACrC,EAAA,IAAG,CAAC,KAAA,EAAM;AACR,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAOC,gBAAAA,CAAS,OAAO,QAAQ,CAAA;AACjC;AAEA,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAC/C,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,eAAA,EAAgB;AAEtC,EAAA,uBACEvB,cAAAA,CAACY,4BAAAA,EAAA,EACE,oCACCZ,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,cAAc,MAAA,CAAO,YAAA;AAAA,MAEpB,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,GACV,EAEJ,CAAA;AAEJ;AAEO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAiC;AACxE,EAAA,MAAM,QAAA,GAAWa,YAAAA;AAAA,IACfN,eAAmB,OAAO;AAAA,MACxB,MAAA,EAAQ;AAAA,KACV,CAAE;AAAA,GACJ;AAEA,EAAA,uBACET,eAAAA,CAAC,YAAA,CAAa,UAAb,EAAsB,KAAA,EAAO,SAAS,OAAA,EACrC,QAAA,EAAA;AAAA,oBAAAE,eAAC,UAAA,EAAA,EAAU,CAAA;AAAA,IACV;AAAA,GAAA,EACH,CAAA;AAEJ;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,KAAA,GAAQsB,iBAAW,YAAY,CAAA;AACrC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAEjF,EAAA,MAAM,SAAA,GAAY,CAAC,SAAA,KAA+B;AAChD,IAAA,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,OAAO,EAAE,WAAW,SAAA,EAAU;AAChC;ACzEO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAQd,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,CAAC,WAAA,IAAe,KAAA,KAAU,WAAA;AAE7C,EAAA,uBACEd,cAAAA,CAAC2B,WAAAA,EAAA,EACC,QAAA,kBAAA3B,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MACA,OAAA,EAAS,OAAA;AAAA,MAET,QAAA,kBAAAb,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,UACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAC9C,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,YAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,YAC5C,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAC,CAAA,CAAA;AAAA,YAC5C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,KAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,QAAA,EAAU;AAAA,WACZ;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAP,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,eAAA;AAAA,gBACR,KAAA,EAAM,QAAA;AAAA,gBACN,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,YAAA,EAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAC,CAAA,CAAA;AAAA,kBAClD,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,kBACjC,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAP,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,oCAAAT,cAAAA,CAAC8B,yBAAA,EAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,CAAA;AAAA,oCAC5C9B,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,EAAA,EAAG,cAAA;AAAA,wBACH,IAAA,EAAK,IAAA;AAAA,wBACL,EAAA,EAAG,WAAA;AAAA,wBACH,GAAA,EAAI,QAAA;AAAA,wBACJ,CAAA,EAAE,SAAA;AAAA,wBAED,QAAA,EAAA;AAAA;AAAA;AACH,mBAAA,EACF,CAAA;AAAA,kCACAF,cAAAA;AAAA,oBAACW,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,MAAA,EAAQ,MAAA;AAAA,wBACR,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,wBACvB,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS;AAAA,uBACX;AAAA,sBAEA,QAAA,kBAAAL,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,OAAM,uBAAA,EAAwB;AAAA;AAAA;AACnC;AAAA;AAAA,aACF;AAAA,4BAGA9B,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,IAAA,EAClC,QAAA,EAAA;AAAA,8BAAAT,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,iBAAA;AAAA,kBACH,IAAA,EAAK,IAAA;AAAA,kBACL,CAAA,EAAE,wBAAA;AAAA,kBACF,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAI;AAAA,kBAExB,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cAEC,WAAA,oBACCJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC3B,QAAA,EAAA;AAAA,gCAAAX,eAAAA;AAAA,kBAACI,SAAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,cAAA;AAAA,oBACH,IAAA,EAAK,KAAA;AAAA,oBACL,EAAA,EAAG,WAAA;AAAA,oBACH,GAAA,EAAI,QAAA;AAAA,oBACJ,CAAA,EAAE,wBAAA;AAAA,oBACH,QAAA,EAAA;AAAA,sBAAA,MAAA;AAAA,sBACM,GAAA;AAAA,sCACLF,cAAAA,CAACE,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAO,EAAA,EAAG,cAAA,EAAe,CAAA,EAAE,SAAA,EACxC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBAAQ,GAAA;AAAA,sBAAI;AAAA;AAAA;AAAA,iBAEd;AAAA,gCACAF,cAAAA;AAAA,kBAAC+B,cAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,IAAA;AAAA,oBACL,WAAA,EAAa,WAAA;AAAA,oBACb,KAAA,EAAO,KAAA;AAAA,oBACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,oBAC/C,MAAA,EAAQ,CAACC,EAAAA,MAAO;AAAA,sBACd,KAAA,EAAO;AAAA,wBACL,iBAAiB3B,UAAAA,CAAM2B,EAAAA,CAAE,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,wBAC5C,QAAQ,CAAA,YAAA,EAAe3B,UAAAA;AAAA,0BACrB,UAAU,WAAA,GACN,SAAA,GACA2B,EAAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,0BACnB;AAAA,yBACD,CAAA,CAAA;AAAA,wBACD,KAAA,EAAO,wBAAA;AAAA,wBACP,UAAA,EAAY;AAAA;AACd,qBACF,CAAA;AAAA,oBACA,SAAA,EAAS;AAAA;AAAA;AACX,eAAA,EACF;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAGAlC,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,UAAA;AAAA,gBACR,GAAA,EAAI,IAAA;AAAA,gBACJ,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,IAAA;AAAA,gBACH,KAAA,EAAO;AAAA,kBACL,WAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,kBAC9C,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAX,eAAAA;AAAA,oBAACa,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,OAAA,EAAS,OAAA;AAAA,sBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,sBAC3D,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,sBACxB,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,aAAA;AAAA,wBACZ,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,wBAC3C,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS,WAAA;AAAA,wBACT,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,GAAA,EAAK;AAAA,uBACP;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAL,eAAC4B,aAAAA,EAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,wCAC9C5B,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,CAAA,EAAE,uBAAA;AAAA,4BACH,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,mBACF;AAAA,kCAEAJ,eAAAA;AAAA,oBAACa,mBAAAA,CAAO,MAAA;AAAA,oBAAP;AAAA,sBACC,SAAS,MAAM;AACb,wBAAA,IAAI,UAAA,EAAY;AACd,0BAAA,SAAA,EAAU;AACV,0BAAA,OAAA,EAAQ;AAAA,wBACV;AAAA,sBACF,CAAA;AAAA,sBACA,YACE,UAAA,GACI;AAAA,wBACE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,wBACjC,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG;AAAA,uBACnC,GACA,MAAA;AAAA,sBAEN,QAAA,EAAU,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,sBACzC,KAAA,EAAO;AAAA,wBACL,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,UAAA,GAAa,OAAO,IAAI,CAAA;AAAA,wBACrD,QAAQ,CAAA,YAAA,EAAeA,UAAAA;AAAA,0BACrB,SAAA;AAAA,0BACA,aAAa,IAAA,GAAO;AAAA,yBACrB,CAAA,CAAA;AAAA,wBACD,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,wBAC3B,OAAA,EAAS,WAAA;AAAA,wBACT,MAAA,EAAQ,aAAa,SAAA,GAAY,aAAA;AAAA,wBACjC,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,GAAA,EAAK,OAAA;AAAA,wBACL,OAAA,EAAS,aAAa,CAAA,GAAI,IAAA;AAAA,wBAC1B,UAAA,EAAY;AAAA,uBACd;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAL,cAAAA,CAACiC,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,CAAA;AAAA,wCACrCjC,cAAAA;AAAA,0BAACE,SAAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,cAAA;AAAA,4BACH,IAAA,EAAK,KAAA;AAAA,4BACL,EAAA,EAAG,WAAA;AAAA,4BACH,GAAA,EAAI,QAAA;AAAA,4BACJ,CAAA,EAAE,SAAA;AAAA,4BAED,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;AClMA,IAAM,IAAA,GAAuC;AAAA,EAC3C,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,cAAA,EAAe;AAAA,EAClC,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,cAAA,EAAe;AAAA,EAClC,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA;AACtB,CAAA;AAYO,IAAM,oBAAA,GAAuBK,cAAAA,CAAmB,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,EACpE,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU,KAAA;AAAA,EACV,SAAS,YAAY;AACnB,IAAA,IAAI,GAAA,GAAM,QAAA,EAAU;AACpB,IAAA,GAAA,CAAI,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAwB,mBAAA,EAAqB,KAAA,CAAA,EAAW;AAAA,QACxE,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,EAAE,OAAA,EAAS,EAAC,EAAG,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,IAAG;AAAE,OAC5D,CAAA;AACD,MAAA,IAAI,GAAA,EAAK,OAAA,IAAW,GAAA,CAAI,IAAA,EAAM;AAC5B,QAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,MACtB;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IACtB,CAAA,SAAE;AACA,MAAA,GAAA,CAAI,EAAE,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,IACzB;AAAA,EACF;AACF,CAAA,CAAE;AAEK,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,QAAQC,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIM,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAgB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAC/D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAIvD,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAQ;AAAA,EACvB,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAakB,iBAAA,CAAY,CAAC,GAAA,KAAe;AAC7C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,EAAA;AACpC,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,KAAK,MAAM;AAC7C,MAAA,SAAA,CAAU,GAAG,CAAA;AACb,MAAA,UAAA,CAAW,MAAM,UAAU,CAAC,CAAA,KAAO,MAAM,GAAA,GAAM,IAAA,GAAO,CAAE,CAAA,EAAG,IAAI,CAAA;AAAA,IACjE,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,CAAA,KAAwB;AACzD,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,IAAA;AAEjD,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAE7C,EAAA,uBACEpC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,UAAA,EAAYO,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,QACjC,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA;AAAA,QAC7C,UAAA,EAAY,eAAe,SAAS,CAAA,CAAA;AAAA,QACpC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,MAAA,EAAQ,WAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAP,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,GAAA,EAAI,OAAA,EAAQ,GAAE,WAAA,EAAY,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,IAAa,OAAA,EAAS,MAAM,YAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,EAC/G,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC8B,2BAAA,EAAc,IAAA,EAAK,SAAQ,KAAA,EAAO,SAAA,EAAW,aAAa,GAAA,EAAK,CAAA;AAAA,0BAChEhC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EACrD,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,GAAG,SAAA,EAC9D,QAAA,EAAA,KAAA,CAAM,QAAQ,MAAA,KAAW,CAAA,GACtB,uCACA,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,kCAAA,CAAA,EAC7B,CAAA;AAAA,4BACAF,eAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,OAAM,CAAA,EAAE,uBAAA,EAAwB,WAAW,CAAA,EAAG,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,IAC7F,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAClB;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAF,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,aAAA;AAAA,cACT,QAAA,EAAU,QAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY,aAAA;AAAA,gBACZ,MAAA,EAAQ,MAAA;AAAA,gBACR,OAAA,EAAS,OAAA;AAAA,gBACT,MAAA,EAAQ,WAAW,MAAA,GAAS,SAAA;AAAA,gBAC5B,OAAA,EAAS,MAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,cAAA,EAAgB,QAAA;AAAA,gBAChB,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,eAC5B;AAAA,cACA,KAAA,EAAM,UAAA;AAAA,cAEN,QAAA,kBAAAA,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,IAAA;AAAA,gBAAP;AAAA,kBACC,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,kBACtC,UAAA,EAAY,QAAA,GAAW,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,QAAA,EAAS,GAAI,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,kBACzF,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,kBAEzE,QAAA,kBAAAX,eAACmC,qBAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAO9B,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA;AAAA;AACxD;AAAA,WACF;AAAA,0BACAL,cAAAA;AAAA,YAACW,mBAAAA,CAAO,GAAA;AAAA,YAAP;AAAA,cACC,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,cACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,cAC7B,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,cAEzE,QAAA,kBAAAX,eAACoC,uBAAA,EAAA,EAAY,IAAA,EAAK,SAAQ,KAAA,EAAO/B,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA;AAAA;AAC1D,SAAA,EACF,CAAA;AAAA,wBAGAL,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,sCACCd,eAAAA;AAAA,UAACa,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,YACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,YAC9C,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,eAAeN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAG;AAAA,YAOhF,QAAA,EAAA;AAAA,8BAAAL,eAACS,SAAAA,EAAA,EAAK,KAAI,GAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,IACvE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,gBAAA,MAAM,MAAA,GAAS,IAAI,EAAA,KAAO,SAAA;AAC1B,gBAAA,MAAM,OAAA,GAAU,eAAe,GAAA,CAAI,EAAA;AACnC,gBAAA,IAAI,EAAA,GAAa,aAAA;AACjB,gBAAA,IAAI,MAAA,EAAQ,EAAA,GAAKA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAAA,qBAAA,IAC7B,OAAA,EAAS,EAAA,GAAKA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA;AAC5C,gBAAA,uBACEL,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,sBAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AAAA,oBAAG,CAAA;AAAA,oBAC7D,YAAA,EAAc,MAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AAAA,oBACxC,YAAA,EAAc,MAAM,aAAA,CAAc,CAAC,MAAO,CAAA,KAAM,GAAA,CAAI,EAAA,GAAK,IAAA,GAAO,CAAE,CAAA;AAAA,oBAClE,KAAA,EAAO;AAAA,sBACL,IAAA,EAAM,CAAA;AAAA,sBACN,UAAA,EAAY,EAAA;AAAA,sBACZ,MAAA,EAAQ,MAAA;AAAA,sBACR,YAAA,EAAc,MAAA,GAAS,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,GAAK,yBAAA;AAAA,sBACpD,OAAA,EAAS,WAAA;AAAA,sBACT,MAAA,EAAQ,SAAS,SAAA,GAAY,SAAA;AAAA,sBAC7B,KAAA,EAAO,SAAS,SAAA,GAAY,uBAAA;AAAA,sBAC5B,UAAA,EAAY,cAAA;AAAA,sBACZ,QAAA,EAAU,8BAAA;AAAA,sBACV,aAAA,EAAe,QAAA;AAAA,sBACf,aAAA,EAAe,WAAA;AAAA,sBACf,UAAA,EAAY;AAAA,qBACd;AAAA,oBAEC,QAAA,EAAA,GAAA,CAAI;AAAA,mBAAA;AAAA,kBAnBA,GAAA,CAAI;AAAA,iBAoBX;AAAA,cAEJ,CAAC,CAAA,EACH,CAAA;AAAA,8BAEAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IAAK,EAAA;AAAA,kBACnC,QAAQ,MAAA,KAAW,SAAA;AAAA,kBACnB,MAAA,EAAQ,CAAC,CAAA,KAAM;AAAE,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,oBAAA,UAAA,CAAW,SAAS,CAAA;AAAA,kBAAG,CAAA;AAAA,kBAC7D;AAAA;AAAA;AACF;AAAA,WAAA;AAAA,UAnDI;AAAA,SAoDN,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIM,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,SAAS,EAAA,GAAK,CAAC,EAAE,CAAA,GAAI,IAAA,CAAK,MAAM,IAAI,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,CAAE,MAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,MAAA,GACXT,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,GACrB,OAAA,GACEA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,GACrBA,UAAAA,CAAM,WAAW,GAAG,CAAA;AAE1B,EAAA,uBACEP,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,YAAW,EACjC,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAA;AAAA,QACT,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,QACnC,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,QACpC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,OAAA;AAAA,UACP,MAAA,EAAQ,CAAA;AAAA,UACR,UAAA,EAAY,MAAA;AAAA,UACZ,QAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,SAAS,SAAA,GAAY,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA;AAAA,UAClE,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,UAC3B,OAAA,EAAS,aAAA;AAAA,UACT,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,OAAA;AAAA,UACL,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,MAAA,mBACGL,cAAAA,CAACqC,iBAAA,EAAA,EAAM,IAAA,EAAK,SAAQ,KAAA,EAAM,SAAA,EAAU,CAAA,mBACpCrC,cAAAA,CAACsC,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAO,SAAA,EAAW,CAAA;AAAA,0BACzCtC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAAS,CAAA,EAAG,MAAA,GAAS,YAAY,SAAA,EACpF,QAAA,EAAA,MAAA,GAAS,WAAW,MAAA,EACvB;AAAA;AAAA;AAAA,KACF;AAAA,oBAEAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO;AAAA,MACV,YAAYK,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,MAC3C,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX,EACE,QAAA,kBAAAL,cAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAO,EAAE,cAAA,EAAgB,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,GAAA,EAAI,EACrH,QAAA,kBAAAA,cAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBF,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAE,cAAAA,CAAC,QAAG,KAAA,EAAO;AAAA,QACT,KAAA,EAAO,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA,EAAA,CAAA;AAAA,QAC1B,SAAA,EAAW,OAAA;AAAA,QACX,OAAA,EAAS,eAAA;AAAA,QACT,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,MAAA;AAAA,QACZ,UAAA,EAAY,QAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB,EAAI,cAAI,CAAA,EAAE,CAAA;AAAA,sBACVA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO;AAAA,QACT,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB,EAAI,kBAAQ,QAAA,EAAI;AAAA,KAAA,EAAA,EAfT,CAgBT,CACD,CAAA,EACH,CAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpSA,SAAS,SAAA,CAAU,KAAU,IAAA,EAAmB;AAC9C,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAS,GAAA,GAAM,GAAA,CAAI,GAAG,CAAA,GAAI,QAAY,GAAG,CAAA;AAC/E;AAEA,SAAS,SAAA,CAAU,GAAA,EAAU,IAAA,EAAc,KAAA,EAAiB;AAC1D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAC,GAAG,GAAG,CAAA,GAAI,EAAE,GAAG,GAAA,EAAI;AACtD,EAAA,IAAI,OAAA,GAAU,IAAA;AAEd,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAEtC,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAG,CAAA;AAE5B,IAAA,OAAA,CAAQ,GAAG,CAAA,GACT,QAAA,IAAY,OACR,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GACpB,CAAC,GAAG,QAAQ,CAAA,GACZ,EAAE,GAAG,QAAA,KACP,OAAA,GACA,KACA,EAAC;AAEP,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AACjC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CAAa,KAAU,IAAA,EAAmB;AACjD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,IAAI,OAAA,GAAU,MAAA;AAEd,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,GAAA;AAC1B,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,EAAE,GAAG,OAAA,CAAQ,GAAG,CAAA,EAAE;AACjC,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACpC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAA0C;AAC/D,EAAA,OACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,EAAE,KAAA,YAAiB,IAAA,CAAA;AAEvB;AAEA,SAAS,mBAAA,CAAoB,MAAA,EAAa,OAAA,EAAc,MAAA,GAAS,EAAA,EAAc;AAC7E,EAAA,IAAI,OAAO,EAAA,CAAG,MAAA,EAAQ,OAAO,CAAA,SAAU,EAAC;AAExC,EAAA,MAAM,WAAA,GAAc,cAAc,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,cAAc,OAAO,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAE1C,EAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,MAAA,EAAQ,UAAU,CAAA,EAAG,OAAA,EAAS,UAAU,CAAC,CAAA;AACjE,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,UAAA,GAAa,SAAS,CAAA,EAAG,MAAM,IAAI,CAAC,CAAA,CAAA,GAAK,GAAG,CAAC,CAAA,CAAA;AACnD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,mBAAA,CAAoB,MAAA,GAAS,CAAC,GAAG,OAAA,GAAU,CAAC,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,IAAA,MAAM,IAAA,uBAAW,GAAA,CAAI;AAAA,MACnB,GAAG,MAAA,CAAO,IAAA,CAAK,MAAA,IAAU,EAAE,CAAA;AAAA,MAC3B,GAAG,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE;AAAA,KAC7B,CAAA;AACD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,aAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AACjD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,mBAAA,CAAoB,MAAA,GAAS,GAAG,GAAG,OAAA,GAAU,GAAG,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IAC/E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,GAAS,CAAC,MAAM,CAAA,GAAI,EAAC;AAC9B;AAEA,SAAS,mBAAA,CACP,QACA,WAAA,EAC2C;AAC3C,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,MAAA,EAAQ,WAAW,CAAA;AACtD,EAAA,IAAI,UAAsB,EAAC;AAE3B,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,OAAA,GAAU,UAAU,OAAA,EAAS,IAAA,EAAM,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAC3B;AAEA,SAAS,YAAA,CACP,KAAA,EACA,MAAA,GAAS,EAAA,EACoB;AAC7B,EAAA,MAAM,SAAsC,EAAC;AAE7C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,MAAM,WAAW,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,MAAM,GAAG,CAAA;AAErB,IAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA;AAAA,SAAA,IACzC,OAAO,GAAA,KAAQ,QAAA;AACtB,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,OAAA,CACb,IAAA,EACA,KAAA,EACA,MAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AACjC,EAAA,OAAO,MAAA,YAAkB,OAAA,GAAU,MAAM,MAAA,GAAS,MAAA;AACpD;AA0DO,SAAS,eAAA,CACd,aAAA,EACA,eAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,eAAA,GAAkB,YAAA,CAAa,eAAe,IAAI,EAAC;AAErE,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,EAAA,OAAOuC,mBAAA,CAA0B,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,IAC9C,aAAA;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,gBAAgB,EAAC;AAAA,IACjB,OAAA,EAAS,KAAA;AAAA,IACT,UAAA,EAAY,KAAA;AAAA,IACZ,eAAe,EAAC;AAAA,IAChB,YAAA,EAAc,CAAA;AAAA,IACd,QAAA;AAAA,IAEA,QAAQ,YAAY;AAClB,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,QAAA,EAAS;AACrC,MAAA,IAAI,OAAA,IAAW,MAAM,QAAA,EAAU;AAC7B,QAAA,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IAEA,aAAA,EAAe,CAAC,IAAA,KAAiB;AAC/B,MAAA,OAAO;AAAA,QACL,OAAO,SAAA,CAAU,GAAA,EAAI,CAAE,MAAA,EAAQ,IAAI,CAAA,IAAK,EAAA;AAAA,QACxC,KAAA,EAAO,GAAA,EAAI,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,QACxB,QAAA,EAAU,CAAC,CAAA,KAA2C;AACpD,UAAA,GAAA,EAAI,CAAE,SAAS,IAAA,EAAM,CAAA,CAAE,OAAO,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,QACzD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,kBAAkB,MAAM;AACtB,MAAA,OAAA,CAAQ,KAAA,EAAM;AACd,MAAA,GAAA,CAAI,EAAE,eAAe,EAAC,EAAG,cAAc,CAAA,EAAG,cAAA,EAAgB,EAAC,EAAG,CAAA;AAAA,IAChE,CAAA;AAAA,IAEA,kBAAkB,CAAC,gBAAA,KACjB,IAAI,EAAE,aAAA,EAAe,kBAAkB,CAAA;AAAA,IAEzC,QAAA,EAAU,CAAC,IAAA,EAAM,KAAA,EAAO,OAAA,KAAY;AAClC,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA;AAC5B,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,KAAK,CAAA;AAEtD,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,aAAA,EAAe,IAAI,CAAA;AACpD,MAAA,MAAM,aAAa,KAAA,KAAU,QAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAC1B,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAEhB,MAAA,IAAI,aAAa,KAAA,CAAM,cAAA;AAEvB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,QAAA,UAAA,GAAa,SAAA,CAAU,UAAA,EAAY,IAAA,EAAM,KAAK,CAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,QAAA,UAAA,GAAa,YAAA,CAAa,YAAY,IAAI,CAAA;AAAA,MAC5C;AAEA,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,SAAA;AAAA,QACR,cAAA,EAAgB,UAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAA;AAAA,QAC1B,UAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAe,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AAAA,QACjC,cAAc,OAAA,CAAQ;AAAA,OACvB,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AAExB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,OAAA,CAAQ,OAAA,CAAQ,QAAQ,IAAA,EAAM,KAAA,EAAO,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AAC/D,QAAA,IAAI,KAAA;AACF,UAAA,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA,EAAE,CAAE,CAAA;AAAA;AAEzD,UAAA,GAAA,CAAI,CAAC,OAAO,EAAE,MAAA,EAAQ,aAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAA,EAAE,CAAE,CAAA;AAAA,MACzD,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,QAAA,EAAU,CAAC,IAAA,EAAM,OAAA,KACf,IAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,UAAU,CAAA,CAAE,MAAA,EAAQ,IAAA,EAAM,OAAO,GAAE,CAAE,CAAA;AAAA,IAE7D,UAAA,EAAY,CAAC,IAAA,KACX,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,YAAA,CAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,GAAE,CAAE,CAAA;AAAA,IAEvD,aAAA,EAAe,OAAO,IAAA,KAAS;AAC7B,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAC1C,MAAA,MAAM,QAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,MAAM,MAAM,CAAA;AAErD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA,EAAE,CAAE,CAAA;AACzD,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,GAAA,CAAI,CAAC,OAAO,EAAE,MAAA,EAAQ,aAAa,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAA,EAAE,CAAE,CAAA;AACrD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,UAAU,YAAY;AACpB,MAAA,MAAM,QAAQ,GAAA,EAAI;AAClB,MAAA,IAAI,OAAA,GAAU,IAAA;AACd,MAAA,IAAI,YAAoC,EAAC;AAEzC,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,QAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,MAAM,MAAM,CAAA;AAErD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,GAAU,KAAA;AACV,UAAA,SAAA,GAAY,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,KAAK,CAAA;AAAA,QAC9C;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AACzB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,KAAI,CAAE,aAAA;AAAA,QACd,QAAQ,EAAC;AAAA,QACT,gBAAgB,EAAC;AAAA,QACjB,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,eAAe,EAAC;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,SAAA,KAAc;AAC3B,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,SAAA;AAAA,QACR,aAAA,EAAe,SAAA;AAAA,QACf,QAAQ,EAAC;AAAA,QACT,gBAAgB,EAAC;AAAA,QACjB,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,eAAe,EAAC;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,MAAM;AACV,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,MAAA,MAAM,IAAA,GAAO,QAAQ,GAAA,EAAI;AACzB,MAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI,CAAE,MAAM,CAAA;AAExB,MAAA,MAAM,EAAE,QAAQ,OAAA,EAAQ,GAAI,oBAAoB,IAAA,EAAM,GAAA,GAAM,aAAa,CAAA;AAEzE,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,IAAA;AAAA,QACR,cAAA,EAAgB,OAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAA;AAAA,QAC1B,UAAA,EAAY,IAAA;AAAA,QACZ,aAAA,EAAe,MAAA;AAAA,QACf,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,SAAS,MAAM;AACb,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAEpB,MAAA,MAAM,IAAA,GAAO,OAAO,GAAA,EAAI;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAAE,MAAM,CAAA;AAEzB,MAAA,MAAM,EAAE,QAAQ,OAAA,EAAQ,GAAI,oBAAoB,IAAA,EAAM,GAAA,GAAM,aAAa,CAAA;AAEzE,MAAA,GAAA,CAAI;AAAA,QACF,MAAA,EAAQ,IAAA;AAAA,QACR,cAAA,EAAgB,OAAA;AAAA,QAChB,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,OAAO,MAAA,GAAS,CAAA;AAAA,QAC5B,aAAA,EAAe,MAAA;AAAA,QACf,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,GACF,CAAE,CAAA;AACJ;AAMA,IAAM,WAAA,GAAclB,oBAA+C,IAAI,CAAA;AAEhE,SAAS,YAAA,CAAgB;AAAA,EAC9B,aAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAA,GAAWR,YAAAA;AAAA,IACf,eAAA,CAAmB,aAAA,EAAe,QAAA,EAAU,QAAQ;AAAA,GACtD;AAEA,EAAA,uBACEb,eAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,QAAA,CAAS,SACnC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAA,GAAa;AAC3B,EAAA,MAAMwB,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,KAAA,GAAQD,iBAASC,MAAK,CAAA;AAE5B,EAAA,MAAM,aAAA,GAAgBgB,cAAQ,MAAM;AAClC,IAAA,OAAO,mBAAA,CAAoB,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,aAAa,CAAA;AAAA,EAC9D,GAAG,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,aAAa,CAAC,CAAA;AAEtC,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,YAAA,EAAc,cAAc,MAAA,EAAO;AACvE;AAEO,SAAS,aACd,IAAA,EACwD;AACxD,EAAA,MAAMhB,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAOD,gBAAAA,CAASC,QAAO,CAAC,CAAA,KAAM,UAAU,CAAA,CAAE,MAAA,EAAQ,IAAI,CAAC,CAAA;AACzD;AAyCO,SAAS,cAAA,GAAoB;AAClC,EAAA,MAAMA,MAAAA,GAAQF,iBAAW,WAAW,CAAA;AACpC,EAAA,IAAI,CAACE,MAAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAOA,OAAM,QAAA,EAAS;AAexB;AC/fA,IAAM,KAAA,uBAAkC,GAAA,EAAI;AAC5C,IAAM,SAAA,uBAA4C,GAAA,EAAI;AAEtD,SAAS,OAAO,GAAA,EAAa;AAC3B,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC5B,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,OAAA,CAAQ,CAAC,EAAA,KAAO,EAAA,EAAI,CAAA;AACzB;AAUO,SAAS,aAAA,CAAiB,KAAa,OAAA,EAAoD;AAGhG,EAAA,MAAM,GAAG,OAAO,CAAA,GAAIV,eAAS,CAAC,CAAA;AAE9B,EAAAE,gBAAU,MAAM;AACd,IAAA,MAAM,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,wBAAS,GAAA,EAAc;AACpD,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AACtB,IAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,CAACgB,EAAAA,KAAMA,KAAI,CAAC,CAAA;AAC1C,IAAA,GAAA,CAAI,IAAI,OAAO,CAAA;AACf,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,CAAI,OAAO,OAAO,CAAA;AAClB,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,CAAA,EAAG,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,IAC1C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,KAAA,GAAS,MAAM,GAAA,CAAI,GAAG,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,GAAI,OAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAA4B;AAC5C,IAAA,MAAM,OAAO,OAAO,CAAA,KAAM,UAAA,GAAc,CAAA,CAAkB,KAAK,CAAA,GAAI,CAAA;AACnE,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,IAAI,CAAA;AACnB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;ACgBO,SAAS,uBAAA,GAA4D;AAC1E,EAAgB,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAE/G;ACnDO,IAAM,iBAAA,GAAoBzB,cAAAA,CAAuB,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,EACrE,MAAA,EAAQ,IAAA;AAAA,EACR,OAAO,CAAS,IAAA,KACd,IAAI,OAAA,CAAuB,CAAC,OAAA,KAAY;AACtC,IAAA,MAAM,IAAA,GAAO,KAAI,CAAE,MAAA;AACnB,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC3B,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAA,IAA6C,CAAA;AAAA,EACxE,CAAC,CAAA;AAAA,EACH,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB,CAAA;AAAA,EACA,cAAc,MAAM;AAClB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAChB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB;AACF,CAAA,CAAE;AC5CFkC,0BAAA,CAAQ,GAAA,CAAIC,qBAAA,EAAKC,uBAAA,EAAKC,sBAAG,CAAA;AA2BlB,IAAM,eAAA,GAAkB,IAAIC,sBAAA,CAAY;AAAA,EAC7C,cAAA,EAAgB,EAAE,OAAA,EAAS,EAAE,WAAW,GAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,GAAA,EAAO;AACrE,CAAC,CAAA;ACgBD,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ;AAC7B,CAAA,EAKG;AACD,EAAA,MAAM,QAAQrC,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAEhD,EAAA,uBACEV,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,UAAA,EAAY,EAAE,UAAA,EAAY,MAAA,GAASN,WAAM,KAAA,EAAO,IAAI,IAAI,wBAAA,EAAyB;AAAA,MACjF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,UAAA,EAAY,MAAA,GAASA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAI,aAAA;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY,CAAA,YAAA,EAAe,MAAA,GAAS,KAAA,GAAQ,aAAa,CAAA,CAAA;AAAA,QACzD,YAAA,EAAc,KAAK,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,QACrD,OAAA,EAAS,WAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,OAAA;AAAA,QACL,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,GAAS,QAAQ,wBAAA,EAA0B,CAAA;AAAA,wBACxDA,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,MAAA,GAAS,KAAA,GAAQ,0BAC/E,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,0BACCF,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,QAAA,EAAS,gBAAA;AAAA,YACT,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,KAAA;AAAM;AAAA;AACvG;AAAA;AAAA,GAEJ;AAEJ;AAIA,SAAS,eAAA,CAA+C;AAAA,EACtD,OAAA;AAAA,EAAS;AACX,CAAA,EAGG;AACD,EAAA,MAAM,QAAQH,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,OAAA,EAAW;AACxB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIM,cAAAA,CAAS,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AACtC,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,QAAA,CAAS,OAAO,KAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,IAAA,CAAK,KAAK,GAAG,CAAC,KAAK,CAAA,CAAE,OAAO,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACxF,UAAA;AAAA,QACF;AACA,QAAA,MAAM,UAAU,IAAA,CAAK,MAAA;AACrB,QAAC,OAAO,IAAA,CAAK,MAAA,CAAO,IAAK,CAAA,CAAkB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1D,UAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAA,CAAM,GAAG,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AACtE,YAAA,IAAA,CAAK,QAAA,CAAS,GAAA,EAAe,MAAA,CAAO,IAAA,CAAM,GAAG,CAAC,CAAA;AAAA,UAChD;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,MAAM,UAAU,IAAA,CAAK,MAAA;AACrB,QAAC,OAAO,IAAA,CAAK,MAAM,CAAA,CAAkB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpD,UAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAG,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AAChE,YAAA,IAAA,CAAK,QAAA,CAAS,GAAA,EAAe,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,UAC1C;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AACA,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,CAAA,EAAQ;AACf,MAAA,QAAA,CAAS,EAAE,OAAO,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,eAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,MAAA,CAAO,qBAAqB,CAAA,EAAG,IAAA,EAAMgD,iBAAA,EAAO,SAAA,EAAW,OAAO,OAAA,EAAkB,KAAA,EAAM,QAAO,SAAA,EAAU,MAAA,EAAO,QAAQ,GAAA,EAClI,QAAA,EAAA;AAAA,oBAAAhD,eAAAA,CAACK,QAAAA,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,CAAA,EAAE,OAAA,EAAQ,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO,EACjD,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAAC+C,cAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,KAAA;AAAA,UACZ,QAAA,EAAU,OAAA;AAAA,UACV,IAAA,EAAM,EAAA;AAAA,UACN,YAAA,EAAY,IAAA;AAAA,UACZ,eAAA,EAAgB,cAAA;AAAA,UAChB,QAAQ,OAAO;AAAA,YACb,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,EAAa,UAAU,OAAA,EAAS,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,MAAA;AAAO,WACvF;AAAA;AAAA,OACF;AAAA,MACC,KAAA,oBAAS/C,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,SAAA,EAAU,EAAA,EAAG,OAAO,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EAC3E,CAAA;AAAA,oBACAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,OAAA,EAAQ,YAAW,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAO,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACzH,QAAA,EAAA;AAAA,sBAAAX,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UAAc,OAAA,EAAS,OAAA;AAAA,UAAS,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UACrH,KAAA,EAAO,EAAE,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,UACxP,QAAA,EAAA;AAAA,4BAAAL,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB,CAAA;AAAA,4BACjC5B,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,iBAAiB,CAAA,EAAE;AAAA;AAAA;AAAA,OACrH;AAAA,sBACAJ,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UAAc,OAAA,EAAS,UAAA;AAAA,UAAY,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,UAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UAC1G,OAAO,EAAE,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,MAAM,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,SAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,UAC1P,QAAA,EAAA;AAAA,4BAAAL,cAAAA,CAACqC,iBAAAA,EAAA,EAAM,KAAA,EAAc,CAAA;AAAA,4BACrBrC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,gBAAgB,CAAA,EAAE;AAAA;AAAA;AAAA;AACpG,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAChF,EAAA,IAAI;AAAE,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EAAG;AACtE;AAEA,SAAS,sBAAsB,KAAA,EAAyC;AACtE,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,UAAU,GAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACjC,MAAA,OAAO,KAAK,cAAA,CAAe,MAAA,EAAW,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,MAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClJ;AAAA,EACF;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAClC,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACjC,MAAA,OAAO,KAAK,cAAA,CAAe,MAAA,EAAW,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,MAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClJ;AAAA,EACF;AACA,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAiC,KAAA,EAAe;AACvE,EAAA,OAAO,GAAG,KAAA,CAAM,OAAO,IAAI,KAAA,CAAM,eAAe,IAAI,KAAK,CAAA,CAAA;AAC3D;AAIA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAM,EAAwC;AACrE,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,OAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,CAAA,YAAA,EAAeJ,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,UAAA,EAAYA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,GAAE,EAC/L,QAAA,EAAA;AAAA,oBAAAP,eAAAA,CAACI,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,GAAE,wBAAA,EAAyB,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACnD,MAAM,gBAAA,IAAoB,GAAA;AAAA,MAAI,GAAA;AAAA,MAAE,QAAA;AAAA,MAAS,GAAA;AAAA,MAAE,MAAM,eAAA,IAAmB;AAAA,KAAA,EAC/E,CAAA;AAAA,oBACAJ,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,mBAAA,EAAqB,kDAAA,EAAoD,GAAA,EAAK,SAAS,MAAA,EAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,IAAI,QAAA,EAAU,QAAA,EAAU,UAAA,EAAYA,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,GAAE,EAC/Q,QAAA,EAAA;AAAA,sBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnJL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnJL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,UAAA,EAAYG,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAE,EAAG,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,MAAA,CAC/I,MAAM,OAAA,IAAW,IAAI,GAAA,CAAI,CAAC,QAAQ,GAAA,KAAQ;AAC1C,QAAA,MAAM,KAAK,GAAA,GAAM,CAAA,KAAM,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAC9F,QAAA,OAAO;AAAA,0BACLL,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,SAAA,EAAU,EAAA,EAAG,OAAA,EAAQ,IAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAa,EAAI,QAAA,EAAA,MAAA,CAAO,IAAA,EAAA,EAAxI,CAAA,EAAG,GAAG,CAAA,EAAA,CAAuI,CAAA;AAAA,0BACxJF,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,WAAA,EAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAAwB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,UAAA,EAAY,UAAA,EAAW,EAAI,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA,EAAA,EAA1L,CAAA,EAAG,GAAG,CAAA,EAAA,CAAsL,CAAA;AAAA,0BACvMF,cAAAA,CAACE,SAAAA,EAAA,EAAsB,EAAA,EAAG,WAAA,EAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,QAAA,EAAS,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,UAAA,EAAY,UAAA,EAAW,EAAI,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA,EAAA,EAA3L,CAAA,EAAG,GAAG,CAAA,EAAA,CAAuL;AAAA,SAC1M;AAAA,MACF,CAAC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAiF;AACpI,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,EAAO,IAAA,IAAQ,KAAA,CAAM,OAAO,UAAA,IAAc,SAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,GAAU,CAAC,GAAG,IAAA,IAAQ,GAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,GAAG,KAAA,CAAM,gBAAA,IAAoB,GAAG,CAAA,QAAA,EAAW,KAAA,CAAM,mBAAmB,GAAG,CAAA,CAAA;AAE3F,EAAA,uBACER,cAAAA,CAACW,mBAAAA,CAAO,GAAA,EAAP,EAAW,MAAA,EAAM,IAAA,EAAC,OAAA,EAAS,EAAE,SAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,GAAE,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,SAAA,EAAU,EAC7H,QAAA,kBAAAb,gBAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,QAAA,EAC3B,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAACW,mBAAAA,CAAO,MAAA;AAAA,MAAP;AAAA,QAAc,OAAA,EAAS,QAAA;AAAA,QAAU,UAAA,EAAY,EAAE,KAAA,EAAO,KAAA,EAAM;AAAA,QAAG,QAAA,EAAU,EAAE,KAAA,EAAO,KAAA,EAAM;AAAA,QAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,QACvH,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,GAAWN,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAe,QAAA,GAAWA,UAAAA,CAAM,KAAA,CAAM,OAAO,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,SAAS,eAAA,EAAiB,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,MAAA,EAAO;AAAA,QAC/T,QAAA,kBAAAP,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,mBAAA,EAAqB,4CAAA,EAA8C,GAAA,EAAK,OAAA,EAAS,UAAA,EAAY,UAAS,EACnI,QAAA,EAAA;AAAA,0BAAAE,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,cAAA,EAAgB,QAAA,EAAS,EACtD,QAAA,kBAAAA,eAACW,mBAAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAS,EAAE,QAAQ,QAAA,GAAW,CAAA,GAAI,GAAA,EAAI,EAAG,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,SAAA,IACvF,QAAA,kBAAAX,cAAAA,CAACoC,uBAAAA,EAAA,EAAY,MAAK,OAAA,EAAQ,KAAA,EAAO,WAAW,uBAAA,GAA0B,wBAAA,EAA0B,GAClG,CAAA,EACF,CAAA;AAAA,0BACApC,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,qBAAA,CAAsB,KAAK,CAAA,EAAE,CAAA;AAAA,0BAC1GF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACnFF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAA0B,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,0BAC3EF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,SAAA,EAAW,CAAA,EAAI,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,0BACvFF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,aAAY,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAA0B,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC1E;AAAA;AAAA,KACF;AAAA,oBACAF,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,QAAA,oBACCZ,cAAAA,CAACW,mBAAAA,CAAO,GAAA,EAAP,EAAyB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAG,EAAG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,GAAE,EAAG,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAG,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,WAAA,EAAY,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS,EACxO,QAAA,kBAAAX,cAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,CAAA,EAAA,EADf,SAEhB,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,QAAQQ,oBAAAA,EAAgB;AAC9B,EAAA,uBACEV,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,mBAAA,EAAqB,4CAAA,EAA8C,GAAA,EAAK,SAAS,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAA,YAAA,EAAeO,UAAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,cAAc,KAAA,CAAM,MAAA,CAAO,IAAI,UAAA,EAAYA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,OAAA,EAAS,iBAAgB,EACtS,QAAA,EAAA;AAAA,oBAAAL,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBAC/DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBAClEF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,oBACnEF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBAC/DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,oBAC1EF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,QAAA,EAAA,SAAA,EAAO;AAAA,GAAA,EACvE,CAAA;AAEJ;AAIA,SAAS,kBAAA,CAAmB;AAAA,EAC1B;AACF,CAAA,EAEG;AACD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,uBAAA,EAAwB;AAC/C,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIM,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAElE,EAAA,MAAM,OAAA,GAAU0B,aAAAA,CAAQ,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM,CAAA,EAAI,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAE5E,EAAA,MAAM,eAAeQ,2BAAA,CAAiB;AAAA,IACpC,QAAA,EAAU,CAAC,qBAAA,EAAuB,OAAO,CAAA;AAAA,IACzC,gBAAA,EAAkB,CAAA;AAAA,IAClB,OAAA,EAAS,OAAO,EAAE,SAAA,EAAU,KAAM;AAChC,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW;AAAA,QAChC,MAAA,EAAQ,SAAA;AAAA,QACR,KAAA,EAAO,EAAA;AAAA,QACP,KAAA,EAAO,QAAQ,KAAA,IAAS,MAAA;AAAA,QACxB,IAAA,EAAM,QAAQ,IAAA,IAAQ,MAAA;AAAA,QACtB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,OACzB,CAAA;AACD,MAAA,IAAI,CAAC,QAAA,EAAU,OAAA,IAAW,CAAC,SAAS,IAAA,EAAM;AACxC,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU,+BAA+B,CAAA;AAAA,MACrE;AACA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,QAAA,KAAa,QAAA,CAAS;AAAA,GAC1C,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,KAAK,CAAA,IAAK,EAAC;AACxE,EAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,CAAC,GAAG,KAAA,IAAS,CAAA;AAEpD,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA+B;AACvD,IAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,IAAA,IAAI,EAAA,CAAG,YAAA,GAAe,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,YAAA,GAAe,GAAA,IAAO,YAAA,CAAa,WAAA,IAAe,CAAC,YAAA,CAAa,kBAAA,EAAoB;AAC1H,MAAA,YAAA,CAAa,aAAA,EAAc;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,uBACElD,eAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,MAAA,CAAO,wBAAwB,CAAA,EAAG,IAAA,EAAMmD,mBAAA,EAAS,SAAA,EAAW,OAAO,OAAA,EAAkB,KAAA,EAAM,QAAO,SAAA,EAAU,MAAA,EAAO,QAAQ,GAAA,EACvI,QAAA,EAAA;AAAA,oBAAAnD,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,EACtD,QAAA,EAAA;AAAA,sBAAAX,eAAAA,CAACW,WAAA,EAAK,GAAA,EAAI,MAAK,CAAA,EAAE,IAAA,EAAK,OAAO,EAAE,YAAA,EAAc,eAAeJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAG,EAC7F,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACkD,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,yBAAA,EAA0B,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAAG,CAAA;AAAA,wBAC/LlD,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACmD,kBAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,qCAAA,EAAsC,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,wBACzMnD,cAAAA,CAAC+B,cAAAA,EAAA,EAAU,WAAA,kBAAa/B,cAAAA,CAACoD,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAI,WAAA,EAAY,cAAA,EAAe,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA,EAAG,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,wBAClLpD,cAAAA;AAAA,UAACW,mBAAAA,CAAO,MAAA;AAAA,UAAP;AAAA,YACC,SAAS,MAAM;AAAE,cAAA,cAAA,CAAe,IAAI,CAAA;AAAG,cAAA,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA;AAAG,cAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAAG,cAAA,QAAA,CAAS,UAAA,CAAW,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAAA,YAAG,CAAA;AAAA,YACxJ,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAE;AAAA,YAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,YACvE,KAAA,EAAO,EAAE,UAAA,EAAYA,UAAAA,CAAM,OAAO,IAAI,CAAA,EAAG,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,IAAI,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,eAAA,EAAiB,MAAA,EAAQ,SAAA,EAAU;AAAA,YACjK,QAAA,kBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAG,KAAA,EAAO,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AACpD,OAAA,EACF,CAAA;AAAA,sBAEAJ,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,MAAK,CAAA,EAAE,IAAA,EAAK,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO,EAAG,UAAU,gBAAA,EACtG,QAAA,EAAA;AAAA,wBAAAT,eAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAClC,QAAA,EAAA,YAAA,CAAa,cAAc,CAAC,YAAA,CAAa,OAAO,oBAAA,GAAuB,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA,EAClF,CAAA;AAAA,wBACAF,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,QACnB,YAAA,CAAa,OAAA,oBAAWA,cAAAA,CAACE,WAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,IAAA,EAAK,CAAA,EAAE,SAAA,EAAY,QAAA,EAAA,YAAA,CAAa,MAAgB,OAAA,EAAQ,CAAA;AAAA,QAC7G,CAAC,YAAA,CAAa,SAAA,IAAa,KAAK,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA,CAAa,OAAA,oBAC7DF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,IAAA,EAAK,CAAA,EAAE,0BAAyB,QAAA,EAAA,uCAAA,EAAqC,CAAA;AAAA,wBAEpGF,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,OAAA,EAAS,OACvB,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC1B,UAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AACxC,UAAA,uBAAOZ,cAAAA,CAAC,eAAA,EAAA,EAA0B,KAAA,EAAc,UAAU,WAAA,KAAgB,GAAA,EAAK,QAAA,EAAU,MAAM,eAAe,WAAA,KAAgB,GAAA,GAAM,IAAA,GAAO,GAAG,KAAjH,GAAoH,CAAA;AAAA,QACnJ,CAAC,CAAA,EACH,CAAA;AAAA,QAAA,CACE,aAAa,kBAAA,IAAsB,YAAA,CAAa,8BAChDA,cAAAA,CAACS,WAAA,EAAK,OAAA,EAAQ,QAAA,EAAS,EAAA,EAAG,MAAK,QAAA,kBAAAT,cAAAA,CAACqD,eAAO,IAAA,EAAK,IAAA,EAAK,OAAc,CAAA,EAAE;AAAA,OAAA,EAErE;AAAA,KAAA,EACF,CAAA;AAAA,oBACArD,cAAAA,CAACS,SAAAA,EAAA,EAAK,OAAA,EAAQ,YAAW,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAO,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACzH,QAAA,kBAAAX,eAAAA;AAAA,MAACa,mBAAAA,CAAO,MAAA;AAAA,MAAP;AAAA,QAAc,OAAA,EAAS,OAAA;AAAA,QAAS,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,QAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,QACrH,KAAA,EAAO,EAAE,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,QAAQ,GAAA,EAAI;AAAA,QACxP,QAAA,EAAA;AAAA,0BAAAL,eAAC4B,aAAAA,EAAA,EAAE,KAAA,EAAM,uBAAA,EAAwB,MAAK,OAAA,EAAQ,CAAA;AAAA,0BAC9C5B,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,gBAAgB,CAAA,EAAE;AAAA;AAAA;AAAA,KACpH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,gBAAA,CAAgD;AAAA,EACvD,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,OAAA;AAAA,EAC/C,MAAA;AAAA,EAAQ,gBAAA;AAAA,EAAkB,aAAA;AAAA,EAC1B,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ;AACjB,CAAA,EAA+F;AAC7F,EAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAa,UAAA,KAAe,uBAAA,EAA2B;AAC7E,EAAA,MAAM,OAAO,OAAA,EAAW;AACxB,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,CAAC,CAAA,KAAM,EAAE,eAAe,CAAA;AAIpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,aAAA,CAAc,+BAA+B,QAAA,CAAS,CAAC,CAAA,EAAG,EAAA,IAAM,EAAE,CAAA;AACpG,EAAA,MAAM,aAAA,GAAgBK,aAAO,IAAI,CAAA;AACjC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAChF,EAAA,MAAM,YAAA,GAAe,KAAK,YAAA,IAAgB,CAAA;AAC1C,EAAA,MAAM,UAAU,YAAA,GAAe,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,mBAAmB,CAAA;AAEjD,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,EAAO;AAAA,EACT,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,SAAS,cAAc,CAAA,EAAkB;AACvC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACxB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,EAAQ;AAAA,IACV;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,uBACElB,gBAAAwD,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAtD,cAAAA,CAACY,4BAAAA,EAAA,EAAiB,QAAA,EAAA,QAAA,oBAAYZ,cAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA,EAAG,QAAgB,CAAA,EAAG,CAAA;AAAA,oBACrGA,cAAAA,CAACY,4BAAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,oBAAeZ,cAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,GAAG,CAAA,EAAG,CAAA;AAAA,oBAC9FA,cAAAA,CAACY,4BAAAA,EAAA,EACE,uCACCZ,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,sBAAsB,CAAA;AAAA,QACpC,WAAA,EAAa,OAAO,qBAAqB,CAAA;AAAA,QACzC,YAAA,EAAc,OAAO,wBAAwB,CAAA;AAAA,QAC7C,WAAA,EAAa,gBAAA;AAAA,QACb,WAAW,YAAY;AACrB,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,MAAM,MAAA,GAAS,MAAM,WAAA,EAAY;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,MAAM,EAAE,KAAA,EAAAwB,MAAAA,EAAM,GAAI,uBAAA,EAA2B;AAC7C,YAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAYA,MAAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAK/C,YAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,cACjB,KAAA,EAAO,OAAA;AAAA,cACP,KAAA,EAAO,OAAO,yBAAyB,CAAA;AAAA,cACvC,OAAA,EAAS,OAAO,wBAAwB,CAAA;AAAA,cACxC,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,IAAU,SAAA;AAC9B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mCAAA,EAAsC,GAAG,CAAA,CAAE,CAAA;AACxD,UAAAA,2BAAA,CAAc,IAAA,CAAK;AAAA,YACjB,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,YACtC,OAAA,EAAS,MAAA,CAAO,uBAAA,EAAyB,GAAG,CAAA;AAAA,YAC5C,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH,CAAA;AAAA,QACA,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,QACjC,MAAA,EAAQ;AAAA;AAAA,KACV,EAEJ,CAAA;AAAA,oBACAvD,cAAAA,CAACY,4BAAAA,EAAA,EACE,QAAA,EAAA,aAAA,KAAkB,wBACjBZ,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,QACtC,aACE,aAAA,KAAkB,MAAA,GACd,OAAO,4BAA4B,CAAA,GACnC,OAAO,6BAA6B,CAAA;AAAA,QAE1C,cAAc,aAAA,KAAkB,MAAA,GAAS,OAAO,+BAA+B,CAAA,GAAI,OAAO,gCAAgC,CAAA;AAAA,QAC1H,WAAW,MAAM;AACf,UAAA,MAAM,MAAA,GAAS,aAAA;AACf,UAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,UAAA,IAAI,MAAA,KAAW,QAAQ,MAAA,EAAO;AAAA,eACzB,OAAA,EAAQ;AAAA,QACf,CAAA;AAAA,QACA,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACpC,MAAA,EAAQ;AAAA;AAAA,KACV,EAEJ,CAAA;AAAA,oBAEAF,eAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAI,UAAA;AAAA,QAAW,IAAA,EAAK,KAAA;AAAA,QAAM,GAAA,EAAI,KAAA;AAAA,QAC9B,IAAIO,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,QACnC,GAAG,KAAA,IAAS,OAAA;AAAA,QAAS,GAAG,MAAA,IAAU,MAAA;AAAA,QAAQ,IAAA,EAAK,IAAA;AAAA,QAC/C,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,MAAA;AAAA,UAAQ,QAAA,EAAU,QAAA;AAAA,UAC9B,SAAA,EAAW,uBAAA;AAAA,UACX,SAAA,EAAW,0BAAA;AAAA,UACX,QAAQ,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,SAC7C;AAAA,QACA,SAAA,EAAU,KAAA;AAAA,QACV,SAAS,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QACtE,SAAS,EAAE,KAAA,EAAO,GAAG,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QACpE,MAAM,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,CAAA,EAAG,WAAW,uBAAA,EAAwB;AAAA,QAGnE,QAAA,EAAA;AAAA,0BAAAP,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,CAAA,EAAG,WAAA,EAAa,CAAA,YAAA,EAAeJ,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,YAAYA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,QAAA,EAAU,UAAS,EAC/L,QAAA,EAAA;AAAA,4BAAAP,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,KAAA,EAAO,EAAE,cAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACvI,QAAA,EAAA;AAAA,8BAAAL,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBACC,KAAA,EAAO,OAAO,qBAAqB,CAAA;AAAA,kBACnC,OAAA,EAAS,UAAA;AAAA,kBACT,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,kBAC9E,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO;AAAA,oBACL,WAAA,EAAa,OAAA;AAAA,oBACb,MAAA,EAAQ,OAAA;AAAA,oBACR,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,oBAC7B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA,CAAA;AAAA,oBACxC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,oBAC3B,MAAA,EAAQ,SAAA;AAAA,oBACR,OAAA,EAAS,MAAA;AAAA,oBACT,UAAA,EAAY,QAAA;AAAA,oBACZ,cAAA,EAAgB,QAAA;AAAA,oBAChB,UAAA,EAAY;AAAA,mBACd;AAAA,kBAEA,QAAA,kBAAAL,cAAAA,CAACwD,qBAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAc;AAAA;AAAA,eACxC;AAAA,8BACA1D,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAM,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,UAAS,EACxF,QAAA,EAAA;AAAA,gCAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,EAAA,EAAG,cAAA,EAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,QAAA,EAAQ,MAAE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gBAC7E,4BACCF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,aAAY,GAAA,EAAI,QAAA,EAAS,GAAG,KAAA,EAAO,QAAA,EAAQ,MAC9E,QAAA,EAAA,QAAA,EACH;AAAA,eAAA,EAEJ;AAAA,aAAA,EACF,CAAA;AAAA,4BAGAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,OAAM,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,KAAA,EAAO,EAAE,cAAc,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EACtH,QAAA,EAAA;AAAA,8BAAAL,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,IAAW,KAAK,IAAA,EAAK;AAAA,kBAAG,QAAA,EAAU,CAAC,IAAA,CAAK,OAAA;AAAA,kBACzG,YAAY,IAAA,CAAK,OAAA,GAAU,EAAE,UAAA,EAAY,0BAAyB,GAAI,MAAA;AAAA,kBACtE,UAAU,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBAC3C,OAAO,EAAE,IAAA,EAAM,GAAG,WAAA,EAAa,OAAA,EAAS,YAAY,aAAA,EAAe,MAAA,EAAQ,eAAeN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,OAAA,GAAU,MAAM,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,KAAK,OAAA,GAAU,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBAC9V,0BAAAL,cAAAA,CAACyD,iBAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB;AAAA;AAAA,eACpD;AAAA,8BACAzD,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,IAAc,KAAK,OAAA,EAAQ;AAAA,kBAAG,QAAA,EAAU,CAAC,IAAA,CAAK,UAAA;AAAA,kBAC/G,YAAY,IAAA,CAAK,UAAA,GAAa,EAAE,UAAA,EAAY,0BAAyB,GAAI,MAAA;AAAA,kBACzE,UAAU,IAAA,CAAK,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBAC9C,OAAO,EAAE,IAAA,EAAM,GAAG,WAAA,EAAa,OAAA,EAAS,YAAY,aAAA,EAAe,MAAA,EAAQ,eAAeN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,UAAA,GAAa,MAAM,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,KAAK,UAAA,GAAa,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,OAAA,EAAS,IAAA,CAAK,aAAa,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBACvW,0BAAAL,cAAAA,CAAC0D,iBAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB;AAAA;AAAA,eACpD;AAAA,8BACA1D,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,QAAA,GAAW,MAAA,CAAO,iBAAiB,IAAI,OAAA,GAAU,CAAA,EAAG,MAAA,CAAO,eAAe,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,CAAA,GAAM,OAAO,eAAe,CAAA;AAAA,kBAC5I,SAAS,MAAM,OAAA,IAAW,CAAC,QAAA,IAAY,KAAK,MAAA,EAAO;AAAA,kBAAG,QAAA,EAAU,CAAC,OAAA,IAAW,QAAA;AAAA,kBAC5E,UAAA,EAAY,OAAA,IAAW,CAAC,QAAA,GAAW,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,GAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,GAAG,GAAE,GAAI,MAAA;AAAA,kBACxG,UAAU,OAAA,IAAW,CAAC,WAAW,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,aAAa,OAAA,EAAS,UAAA,EAAY,OAAA,GAAUA,UAAAA,CAAM,KAAA,EAAO,IAAI,IAAI,aAAA,EAAe,MAAA,EAAQ,CAAA,YAAA,EAAe,OAAA,GAAUA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAIA,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,MAAA,EAAQ,OAAA,IAAW,CAAC,QAAA,GAAW,SAAA,GAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,QAAA,EAAU,SAAS,OAAA,GAAU,CAAA,GAAI,IAAA,EAAM,UAAA,EAAY,gCAAA,EAAiC;AAAA,kBAC3Z,qCAAWL,cAAAA,CAACqD,eAAO,IAAA,EAAK,OAAA,EAAQ,OAAc,IAAA,EAAK,MAAA,EAAO,CAAA,mBAAKrD,eAAC2D,gBAAA,EAAA,EAAS,KAAA,EAAO,UAAU,KAAA,GAAQ,wBAAA,EAA0B,MAAK,OAAA,EAAQ;AAAA;AAAA,eAC5I;AAAA,8BACA3D,cAAAA;AAAA,gBAACW,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,KAAA,EAAO,OAAO,kBAAkB,CAAA;AAAA,kBAAG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,kBAClF,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAE;AAAA,kBACrF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,WAAA,EAAa,OAAA,EAAS,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,kBAC/O,0BAAAL,cAAAA,CAACiD,mBAAA,EAAA,EAAQ,KAAA,EAAM,SAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA;AACxC,aAAA,EACF,CAAA;AAAA,4BAGAjD,cAAAA,CAACS,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAAM,CAAA,EAAE,MAAK,KAAA,EAAO,EAAE,MAAM,CAAA,EAAG,SAAA,EAAW,QAAO,EAC3E,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,IAAA,qBACbT,cAAAA,CAAC,aAAA,EAAA,EAA4B,MAAM,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,SAAA,KAAc,IAAA,CAAK,IAAI,OAAA,EAAS,MAAM,aAAa,IAAA,CAAK,EAAE,KAA/G,IAAA,CAAK,EAA6G,CACvI,CAAA,EACH,CAAA;AAAA,4BAGAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EAAE,IAAA,EAAK,GAAA,EAAI,IAAA,EAAK,KAAA,EAAO,EAAE,WAAW,CAAA,YAAA,EAAeJ,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EAC5H,QAAA,EAAA;AAAA,8BAAAP,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA,CAAK,KAAA,EAAM;AAAA,kBAAG,UAAU,CAAC,OAAA;AAAA,kBAChE,UAAA,EAAY,OAAA,GAAU,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,IAAI,GAAE,GAAI,MAAA;AAAA,kBACpG,QAAA,EAAU,OAAA,GAAU,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,kBACtC,OAAO,EAAE,KAAA,EAAO,QAAQ,UAAA,EAAY,aAAA,EAAe,QAAQ,CAAA,YAAA,EAAe,OAAA,GAAUA,WAAM,SAAA,EAAW,IAAI,IAAIA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAC,IAAI,YAAA,EAAc,KAAA,CAAM,OAAO,EAAA,EAAI,OAAA,EAAS,gBAAgB,MAAA,EAAQ,OAAA,GAAU,YAAY,SAAA,EAAW,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAU,OAAA,EAAS,UAAU,CAAA,GAAI,IAAA,EAAM,YAAY,cAAA,EAAe;AAAA,kBAChW,QAAA,EAAA;AAAA,oCAAAL,eAAC4D,mBAAA,EAAA,EAAQ,KAAA,EAAO,UAAU,SAAA,GAAY,wBAAA,EAA0B,MAAK,OAAA,EAAQ,CAAA;AAAA,oCAC7E5D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAAS,CAAA,EAAG,OAAA,GAAU,YAAY,wBAAA,EAA2B,QAAA,EAAA,MAAA,CAAO,kBAAkB,CAAA,EAAE;AAAA;AAAA;AAAA,eAChJ;AAAA,8BAEAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,SAAA,EAAU,EAAG,CAAA;AAAA,8BAE3FF,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,kBAC5C,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,kBAC9E,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,kBACrO,QAAA,EAAA;AAAA,oCAAAL,cAAAA,CAAC8C,iBAAA,EAAA,EAAM,KAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,CAAA;AAAA,oCAClC9C,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,sBAAsB,CAAA,EAAE;AAAA;AAAA;AAAA,eAC3G;AAAA,8BAEAJ,eAAAA;AAAA,gBAACa,mBAAAA,CAAO,MAAA;AAAA,gBAAP;AAAA,kBAAc,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,kBAC7C,UAAA,EAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,EAAaA,UAAAA,CAAM,SAAA,EAAW,GAAG,CAAA,EAAE;AAAA,kBACrF,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,kBACxB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAYA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,kBAC7O,QAAA,EAAA;AAAA,oCAAAL,cAAAA,CAAC6D,qBAAA,EAAA,EAAU,KAAA,EAAM,SAAA,EAAU,MAAK,OAAA,EAAQ,CAAA;AAAA,oCACxC7D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAE,SAAA,EAAW,QAAA,EAAA,MAAA,CAAO,yBAAyB,CAAA,EAAE;AAAA;AAAA;AAAA,eAChH;AAAA,cAEC,2BACCJ,eAAAA,CAACI,SAAAA,EAAA,EAAK,MAAK,QAAA,EAAS,CAAA,EAAE,QAAA,EAAS,EAAA,EAAG,UAAS,KAAA,EAAO,EAAE,eAAe,QAAA,EAAU,OAAA,EAAS,KAAI,EACvF,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,kBAAkB,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE;AAAA,eAAA,EAChC;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAOAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,UAAS,EAIxE,QAAA,EAAA;AAAA,YAAA,CAAC,0BAAA,oBAA8BT,cAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,4BAEpDA,cAAAA,CAACY,4BAAAA,EAAA,EAAgB,IAAA,EAAK,QACpB,QAAA,kBAAAZ,cAAAA;AAAA,cAACW,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBAA2B,OAAA,EAAS,aAAA,CAAc,OAAA,IAAW,aAAA,CAAc,OAAA,GAAU,KAAA,EAAO,KAAA,IAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAAA,gBAAG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,gBAAG,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,gBAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,gBACnN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,SAAA,EAAW,MAAA,EAAO;AAAA,gBAC7E,mBAAS,SAAS;AAAA,eAAA;AAAA,cAFJ;AAAA,aAGjB,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAe,KAAA,EAAa;AACnC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC;AAIA,SAAS,iBAAA,GAAmD;AAC1D,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,uBAAA,EAA2B;AACnD,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,cAAA,EAAkB;AAE3C,EAAAK,gBAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,WAAA,EAAY,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC3B,MAAA,IAAI,CAAC,SAAA,IAAa,IAAA,EAAM,YAAA,CAAa,IAAkB,CAAA;AAAA,IACzD,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AACjB,IAAA,OAAO,MAAM;AAAE,MAAA,SAAA,GAAY,IAAA;AAAA,IAAM,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,IAAA;AACT;AAIA,IAAM,cAAA,GAAiB,MAAM,QAAA,CAAS,qBAAqB,CAAA;AAEpD,SAAS,YAA2C,KAAA,EAA4B;AACrF,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,cAAA,EAAe,GAAI,KAAA;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAAQ,MAAAA,EAAO,YAAA,KAAiB,uBAAA,EAA2B;AAC3D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIV,eAAS,KAAK,CAAA;AAE9C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAKlB,EAAA,uBACEd,cAAAA,CAAAsD,mBAAA,EAAA,EACE,QAAA,kBAAAxD,eAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,WAAA,CAAY0B,MAAAA,CAAM,QAAA,EAAU,CAAA;AAAA,MAC3C,QAAA,EAAU,OAAO,IAAA,KAAS;AACxB,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,IAAI;AAMF,UAAA,MAAM,SAAc,MAAM,YAAA,CAAa,IAAA,CAAK,MAAA,EAAa,KAAK,aAAa,CAAA;AAC3E,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,IAAA,CAAK,MAAW,CAAC,CAAA;AAC/C,YAAA,eAAA,CAAgB,kBAAkB,EAAE,QAAA,EAAU,CAAC,qBAAqB,GAAG,CAAA;AAIvE,YAAA,oBAAA,CAAqB,QAAA,GAAW,OAAA,EAAQ;AACxC,YAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,cACjB,KAAA,EAAO,OAAA;AAAA,cACP,KAAA,EAAO,OAAO,wBAAwB,CAAA;AAAA,cACtC,OAAA,EAAS,OAAO,uBAAuB,CAAA;AAAA,cACvC,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY/B,MAAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAC/C,UAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,IAAU,SAAA;AAC9B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kCAAA,EAAqC,GAAG,CAAA,CAAE,CAAA;AAIvD,UAAA,MAAM,QAAA,GAAW,QAAQ,cAAA,GAAqB,6BAAA,GAC9B,QAAQ,iBAAA,GAAqB,gCAAA,GAC7B,GAAA,KAAQ,UAAA,GAAqB,yBAAA,GAC7B,uBAAA;AAChB,UAAA,MAAM,OAAA,GAAW,QAAQ,cAAA,GAAqB,4BAAA,GAC9B,QAAQ,iBAAA,GAAqB,+BAAA,GAC7B,GAAA,KAAQ,UAAA,GAAqB,wBAAA,GAC7B,sBAAA;AAChB,UAAA+B,2BAAA,CAAc,IAAA,CAAK;AAAA,YACjB,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,YACtB,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,GAAG,CAAA;AAAA,YAC5B,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH,CAAA,SAAE;AACA,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAvD,eAAC,iBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,cAAAA,CAACY,4BAAAA,EAAA,EACE,kCACCZ,cAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACJ,OAAA;AAAA,YACA;AAAA;AAAA,SACF,EAEJ;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACttBA,IAAM,aAAA,GAAgB,SAAA;AAEtB,SAAS,SAAA,CAAU,EAAE,GAAA,EAAK,KAAA,EAAM,EAAiD;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIc,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,GAAA,GAAMD,aAAuB,IAAI,CAAA;AAEvC,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,MAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,UAAA,EAAW;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,GAAA,CAAI,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC7C,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAKL,EAAA,uBACEhB,eAAC,KAAA,EAAA,EAAI,GAAA,EAAU,OAAO,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA,IAC3C,QAAA,EAAA,OAAA,oBAAWA,eAACC,UAAAA,EAAA,EAAM,KAAU,GAAA,EAAI,SAAA,EAAU,OAAc,CAAA,EAC3D,CAAA;AAEJ;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM,WAAW,QAAA,EAAS;AAI1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,CAAM,SAAS,CAAC,QAAA,CAAS,MAAM,KAAK,CAAA;AAExD,EAAA,MAAM,cAAA,GAAiBuC,cAAQ,MAAM;AACnC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,IAAA,GAAO,aAAa,KAAA,CAAM,gBAAA,IAAoB,EAAE,CAAA,CACnD,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AAChC,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,UAAU,EAAE,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,OAAM,CAAE,CAAA;AAM7E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAA;AAAA,EAIT,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,CAAM,kBAAkB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAE7D,EAAA,uBACExC,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,iBAAA,EAAkB,MAAA;AAAA,MAClB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MACzB,IAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,KAAA,EAAO,EAAA;AAAA,MACP,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,SAAS,CAAW,CAAA;AAAA,MAC3C,IAAA,EAAM,cAAA;AAAA,MACN,aAAA,EAAe,KAAA;AAAA,MACf,UAAA,EAAU,IAAA;AAAA,MAGV,MAAA,EAAQ,YAAY,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,aAAA,IAAgB,GAAI,MAAA;AAAA,MAG1D,aAAA,EAAe,EAAE,YAAA,EAAc,IAAA,EAAM,QAAQ,GAAA,EAAK;AAAA,MAClD,gBAAA,EAAiB,KAAA;AAAA,MAIjB,wBAAA,EAAyB,MAAA;AAAA,MACzB,WAAA,EACE,SAAA,mBACEJ,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAA,EAC9C,QAAA,kBAAAT,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,KAAA,EAAM,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,GAAA,EAAK,CAAA,EACpE,CAAA,GACE,KAAA,CAAM,KAAA,mBACR9B,cAAAA;AAAA,QAACC,UAAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAY,kBAAA;AAAA,UACZ,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,KAAK,GAAG,KAAA,IAAS,EAAA;AAAA,UACrC,GAAA,EAAI,SAAA;AAAA,UACJ,GAAA,EAAI,KAAA;AAAA,UACJ,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA;AAAQ;AAAA,OAChC,GACE,IAAA;AAAA,MAEN,mBAAA,EAAqB,OAAO,cAAc,CAAA;AAAA,MAC1C,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,KAAA,CAAM,KAAA;AAClF,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,uBACEH,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,MAAA,EAC9B,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,KAAA,EAAM,KAAA,EAAO,EAAE,YAAY,CAAA,EAAE,EAC3E,QAAA,kBAAAT,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,KAAA,EAAM,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,GAAA,EAAK,CAAA,EACpE,CAAA;AAAA,4BACAhC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,EACrD,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,CAAA,EAAG,aAAA,EAAe,KAAA,EAAO,EAAE,UAAA,EAAY,WAAA,EAAY,EAChE,QAAA,EAAA,IAAA,CAAK,OAAO,KAAA,EACf,CAAA;AAAA,8BACAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAE,QAAA,EAChB,QAAA,EAAA,MAAA,CAAO,oBAAoB,CAAA,EAC9B;AAAA,aAAA,EACF,CAAA;AAAA,4BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO;AAAA,cACV,UAAA,EAAY,uBAAA;AAAA,cACZ,MAAA,EAAQ,eAAe,aAAa,CAAA,EAAA,CAAA;AAAA,cACpC,YAAA,EAAc,OAAA;AAAA,cACd,OAAA,EAAS;AAAA,eAET,QAAA,kBAAAA,cAAAA,CAACE,WAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAG,aAAA,EAAe,EAAA,EAAG,cAAA,EAAe,IAAG,WAAA,EAAY,GAAA,EAAI,UACrE,QAAA,EAAA,MAAA,CAAO,SAAS,GACnB,CAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,QAEJ;AACA,QAAA,uBACEJ,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,CAAA,EAAE,MAAA,EAC9B,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAK,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,GAAG,KAAA,IAAS,EAAA;AAAA,cAC3C,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA;AAAQ;AAAA,WAChC;AAAA,0BACAF,eAAAA,CAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EACd,QAAA,EAAA;AAAA,4BAAAT,eAACE,SAAAA,EAAA,EAAK,MAAK,IAAA,EAAM,QAAA,EAAA,IAAA,CAAK,OAAO,KAAA,EAAM,CAAA;AAAA,4BACnCF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,CAAA,EAAE,QAAA,EAAU,QAAA,EAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM;AAAA,WAAA,EACjD;AAAA,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA;AAAA,GACF;AAEJ;AC7HA,IAAM,IAAA,GAAqB,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAE7C,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,GAAa,cAAA;AAAA,IACb,YAAA,GAAe,kBAAA;AAAA,IACf,gBAAA,GAAmB,uBAAA;AAAA,IACnB,WAAA;AAAA,IACA,WAAA,GAAc;AAAA,GAChB,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAEhD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIM,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgBD,aAAO,KAAK,CAAA;AAElC,EAAAG,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,cAAc,OAAA,EAAS;AACzB,QAAA,QAAA,CAAS,kBAAkB,EAAE,UAAA,EAAY,CAAA,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,UAAU,CAAC,CAAA;AAEjC,EAAA,MAAM,GAAA,GAAM,CAA+B,GAAA,EAAQ,GAAA,KAAgB;AACjE,IAAA,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,GAAA,EAAI;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,QAAA,CAA8B,YAAY,EAAE,UAAA,IAAc,KAAK,CAAA;AAClF,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,QAAA,MAAM,IAAA,GAAqB;AAAA,UACzB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC;AAAA,SACvB;AACA,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,UAAC,CAAC,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,MAAM,YAAY,CAAC,UAAA;AACnB,IAAA,aAAA,CAAc,SAAS,CAAA;AACvB,IAAA,aAAA,CAAc,OAAA,GAAU,SAAA;AACxB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,QAAA,CAAS,cAAc,EAAE,KAAA,EAAO,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE,CAAA,MAAO;AACL,MAAA,MAAM,SAAS,gBAAA,EAAkB,EAAE,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACjE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,QAAA,CAAS,EAAE,GAAG,IAAA,EAAM,CAAA;AACpB,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,QAAA,CAAS,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAkB,YAAY,WAAA;AAAY,GAChE;AAEA,EAAA,uBACElB,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,KAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEE,QAAA,EAAA;AAAA,QAAA,CAAA,KAAA,IAAS,WAAA,qBACTP,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAQ,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAC/C,QAAA,EAAA;AAAA,0BAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAE,EACnD,QAAA,EAAA;AAAA,YAAA,KAAA,oBACCX,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,KAAA,EACvB,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAAC8D,sBAAO,IAAA,EAAK,OAAA,EAAQ,OAAOzD,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA;AAAA,8BAC/CL,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,cAAA;AAAA,kBACH,IAAA,EAAK,KAAA;AAAA,kBACL,EAAA,EAAG,WAAA;AAAA,kBACH,GAAA,EAAI,QAAA;AAAA,kBACJ,CAAA,EAAE,wBAAA;AAAA,kBAED,iBAAO,KAAK;AAAA;AAAA,eACf;AAAA,cACC,UAAA,oBACCJ,eAAAA,CAACI,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,GAAGG,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG,KAAI,QAAA,EAAS,QAAA,EAAA;AAAA,gBAAA,OAAA;AAAA,gBACjE,OAAO,YAAY,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B;AAAA,aAAA,EAEJ,CAAA;AAAA,YAED,WAAA,oBACCL,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,GAAE,QAAA,EAAS,EAAA,EAAI,GAAA,EAC/C,QAAA,EAAA,MAAA,CAAO,WAAW,CAAA,EACrB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,OAAM,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EACrC,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAA,CAAO,gBAAgB,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAC9D,0BAAAA,cAAAA,CAAC+D,qBAAA,EAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,OAAc,CAAA,EACxC,CAAA;AAAA,4BACA/D,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAS,UAAA,GAAa,MAAA,CAAO,aAAa,CAAA,GAAI,OAAO,gBAAgB,CAAA;AAAA,gBACrE,OAAA,EAAS,aAAA;AAAA,gBACT,KAAA;AAAA,gBACA,MAAA,EAAQ,UAAA;AAAA,gBAEP,uCACCA,cAAAA,CAACgE,kBAAA,EAAA,EAAO,IAAA,EAAK,SAAQ,KAAA,EAAc,CAAA,mBAEnChE,cAAAA,CAACiE,mBAAI,IAAA,EAAK,OAAA,EAAQ,OAAO5D,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG;AAAA;AAAA,aAEhD;AAAA,4BACAL,cAAAA,CAAC,YAAA,EAAA,EAAa,SAAS,MAAA,CAAO,OAAO,GAAG,OAAA,EAAS,KAAA,EAAO,OAAM,SAAA,EAC5D,QAAA,kBAAAA,eAAC6D,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ,KAAA,EAAM,WAAU,CAAA,EAC1C;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGF/D,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAI,KAAA,EACR,QAAA,EAAA;AAAA,0BAAAT,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,0BACAlE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,0BACAlE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,GAAA;AAAA,cACN,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA,WACV;AAAA,UACC,+BACClE,cAAAA;AAAA,YAACkE,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAM,GAAA;AAAA,cACN,OAAO,KAAA,CAAM,CAAA;AAAA,cACb,UAAU,CAAC,CAAA,KAAM,IAAI,GAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,cACnC,YAAA,EAAc,CAAA;AAAA,cACd,IAAA,EAAM,CAAA;AAAA,cACN,GAAA,EAAK,CAAA;AAAA,cACL,GAAA,EAAK,GAAA;AAAA,cACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cACjB,MAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,QAAQ1D,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,SAAS,QAAA,EAAS,KAAA,EAAM,SAAA,EAAS,IAAA,EAC/C,QAAA,kBAAAjB,cAAAA;AAAA,IAACW,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,SAASA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,GAAIA,UAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,QAC3D,QAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,OAAO,MAAA,GAAS,GAAA,GAAM,GAAG,CAAC,CAAA,CAAA;AAAA,QACvD,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,aAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAYA,SAAS,MAAM,CAAA,EAAW;AACxB,EAAA,OAAO,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAC7C;AAGO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAM,EAA4B;AACjE,EAAA,MAAM,QAAQG,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA;AAAA,IAACS,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEA,QAAA,kBAAAP,eAAAA;AAAA,QAACI,SAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,WAAA;AAAA,UACH,IAAA,EAAK,KAAA;AAAA,UACL,CAAA,EAAE,wBAAA;AAAA,UACF,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,aAAA,EAAe,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,YAAA,EAAc,UAAA,EAAW;AAAA,UAC/G,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACU,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YAAE;AAAA;AAAA;AAAA;AAChF;AAAA,GACF;AAEJ;AAGA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,OAAO,OAAA,EAAS,QAAA,EAAS,KAAA,EAAM,SAAA,EAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACrE,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDL,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAG,OAC/D,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAGO,SAAS,sBAAA,CAAuB;AAAA,EACrC,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,QAAA,CAA8B,cAAA,EAAgB,IAAI,KAAK,CAAA;AAC1E,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,MAAA,QAAA,CAAS;AAAA,QACP,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC,CAAA;AAAA,QACrB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,IAAK,CAAC;AAAA,OACtB,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AACA,EAAA,uBACER,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAAC+D,qBAAA,EAAA,EAAU,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,MAClE,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,MACnB,OAAA,EAAS,OAAO,iBAAiB,CAAA;AAAA,MACjC,OAAA,EAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,uBAAA,CAAwB;AAAA,EACtC,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,QAAQvD,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,QAAA,CAAS,eAAA,EAAiB,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,uBACER,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAAC8D,kBAAA,EAAA,EAAO,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,MAC/D,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,MACpB,OAAA,EAAS,OAAO,kBAAkB,CAAA;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,mBAAA,CAAoB;AAAA,EAClC,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,KAAA,GAAQ,SAAA;AACd,EAAA,uBACE9D,cAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMA,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,IAAA,EAAM,OAAA,GAAU,OAAA,GAAU,OAAA,EAAS,KAAA,EAAc,CAAA;AAAA,MAC/D,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,MACtB,OAAA,EAAS,OAAO,QAAQ,CAAA;AAAA,MACxB,OAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACjYA,IAAM,kBAAA,GAAqBZ,oBAA8C,IAAI,CAAA;AAetE,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACErB,cAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAK,EAC1D,QAAA,kBAAAA,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAA,EAAS,GAAG,KAAA,EAAM,EAC5E,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAA,CACP,IAAA,EACA,KAAA,EACA,IAAA,EACkB;AAClB,EAAA,IAAI,IAAA,KAAS,OAAO,OAAO,IAAA;AAC3B,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,KAAA;AAC5B,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAA;AAC3B;AAoBO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,GAAA,GAAMsB,iBAAW,kBAAkB,CAAA;AACzC,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAK/C,EAAAN,gBAAU,MAAM;AACd,IAAA,qBAAA,EAAsB;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAa,GAAA,KAAQ,IAAA;AAC3B,EAAA,MAAM,YAAA,GAAe,UAAA,GAAa,GAAA,CAAK,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,UAAA,GAAa,GAAA,CAAK,IAAA,GAAO,KAAA,CAAM,IAAA;AAElD,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,UAAU,CAAA;AAIjD,EAAA,MAAM,IAAA,GACJ,eAAe,MAAA,GACX;AAAA,IACE,EAAE,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,EAAQ,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAE;AAAA,IAC/F,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA,EAAS,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA;AAAE,GACpG,GACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,CAAE,CAAA;AAEzD,EAAA,uBACEhB,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,WAAA,EAAa,KAAA,CAAM,WAAA,KAAgB,MAAA,CAAO,aAAa,CAAA,IAAK,cAAA,CAAA;AAAA,MAC5D,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA;AAAA,MACA,OAAO,YAAA,IAAgB,IAAA;AAAA,MACvB,UAAA,EAAU,IAAA;AAAA,MACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,OAAO,CAAA,IAAK,EAAA;AAClB,QAAA,IAAI,UAAA,EAAY;AAEd,UAAA,GAAA,CAAK,SAAS,EAAE,IAAA,EAAM,QAAQ,MAAA,EAAW,KAAA,EAAO,QAAW,CAAA;AAAA,QAC7D,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;AACzB,UAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAcO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,GAAA,GAAMkB,iBAAW,kBAAkB,CAAA;AACzC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAI/C,EAAAN,gBAAU,MAAM;AACd,IAAA,qBAAA,EAAsB;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,GAAA,GAAM,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,IAAK,IAAA;AACpE,EAAA,MAAM,MAAA,GAAS,aAAA,EAAe,MAAA,IAAU,EAAC;AAEzC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC9B,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,IACrB,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,QAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,MAAA,GAAS,YAAY,EAAE,CAAA;AAAA,GACtE,CAAE,CAAA;AAEF,EAAA,uBACEhB,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,WAAA,EAAa,KAAA,CAAM,WAAA,KAAgB,MAAA,CAAO,aAAa,CAAA,IAAK,oBAAA,CAAA;AAAA,MAC5D,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA;AAAA,MACA,KAAA,EAAO,IAAI,KAAA,CAAM,KAAA,IAAS,OAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,MAC3D,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,GAAG,GAAA,CAAI,KAAA;AAAA,UACP,KAAA,EAAO,CAAA,IAAK,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA,GAAI;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,aAAA,IAAiB,MAAA,CAAO,MAAA,KAAW,CAAA;AAAA,MAC9C,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAIA,WAAA,CAAY,IAAA,GAAO,SAAA;AACnB,WAAA,CAAY,IAAA,GAAO,SAAA;ACtMnB,IAAM,cAAA,GAAiBiB,oBAA0C,IAAI,CAAA;AAErE,SAAS,iBAAA,GAAyC;AAChD,EAAA,MAAM,GAAA,GAAMC,iBAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,GAAA;AACT;AAQA,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAc;AACtD,EAAA,uBACEtB,eAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAS,EAChD,QAAA,kBAAAA,eAACS,SAAAA,EAAA,EAAK,KAAI,IAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAC7B,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAMA,SAAS,QAAA,CAAS,EAAE,KAAA,GAAQ,SAAA,EAAU,EAAkB;AACtD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAE9C,EAAA,uBACET,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACjB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,4BAA4B,CAAA;AAAA,MACtC,QAAA,EAAU,CAAC,QAAA,KAAa;AACtB,QAAA,IAAI,CAAC,QAAA,EAAU;AAEf,QAAA,MAAM,UAAA,GAAa,4BAAA,CAA6B,QAAQ,CAAA,IAAK,EAAC;AAC9D,QAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACpD,QAAA,MAAM,UAAU,aAAA,GAAgB,KAAA,CAAM,OAAQ,UAAA,CAAW,CAAC,KAAK,KAAA,CAAM,IAAA;AAErE,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,KAAA;AAAA,UACH,KAAA,EAAO,QAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH,CAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAMA,SAAS,GAAA,CAAI,EAAE,KAAA,GAAQ,KAAA,EAAM,EAAa;AACxC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAE9C,EAAA,MAAM,UAAA,GAAa,4BAAA,CAA6B,KAAA,CAAM,KAAK,KAAK,EAAC;AAEjE,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,uBACEJ,cAAAA;AAAA,MAAC+B,cAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,QACjB,OAAO,KAAA,CAAM,IAAA;AAAA,QACb,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,CAAA,CAAE,aAAA,CAAc,KAAA,EAAO,CAAA;AAAA,QACnE,WAAA,EAAY;AAAA;AAAA,KACd;AAAA,EAEJ;AAEA,EAAA,uBACE/B,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACjB,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,CAAC,OAAA,KAAY;AACrB,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,aAAA,EAAe;AAAA;AAAA,GACjB;AAEJ;AAEO,IAAM,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM;AAAA,EACnD,QAAA;AAAA,EACA;AACF,CAAC;ACzFD,SAAS,gBAAA,CAAiB,QAAA,GAAqB,EAAC,EAAG;AAIjD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAmC;AACtD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,EAAE,CAAA;AACb,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,EAAE,CAAA;AAChD,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,OAAA,CAAQ,CAAC,CAAA,KAAM;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACvB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,UAClB,KAAA,EAAO,gBAAA,CAAiB,CAAA,CAAE,EAAE;AAAA,SAC9B,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAKD,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,OAAO,CAAC,QAAA,CAAS,GAAA,CAAI,EAAE,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAItB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,QAAA,EAAW,EAAE,IAAG,CAAE;AAAA,KAC3E,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,IAAS,IAAA,GAAO,CAAC,KAAK,CAAA,GAAI,EAAE,CAAA;AAC1D,EAAA,uBACEJ,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,sBAAA;AAAA,MACnB,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,KAAA,EAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,MACvC,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,IAAA,GAAO,IAAA,GAAO,MAAA,CAAO,CAAC,CAAC;AAAA;AAAA,GACxD;AAEJ;AASO,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,IAAA,GAAO,iBAAiB,KAAK,CAAA;AACnC,EAAA,uBACEJ,cAAAA;AAAA,IAACmE,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,sBAAA;AAAA,MACnB,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAAA,MACvB,UAAU,CAAC,IAAA,KAAS,SAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,OAAO,QAAA,CAAS,CAAC,CAAC,CAAC;AAAA;AAAA,GAC3F;AAEJ;AC5HO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,cAAA;AAAA,EACR;AACF,CAAA,EAKG;AACD,EAAA,MAAM,QAAQ3D,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIM,eAAoB,MAAM,CAAA;AAEpD,EAAA,MAAM,cAAc,YAAY;AAC9B,IAAA,IAAI,UAAU,SAAA,EAAW;AACzB,IAAA,QAAA,CAAS,SAAS,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,MAAA,QAAA,CAAS,MAAA,EAAQ,OAAA,KAAY,KAAA,GAAQ,OAAA,GAAU,SAAS,CAAA;AAAA,IAC1D,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AACA,IAAA,UAAA,CAAW,MAAM,QAAA,CAAS,MAAM,CAAA,EAAG,GAAI,CAAA;AAAA,EACzC,CAAA;AAEA,EAAA,MAAM,CAAA,GAAI,KAAA,KAAU,OAAA,GAAU,SAAA,GAAY,KAAA;AAE1C,EAAA,uBACEhB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,WAAA;AAAA,MACT,UAAU,KAAA,KAAU,SAAA;AAAA,MACpB,UAAA,EAAY,KAAA,KAAU,SAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAYN,UAAAA,CAAM,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA,MACpE,UAAU,KAAA,KAAU,SAAA,GAAY,EAAC,GAAI,EAAE,OAAO,IAAA,EAAK;AAAA,MACnD,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,QACzB,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QACpC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,GAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA;AAAA,QACjD,MAAA,EAAQ,KAAA,KAAU,SAAA,GAAY,SAAA,GAAY,SAAA;AAAA,QAC1C,OAAA,EAAS,MAAA;AAAA,QAAQ,UAAA,EAAY,QAAA;AAAA,QAC7B,cAAA,EAAgB,QAAA;AAAA,QAAU,GAAA,EAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC7C,UAAA,EAAY,oCAAA;AAAA,QACZ,SAAA,EAAW,UAAA;AAAA,QACX,GAAG;AAAA,OACL;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,SAAA,mBACPL,cAAAA,CAACqD,WAAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,IAAA,EAAK,MAAA,EAAO,CAAA,GAC3C,UAAU,OAAA,mBACRrD,cAAAA,CAAC4B,aAAAA,EAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,CAAA,mBAC1B5B,cAAAA,CAACqC,iBAAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,OAAO,CAAA,EAAG,CAAA;AAAA,wBAEpCrC,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,IAAA,EAAK,EAAA,EAAG,aAAY,GAAA,EAAI,QAAA,EAAS,GAC3D,QAAA,EAAA,KAAA,KAAU,SAAA,GAAY,WAAW,KAAA,KAAU,OAAA,GAAU,YAAY,KAAA,EACpE;AAAA;AAAA;AAAA,GACF;AAEJ;ACtDO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,uBACEJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,eAAC,KAAA,CAAM,IAAA,EAAN,EAAW,KAAA,EAAO,MAAM,KAAA,EAAO,CAAA;AAAA,oBAChCA,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,OAAA,EAAQ,MAAK,IAAA,EAAK,CAAA,EAAE,yBAC5D,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EACrB;AAAA,GAAA,EACF,CAAA;AAEJ;ACQO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAE1C,EAAA,MAAM,KAAK,OAAA,GACPH,UAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,GAAG,CAAA,GAC/BA,WAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,UACX,oCAAA,GACA,oCAAA;AAEJ,EAAA,uBACEP,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAM,QAAA;AAAA,MACN,EAAA,EAAI,UAAU,IAAA,GAAO,IAAA;AAAA,MACrB,EAAA,EAAI,UAAU,KAAA,GAAQ,IAAA;AAAA,MACtB,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,EAAA;AAAA,QACZ,MAAA;AAAA,QACA,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,OAC5B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAX,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,KAAA,EAAM,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,GAAE,EAC9D,QAAA,EAAA;AAAA,UAAA,OAAO,KAAA,KAAU,QAAA,GAChB,OAAA,mBACET,cAAAA;AAAA,YAACE,SAAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,cAAA;AAAA,cACH,IAAA,EAAK,KAAA;AAAA,cACL,CAAA,EAAE,wBAAA;AAAA,cACF,EAAA,EAAG,WAAA;AAAA,cACH,GAAA,EAAI,QAAA;AAAA,cAEH,QAAA,EAAA;AAAA;AAAA,WACH,mBAEAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,IAAA,EAAK,CAAA,EAAE,wBAAA,EACjC,QAAA,EAAA,KAAA,EACH,CAAA,GAGF,KAAA;AAAA,UAED,gBACC,OAAO,WAAA,KAAgB,QAAA,mBACrBF,eAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,MAAK,KAAA,EAAM,CAAA,EAAG,UAAU,uBAAA,GAA0B,wBAAA,EACvE,uBACH,CAAA,GAEA,WAAA;AAAA,SAAA,EAGN,CAAA;AAAA,wBACAF,cAAAA;AAAA,UAACoE,WAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,cAAc,OAAO,CAAA;AAAA,YACjD,IAAA,EAAM,UAAU,IAAA,GAAO,IAAA;AAAA,YACvB,SAAA;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,YAAY,OAAA,GAAU/D,UAAAA,CAAM,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,wBAAA;AAAA,gBAC1C,aAAa,OAAA,GAAUA,UAAAA,CAAM,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI;AAAA;AAC7C;AACF;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC/EA,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAqD;AAC3E,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,WAAW,kBAAA,EAAmB;AAAA,IAClE,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,IACpC,KAAK,UAAA;AAAA,IACL;AACE,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA;AAEvC,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAAgD;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC3C,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,IAAI,EAAC;AAAA,EAClC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,UAAA,EAAoB,KAAA,KAAmC;AACjF,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AAAA,EAAC;AACX,CAAA;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,UAAA,GAAa,oBAAA;AAAA,EACb,kBAAA,GAAqB,KAAA;AAAA,EACrB,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY;AACd,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIS,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,QAAA,GAAWD,aAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAEnB,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAa,IAAK,kBAAA,EAAoB;AAC3C,IAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,IAAA,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACjC,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AACzC,MAAA,IAAI,OAAO,cAAA,KAAmB,SAAA,IAAa,cAAA,KAAmB,KAAK,MAAA,EAAQ;AACzE,QAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,MAC9B;AAAA,IACF,CAAC,CAAA;AAAA,EAEH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,YAAA,EAAa,EAAG,OAAO,IAAA;AAE5B,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAsB;AACpC,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,MAAA,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AACtB,MAAA,kBAAA,CAAmB,YAAY,SAAS,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA;AAEA,EAAA,uBACElB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,GAAG,eAAe,SAAS,CAAA;AAAA,QAC3B,MAAA,EAAQ,UAAA;AAAA,QACR,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAACW,SAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YACJ,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAG,IAAA;AAAA,YACH,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,YAChC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,SAAA;AAAA,cACR,UAAA,EAAY,kBAAA;AAAA,cACZ,cAAA,EAAgB,aAAA;AAAA,cAChB,oBAAA,EAAsB,aAAA;AAAA,cACtB,MAAA,EAAQ,mCAAA;AAAA,cACR,YAAA,EAAc,0BAAA;AAAA,cACd,UAAA,EAAY,MAAA;AAAA,cACZ,QAAA,EAAU;AAAA,aACZ;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAACqE,wBAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,OAAM,uBAAA,EAAwB,CAAA;AAAA,8BACtDrE,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,EAAA,EAAG,cAAA;AAAA,kBACH,EAAA,EAAG,WAAA;AAAA,kBACH,GAAA,EAAI,QAAA;AAAA,kBACJ,CAAA,EAAE,wBAAA;AAAA,kBACF,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,kBAEhB,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BACAF,eAACsE,eAAA,EAAA,EAAW,IAAA,EAAK,MAAK,OAAA,EAAQ,aAAA,EAAc,CAAA,EAAE,uBAAA,EAC3C,QAAA,EAAA,IAAA,mBAAOtE,eAACuE,qBAAA,EAAA,EAAU,IAAA,EAAM,IAAI,CAAA,mBAAKvE,eAACoC,uBAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAC3D;AAAA;AAAA;AAAA,SACF;AAAA,QAEC,wBACCpC,cAAAA;AAAA,UAACwE,UAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,CAAA;AAAA,YACL,EAAA,EAAG,KAAA;AAAA,YACH,CAAA,EAAE,IAAA;AAAA,YACF,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,kBAAA;AAAA,cACZ,cAAA,EAAgB,aAAA;AAAA,cAChB,oBAAA,EAAsB,aAAA;AAAA,cACtB,MAAA,EAAQ,mCAAA;AAAA,cACR,YAAA,EAAc,0BAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,SAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAW;AAAA,aACb;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV1E,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAM,QAAA;AAAA,gBACN,OAAA,EAAQ,eAAA;AAAA,gBACR,GAAA,EAAI,IAAA;AAAA,gBACJ,EAAA,EAAG,IAAA;AAAA,gBACH,EAAA,EAAG,KAAA;AAAA,gBACH,OAAA,EAAS,MAAM,MAAA,CAAO,IAAI,CAAA;AAAA,gBAC1B,KAAA,EAAO;AAAA,kBACL,MAAA,EAAQ,SAAA;AAAA,kBACR,YAAA,EAAc,0BAAA;AAAA,kBACd,UAAA,EAAY,IAAA,CAAK,MAAA,GAAS,uBAAA,GAA0B,wBAAA;AAAA,kBACpD,MAAA,EAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,GAAS,0BAA0B,wBAAwB,CAAA,CAAA;AAAA,kBACvF,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAT,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,EAAA,EAAG,cAAA;AAAA,sBACH,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,SAAA,GAAY,wBAAA;AAAA,sBAE5B,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,mBACR;AAAA,kCACAF,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,KAAA;AAAA,sBACL,EAAA,EAAG,cAAA;AAAA,sBACH,EAAA,EAAG,WAAA;AAAA,sBACH,GAAA,EAAI,QAAA;AAAA,sBACJ,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,SAAA,GAAY,wBAAA;AAAA,sBAE5B,QAAA,EAAA,IAAA,CAAK,SAAS,IAAA,GAAO;AAAA;AAAA;AACxB;AAAA,eAAA;AAAA,cA9BK,IAAA,CAAK;AAAA,aAgCb;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;ACvIA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,CAAE,IAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAO,KAAA,EAAO,OAAM,CAAE,CAAA;AAE1C,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAsB;AAChD,EAAA,uBACEJ,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,KAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAAyB,EAAG;AAAA,GAAA,EACnF,CAAA;AAEJ;AAeO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA,GAAY,OAAA;AAAA,EACZ;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,eAAeQ,oBAAAA,EAAgB;AACrC,EAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,YAAA,CAAa,YAAY,EAAE,CAAC,CAAA;AAE9D,EAAA,MAAM,GAAA,GAAM,aAAiD,SAAkB,CAAA;AAO/E,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,WAAA,EAAa,GAAA,EAAK,WAAA,IAAe,oBAAA,CAAc,WAAA;AAAA,IAC/C,YAAA,EAAc,GAAA,EAAK,YAAA,IAAgB,oBAAA,CAAc,YAAA;AAAA,IACjD,YAAA,EAAc,GAAA,EAAK,YAAA,IAAgB,oBAAA,CAAc,YAAA;AAAA,IACjD,WAAA,EACE,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA,IAAK,GAAA,CAAK,WAAA,CAAY,MAAA,KAAW,EAAA,GAC1D,GAAA,CAAK,WAAA,GACN,oBAAA,CAAc;AAAA,GACtB;AAEA,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,cAAA,EAAmD;AACxE,EAAA,MAAM,GAAA,GAAM,CAAqC,GAAA,EAAQ,GAAA,KACvD,QAAA,CAAS,SAAA,EAAoB,EAAE,GAAG,KAAA,EAAO,CAAC,GAAG,GAAG,KAAc,CAAA;AAEhE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,KAAiB,QAAA;AACzC,EAAA,MAAM,WAAW,KAAA,CAAM,WAAA;AAEvB,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,GAAA,KAAgB;AAChD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAClC,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,GAAA;AACd,IAAA,GAAA,CAAI,eAAe,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAgB;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYiE,+BAAe,GAAG,CAAA;AACpC,MAAA,GAAA,CAAI,eAAe,SAAgC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,aAAA,EAAe,eAAe,CAAA;AAE7D,EAAA,uBACE3E,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO;AAAA,MAElD,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM0E,mBAAA;AAAA,YACN,KAAA,EAAO,KAAA,IAAS,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA;AAAA,YACnC;AAAA;AAAA,SACF;AAAA,wBAMA1E,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,MAAA,CAAO,qBAAqB,CAAA,IAAK,uBAAA;AAAA,YACxC,WAAA,EACE,MAAA,CAAO,yBAAyB,CAAA,IAChC,qKAAA;AAAA,YAEF,SAAS,KAAA,CAAM,WAAA;AAAA,YACf,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,eAAe,CAAC;AAAA;AAAA,SACvC;AAAA,wBAEAF,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,WAAW,CAAA,GAAI,GAAA;AAAA,cACxB,aAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,cACnC,UAAA,EAAY;AAAA,aACd;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAE,eAAC,UAAA,EAAA,EAAW,KAAA,EAAO,MAAA,CAAO,cAAc,KAAK,gBAAA,EAAkB,CAAA;AAAA,8BAE/DA,cAAAA;AAAA,gBAACoE,WAAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,MAAA,CAAO,kBAAkB,CAAA,IAAK,oBAAA;AAAA,kBACrC,IAAA,EAAK,IAAA;AAAA,kBACL,EAAA,EAAG,IAAA;AAAA,kBACH,OAAA,EAAS,SAAA;AAAA,kBACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,gBAAgB,CAAA,CAAE,aAAA,CAAc,OAAA,GAAU,QAAA,GAAW,MAAM,CAAA;AAAA,kBAChF,MAAA,EAAQ;AAAA,oBACN,KAAA,EAAO;AAAA,sBACL,UAAA,EAAY,cAAA;AAAA,sBACZ,QAAA,EAAU,QAAA;AAAA,sBACV,aAAA,EAAe,QAAA;AAAA,sBACf,aAAA,EAAe,WAAA;AAAA,sBACf,KAAA,EAAO;AAAA;AACT;AACF;AAAA,eACF;AAAA,8BAEAtE,eAAAA,CAACW,SAAAA,EAAA,EAAK,GAAA,EAAI,IAAA,EAAK,IAAG,IAAA,EACf,QAAA,EAAA;AAAA,gBAAA,CAAC,6BACAT,cAAAA;AAAA,kBAACI,WAAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,gBAAgB,CAAA,IAAK,iBAAA;AAAA,oBACnC,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,oBACjB,OAAO,KAAA,CAAM,YAAA;AAAA,oBACb,IAAA,EAAM,qBAAA;AAAA,oBACN,aAAA,EAAe,KAAA;AAAA,oBACf,UAAU,CAAC,CAAA,KAAM,CAAA,IAAK,GAAA,CAAI,gBAAgB,CAAC;AAAA;AAAA,iBAC7C;AAAA,gCAEFJ,cAAAA;AAAA,kBAACkE,gBAAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK,OAAA;AAAA,oBAC1B,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,oBACjB,GAAA,EAAK,CAAA;AAAA,oBACL,GAAA,EAAK,CAAA;AAAA,oBACL,OAAO,KAAA,CAAM,YAAA;AAAA,oBACb,UAAU,CAAC,CAAA,KAAM,IAAI,cAAA,EAAgB,MAAA,CAAO,CAAC,CAAC;AAAA;AAAA;AAChD,eAAA,EACF,CAAA;AAAA,cAEC,SAAA,oBACCpE,eAAAA,CAAAwD,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAxD,eAAAA,CAACW,WAAA,EAAK,KAAA,EAAM,UAAS,OAAA,EAAQ,eAAA,EAAgB,IAAG,IAAA,EAC9C,QAAA,EAAA;AAAA,kCAAAT,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,EAAA,EAAG,cAAA;AAAA,sBACH,IAAA,EAAK,KAAA;AAAA,sBACL,EAAA,EAAG,WAAA;AAAA,sBACH,GAAA,EAAI,QAAA;AAAA,sBACJ,CAAA,EAAE,uBAAA;AAAA,sBAED,QAAA,EAAA,MAAA,CAAO,eAAe,CAAA,IAAK;AAAA;AAAA,mBAC9B;AAAA,kCACAF,cAAAA;AAAA,oBAACsE,eAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,OAAA,EAAQ,QAAA;AAAA,sBACR,OAAA,EAAS,YAAA;AAAA,sBACT,KAAA,EAAO,MAAA,CAAO,cAAc,CAAA,IAAK,eAAA;AAAA,sBAEjC,QAAA,kBAAAtE,cAAAA,CAAC6D,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA;AAC1B,iBAAA,EACF,CAAA;AAAA,gCAEA7D,cAAAA;AAAA,kBAAC2E,eAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA,IAAK,aAAA;AAAA,oBAC9B,IAAA,EAAK,IAAA;AAAA,oBACL,KAAA,EAAO,MAAM,WAAA,CAAY,KAAA,CAAM,YAAY,CAAA,IAAK,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA,IAAK,SAAA;AAAA,oBACxE,QAAA,EAAU,gBAAA;AAAA,oBACV,cAAA,kBAAgB3E,cAAAA,CAAAsD,mBAAAA,EAAA,EAAE;AAAA;AAAA,iBACpB;AAAA,gCAEAtD,cAAAA,CAACS,SAAAA,EAAA,EAAK,KAAI,KAAA,EAAM,EAAA,EAAG,KAAA,EAChB,QAAA,EAAA,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,EAAQ,sBAC9BT,cAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBAEC,KAAA,EAAO,CAAA;AAAA,oBACP,KAAA,EAAO,MAAA;AAAA,oBACP,SAAA,EAAW,MAAM,KAAA,CAAM,YAAA;AAAA,oBACvB,QAAA,EAAU,CAAC,CAAA,KAAM,SAAA,CAAU,GAAG,CAAC;AAAA,mBAAA;AAAA,kBAJ1B;AAAA,iBAMR,CAAA,EACH;AAAA,eAAA,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIc,eAAS,KAAK,CAAA;AAC1C,EAAA,uBACEhB,eAAAA,CAAC8E,YAAA,EAAA,EAAQ,MAAA,EAAgB,QAAA,EAAU,SAAA,EAAW,QAAA,EAAS,QAAA,EAAS,SAAA,EAAS,IAAA,EAAC,MAAA,EAAQ,GAAA,EAChF,QAAA,EAAA;AAAA,oBAAA5E,cAAAA,CAAC4E,YAAA,CAAQ,MAAA,EAAR,EACC,QAAA,kBAAA5E,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM,SAAA,CAAU,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAClC,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,MAAA,EAAM,KAAK,CAAA,CAAA;AAAA,QAC1B,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAa,OAAA;AAAA,UACb,UAAA,EAAY,KAAA;AAAA,UACZ,MAAA,EAAQ,YACJ,oCAAA,GACA,oCAAA;AAAA,UACJ,YAAA,EAAc,OAAA;AAAA,UACd,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,UAAA;AAAA,UACZ,cAAA,EAAgB,UAAA;AAAA,UAChB,QAAA,EAAU;AAAA,SACZ;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,cAAA;AAAA,cACZ,QAAA,EAAU,OAAA;AAAA,cACV,UAAA,EAAY,CAAA;AAAA,cACZ,OAAA,EAAS,aAAA;AAAA,cACT,KAAA,EAAO,kBAAA;AAAA,cACP,UAAA,EAAY,wBAAA;AAAA,cACZ,YAAA,EAAc,QAAA;AAAA,cACd,MAAA,EAAQ;AAAA,aACV;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,KACF,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC4E,YAAA,CAAQ,UAAR,EAAiB,CAAA,EAAE,MAClB,QAAA,kBAAA5E,cAAAA;AAAA,MAAC2E,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,KAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAO,KAAA;AAAA,QACP,cAAA,kBAAgB3E,cAAAA,CAAAsD,mBAAAA,EAAA,EAAE;AAAA;AAAA,KACpB,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC7QO,SAAS,UAAA,CAAW,IAAA,GAA0B,EAAC,EAAqB;AACzE,EAAA,MAAM;AAAA,IACJ,cAAA,GAAiB,KAAA;AAAA,IACjB,MAAA,GAAS,EAAA;AAAA,IACT,KAAA,GAAQ,EAAA;AAAA,IACR,WAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AAEJ,EAAA,MAAM,QAAQuB,mBAAA,CAAmB;AAAA,IAC/B,QAAA,EAAU,cAAA,GACN,CAAC,cAAA,EAAgB,UAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY,EAAG,KAAK,CAAA,GAC7D,CAAC,gBAAgB,QAAQ,CAAA;AAAA,IAC7B,SAAS,YAAY;AACnB,MAAA,MAAM,MAAA,GAAS,iBAAiB,eAAA,GAAkB,kBAAA;AAClD,MAAA,MAAM,UAAU,cAAA,GACZ,EAAE,EAAA,EAAI,MAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,IAAQ,KAAA,EAAM,EAAE,GACtD,EAAE,IAAI,MAAA,EAAO;AACjB,MAAA,MAAM,SAAS,MAAM,QAAA;AAAA,QACnB,kBAAA;AAAA,QACA,OAAA;AAAA;AAAA;AAAA,QAGA,cAAA,GACI;AAAA,UACE,EAAE,EAAA,EAAI,CAAA,EAAI,SAAA,EAAW,UAAA,EAAY,MAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAc,MAAA,EAAQ,IAAA,EAAM;AAAA,UACzF,EAAE,EAAA,EAAI,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,MAAM,EAAA,EAAU,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,KAAA;AAAM,SAC7F,GACA;AAAA,UACE,EAAE,EAAA,EAAI,CAAA,EAAI,SAAA,EAAW,UAAA,EAAY,MAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAc,MAAA,EAAQ,IAAA;AAAM;AAC3F,OACN;AACA,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,EAAC;AAAA,IAC3C,CAAA;AAAA,IACA,SAAA,EAAW,WAAA,KAAgB,cAAA,GAAiB,GAAA,GAAS,GAAA,CAAA;AAAA,IACrD,QAAQ,CAAA,GAAI,GAAA;AAAA,IACZ,iBAAiB,iBAAA,IAAqB,KAAA;AAAA,IACtC,oBAAA,EAAsB,KAAA;AAAA,IACtB,eAAA,EAAiB,iBAAiBC,2BAAA,GAAmB;AAAA,GACtD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,IACxB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAQ,MAAM,KAAA,IAA0B,IAAA;AAAA,IACxC,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA;AAAQ,GAC/B;AACF;AC9DA,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,aAAA,GAAgB,SAAA;AAEf,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,KAAA,GAAQ,EAAA;AAAA,EACR,UAAA,EAAY,cAAA;AAAA,EACZ,WAAA;AAAA,EACA,mBAAA,EAAqB,uBAAA;AAAA,EACrB,YAAA,GAAe,eAAA;AAAA,EACf,WAAA,GAAc,QAAA;AAAA,EACd,YAAA,GAAe,SAAA;AAAA,EACf,YAAA,GAAe,qBAAA;AAAA,EACf,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAQtE,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAIhD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIM,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,EAAE,CAAA;AAEzD,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,OAAA,KAAY,UAAA,CAAW;AAAA,IAClD,cAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,eAAA,GAAkB,MAAA;AAAA,IAC3C;AAAA,GACD,CAAA;AAID,EAAA,MAAM,aAAA,GAAgB0B,aAAAA;AAAA,IACpB,MACE,CAAC,GAAG,OAAO,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC1B,MAAA,IAAI,EAAE,MAAA,KAAW,CAAA,CAAE,QAAQ,OAAO,CAAA,CAAE,SAAS,EAAA,GAAK,CAAA;AAClD,MAAA,OAAO,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,IACH,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,eAAA,GAAkBA,cAAQ,MAAM;AACpC,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAAoB;AAClC,IAAA,KAAA,MAAW,KAAK,aAAA,EAAe,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AACnD,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,IAAA,GAAOA,cAAQ,MAAM;AACzB,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtC,OAAO,CAAA,CAAE,SAAA;AAAA,MACT,KAAA,EAAO,YAAY,CAAC;AAAA,KACtB,CAAE,CAAA;AAKF,IAAA,IAAI,KAAA,IAAS,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG;AAClD,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,MAAM,iBAAiB,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,KAAK,KAAK,IAAA,GAAO,IAAA;AACpE,EAAA,MAAM,aAAA,GAAgB,cAAA,GAAiB,WAAA,CAAY,cAAc,CAAA,GAAI,IAAA;AASrE,EAAAxB,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,IAAI,aAAA,IAAiB,gBAAgB,aAAA,EAAe;AACpD,IAAA,MAAMgB,KAAI,UAAA,CAAW,MAAM,kBAAA,CAAmB,WAAW,GAAG,WAAW,CAAA;AACvE,IAAA,OAAO,MAAM,aAAaA,EAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,WAAA,EAAa,cAAA,EAAgB,aAAa,CAAC,CAAA;AAG/C,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,KAAA;AACtB,IAAA,uBACElC,eAAAA,CAACC,UAAAA,EAAA,EAAM,SAAQ,eAAA,EAAgB,IAAA,EAAK,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,QAAO,EAC3E,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EACvC,QAAA,EAAA,WAAA,CAAY,CAAC,CAAA,EAChB,CAAA;AAAA,sBACAF,cAAAA,CAAC,SAAA,EAAA,EAAU,QAAQ,CAAA,CAAE,MAAA,EAAQ,aAA0B,YAAA,EAA4B;AAAA,KAAA,EACrF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,IAAI,CAAC,CAAA,EAAG,OAAO,QAAA,CAAS,IAAI,CAAA;AAC5B,QAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA;AACzC,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,YAAY,cAAA,IAAkB,IAAA;AAAA,MAC9B,WAAA,EAAa,iBAAiB,WAAA,GAAc,MAAA;AAAA,MAC5C,cAAA,EAAgB,iBAAiB,cAAA,GAAiB,MAAA;AAAA,MAClD,WAAA;AAAA,MACA,mBAAA,EAAqB,UAAA,GAAa,YAAA,GAAgB,uBAAA,IAA2B,kBAAA;AAAA,MAC7E,iBAAA,EAAmB,GAAA;AAAA,MACnB,YAAA;AAAA,MACA,WAAA,EAAa,cAAA,mBAAiBJ,cAAAA,CAAC,SAAA,EAAA,EAAU,QAAQ,cAAA,CAAe,MAAA,EAAQ,WAAA,EAA0B,YAAA,EAA4B,CAAA,GAAK,MAAA;AAAA,MACnI,iBAAA,EAAkB,OAAA;AAAA,MAClB,yBAAA,EAA0B,KAAA;AAAA,MAC1B,8BACEA,cAAAA;AAAA,QAACsE,eAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA,YAAA,EAAY,YAAA;AAAA,UACZ,KAAA,EAAO,YAAA;AAAA,UACP,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA,EAAQ;AAAA,UAE7B,QAAA,EAAA,UAAA,mBAAatE,cAAAA,CAACqD,WAAAA,EAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAc,CAAA,mBAAKrD,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,IAAA,EAAK,SAAQ,KAAA,EAAc;AAAA;AAAA;AAC9F;AAAA,GAEJ;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,WAAA,EAAa,cAAa,EAAmE;AACxH,EAAA,uBACEnC,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAS,WAAA,GAAc,YAAA;AAAA,MAC9B,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,cAAA;AAAA,QACT,KAAA,EAAO,OAAA;AAAA,QACP,MAAA,EAAQ,OAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,eAAA,EAAiB,SAAS,YAAA,GAAe,aAAA;AAAA,QACzC,SAAA,EAAW,CAAA,UAAA,EAAa,MAAA,GAAS,YAAA,GAAe,aAAa,CAAA,CAAA;AAAA,QAC7D,UAAA,EAAY;AAAA;AACd;AAAA,GACF;AAEJ;AAEA,SAAS,YAAY,CAAA,EAAmB;AAItC,EAAA,MAAM,KAAA,GAAkB,CAAC,CAAA,CAAE,QAAA,IAAY,EAAE,SAAS,CAAA;AAClD,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,IAAI,CAAA,CAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAC7B,IAAA,IAAI,CAAA,CAAE,MAAM,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,QAAK,CAAA;AACzB;AClKA,IAAM,iBAAA,GAAoB,CAAC,aAAA,EAAe,WAAA,EAAa,kBAAkB,CAAA;AAKzE,IAAM,CAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAWA,IAAM,aAAA,GAAqC;AAAA,EACzC,QAAQ,EAAC;AAAA,EACT,aAAa;AACf,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,EAAM,OAAM,EAA0C;AAClF,EAAA,uBACEF,gBAACW,SAAAA,EAAA,EAAK,OAAM,QAAA,EAAS,GAAA,EAAI,IAAA,EAAK,EAAA,EAAG,IAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,oBACjDA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,wBAAA,EAAyB,EAAG;AAAA,GAAA,EACnF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAAqB;AAC7C,EAAA,uBACEA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,QAAA,EAAS,EAAA,EAAG,MAC1E,QAAA,EAAA,IAAA,EACH,CAAA;AAEJ;AAyBO,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,EAA+B;AAC7B,EAAA,MAAM,eAAeM,oBAAAA,EAAgB;AACrC,EAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,YAAA,CAAa,YAAY,EAAE,CAAC,CAAA;AAE9D,EAAA,MAAM,GAAA,GAAM,aAAkD,SAAkB,CAAA;AAOhF,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAM,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA,GAAK,GAAA,CAAK,SAAsB,aAAA,CAAc,MAAA;AAAA,IAC/E,WAAA,EAAa,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA,GACtC,GAAA,CAAK,cACN,aAAA,CAAc;AAAA,GACpB;AAEA,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,cAAA,EAAoD;AACzE,EAAA,MAAM,GAAA,GAAM,CAAsC,GAAA,EAAQ,GAAA,KACxD,QAAA,CAAS,SAAA,EAAoB,EAAE,GAAG,KAAA,EAAO,CAAC,GAAG,GAAG,KAAc,CAAA;AAKhE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIM,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AAGtD,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,GAAA,CAAI,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AACjE,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,EAAe,IAAA,KAAiB;AAChD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA;AAC7B,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA;AACd,IAAA,GAAA,CAAI,UAAU,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAiB;AACtC,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACjC,IAAA,GAAA,CAAI,UAAU,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,EACvC,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KACnB,GAAA,CAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAG1D,EAAA,MAAM,gBAAA,GAAmB,CAAC,EAAA,KAAe;AACvC,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,GAAA,CAAI,eAAe,CAAC,GAAG,KAAA,CAAM,WAAA,EAAa,EAAE,CAAC,CAAA;AAC7C,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,EAAA,KAAe;AACnD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,WAAW,CAAA;AAClC,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AACd,IAAA,GAAA,CAAI,eAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAC,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KACxB,GAAA,CAAI,aAAA,EAAe,KAAA,CAAM,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAEpE,EAAA,uBACEhB,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,IAAA;AAAA,MACJ,CAAA,EAAE,IAAA;AAAA,MACF,OAAO,EAAE,IAAA,EAAM,GAAG,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO;AAAA,MAElD,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM+E,uBAAA;AAAA,YACN,KAAA,EAAO,KAAA,IAAS,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,YACpC;AAAA;AAAA,SACF;AAAA,wBAEA/E,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAClC,QAAA,EAAA,WAAA,IACC,CAAA;AAAA,UACE,oBAAA;AAAA,UACA;AAAA,SACF,EACJ,CAAA;AAAA,wBAGAF,eAAC,YAAA,EAAA,EAAa,IAAA,EAAMgF,mBAAO,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,oBAAoB,CAAA,EAAG,CAAA;AAAA,wBAG3EhF,cAAAA,CAACS,SAAAA,EAAA,EAAK,GAAA,EAAI,IAAA,EAAK,IAAA,EAAK,MAAA,EACjB,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AACrC,UAAA,uBACEX,eAAAA;AAAA,YAACW,SAAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAM,QAAA;AAAA,cACN,GAAA,EAAI,KAAA;AAAA,cACJ,OAAA,EAAS,KAAA,GAAQ,MAAA,GAAY,MAAM,cAAc,CAAC,CAAA;AAAA,cAClD,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,QAAQ,EAAA,GAAK,CAAA;AAAA,cACvB,eAAA,EAAe,KAAA;AAAA,cACf,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,KAAA,EAAO;AACX,gBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,aAAA,CAAc,CAAC,CAAA;AAAA,gBACjB;AAAA,cACF,CAAA;AAAA,cACA,EAAA,EAAG,IAAA;AAAA,cACH,EAAA,EAAG,KAAA;AAAA,cACH,KAAA,EAAO;AAAA,gBACL,MAAA,EAAQ,QAAQ,SAAA,GAAY,SAAA;AAAA,gBAC5B,OAAA,EAAS,QAAQ,GAAA,GAAM,CAAA;AAAA,gBACvB,UAAA,EAAYJ,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,gBAC7B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA,CAAA;AAAA,gBACxC,YAAA,EAAc,OAAA;AAAA,gBACd,UAAA,EAAY;AAAA,eACd;AAAA,cACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,gBAAA,IAAI,KAAA,EAAO;AACX,gBAAA,CAAA,CAAE,aAAA,CAAc,KAAA,CAAM,UAAA,GAAaA,UAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,cACtD,CAAA;AAAA,cACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,gBAAA,IAAI,KAAA,EAAO;AACX,gBAAA,CAAA,CAAE,aAAA,CAAc,KAAA,CAAM,UAAA,GAAaA,UAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,cACtD,CAAA;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,CAAC,yBAASL,cAAAA,CAACiF,gBAAA,EAAA,EAAK,IAAA,EAAK,SAAQ,KAAA,EAAc,CAAA;AAAA,gCAC5CjF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,GAAA,EAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAChD,QAAA,EAAA,CAAA,EACH;AAAA;AAAA,aAAA;AAAA,YApCK;AAAA,WAqCP;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,wBAEAJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC1B,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,CAAC,+BAC7BT,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,CAAA,CAAE,gBAAA,EAAkB,uCAAuC;AAAA;AAAA,WACnE;AAAA,UAED,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACvBF,eAAAA,CAACW,SAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EAC/B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC+B,cAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,SAAS,CAAA,EAAG,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,gBAClD,WAAA,EAAa,CAAA,CAAE,wBAAA,EAA0B,2CAA2C,CAAA;AAAA,gBACpF,IAAA,EAAK,IAAA;AAAA,gBACL,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA;AAAE;AAAA,aACnB;AAAA,4BACA/B,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,CAAA;AAAA,gBAC5B,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EAAA,EAjBS,CAkBX,CACD,CAAA;AAAA,UACA,+BACCjC,cAAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa,CAAA,CAAE,wBAAA,EAA0B,2CAA2C,CAAA;AAAA,cACpF,QAAA,EAAU,WAAA;AAAA,cACV,QAAA,EAAU,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,cACpC,WAAA,EAAa,CAAA,CAAE,QAAA,EAAU,QAAQ;AAAA;AAAA;AACnC,SAAA,EAEJ,CAAA;AAAA,QAEC,CAAC,WAAA,oBACAA,cAAAA,CAAC,gBAAa,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,WAAW,CAAA,EAAG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA,EAAG,CAAA;AAAA,wBAI9FA,eAAC,YAAA,EAAA,EAAa,IAAA,EAAMkF,uBAAW,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA,EAAG,CAAA;AAAA,wBAErEpF,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,KAAA,EAC1B,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA,oBAClCT,cAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,CAAA,CAAE,iBAAA,EAAmB,mBAAmB,CAAA,EAAG,CAAA;AAAA,UAE7D,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,qBAC1BF,eAAAA,CAACW,SAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EAC/B,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,OAAO,EAAA,IAAM,IAAA;AAAA,gBACb,UAAU,CAAC,CAAA,KAAM,cAAc,CAAA,EAAG,CAAA,EAAG,aAAa,EAAE,CAAA;AAAA,gBACpD,cAAA;AAAA,gBACA,WAAA,EAAa,CAAA,CAAE,kBAAA,EAAoB,qBAAgB,CAAA;AAAA,gBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,gBACjB,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,gBACjC,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EAAA,EAlBS,CAmBX,CACD,CAAA;AAAA,UACA,YAAA,oBACCnC,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,4BAAAT,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,EAAG,aAAa,EAAE,CAAA;AAAA,gBACpD,cAAA;AAAA,gBACA,WAAA,EAAa,CAAA,CAAE,kBAAA,EAAoB,qBAAgB,CAAA;AAAA,gBACnD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,gBACjB,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,4BACAA,cAAAA;AAAA,cAACsE,eAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,QAAA;AAAA,gBACR,KAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,gBACpC,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAC3B,YAAA,EAAY,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,gBAEhC,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,QAEC,CAAC,YAAA,oBACAjC,cAAAA,CAAC,gBAAa,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,YAAY,CAAA,EAAG,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA,EAAG;AAAA;AAAA;AAAA,GAEnG;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,OAAA,EAAQ,EAA2C;AAChF,EAAA,uBACEF,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAG,IAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAQ,qCAAA;AAAA,QACR,YAAA,EAAc,OAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,UAAA,GAAa,wBAAA;AACnC,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,uBAAA;AAAA,MACtC,CAAA;AAAA,MACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,UAAA,GAAa,aAAA;AACnC,QAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,wBAAA;AAAA,MACtC,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAACiF,gBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAM,uBAAA,EAAwB,CAAA;AAAA,wBACjDjF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAG,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAAS,CAAA,EAAE,yBAC9D,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAKA,SAAS,cAAA,CAAe;AAAA,EACtB,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIY,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,KAAA,CAAM,IAAA,EAAK,EAAG,QAAA,CAAS,KAAK,CAAA;AAAA,SAC3B,QAAA,EAAS;AAAA,EAChB,CAAA;AACA,EAAA,uBACEhB,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,IAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC+B,cAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,QAC/C,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,MAAA,EAAO;AAAA,UACT,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,QAAA,EAAS;AAAA,UACX;AAAA,QACF,CAAA;AAAA,QACA,MAAA,EAAQ,MAAA;AAAA,QACR,WAAA;AAAA,QACA,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA;AAAE;AAAA,KACnB;AAAA,oBACA/B,cAAAA;AAAA,MAACsE,eAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,QAAA;AAAA,QACR,KAAA,EAAM,KAAA;AAAA,QACN,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,WAAA;AAAA,QACP,YAAA,EAAY,WAAA;AAAA,QAEZ,QAAA,kBAAAtE,cAAAA,CAACiC,kBAAAA,EAAA,EAAO,MAAK,OAAA,EAAQ;AAAA;AAAA;AACvB,GAAA,EACF,CAAA;AAEJ;;;ACtZO,IAAM,4BAAA,GAAqD;AAAA,EAChE,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,gBAAA,GAAoC;AAAA;AAAA,EAE/C,EAAE,IAAA,EAAM,kBAAA,EAA4B,KAAA,EAAO,gBAAA,EAAyB,OAAO,iBAAA,EAAkB;AAAA,EAC7F,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,6BAAA,EAA0B,OAAO,iBAAA,EAAkB;AAAA,EAC9F,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,8BAAA,EAA2B,OAAO,iBAAA,EAAkB;AAAA,EAC/F,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,6BAAA,EAA0B,OAAO,iBAAA,EAAkB;AAAA,EAC9F,EAAE,IAAA,EAAM,mBAAA,EAA4B,KAAA,EAAO,4BAAA,EAAyB,OAAO,iBAAA,EAAkB;AAAA;AAAA,EAG7F,EAAE,IAAA,EAAM,aAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,cAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,sBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,qBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,mBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA4B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC9D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC/D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,wBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC7D,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA,EAG7D,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,aAAA,EAAyB,OAAO,mBAAA,EAAoB;AAAA,EAC9F,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC9D,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAG9D,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,sBAAA,EAAyB,OAAO,cAAA,EAAe;AAAA,EACzF,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,2BAAA,EAAyB,OAAO,cAAA,EAAe;AAAA,EACzF,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA,EACzD,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,cAAA,EAAe;AAAA;AAAA,EAGzD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,wBAAA,EAA0B,OAAO,OAAA,EAAQ;AAAA,EACnF,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,OAAA,EAAQ;AAAA;AAAA,EAGlD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,oBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,sBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,EACrD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAGrD,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1D,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC3D,EAAE,IAAA,EAAM,wBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,0BAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,aAAA,EAAc;AAAA,EAC1D,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,mBAAA,EAAyB,OAAO,aAAA,EAAc;AAAA;AAAA,EAGxF,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,QAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,YAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA,EAChE,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,qBAAA,EAAsB;AAAA;AAAA,EAGhE,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,qBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,uBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,mBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,kBAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA,EACxD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,aAAA,EAAc;AAAA;AAAA,EAGxD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,SAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,gBAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,iBAAA,EAA2B,KAAA,EAAO,mBAAA,EAAyB,OAAO,MAAA,EAAO;AAAA,EACjF,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,eAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,UAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,aAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,WAAA,EAA2B,KAAA,EAAO,MAAA,EAAO;AAAA,EACjD,EAAE,IAAA,EAAM,cAAA,EAA2B,KAAA,EAAO,MAAA;AAC5C,CAAA;AAEO,SAAS,oBAAoB,IAAA,EAAsB;AACxD,EAAA,MAAM,QAAQ,gBAAA,CAAiB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,SAAS,IAAI,CAAA;AAC5D,EAAA,OAAO,OAAO,KAAA,IAAS,IAAA;AACzB;ACtMA,SAASkD,iBAAAA,CAAiB,UAAA,GAAuB,EAAC,EAAG;AACnD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAyC;AAC5D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA;AAClD,IAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CAAG,KAAK,EAAE,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAA,GAAO,4BAAA,CAA6B,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACxB,OAAO,EAAA,CAAG,IAAA;AAAA,UACV,KAAA,EAAO,mBAAA,CAAoB,EAAA,CAAG,IAAI;AAAA,SACpC,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAID,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,gBAAA,CAAiB,IAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE,CAAE;AAAA,KACnD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,WAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAiB,CAAC,KAAK,CAAC,CAAA;AACrC,EAAA,uBACEnF,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,qBAAA;AAAA,MACpB,WAAA,EAAY,mBAAA;AAAA,MACX,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,EAAE;AAAA;AAAA,GACnC;AAEJ;;;ACxDO,IAAM,wBAAA,GAA+C;AAAA,EAC1D,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,aAAA,GAA+B;AAAA;AAAA,EAE1C,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,UAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,sCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8CAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4CAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAGrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA,EACxF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,sBAAA,EAAuB;AAAA;AAAA,EAGxF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpF,EAAE,IAAA,EAAM,2CAAA,EAAkD,KAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA,EAGpF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA;AAAA,EAGnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA,EACrF,EAAE,IAAA,EAAM,yCAAA,EAAkD,KAAA,EAAO,mBAAA,EAAoB;AAAA;AAAA,EAGrF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA,EAChF,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,cAAA,EAAe;AAAA;AAAA,EAGhF,EAAE,IAAA,EAAM,MAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,eAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA,EAG5E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,mBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA,EAC3E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAG3E,EAAE,IAAA,EAAM,OAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,cAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,yBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,oCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,mCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0CAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,8BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,2BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,kCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,sBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,uBAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,6BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,0BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA,EAC5E,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,UAAA,EAAW;AAAA;AAAA;AAAA;AAAA,EAK5E,EAAE,IAAA,EAAM,kBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,4BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,qBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,iCAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,+BAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,wBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,gBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,eAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,aAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,iBAAA,EAAkD,KAAA,EAAO,iBAAA,EAAkB;AAAA,EACnF,EAAE,IAAA,EAAM,oBAAA,EAAkD,KAAA,EAAO,iBAAA;AACnE,CAAA;AAOA,IAAM,SAAA,GAAY,gNAAA;AAEX,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,IAAA;AACjD,EAAA,OAAO,OAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,GAAG,EACT,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,GAAG,CAAA;AACb;ACxUA,SAAS+E,iBAAAA,CAAiB,UAAA,GAAuB,EAAC,EAAG;AACnD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAqC;AACxD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA;AAClD,IAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CAAG,KAAK,EAAE,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAA,GAAO,wBAAA,CAAyB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACnD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACxB,OAAO,EAAA,CAAG,IAAA;AAAA,UACV,KAAA,EAAO,EAAA,CAAG,KAAA,IAAS,iBAAA,CAAkB,GAAG,IAAI;AAAA,SAC9C,CAAE;AAAA;AACJ,KACF;AAAA,EACF,CAAC,CAAA;AAID,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE,CAAE;AAAA,KACnD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAiB,CAAC,KAAK,CAAC,CAAA;AACrC,EAAA,uBACEnF,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,mBAAA,EAAoB,uBAAA;AAAA,MACpB,WAAA,EAAY,oBAAA;AAAA,MACX,GAAG,IAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,EAAE;AAAA;AAAA,GACnC;AAEJ;ACvDA,IAAM4B,EAAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAkBA,SAAS,aAAa,KAAA,EAA8B;AAClD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,OAAO,MAAM,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD;AAIA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAA0B;AACnD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,IAAK,wBAAA;AAC3C,EAAA,uBACElC,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,UAAA,EAAY,MAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,SAAA,EAAW,IAAA,CAAK,KAAA,GAAQ,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,GAAK;AAAA;AAClD;AAAA,KACF;AAAA,oBACAA,eAACE,SAAAA,EAAA,EAAK,MAAK,IAAA,EAAK,CAAA,EAAE,uBAAA,EACf,QAAA,EAAA,IAAA,CAAK,IAAA,EACR;AAAA,GAAA,EACF,CAAA;AAEJ;AAOA,IAAM,mBAAA,GAAsB,sBAAA;AAC5B,IAAM,mBAAA,GAAsB,sBAAA;AA6BrB,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM,EAAE,UAAU,KAAA,EAAO,IAAA,GAAO,MAAM,WAAA,EAAa,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC/E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIY,eAA+B,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAuB,QAAA,EAAU,EAAC,EAAG;AAAA;AAAA;AAAA,QAGrD,EAAA,EAAI,IAAA;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,SAAY,KAAA,EAAO,QAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,YAAY,KAAA,EAAO,QAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,UAAY,KAAA,EAAO,OAAA,EAAU,UAAU,CAAA,EAAE;AAAA,UAC1D,EAAE,IAAI,GAAA,EAAK,IAAA,EAAM,SAAY,KAAA,EAAO,CAAA,EAAU,UAAU,CAAA;AAAE;AAC5D,OACD,CAAA;AACD,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,QAAA,CAAS,GAAA,CAAI,KAAA,IAAS,EAAE,CAAA;AACxB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,YAAA,CAAa,GAAA,EAAK,UAAU,aAAa,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,OAAA,EAAQ;AAAA,EAEV,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,SAAA,GAAYwB,cAAQ,MAAM;AAC9B,IAAA,MAAM,MAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,KAAK,KAAA,IAAS,IAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,GAAI,CAAA;AACzC,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAOV,EAAA,IAAI,cAAc,eAAA,EAAiB;AACjC,IAAA,MAAM,wBAAA,GAA2BR,EAAAA;AAAA,MAC/B,sBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,mBAAA,GAAsB;AAAA,MAC1B,GAAI,MAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,GAAK,MAAA,EAA4D,KAAA,IAAS,EAAC;AAAA,QAC3E,WAAA,EAAa,mBAAA;AAAA,QACb,eAAA,EAAiB;AAAA;AACnB,KACF;AACA,IAAA,MAAM,QAAA,mBACJhC,cAAAA,CAAC8B,yBAAAA,EAAA,EAAc,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,mBAAA,CAAoB,OAAA,CAAQ,UAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAEvF,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,uBACE9B,cAAAA;AAAA,QAACmE,gBAAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA,EAAa,wBAAA;AAAA,UACb,MAAM,EAAC;AAAA,UACP,OAAO,EAAC;AAAA,UACR,UAAU,MAAM;AAAA,UAAC,CAAA;AAAA,UACjB,QAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,KAAA;AAAA,UACA,MAAA,EAAQ;AAAA;AAAA,OACV;AAAA,IAEJ;AACA,IAAA,uBACEnE,cAAAA;AAAA,MAACI,WAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,wBAAA;AAAA,QACb,MAAM,EAAC;AAAA,QACP,KAAA,EAAO,IAAA;AAAA,QACP,UAAU,MAAM;AAAA,QAAC,CAAA;AAAA,QACjB,QAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,QAAA;AAAA,QACd,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAIA,EAAA,MAAM,QAAwB,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACrD,OAAO,CAAA,CAAE,EAAA;AAAA,IACT,OAAO,CAAA,CAAE;AAAA,GACX,CAAE,CAAA;AAEF,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,OAAO,IAAA,mBAAOJ,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,CAAA,mBAAKA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,EAC3E,CAAA;AAOA,EAAA,MAAM,gCACJF,cAAAA;AAAA,IAACsE,eAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,MAAG,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,QAAA,OAAA,EAAQ;AAAA,MAAG,CAAA;AAAA,MAClD,KAAA,EAAOtC,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAC7B,OAAA;AAAA,MACA,YAAA,EAAYA,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAElC,QAAA,kBAAAhC,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA,GAC1B;AAGF,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,uBACEnC,cAAAA;AAAA,MAACmE,gBAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,WAAA,IAAenC,EAAAA,CAAE,WAAA,EAAa,eAAe,CAAA;AAAA,QAC1D,IAAA;AAAA,QACA,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,EAAC;AAAA,QACvB,QAAA,EAAU,CAAC,GAAA,KAAQ,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,QACrC,YAAA;AAAA,QACA,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,KAAA;AAAA,QACnC,YAAA,EAAc,aAAA;AAAA,QACd,yBAAA,EAA0B,KAAA;AAAA,QAC1B,KAAA;AAAA,QACA,MAAA;AAAA,QACA,mBAAA,EACE,SAAA,GACI,CAAA,EAAGA,EAAAA,CAAE,OAAA,EAAS,OAAO,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GACpCA,EAAAA,CAAE,SAAA,EAAW,gBAAgB;AAAA;AAAA,KAErC;AAAA,EAEJ;AAEA,EAAA,uBACEhC,cAAAA;AAAA,IAACI,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA,EAAa,WAAA,IAAe4B,EAAAA,CAAE,UAAA,EAAY,gBAAgB,CAAA;AAAA,MAC1D,IAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,MACtB,QAAA,EAAU,CAAC,EAAA,KAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAAA,MACnC,YAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,SAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,KAAA;AAAA,MACnC,YAAA,EAAc,aAAA;AAAA,MACd,yBAAA,EAA0B,KAAA;AAAA,MAC1B,KAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA,EACE,SAAA,GACI,CAAA,EAAGA,EAAAA,CAAE,OAAA,EAAS,OAAO,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GACpCA,EAAAA,CAAE,SAAA,EAAW,gBAAgB;AAAA;AAAA,GAErC;AAEJ;ACnQA,IAAMA,EAAAA,GAAI,CAAC,GAAA,EAAa,QAAA,KAAqB;AAC3C,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,CAAA,KAAM,MAAM,QAAA,GAAW,CAAA;AAChC,CAAA;AAeA,IAAM,eAAA,GAA0C;AAAA,EAC9C,aAAA,EAAiB,0BAAA;AAAA,EACjB,SAAA,EAAiB,8BAAA;AAAA,EACjB,UAAA,EAAiB,8GAAA;AAAA,EACjB,cAAA,EAAiB,mCAAA;AAAA,EACjB,SAAA,EAAiB;AACnB,CAAA;AA4BA,SAAS,aAAA,CAAc,EAAE,OAAA,EAAQ,EAAkC;AACjE,EAAA,uBACElC,eAAAA,CAACW,SAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC3B,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,MAAK,CAAA,EAAE,uBAAA,EAAwB,EAAA,EAAG,cAAA,EAAe,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,QAAA,EAC5E,kBAAQ,IAAA,EACX,CAAA;AAAA,IACC,OAAA,CAAQ,KAAA,oBACPF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,CAAA,EAAE,uBAAA,EAChB,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAsC;AACvE,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,MAAM,OAAA,GAAU,wBAAwB,SAAS,CAAA,CAAA;AACjD,EAAA,MAAM,OAAOwB,EAAAA,CAAE,OAAA,EAAS,gBAAgB,SAAS,CAAA,IAAK,gBAAgB,OAAO,CAAA;AAC7E,EAAA,uBACElC,eAAAA;AAAA,IAACW,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MAAS,GAAA,EAAI,IAAA;AAAA,MAAK,EAAA,EAAG,IAAA;AAAA,MAAK,EAAA,EAAG,OAAA;AAAA,MACnC,KAAA,EAAO;AAAA,QACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,GAAG,CAAA;AAAA,QAC3C,MAAA,EAAQ,oCAAA;AAAA,QACR,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,cAAA,EAAe,CAAA,EAAE,wBAAA,EAAyB,EAAA,EAAG,WAAA,EAAY,GAAA,EAAI,UAC9E,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,wBACAF,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,OAAM,EAAA,EAAG,SAAA,EAAU,CAAA,EAAE,wBAAA,EAAyB,OAAO,EAAE,IAAA,EAAM,GAAE,EAAG,SAAA,EAAW,GACrF,QAAA,EAAA,IAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,IAAA,GAAO,IAAA,EAAM,aAAa,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,iBAAA,EAAkB,GAAI,KAAA;AAClG,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIY,eAAoC,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAA6B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAuB,QAAA,EAAU,EAAC,EAAG;AAAA;AAAA,QAErD,EAAA,EAAI,IAAA;AAAA,QACJ,SAAA,EAAW,aAAA;AAAA,QACX,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,OAAA,EAAe,KAAA,EAAO,MAAA,EAAO;AAAA,UACrC,EAAE,IAAA,EAAM,MAAA,EAAe,KAAA,EAAO,MAAA,EAAO;AAAA,UACrC,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA;AAAc;AAC9C,OACD,CAAA;AACD,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,WAAA,CAAY,GAAA,CAAI,QAAA,IAAY,EAAE,CAAA;AAC9B,QAAA,YAAA,CAAa,IAAI,SAAS,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,EAAE,CAAA;AACd,QAAA,YAAA,CAAa,KAAK,SAAS,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACd,IAAA,OAAA,EAAQ;AAAA,EAEV,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,cAAA,GAAiBwB,cAAQ,MAAM;AACnC,IAAA,MAAM,MAAwC,EAAC;AAC/C,IAAA,KAAA,MAAW,KAAK,QAAA,IAAY,IAAI,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA;AAG9C,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AACjC,QAAA,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,CAAC,CAAA,MAAO,CAAC,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,MACvC;AAAA,IACF,WAAW,KAAA,CAAM,KAAA,IAAS,CAAC,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3C,MAAA,GAAA,CAAI,MAAM,KAAK,CAAA,GAAI,EAAE,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IACzC;AACA,IAAA,OAAO,GAAA;AAAA,EAET,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,CAAC,CAAA;AAE9E,EAAA,MAAM,OAAuB,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACrE,OAAO,CAAA,CAAE,IAAA;AAAA,IACT,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,CAAA,CAAE;AAAA,GAChD,CAAE,CAAA;AAEF,EAAA,MAAM,YAAA,GAA4C,CAAC,EAAE,MAAA,EAAO,KAAM;AAChE,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA;AACvC,IAAA,OAAO,GAAA,mBAAMxC,cAAAA,CAAC,aAAA,EAAA,EAAc,SAAS,GAAA,EAAK,CAAA,mBAAKA,cAAAA,CAACE,SAAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,EAC/E,CAAA;AAEA,EAAA,MAAM,gCACJF,cAAAA;AAAA,IAACsE,eAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MAAK,OAAA,EAAQ,QAAA;AAAA,MAClB,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,MAAG,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,QAAA,OAAA,EAAQ;AAAA,MAAG,CAAA;AAAA,MAClD,KAAA,EAAOtC,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAC7B,OAAA;AAAA,MACA,YAAA,EAAYA,EAAAA,CAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAElC,QAAA,kBAAAhC,cAAAA,CAACmC,qBAAAA,EAAA,EAAU,MAAK,OAAA,EAAQ;AAAA;AAAA,GAC1B;AAGF,EAAA,MAAM,iBAAA,GAAoB;AAAA,IACxB,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,QAAA,IAAa,OAAA,IAAW,CAAC,QAAA;AAAA,IACnC,YAAA,EAAc,aAAA;AAAA,IACd,yBAAA,EAA2B,KAAA;AAAA,IAC3B,KAAA;AAAA,IACA,mBAAA,EAAqBH,EAAAA,CAAE,YAAA,EAAc,uBAAuB;AAAA,GAC9D;AAEA,EAAA,uBACElC,gBAACW,SAAAA,EAAA,EAAK,WAAU,QAAA,EAAS,GAAA,EAAI,SAAQ,KAAA,EAClC,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,wBACLT,cAAAA;AAAA,MAACmE,gBAAAA;AAAA,MAAA;AAAA,QACE,GAAG,iBAAA;AAAA,QACJ,WAAA,EAAa,WAAA,IAAenC,EAAAA,CAAE,cAAA,EAAgB,mCAAmC,CAAA;AAAA,QACjF,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,EAAC;AAAA,QACvB,QAAA,EAAU,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,QACzC,YAAA;AAAA,QAIA,UAAA,EAAU,IAAA;AAAA,QACV,iBAAA,EAAiB,IAAA;AAAA,QAGjB;AAAA;AAAA,wBAGFhC,cAAAA;AAAA,MAACI,WAAAA;AAAA,MAAA;AAAA,QACE,GAAG,iBAAA;AAAA,QACJ,WAAA,EAAa,WAAA,IAAe4B,EAAAA,CAAE,aAAA,EAAe,oBAAoB,CAAA;AAAA,QACjE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,QACtB,QAAA,EAAU,CAAC,IAAA,KAAS,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,QACvC,YAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAED,CAAC,iBAAA,oBAAqBhC,cAAAA,CAAC,iBAAc,SAAA,EAAsB;AAAA,GAAA,EAC9D,CAAA;AAEJ;AC1MA,IAAM,kBAAA,GAAqB,8BAAA;AAC3B,IAAM,cAAA,GAAiB,8BAAA;AACvB,IAAM,YAAA,GAAe,+BAAA;AAErB,SAAS,mBAAA,GAAsB;AAC7B,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA,EAAG;AACjD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACzC,EAAA,EAAA,CAAG,EAAA,GAAK,kBAAA;AAKR,EAAA,EAAA,CAAG,WAAA,GAAc;AAAA,SAAA,EACR,cAAc,cAAc,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAMjD,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC9B;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAM,IAAA,GAAO8D,kBAAAA;AAAA,EACb,eAAA,GAAkB;AACpB,CAAA,EAA0B;AACxB,EAAA,MAAM,QAAQtD,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAE1C,EAAAQ,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,eAAA,EAAiB;AAClC,IAAA,mBAAA,EAAoB;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,EAAE,CAAA;AAC7C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,cAAc,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,eAAe,CAAC,CAAA;AAE7B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,OAAOoE,qBAAA;AAAA,oBACLpF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,EAAE,CAAC,YAAY,GAAG,EAAA,EAAG;AAAA,QACzB,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA,EAAG,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAM;AAAA,QAE3E,QAAA,kBAAAA,cAAAA,CAACY,4BAAAA,EAAA,EACC,QAAA,kBAAAZ,cAAAA;AAAA,UAACW,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,YAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,YACvC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,WAAA,EAAY;AAAA,YAChD,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,QAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,MAAA,EAAO;AAAA,YAE/E,QAAA,kBAAAb,eAAAA;AAAA,cAACW,SAAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,QAAA;AAAA,gBACV,GAAA,EAAI,OAAA;AAAA,gBACJ,KAAA,EAAO;AAAA,kBACL,YAAYJ,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,kBAC5C,MAAA,EAAQ,oCAAA;AAAA,kBACR,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,kBAC3B,SAAA,EAAW,iCAAA;AAAA,kBACX,OAAA,EAAS,aAAA;AAAA,kBACT,QAAA,EAAU,MAAA;AAAA,kBACV,QAAA,EAAU;AAAA,iBACZ;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAP,gBAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oCAAAT,cAAAA,CAAC,QAAK,IAAA,EAAK,OAAA,EAAQ,OAAO,EAAA,CAAG,CAAC,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,CAAA;AAAA,oCACnDA,cAAAA;AAAA,sBAACE,SAAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO;AAAA,0BACL,UAAA,EAAY,0BAAA;AAAA,0BACZ,QAAA,EAAU,OAAA;AAAA,0BACV,UAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe,WAAA;AAAA,0BACf,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,0BACX,UAAA,EAAY,CAAA,UAAA,EAAaG,UAAAA,CAAM,EAAA,CAAG,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,YAAA,EAAeA,UAAAA,CAAM,EAAA,CAAG,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,yBAC5E;AAAA,wBAEC,QAAA,EAAA;AAAA;AAAA;AACH,mBAAA,EACF,CAAA;AAAA,kBAAA,CAEE,QAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,qBAC/BL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAQ,OAAA,EAAS,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,WAAU,EAAG,CAAA;AAAA,kBAG3F,wBACCA,cAAAA;AAAA,oBAACE,SAAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,0BAAA;AAAA,wBACZ,QAAA,EAAU,QAAA;AAAA,wBACV,KAAA,EAAO,wBAAA;AAAA,wBACP,aAAA,EAAe,QAAA;AAAA,wBACf,aAAA,EAAe,WAAA;AAAA,wBACf,UAAA,EAAY;AAAA,uBACd;AAAA,sBAEC,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kBAGD,QAAQ,IAAA,CAAK,MAAA,GAAS,qBACrBJ,eAAAA,CAAAwD,qBAAA,EACG,QAAA,EAAA;AAAA,oBAAA,IAAA,oBACCtD,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,SAAA,EAAU,EAAG,CAAA;AAAA,oCAE5FA,cAAAA,CAACS,SAAAA,EAAA,EAAK,SAAA,EAAU,UAAS,GAAA,EAAI,OAAA,EAC1B,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,sBACZT,cAAAA,CAAC,iBAAA,EAAA,EAA0B,QAAA,EAAU,CAAA,CAAE,GAAA,EAAK,QAAQ,CAAA,CAAE,MAAA,EAAA,EAA9B,CAAsC,CAC/D,CAAA,EACH;AAAA,mBAAA,EACF;AAAA;AAAA;AAAA;AAEJ,WAAA;AAAA,UApEI;AAAA,SAqEN,EACF;AAAA;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAMA,SAAS,iBAAiB,QAAA,EAAmC;AAC3D,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/C,EAAA,IAAI,eAAe,KAAA,EAAO,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAAU,MAAK,MAAA,EAAO,CAAA;AACxD,EAAA,IAAI,eAAe,KAAA,EAAO,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAAU,MAAK,OAAA,EAAQ,CAAA;AACzD,EAAA,IAAI,eAAe,WAAA,IAAe,QAAA,KAAa,UAAK,uBAAOA,eAAC,aAAA,EAAA,EAAc,CAAA;AAC1E,EAAA,uBACEA,cAAAA;AAAA,IAACE,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,0BAAA;AAAA,QACZ,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,wBAAA;AAAA,QACP,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,MAAA,EAAO,EAAyC;AAGrF,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/C,EAAA,MAAM,YAAY,UAAA,KAAe,KAAA,IAAS,eAAe,KAAA,IACpD,UAAA,KAAe,eAAe,QAAA,KAAa,QAAA;AAChD,EAAA,MAAM,QAAA,GAAW,YAAY,OAAA,GAAU,OAAA;AAEvC,EAAA,uBACEJ,eAAAA,CAACW,SAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,OAAA,EACvB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA;AAAA,UACA,MAAA,EAAQ,OAAA;AAAA,UACR,OAAA,EAAS,SAAA;AAAA,UACT,YAAA,EAAc,OAAA;AAAA,UACd,MAAA,EAAQ,qCAAA;AAAA,UACR,UAAA,EAAY,wBAAA;AAAA,UACZ,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,OAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAQ,wCAAA;AAAA,UACR,UAAA,EAAY,CAAA;AAAA,UACZ,SAAA,EAAW;AAAA,SACb;AAAA,QAEC,2BAAiB,QAAQ;AAAA;AAAA,KAC5B;AAAA,oBACAA,cAAAA;AAAA,MAACE,SAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,0BAAA;AAAA,UACZ,QAAA,EAAU,QAAA;AAAA,UACV,KAAA,EAAO,wBAAA;AAAA,UACP,aAAA,EAAe,QAAA;AAAA,UACf,aAAA,EAAe;AAAA,SACjB;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAKA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAA+B;AACvD,EAAA,MAAM,MAAA,GAAS,wBAAA;AACf,EAAA,MAAM,UAAA,GAAa,wBAAA;AACnB,EAAA,uBACEJ,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,KAAA,EAAM,OAAA,EAAQ,MAAA,EAAO,OAAA,EAAQ,MAAK,MAAA,EAAO,MAAA,EAAgB,WAAA,EAAY,KAAA,EAAM,gBAAe,OAAA,EAEjH,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAEhDA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAElCA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EACE,IAAA,KAAS,MAAA,GACL,mDAAA,GACA,sDAAA;AAAA,QAEN,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAO;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,GAAgB;AAIvB,EAAA,MAAM,MAAA,GAAS,wBAAA;AACf,EAAA,uBACEF,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,OAAA,EAAQ,MAAA,EAAO,OAAA,EAAQ,IAAA,EAAK,QAAO,MAAA,EAAgB,WAAA,EAAY,OAAM,cAAA,EAAe,OAAA,EAAQ,eAAc,OAAA,EACvI,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qCAAA,EAAsC,CAAA;AAAA,oBAC9CA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACvC,CAAA;AAEJ;AClPO,SAAS,oBAAoB,EAAE,KAAA,EAAO,UAAU,OAAA,EAAS,OAAA,EAAS,UAAS,EAA4B;AAC5G,EAAA,uBACEF,eAAAA,CAAAwD,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAC,4BAAYtD,cAAAA,CAACqF,yBAAA,EAAuB,KAAA,EAAc,UAAoB,OAAA,EAAkB,CAAA;AAAA,IACzF,CAAC,OAAA,oBAAWrF,eAACsF,wBAAAA,EAAA,EAAwB,OAAc,OAAA,EAAkB;AAAA,GAAA,EACxE,CAAA;AAEJ;AAOA,SAASD,uBAAAA,CAAuB;AAAA,EAC9B,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAQ7E,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAG9C,EAAA,MAAM,UAAU,YAAY;AAI1B,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,KAAA,EAAO,MAAA,CAAO,mBAAmB,CAAA,IAAK,eAAA;AAAA,MACtC,IAAA,EAAM,MAAA,CAAO,kBAAkB,CAAA,IAAK,iCAAA;AAAA,MACpC,IAAA,EAAM;AAAA,QACJ,EAAE,GAAA,EAAK,GAAA,EAAK,QAAQ,MAAA,CAAO,KAAK,KAAK,KAAA,EAAM;AAAA,QAC3C,EAAE,GAAA,EAAK,QAAA,EAAK,QAAQ,MAAA,CAAO,QAAQ,KAAK,QAAA;AAAS;AACnD,KACF;AACA,IAAA,MAAM,gBAAgB,KAAA,CAAoB,EAAE,IAAI,iBAAA,EAAmB,GAAG,cAAc,CAAA;AAIpF,IAAA,QAAA,CAAS,kBAAA,EAAoB,EAAE,EAAA,EAAI,iBAAA,EAAmB,cAAc,CAAA,CAAE,MAAM,MAAM;AAEhF,MAAA,iBAAA,CAAkB,QAAA,GAAW,YAAA,EAAa;AAAA,IAC5C,CAAC,CAAA;AACD,IAAA,MAAM,SAAS,MAAM,aAAA;AACrB,IAAA,IAAI,MAAA,WAAiB,MAAM,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,OAAO,iBAAiB,CAAA,EAAG,QAAA,EAAS,KAAA,EAAM,WAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACvF,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,eAAC+D,qBAAAA,EAAA,EAAU,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,wBAC5D/D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAC/D,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EACf;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,SAASoF,wBAAAA,CAAwB;AAAA,EAC/B,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,QAAQ9E,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,QAAA,CAAS,mBAAA,EAAqB,EAAE,EAAA,EAAI,WAAA,EAAa,OAAO,CAAA,CAAE,MAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EAC1E,CAAA;AACA,EAAA,uBACER,cAAAA,CAACiB,YAAAA,EAAA,EAAQ,KAAA,EAAO,OAAO,kBAAkB,CAAA,EAAG,QAAA,EAAS,KAAA,EAAM,WAAS,IAAA,EAAC,YAAA,EAAY,IAAA,EAAC,MAAA,EAAQ,KACxF,QAAA,kBAAAnB,eAAAA;AAAA,IAACa,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA;AAAA,MACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,MAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,QACpC,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,OAC3B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,eAAC8D,kBAAAA,EAAA,EAAO,MAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,wBACzD9D,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,KAAA,EAC/D,QAAA,EAAA,MAAA,CAAO,MAAM,CAAA,EAChB;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AClFO,SAAS,WAAA,GAAqD;AACnE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAC9C,EAAA,OAAO,YAAY;AAGjB,IAAA,MAAM,UAAU,KAAA,CAAuB;AAAA,MACrC,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO,OAAO,eAAe,CAAA;AAAA,MAC7B,IAAA,EAAM,OAAO,cAAc,CAAA;AAAA,MAC3B,IAAA,EAAM;AAAA,QACJ,EAAE,GAAA,EAAK,KAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA,QAC9C,EAAE,GAAA,EAAK,GAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,QAC9C,EAAE,GAAA,EAAK,WAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAG;AAChD,KACD,CAAA;AACD,IAAA,QAAA,CAAS,oBAAoB,EAAE,EAAA,EAAI,YAAY,CAAA,CAAE,MAAM,MAAM;AAC3D,MAAA,iBAAA,CAAkB,QAAA,GAAW,YAAA,EAAa;AAAA,IAC5C,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,OAAA;AAAA,EACf,CAAA;AACF;AAOO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,QAAQM,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAChD,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAC9B,IAAA,IAAI,UAAU,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,SAAU,MAAM,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,uBACER,cAAAA;AAAA,IAACiB,YAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MAC1C,QAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,YAAA,EAAY,IAAA;AAAA,MACZ,MAAA,EAAQ,GAAA;AAAA,MAER,QAAA,kBAAAnB,eAAAA;AAAA,QAACa,mBAAAA,CAAO,MAAA;AAAA,QAAP;AAAA,UACC,OAAA;AAAA,UACA,YAAY,EAAE,UAAA,EAAYN,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,UAC7C,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,UACxB,KAAA,EAAO;AAAA,YACL,UAAA,EAAYA,UAAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,YAC5B,MAAA,EAAQ,CAAA,YAAA,EAAeA,UAAAA,CAAM,KAAA,EAAO,IAAI,CAAC,CAAA,CAAA;AAAA,YACzC,YAAA,EAAc,MAAM,MAAA,CAAO,EAAA;AAAA,YAC3B,OAAA,EAAS,UAAU,cAAA,GAAiB,aAAA;AAAA,YACpC,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,UAAU,OAAA,GAAU;AAAA,WAC3B;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAL,eAACuF,oBAAA,EAAA,EAAS,IAAA,EAAM,OAAA,GAAU,OAAA,GAAU,SAAS,KAAA,EAAc,CAAA;AAAA,4BAC3DvF,cAAAA,CAACE,SAAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,KAAA,EAAM,EAAA,EAAG,WAAA,EAAY,KAAI,QAAA,EAAS,CAAA,EAAG,OAC/D,QAAA,EAAA,KAAA,IAAS,MAAA,CAAO,UAAU,CAAA,EAC7B;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AC9GA,IAAM,OAAA,GAAUsF,WAAK,CAAC;AAAA,EACpB,QAAA;AAAA,EACA,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAAA,EAC9B,QAAA,GAAW;AACb,CAAA,KAAgB;AACd,EAAA,MAAM,MAAA,GAAS3E,aAA8B,IAAI,CAAA;AAEjD,EAAA,uBACEf,eAAAA;AAAA,IAAC2F,yBAAA;AAAA,IAAA;AAAA,MACC,kBAAA,EAAoB,CAAA;AAAA,MACpB,YAAA,EAAc,IAAA;AAAA,MACd,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAAA,MAC5B,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAa,KAAA;AAAA,MACb,KAAKC,WAAA,CAAI,MAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,iBAAA;AAAA,QACT,MAAA,EAAQ,iBAAA;AAAA,QACR,SAAA,EAAW,iBAAA;AAAA,QACX,eAAA,EAAiB;AAAA,OACnB;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,kBAAA,EAAoB,KAAA;AAAA,MACpB,eAAA,EAAiB,KAAA;AAAA,MACjB,OAAA,EAAS,KAAA;AAAA,MACT,aAAA,EAAe,KAAA;AAAA,MACf,GAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,MAEpC,QAAA,EAAA;AAAA,wBAAA1F,cAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,QAC7B;AAAA;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA;AAEf,IAAM2F,IAAAA,GAAM;AAWZ,IAAM,QAAA,GAAW,CAAC,EAAE,QAAA,EAAS,KAAqB;AACvD,EAAA,MAAM,MAAMC,mBAAA,EAAO;AACnB,EAAA,MAAM,QAAA,GAAW/E,aAAyB,IAAI,CAAA;AAE9C,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,GAAA,CAAI,WAAA,CAAY,SAAS,OAAO,CAAA;AAAA,IAClC;AACA,IAAA,MAAM,KAAA,GAAQ6E,iBAAA;AAAA,MACZ,6CAA6C,QAAQ,CAAA,gBAAA,CAAA;AAAA,MACrD;AAAA,QACE,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,MAAA,EAAQC,qBAAaC,cAAA,CAAO,CAAA,EAAK,GAAK,CAAA,EAAGA,cAAA,CAAO,IAAA,EAAQ,CAAG,CAAC,CAAA;AAAA,QAC5D,QAAA,EAAU,GAAA;AAAA,QACV,iBAAA,EAAmB,KAAA;AAAA,QACnB,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS;AAAA;AACX,KACF;AACA,IAAA,KAAA,CAAM,MAAM,GAAG,CAAA;AACf,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAEnB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,GAAA,CAAI,WAAA,CAAY,SAAS,OAAO,CAAA;AAAA,MAClC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,GAAG,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,QAAQvF,oBAAAA,EAAgB;AAC9B,EAAA,MAAM,MAAMoF,mBAAA,EAAO;AACnB,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,IAAA,EAAMX,gBAAAA,EAAM,IAAI,MAAM,GAAA,CAAI,QAAO,EAAE;AAAA,IACrC,EAAE,IAAA,EAAMe,iBAAA,EAAO,IAAI,MAAM,GAAA,CAAI,SAAQ;AAAE,GACzC;AAEA,EAAA,uBACEhG,cAAAA;AAAA,IAACW,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO,KAAA;AAAA,QACP,GAAA,EAAK,KAAA;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,WAAWN,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA;AAAA,QACvD,YAAYA,UAAAA,CAAM,KAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,QAC5C,YAAA,EAAc,MAAM,MAAA,CAAO;AAAA,OAC7B;AAAA,MACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,MAC9B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,MAE1B,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,EAAE,MAAM,EAAA,EAAG,EAAG,sBAC1BL,cAAAA;AAAA,QAACW,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAK,QAAQ,iBAAA,EAAkB;AAAA,UACpD,OAAA,EAAS,EAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAM,OAAA,CAAQ,EAAA;AAAA,YACvB,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS;AAAA,WACX;AAAA,UAEA,QAAA,kBAAAX,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,OAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG;AAAA,SAAA;AAAA,QATxC;AAAA,OAWR;AAAA;AAAA,GACH;AAEJ;ACnHA,IAAM,cAAA,GAAiB,GAAA;AACvB,IAAM,aAAA,GAAgB,CAAA;AAEf,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB,cAAA;AAAA,EACjB,aAAA,GAAgB;AAClB,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIc,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,SAAA,GAAY0B,aAAAA,CAAQ,MAAM,SAAA,CAAU,SAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,EAAG,CAAC,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAE3F,EAAA,MAAM,kBAAkB,MAAA,IAAU,cAAA;AAClC,EAAA,MAAM,iBAAiB,KAAA,IAAS,aAAA;AAChC,EAAA,MAAM,GAAA,GAAM,iBAAiB,eAAe,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,cAAc,CAAA,EAAG,GAAA,IAAO,SAAA;AAEtD,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAW;AAC9B,IAAA,CAAA,CAAE,eAAe,eAAA,IAAkB;AACnC,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAKA,EAAA,MAAM,WAAW,GAAA,GAAM,KAAA;AACvB,EAAA,MAAM,IAAA,GAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AACxB,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,GAAG,CAAA,EAAA,CAAA;AAElC,EAAA,uBACExC,cAAAA;AAAA,IAACiG,kCAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe,OAAA,GAAU,EAAE,KAAA,EAAO,aAAY,GAAI,MAAA;AAAA,MAClD,sBACEnG,eAAAA;AAAA,QAACa,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,UACnC,UAAA,EAAY,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,QAAA;AAAA,YAChB,MAAA,EAAQ,QAAA,GAAW,aAAA,GAAgB,OAAA,GAAU,SAAA,GAAY,SAAA;AAAA,YACzD,OAAA,EAAS,WAAW,IAAA,GAAO,CAAA;AAAA,YAC3B,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,IAAW,CAAC,QAAA,GAAW,GAAA,GAAM,QAAA,GAAW,IAAA,GAAO,CAAA,EAAE;AAAA,UACnE,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UAI5C,QAAA,EAAA;AAAA,YAAA,CAAA,QAAA,IAAY,OAAA,KAAY,CAAC,QAAA,oBACzBX,cAAAA;AAAA,cAACW,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,UAAA;AAAA,kBACV,KAAA,EAAO,QAAA;AAAA,kBACP,MAAA,EAAQ,QAAA;AAAA,kBACR,YAAA,EAAc,KAAA;AAAA,kBACd,MAAA,EAAQ,CAAA,aAAA,EAAgBN,UAAAA,CAAM,QAAA,EAAU,IAAI,CAAC,CAAA,CAAA;AAAA,kBAC7C,SAAA,EAAW,CAAA,QAAA,EAAWA,UAAAA,CAAM,QAAA,EAAU,IAAI,CAAC,CAAA;AAAA,iBAC7C;AAAA,gBACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,GAAA,EAAI;AAAA,gBAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA;AAAE;AAAA,aAClC;AAAA,YASD,uBACCL,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,KAAA,EAAO,IAAA;AAAA,kBACP,MAAA,EAAQ,IAAA;AAAA,kBACR,eAAA,EAAiB,QAAA;AAAA,kBACjB,eAAA,EAAiB,OAAO,GAAG,CAAA,CAAA,CAAA;AAAA,kBAC3B,SAAA,EAAW,OAAO,GAAG,CAAA,CAAA,CAAA;AAAA,kBACrB,gBAAA,EAAkB,WAAA;AAAA,kBAClB,UAAA,EAAY,WAAA;AAAA,kBACZ,kBAAA,EAAoB,QAAA;AAAA,kBACpB,YAAA,EAAc,QAAA;AAAA,kBACd,cAAA,EAAgB,SAAA;AAAA,kBAChB,QAAA,EAAU,SAAA;AAAA,kBACV,MAAA,EAAQ;AAAA,oBACN,8BAAA;AAAA,oBACA,+BAAA;AAAA,oBACA,8BAAA;AAAA,oBACA,+BAAA;AAAA,oBACA,CAAA,sBAAA,EAAyBK,UAAAA,CAAM,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,mBAC7C,CAAE,KAAK,GAAG,CAAA;AAAA,kBACV,aAAA,EAAe,MAAA;AAAA,kBACf,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA,GAEJ;AAEJ","file":"index.cjs","sourcesContent":["import {\r\n Group,\r\n Text,\r\n Image,\r\n Box,\r\n Select,\r\n} from \"@mantine/core\";\r\nimport type { ComboboxItem, SelectProps } from \"@mantine/core\";\r\n\r\n// ── Blip icons: [id, name, extension] ──────────────────────────────────────\r\n\r\nconst BLIP_ENTRIES: [number, string, string][] = [\r\n [0,\"radar_higher\",\"gif\"],[1,\"radar_level\",\"png\"],[2,\"radar_lower\",\"gif\"],[3,\"radar_police_ped\",\"gif\"],\r\n [4,\"radar_wanted_radius\",\"png\"],[5,\"radar_area_blip\",\"png\"],[6,\"radar_centre\",\"png\"],[7,\"radar_north\",\"png\"],\r\n [8,\"radar_waypoint\",\"png\"],[9,\"radar_radius_blip\",\"png\"],[10,\"radar_radius_outline_blip\",\"png\"],\r\n [11,\"radar_weapon_higher\",\"gif\"],[12,\"radar_weapon_lower\",\"gif\"],[13,\"radar_higher_ai\",\"gif\"],\r\n [14,\"radar_lower_ai\",\"gif\"],[15,\"radar_police_heli_spin\",\"gif\"],[16,\"radar_police_plane_move\",\"png\"],\r\n [27,\"radar_mp_crew\",\"png\"],[28,\"radar_mp_friendlies\",\"png\"],[36,\"radar_cable_car\",\"png\"],\r\n [37,\"radar_activities\",\"png\"],[38,\"radar_raceflag\",\"png\"],[40,\"radar_safehouse\",\"png\"],\r\n [41,\"radar_police\",\"gif\"],[42,\"radar_police_chase\",\"gif\"],[43,\"radar_police_heli\",\"png\"],\r\n [44,\"radar_bomb_a\",\"png\"],[47,\"radar_snitch\",\"png\"],[48,\"radar_planning_locations\",\"png\"],\r\n [50,\"radar_crim_carsteal\",\"png\"],[51,\"radar_crim_drugs\",\"png\"],[52,\"radar_crim_holdups\",\"png\"],\r\n [54,\"radar_crim_player\",\"png\"],[56,\"radar_cop_patrol\",\"png\"],[57,\"radar_cop_player\",\"png\"],\r\n [58,\"radar_crim_wanted\",\"png\"],[59,\"radar_heist\",\"png\"],[60,\"radar_police_station\",\"png\"],\r\n [61,\"radar_hospital\",\"png\"],[62,\"radar_assassins_mark\",\"png\"],[63,\"radar_elevator\",\"png\"],\r\n [64,\"radar_helicopter\",\"png\"],[66,\"radar_random_character\",\"png\"],[67,\"radar_security_van\",\"png\"],\r\n [68,\"radar_tow_truck\",\"png\"],[70,\"radar_illegal_parking\",\"png\"],[71,\"radar_barber\",\"png\"],\r\n [72,\"radar_car_mod_shop\",\"png\"],[73,\"radar_clothes_store\",\"png\"],[75,\"radar_tattoo\",\"png\"],\r\n [76,\"radar_armenian_family\",\"png\"],[77,\"radar_lester_family\",\"png\"],[78,\"radar_michael_family\",\"png\"],\r\n [79,\"radar_trevor_family\",\"png\"],[80,\"radar_jewelry_heist\",\"png\"],[82,\"radar_drag_race_finish\",\"png\"],\r\n [84,\"radar_rampage\",\"png\"],[85,\"radar_vinewood_tours\",\"png\"],[86,\"radar_lamar_family\",\"png\"],\r\n [88,\"radar_franklin_family\",\"png\"],[89,\"radar_chinese_strand\",\"png\"],[90,\"radar_flight_school\",\"png\"],\r\n [91,\"radar_eye_sky\",\"png\"],[92,\"radar_air_hockey\",\"png\"],[93,\"radar_bar\",\"png\"],\r\n [94,\"radar_base_jump\",\"png\"],[95,\"radar_basketball\",\"png\"],[96,\"radar_biolab_heist\",\"png\"],\r\n [99,\"radar_cabaret_club\",\"png\"],[100,\"radar_car_wash\",\"png\"],[102,\"radar_comedy_club\",\"png\"],\r\n [103,\"radar_darts\",\"png\"],[104,\"radar_docks_heist\",\"png\"],[105,\"radar_fbi_heist\",\"png\"],\r\n [106,\"radar_fbi_officers_strand\",\"png\"],[107,\"radar_finale_bank_heist\",\"png\"],\r\n [108,\"radar_financier_strand\",\"png\"],[109,\"radar_golf\",\"png\"],[110,\"radar_gun_shop\",\"png\"],\r\n [111,\"radar_internet_cafe\",\"png\"],[112,\"radar_michael_family_exile\",\"png\"],\r\n [113,\"radar_nice_house_heist\",\"png\"],[114,\"radar_random_female\",\"png\"],[115,\"radar_random_male\",\"png\"],\r\n [118,\"radar_rural_bank_heist\",\"png\"],[119,\"radar_shooting_range\",\"png\"],\r\n [120,\"radar_solomon_strand\",\"png\"],[121,\"radar_strip_club\",\"png\"],[122,\"radar_tennis\",\"png\"],\r\n [123,\"radar_trevor_family_exile\",\"png\"],[124,\"radar_michael_trevor_family\",\"png\"],\r\n [126,\"radar_triathlon\",\"png\"],[127,\"radar_off_road_racing\",\"png\"],[128,\"radar_gang_cops\",\"png\"],\r\n [129,\"radar_gang_mexicans\",\"png\"],[130,\"radar_gang_bikers\",\"png\"],[133,\"radar_snitch_red\",\"png\"],\r\n [134,\"radar_crim_cuff_keys\",\"png\"],[135,\"radar_cinema\",\"png\"],[136,\"radar_music_venue\",\"png\"],\r\n [137,\"radar_police_station_blue\",\"png\"],[138,\"radar_airport\",\"png\"],\r\n [139,\"radar_crim_saved_vehicle\",\"png\"],[140,\"radar_weed_stash\",\"png\"],[141,\"radar_hunting\",\"png\"],\r\n [142,\"radar_pool\",\"png\"],[143,\"radar_objective_blue\",\"png\"],[144,\"radar_objective_green\",\"png\"],\r\n [145,\"radar_objective_red\",\"png\"],[146,\"radar_objective_yellow\",\"png\"],[147,\"radar_arms_dealing\",\"png\"],\r\n [148,\"radar_mp_friend\",\"png\"],[149,\"radar_celebrity_theft\",\"png\"],\r\n [150,\"radar_weapon_assault_rifle\",\"png\"],[151,\"radar_weapon_bat\",\"png\"],\r\n [152,\"radar_weapon_grenade\",\"png\"],[153,\"radar_weapon_health\",\"png\"],[154,\"radar_weapon_knife\",\"png\"],\r\n [155,\"radar_weapon_molotov\",\"png\"],[156,\"radar_weapon_pistol\",\"png\"],[157,\"radar_weapon_rocket\",\"png\"],\r\n [158,\"radar_weapon_shotgun\",\"png\"],[159,\"radar_weapon_smg\",\"png\"],[160,\"radar_weapon_sniper\",\"png\"],\r\n [161,\"radar_mp_noise\",\"gif\"],[162,\"radar_poi\",\"png\"],[163,\"radar_passive\",\"png\"],\r\n [164,\"radar_usingmenu\",\"png\"],[171,\"radar_gang_cops_partner\",\"png\"],[173,\"radar_weapon_minigun\",\"png\"],\r\n [175,\"radar_weapon_armour\",\"png\"],[176,\"radar_property_takeover\",\"png\"],\r\n [177,\"radar_gang_mexicans_highlight\",\"png\"],[178,\"radar_gang_bikers_highlight\",\"png\"],\r\n [179,\"radar_triathlon_cycling\",\"png\"],[180,\"radar_triathlon_swimming\",\"png\"],\r\n [181,\"radar_property_takeover_bikers\",\"png\"],[182,\"radar_property_takeover_cops\",\"png\"],\r\n [183,\"radar_property_takeover_vagos\",\"png\"],[184,\"radar_camera\",\"png\"],\r\n [185,\"radar_centre_red\",\"png\"],[186,\"radar_handcuff_keys_bikers\",\"png\"],\r\n [187,\"radar_handcuff_keys_vagos\",\"png\"],[188,\"radar_handcuffs_closed_bikers\",\"png\"],\r\n [189,\"radar_handcuffs_closed_vagos\",\"png\"],[192,\"radar_camera_badger\",\"png\"],\r\n [193,\"radar_camera_facade\",\"png\"],[194,\"radar_camera_ifruit\",\"png\"],[197,\"radar_yoga\",\"png\"],\r\n [198,\"radar_taxi\",\"png\"],[205,\"radar_shrink\",\"png\"],[206,\"radar_epsilon\",\"png\"],\r\n [207,\"radar_financier_strand_grey\",\"png\"],[208,\"radar_trevor_family_grey\",\"png\"],\r\n [209,\"radar_trevor_family_red\",\"png\"],[210,\"radar_franklin_family_grey\",\"png\"],\r\n [211,\"radar_franklin_family_blue\",\"png\"],[212,\"radar_franklin_a\",\"png\"],[213,\"radar_franklin_b\",\"png\"],\r\n [214,\"radar_franklin_c\",\"png\"],[225,\"radar_gang_vehicle\",\"png\"],\r\n [226,\"radar_gang_vehicle_bikers\",\"png\"],[227,\"radar_gang_vehicle_cops\",\"png\"],\r\n [228,\"radar_gang_vehicle_vagos\",\"png\"],[229,\"radar_guncar\",\"png\"],\r\n [230,\"radar_driving_bikers\",\"png\"],[231,\"radar_driving_cops\",\"png\"],\r\n [232,\"radar_driving_vagos\",\"png\"],[233,\"radar_gang_cops_highlight\",\"png\"],\r\n [234,\"radar_shield_bikers\",\"png\"],[235,\"radar_shield_cops\",\"png\"],\r\n [236,\"radar_shield_vagos\",\"png\"],[237,\"radar_custody_bikers\",\"png\"],\r\n [238,\"radar_custody_vagos\",\"png\"],[251,\"radar_arms_dealing_air\",\"png\"],\r\n [252,\"radar_playerstate_arrested\",\"png\"],[253,\"radar_playerstate_custody\",\"png\"],\r\n [254,\"radar_playerstate_driving\",\"png\"],[255,\"radar_playerstate_keyholder\",\"png\"],\r\n [256,\"radar_playerstate_partner\",\"png\"],[262,\"radar_ztype\",\"png\"],[263,\"radar_stinger\",\"png\"],\r\n [264,\"radar_packer\",\"png\"],[265,\"radar_monroe\",\"png\"],[266,\"radar_fairground\",\"png\"],\r\n [267,\"radar_property\",\"png\"],[268,\"radar_gang_highlight\",\"png\"],[269,\"radar_altruist\",\"png\"],\r\n [270,\"radar_ai\",\"png\"],[271,\"radar_on_mission\",\"png\"],[272,\"radar_cash_pickup\",\"png\"],\r\n [273,\"radar_chop\",\"png\"],[274,\"radar_dead\",\"png\"],[275,\"radar_territory_locked\",\"png\"],\r\n [276,\"radar_cash_lost\",\"png\"],[277,\"radar_cash_vagos\",\"png\"],[278,\"radar_cash_cops\",\"png\"],\r\n [279,\"radar_hooker\",\"png\"],[280,\"radar_friend\",\"png\"],[281,\"radar_mission_2to4\",\"png\"],\r\n [282,\"radar_mission_2to8\",\"png\"],[283,\"radar_mission_2to12\",\"png\"],[284,\"radar_mission_2to16\",\"png\"],\r\n [285,\"radar_custody_dropoff\",\"png\"],[286,\"radar_onmission_cops\",\"png\"],\r\n [287,\"radar_onmission_lost\",\"png\"],[288,\"radar_onmission_vagos\",\"png\"],\r\n [289,\"radar_crim_carsteal_cops\",\"png\"],[290,\"radar_crim_carsteal_bikers\",\"png\"],\r\n [291,\"radar_crim_carsteal_vagos\",\"png\"],[292,\"radar_band_strand\",\"png\"],\r\n [293,\"radar_simeon_family\",\"png\"],[294,\"radar_mission_1\",\"png\"],[295,\"radar_mission_2\",\"png\"],\r\n [296,\"radar_friend_darts\",\"png\"],[297,\"radar_friend_comedyclub\",\"png\"],\r\n [298,\"radar_friend_cinema\",\"png\"],[299,\"radar_friend_tennis\",\"png\"],\r\n [300,\"radar_friend_stripclub\",\"png\"],[301,\"radar_friend_livemusic\",\"png\"],\r\n [302,\"radar_friend_golf\",\"png\"],[303,\"radar_bounty_hit\",\"png\"],[304,\"radar_ugc_mission\",\"png\"],\r\n [305,\"radar_horde\",\"png\"],[306,\"radar_cratedrop\",\"png\"],[307,\"radar_plane_drop\",\"png\"],\r\n [308,\"radar_sub\",\"png\"],[309,\"radar_race\",\"png\"],[310,\"radar_deathmatch\",\"png\"],\r\n [311,\"radar_arm_wrestling\",\"png\"],[312,\"radar_mission_1to2\",\"png\"],\r\n [313,\"radar_shootingrange_gunshop\",\"png\"],[314,\"radar_race_air\",\"png\"],\r\n [315,\"radar_race_land\",\"png\"],[316,\"radar_race_sea\",\"png\"],[317,\"radar_tow\",\"png\"],\r\n [318,\"radar_garbage\",\"png\"],[319,\"radar_drill\",\"png\"],[320,\"radar_spikes\",\"png\"],\r\n [321,\"radar_firetruck\",\"png\"],[322,\"radar_minigun2\",\"png\"],[323,\"radar_bugstar\",\"png\"],\r\n [324,\"radar_submarine\",\"png\"],[325,\"radar_chinook\",\"png\"],[326,\"radar_getaway_car\",\"png\"],\r\n [327,\"radar_mission_bikers_1\",\"png\"],[328,\"radar_mission_bikers_1to2\",\"png\"],\r\n [329,\"radar_mission_bikers_2\",\"png\"],[330,\"radar_mission_bikers_2to4\",\"png\"],\r\n [331,\"radar_mission_bikers_2to8\",\"png\"],[332,\"radar_mission_bikers_2to12\",\"png\"],\r\n [333,\"radar_mission_bikers_2to16\",\"png\"],[334,\"radar_mission_cops_1\",\"png\"],\r\n [335,\"radar_mission_cops_1to2\",\"png\"],[336,\"radar_mission_cops_2\",\"png\"],\r\n [337,\"radar_mission_cops_2to4\",\"png\"],[338,\"radar_mission_cops_2to8\",\"png\"],\r\n [339,\"radar_mission_cops_2to12\",\"png\"],[340,\"radar_mission_cops_2to16\",\"png\"],\r\n [341,\"radar_mission_vagos_1\",\"png\"],[342,\"radar_mission_vagos_1to2\",\"png\"],\r\n [343,\"radar_mission_vagos_2\",\"png\"],[344,\"radar_mission_vagos_2to4\",\"png\"],\r\n [345,\"radar_mission_vagos_2to8\",\"png\"],[346,\"radar_mission_vagos_2to12\",\"png\"],\r\n [347,\"radar_mission_vagos_2to16\",\"png\"],[348,\"radar_gang_bike\",\"png\"],\r\n [349,\"radar_gas_grenade\",\"png\"],[350,\"radar_property_for_sale\",\"png\"],\r\n [351,\"radar_gang_attack_package\",\"png\"],[352,\"radar_martin_madrazzo\",\"png\"],\r\n [353,\"radar_enemy_heli_spin\",\"gif\"],[354,\"radar_boost\",\"png\"],[355,\"radar_devin\",\"png\"],\r\n [356,\"radar_dock\",\"png\"],[357,\"radar_garage\",\"png\"],[358,\"radar_golf_flag\",\"png\"],\r\n [359,\"radar_hangar\",\"png\"],[360,\"radar_helipad\",\"png\"],[361,\"radar_jerry_can\",\"png\"],\r\n [362,\"radar_mask\",\"png\"],[363,\"radar_heist_prep\",\"png\"],[364,\"radar_incapacitated\",\"png\"],\r\n [365,\"radar_spawn_point_pickup\",\"png\"],[366,\"radar_boilersuit\",\"png\"],\r\n [367,\"radar_completed\",\"png\"],[368,\"radar_rockets\",\"png\"],[369,\"radar_garage_for_sale\",\"png\"],\r\n [370,\"radar_helipad_for_sale\",\"png\"],[371,\"radar_dock_for_sale\",\"png\"],\r\n [372,\"radar_hangar_for_sale\",\"png\"],[373,\"radar_placeholder_6\",\"png\"],\r\n [374,\"radar_business\",\"png\"],[375,\"radar_business_for_sale\",\"png\"],\r\n [376,\"radar_race_bike\",\"png\"],[377,\"radar_parachute\",\"png\"],[378,\"radar_team_deathmatch\",\"png\"],\r\n [379,\"radar_race_foot\",\"png\"],[380,\"radar_vehicle_deathmatch\",\"png\"],\r\n [381,\"radar_barry\",\"png\"],[382,\"radar_dom\",\"png\"],[383,\"radar_maryann\",\"png\"],\r\n [384,\"radar_cletus\",\"png\"],[385,\"radar_josh\",\"png\"],[386,\"radar_minute\",\"png\"],\r\n [387,\"radar_omega\",\"png\"],[388,\"radar_tonya\",\"png\"],[389,\"radar_paparazzo\",\"png\"],\r\n [390,\"radar_aim\",\"png\"],[391,\"radar_cratedrop_background\",\"png\"],\r\n [392,\"radar_green_and_net_player1\",\"png\"],[393,\"radar_green_and_net_player2\",\"png\"],\r\n [394,\"radar_green_and_net_player3\",\"png\"],[395,\"radar_green_and_friendly\",\"png\"],\r\n [396,\"radar_net_player1_and_net_player2\",\"png\"],[397,\"radar_net_player1_and_net_player3\",\"png\"],\r\n [398,\"radar_creator\",\"png\"],[399,\"radar_creator_direction\",\"png\"],[400,\"radar_abigail\",\"png\"],\r\n [401,\"radar_blimp\",\"png\"],[402,\"radar_repair\",\"png\"],[403,\"radar_testosterone\",\"png\"],\r\n [404,\"radar_dinghy\",\"png\"],[405,\"radar_fanatic\",\"png\"],[407,\"radar_info_icon\",\"png\"],\r\n [408,\"radar_capture_the_flag\",\"png\"],[409,\"radar_last_team_standing\",\"png\"],\r\n [410,\"radar_boat\",\"png\"],[411,\"radar_capture_the_flag_base\",\"png\"],\r\n [412,\"radar_mp_crew\",\"png\"],[413,\"radar_capture_the_flag_outline\",\"png\"],\r\n [414,\"radar_capture_the_flag_base_nobag\",\"png\"],[415,\"radar_weapon_jerrycan\",\"png\"],\r\n [416,\"radar_rp\",\"png\"],[417,\"radar_level_inside\",\"png\"],[418,\"radar_bounty_hit_inside\",\"png\"],\r\n [419,\"radar_capture_the_usaflag\",\"png\"],[420,\"radar_capture_the_usaflag_outline\",\"png\"],\r\n [421,\"radar_tank\",\"png\"],[422,\"radar_player_heli\",\"gif\"],[423,\"radar_player_plane\",\"png\"],\r\n [424,\"radar_player_jet\",\"png\"],[425,\"radar_centre_stroke\",\"png\"],\r\n [426,\"radar_player_guncar\",\"png\"],[427,\"radar_player_boat\",\"png\"],\r\n [428,\"radar_mp_heist\",\"png\"],[429,\"radar_temp_1\",\"png\"],[430,\"radar_temp_2\",\"png\"],\r\n [431,\"radar_temp_3\",\"png\"],[432,\"radar_temp_4\",\"png\"],[433,\"radar_temp_5\",\"png\"],\r\n [434,\"radar_temp_6\",\"png\"],[435,\"radar_race_stunt\",\"png\"],[436,\"radar_hot_property\",\"png\"],\r\n [437,\"radar_urbanwarfare_versus\",\"png\"],[438,\"radar_king_of_the_castle\",\"png\"],\r\n [439,\"radar_player_king\",\"png\"],[440,\"radar_dead_drop\",\"png\"],[441,\"radar_penned_in\",\"png\"],\r\n [442,\"radar_beast\",\"png\"],[443,\"radar_edge_pointer\",\"png\"],[444,\"radar_edge_crosstheline\",\"png\"],\r\n [445,\"radar_mp_lamar\",\"png\"],[446,\"radar_bennys\",\"png\"],[447,\"radar_corner_number_1\",\"png\"],\r\n [448,\"radar_corner_number_2\",\"png\"],[449,\"radar_corner_number_3\",\"png\"],\r\n [450,\"radar_corner_number_4\",\"png\"],[451,\"radar_corner_number_5\",\"png\"],\r\n [452,\"radar_corner_number_6\",\"png\"],[453,\"radar_corner_number_7\",\"png\"],\r\n [454,\"radar_corner_number_8\",\"png\"],[455,\"radar_yacht\",\"png\"],\r\n [456,\"radar_finders_keepers\",\"png\"],[457,\"radar_assault_package\",\"png\"],\r\n [458,\"radar_hunt_the_boss\",\"png\"],[459,\"radar_sightseer\",\"png\"],\r\n [460,\"radar_turreted_limo\",\"png\"],[461,\"radar_belly_of_the_beast\",\"png\"],\r\n [462,\"radar_yacht_location\",\"png\"],[463,\"radar_pickup_beast\",\"png\"],\r\n [464,\"radar_pickup_zoned\",\"png\"],[465,\"radar_pickup_random\",\"png\"],\r\n [466,\"radar_pickup_slow_time\",\"png\"],[467,\"radar_pickup_swap\",\"png\"],\r\n [468,\"radar_pickup_thermal\",\"png\"],[469,\"radar_pickup_weed\",\"png\"],\r\n [470,\"radar_weapon_railgun\",\"png\"],[471,\"radar_seashark\",\"png\"],\r\n [472,\"radar_pickup_hidden\",\"png\"],[473,\"radar_warehouse\",\"png\"],\r\n [474,\"radar_warehouse_for_sale\",\"png\"],[475,\"radar_office\",\"png\"],\r\n [476,\"radar_office_for_sale\",\"png\"],[477,\"radar_truck\",\"png\"],\r\n [478,\"radar_contraband\",\"png\"],[479,\"radar_trailer\",\"png\"],[480,\"radar_vip\",\"png\"],\r\n [481,\"radar_cargobob\",\"png\"],[482,\"radar_area_outline_blip\",\"png\"],\r\n [483,\"radar_pickup_accelerator\",\"png\"],[484,\"radar_pickup_ghost\",\"png\"],\r\n [485,\"radar_pickup_detonator\",\"png\"],[486,\"radar_pickup_bomb\",\"png\"],\r\n [487,\"radar_pickup_armoured\",\"png\"],[488,\"radar_stunt\",\"png\"],\r\n [489,\"radar_weapon_lives\",\"png\"],[490,\"radar_stunt_premium\",\"png\"],\r\n [491,\"radar_adversary\",\"png\"],[492,\"radar_biker_clubhouse\",\"png\"],\r\n [493,\"radar_biker_caged_in\",\"png\"],[494,\"radar_biker_turf_war\",\"png\"],\r\n [495,\"radar_biker_joust\",\"png\"],[496,\"radar_production_weed\",\"png\"],\r\n [497,\"radar_production_crack\",\"png\"],[498,\"radar_production_fake_id\",\"png\"],\r\n [499,\"radar_production_meth\",\"png\"],[500,\"radar_production_money\",\"png\"],\r\n [501,\"radar_package\",\"png\"],[502,\"radar_capture_1\",\"png\"],[503,\"radar_capture_2\",\"png\"],\r\n [504,\"radar_capture_3\",\"png\"],[505,\"radar_capture_4\",\"png\"],[506,\"radar_capture_5\",\"png\"],\r\n [507,\"radar_capture_6\",\"png\"],[508,\"radar_capture_7\",\"png\"],[509,\"radar_capture_8\",\"png\"],\r\n [510,\"radar_capture_9\",\"png\"],[511,\"radar_capture_10\",\"png\"],[512,\"radar_quad\",\"png\"],\r\n [513,\"radar_bus\",\"png\"],[514,\"radar_drugs_package\",\"png\"],[515,\"radar_pickup_jump\",\"png\"],\r\n [516,\"radar_adversary_4\",\"png\"],[517,\"radar_adversary_8\",\"png\"],\r\n [518,\"radar_adversary_10\",\"png\"],[519,\"radar_adversary_12\",\"png\"],\r\n [520,\"radar_adversary_16\",\"png\"],[521,\"radar_laptop\",\"png\"],\r\n [522,\"radar_pickup_deadline\",\"png\"],[523,\"radar_sports_car\",\"png\"],\r\n [524,\"radar_warehouse_vehicle\",\"png\"],[525,\"radar_reg_papers\",\"png\"],\r\n [526,\"radar_police_station_dropoff\",\"png\"],[527,\"radar_junkyard\",\"png\"],\r\n [528,\"radar_ex_vech_1\",\"png\"],[529,\"radar_ex_vech_2\",\"png\"],[530,\"radar_ex_vech_3\",\"png\"],\r\n [531,\"radar_ex_vech_4\",\"png\"],[532,\"radar_ex_vech_5\",\"png\"],[533,\"radar_ex_vech_6\",\"png\"],\r\n [534,\"radar_ex_vech_7\",\"png\"],[535,\"radar_target_a\",\"png\"],[536,\"radar_target_b\",\"png\"],\r\n [537,\"radar_target_c\",\"png\"],[538,\"radar_target_d\",\"png\"],[539,\"radar_target_e\",\"png\"],\r\n [540,\"radar_target_f\",\"png\"],[541,\"radar_target_g\",\"png\"],[542,\"radar_target_h\",\"png\"],\r\n [543,\"radar_jugg\",\"png\"],[544,\"radar_pickup_repair\",\"png\"],[545,\"radar_steeringwheel\",\"png\"],\r\n [546,\"radar_trophy\",\"png\"],[547,\"radar_pickup_rocket_boost\",\"png\"],\r\n [548,\"radar_pickup_homing_rocket\",\"png\"],[549,\"radar_pickup_machinegun\",\"png\"],\r\n [550,\"radar_pickup_parachute\",\"png\"],[551,\"radar_pickup_time_5\",\"png\"],\r\n [552,\"radar_pickup_time_10\",\"png\"],[553,\"radar_pickup_time_15\",\"png\"],\r\n [554,\"radar_pickup_time_20\",\"png\"],[555,\"radar_pickup_time_30\",\"png\"],\r\n [556,\"radar_supplies\",\"png\"],[557,\"radar_property_bunker\",\"png\"],\r\n [558,\"radar_gr_wvm_1\",\"png\"],[559,\"radar_gr_wvm_2\",\"png\"],[560,\"radar_gr_wvm_3\",\"png\"],\r\n [561,\"radar_gr_wvm_4\",\"png\"],[562,\"radar_gr_wvm_5\",\"png\"],[563,\"radar_gr_wvm_6\",\"png\"],\r\n [564,\"radar_gr_covert_ops\",\"png\"],[565,\"radar_adversary_bunker\",\"png\"],\r\n [566,\"radar_gr_moc_upgrade\",\"png\"],[567,\"radar_gr_w_upgrade\",\"png\"],\r\n [568,\"radar_sm_cargo\",\"png\"],[569,\"radar_sm_hangar\",\"png\"],[570,\"radar_tf_checkpoint\",\"png\"],\r\n [571,\"radar_race_tf\",\"png\"],[572,\"radar_sm_wp1\",\"png\"],[573,\"radar_sm_wp2\",\"png\"],\r\n [574,\"radar_sm_wp3\",\"png\"],[575,\"radar_sm_wp4\",\"png\"],[576,\"radar_sm_wp5\",\"png\"],\r\n [577,\"radar_sm_wp6\",\"png\"],[578,\"radar_sm_wp7\",\"png\"],[579,\"radar_sm_wp8\",\"png\"],\r\n [580,\"radar_sm_wp9\",\"png\"],[581,\"radar_sm_wp10\",\"png\"],[582,\"radar_sm_wp11\",\"png\"],\r\n [583,\"radar_sm_wp12\",\"png\"],[584,\"radar_sm_wp13\",\"png\"],[585,\"radar_sm_wp14\",\"png\"],\r\n [586,\"radar_nhp_bag\",\"png\"],[587,\"radar_nhp_chest\",\"png\"],[588,\"radar_nhp_orbit\",\"png\"],\r\n [589,\"radar_nhp_veh1\",\"png\"],[590,\"radar_nhp_base\",\"png\"],[591,\"radar_nhp_overlay\",\"png\"],\r\n [592,\"radar_nhp_turret\",\"png\"],[593,\"radar_nhp_mg_firewall\",\"png\"],\r\n [594,\"radar_nhp_mg_node\",\"png\"],[595,\"radar_nhp_wp1\",\"png\"],[596,\"radar_nhp_wp2\",\"png\"],\r\n [597,\"radar_nhp_wp3\",\"png\"],[598,\"radar_nhp_wp4\",\"png\"],[599,\"radar_nhp_wp5\",\"png\"],\r\n [600,\"radar_nhp_wp6\",\"png\"],[601,\"radar_nhp_wp7\",\"png\"],[602,\"radar_nhp_wp8\",\"png\"],\r\n [603,\"radar_nhp_wp9\",\"png\"],[604,\"radar_nhp_cctv\",\"png\"],[605,\"radar_nhp_starterpack\",\"png\"],\r\n [606,\"radar_nhp_turret_console\",\"png\"],[607,\"radar_nhp_mg_mir_rotate\",\"png\"],\r\n [608,\"radar_nhp_mg_mir_static\",\"png\"],[609,\"radar_nhp_mg_proxy\",\"png\"],\r\n [610,\"radar_acsr_race_target\",\"png\"],[611,\"radar_acsr_race_hotring\",\"png\"],\r\n [612,\"radar_acsr_wp1\",\"png\"],[613,\"radar_acsr_wp2\",\"png\"],\r\n [614,\"radar_bat_club_property\",\"png\"],[615,\"radar_bat_cargo\",\"png\"],\r\n [616,\"radar_bat_truck\",\"png\"],[617,\"radar_bat_hack_jewel\",\"png\"],\r\n [618,\"radar_bat_hack_gold\",\"png\"],[619,\"radar_bat_keypad\",\"png\"],\r\n [620,\"radar_bat_hack_target\",\"png\"],[621,\"radar_pickup_dtb_health\",\"png\"],\r\n [622,\"radar_pickup_dtb_blast_increase\",\"png\"],[623,\"radar_pickup_dtb_blast_decrease\",\"png\"],\r\n [624,\"radar_pickup_dtb_bomb_increase\",\"png\"],[625,\"radar_pickup_dtb_bomb_decrease\",\"png\"],\r\n [626,\"radar_bat_rival_club\",\"png\"],[627,\"radar_bat_drone\",\"png\"],\r\n [628,\"radar_bat_cash_reg\",\"png\"],[629,\"radar_cctv\",\"png\"],\r\n [630,\"radar_bat_assassinate\",\"png\"],[631,\"radar_bat_pbus\",\"png\"],\r\n [632,\"radar_bat_wp1\",\"png\"],[633,\"radar_bat_wp2\",\"png\"],[634,\"radar_bat_wp3\",\"png\"],\r\n [635,\"radar_bat_wp4\",\"png\"],[636,\"radar_bat_wp5\",\"png\"],[637,\"radar_bat_wp6\",\"png\"],\r\n [638,\"radar_blimp_2\",\"png\"],[639,\"radar_oppressor_2\",\"png\"],[640,\"radar_bat_wp7\",\"png\"],\r\n [641,\"radar_arena_series\",\"png\"],[642,\"radar_arena_premium\",\"png\"],\r\n [643,\"radar_arena_workshop\",\"png\"],[644,\"radar_race_wars\",\"png\"],\r\n [645,\"radar_arena_turret\",\"png\"],[646,\"radar_arena_rc_car\",\"png\"],\r\n [647,\"radar_arena_rc_workshop\",\"png\"],[648,\"radar_arena_trap_fire\",\"png\"],\r\n [649,\"radar_arena_trap_flip\",\"png\"],[650,\"radar_arena_trap_sea\",\"png\"],\r\n [651,\"radar_arena_trap_turn\",\"png\"],[652,\"radar_arena_trap_pit\",\"png\"],\r\n [653,\"radar_arena_trap_mine\",\"png\"],[654,\"radar_arena_trap_bomb\",\"png\"],\r\n [655,\"radar_arena_trap_wall\",\"png\"],[656,\"radar_arena_trap_brd\",\"png\"],\r\n [657,\"radar_arena_trap_sbrd\",\"png\"],[658,\"radar_arena_bruiser\",\"png\"],\r\n [659,\"radar_arena_brutus\",\"png\"],[660,\"radar_arena_cerberus\",\"png\"],\r\n [661,\"radar_arena_deathbike\",\"png\"],[662,\"radar_arena_dominator\",\"png\"],\r\n [663,\"radar_arena_impaler\",\"png\"],[664,\"radar_arena_imperator\",\"png\"],\r\n [665,\"radar_arena_issi\",\"png\"],[666,\"radar_arena_sasquatch\",\"png\"],\r\n [667,\"radar_arena_scarab\",\"png\"],[668,\"radar_arena_slamvan\",\"png\"],\r\n [669,\"radar_arena_zr380\",\"png\"],[670,\"radar_ap\",\"png\"],[671,\"radar_comic_store\",\"png\"],\r\n [672,\"radar_cop_car\",\"png\"],[673,\"radar_rc_time_trials\",\"png\"],\r\n [674,\"radar_king_of_the_hill\",\"png\"],[675,\"radar_king_of_the_hill_teams\",\"png\"],\r\n [676,\"radar_rucksack\",\"png\"],[677,\"radar_shipping_container\",\"png\"],\r\n [678,\"radar_agatha\",\"png\"],[679,\"radar_casino\",\"png\"],\r\n [680,\"radar_casino_table_games\",\"png\"],[681,\"radar_casino_wheel\",\"png\"],\r\n [682,\"radar_casino_concierge\",\"png\"],[683,\"radar_casino_chips\",\"png\"],\r\n [684,\"radar_casino_horse_racing\",\"png\"],[685,\"radar_adversary_featured\",\"png\"],\r\n [686,\"radar_roulette_1\",\"png\"],[687,\"radar_roulette_2\",\"png\"],\r\n [688,\"radar_roulette_3\",\"png\"],[689,\"radar_roulette_4\",\"png\"],\r\n [690,\"radar_roulette_5\",\"png\"],[691,\"radar_roulette_6\",\"png\"],\r\n [692,\"radar_roulette_7\",\"png\"],[693,\"radar_roulette_8\",\"png\"],\r\n [694,\"radar_roulette_9\",\"png\"],[695,\"radar_roulette_10\",\"png\"],\r\n [696,\"radar_roulette_11\",\"png\"],[697,\"radar_roulette_12\",\"png\"],\r\n [698,\"radar_roulette_13\",\"png\"],[699,\"radar_roulette_14\",\"png\"],\r\n [700,\"radar_roulette_15\",\"png\"],[701,\"radar_roulette_16\",\"png\"],\r\n [702,\"radar_roulette_17\",\"png\"],[703,\"radar_roulette_18\",\"png\"],\r\n [704,\"radar_roulette_19\",\"png\"],[705,\"radar_roulette_20\",\"png\"],\r\n [706,\"radar_roulette_21\",\"png\"],[707,\"radar_roulette_22\",\"png\"],\r\n [708,\"radar_roulette_23\",\"png\"],[709,\"radar_roulette_24\",\"png\"],\r\n [710,\"radar_roulette_25\",\"png\"],[711,\"radar_roulette_26\",\"png\"],\r\n [712,\"radar_roulette_27\",\"png\"],[713,\"radar_roulette_28\",\"png\"],\r\n [714,\"radar_roulette_29\",\"png\"],[715,\"radar_roulette_30\",\"png\"],\r\n [716,\"radar_roulette_31\",\"png\"],[717,\"radar_roulette_32\",\"png\"],\r\n [718,\"radar_roulette_33\",\"png\"],[719,\"radar_roulette_34\",\"png\"],\r\n [720,\"radar_roulette_35\",\"png\"],[721,\"radar_roulette_36\",\"png\"],\r\n [722,\"radar_roulette_0\",\"png\"],[723,\"radar_roulette_00\",\"png\"],\r\n [724,\"radar_limo\",\"png\"],[725,\"radar_weapon_alien\",\"png\"],\r\n [726,\"radar_race_open_wheel\",\"png\"],[727,\"radar_rappel\",\"png\"],\r\n [728,\"radar_swap_car\",\"png\"],[729,\"radar_scuba_gear\",\"png\"],\r\n [730,\"radar_cpanel_1\",\"png\"],[731,\"radar_cpanel_2\",\"png\"],\r\n [732,\"radar_cpanel_3\",\"png\"],[733,\"radar_cpanel_4\",\"png\"],\r\n [734,\"radar_snow_truck\",\"png\"],[735,\"radar_buggy_1\",\"png\"],[736,\"radar_buggy_2\",\"png\"],\r\n [737,\"radar_zhaba\",\"png\"],[738,\"radar_gerald\",\"png\"],[739,\"radar_ron\",\"png\"],\r\n [740,\"radar_arcade\",\"png\"],[741,\"radar_drone_controls\",\"png\"],[742,\"radar_rc_tank\",\"png\"],\r\n [743,\"radar_stairs\",\"png\"],[744,\"radar_camera_2\",\"png\"],[745,\"radar_winky\",\"png\"],\r\n [746,\"radar_mini_sub\",\"png\"],[747,\"radar_kart_retro\",\"png\"],[748,\"radar_kart_modern\",\"png\"],\r\n [749,\"radar_military_quad\",\"png\"],[750,\"radar_military_truck\",\"png\"],\r\n [751,\"radar_ship_wheel\",\"png\"],[752,\"radar_ufo\",\"png\"],[753,\"radar_seasparrow2\",\"png\"],\r\n [754,\"radar_dinghy2\",\"png\"],[755,\"radar_patrol_boat\",\"png\"],\r\n [756,\"radar_retro_sports_car\",\"png\"],[757,\"radar_squadee\",\"png\"],\r\n [758,\"radar_folding_wing_jet\",\"png\"],[759,\"radar_valkyrie2\",\"png\"],\r\n [760,\"radar_sub2\",\"png\"],[761,\"radar_bolt_cutters\",\"png\"],\r\n [762,\"radar_rappel_gear\",\"png\"],[763,\"radar_keycard\",\"png\"],\r\n [764,\"radar_password\",\"png\"],[765,\"radar_island_heist_prep\",\"png\"],\r\n [766,\"radar_island_party\",\"png\"],[767,\"radar_control_tower\",\"png\"],\r\n [768,\"radar_underwater_gate\",\"png\"],[769,\"radar_power_switch\",\"png\"],\r\n [770,\"radar_compound_gate\",\"png\"],[771,\"radar_rappel_point\",\"png\"],\r\n [772,\"radar_keypad\",\"png\"],[773,\"radar_sub_controls\",\"png\"],\r\n [774,\"radar_sub_periscope\",\"png\"],[775,\"radar_sub_missile\",\"png\"],\r\n [776,\"radar_painting\",\"png\"],[777,\"radar_car_meet\",\"png\"],\r\n [778,\"radar_car_test_area\",\"png\"],[779,\"radar_auto_shop_property\",\"png\"],\r\n [780,\"radar_docks_export\",\"png\"],[781,\"radar_prize_car\",\"png\"],\r\n [782,\"radar_test_car\",\"png\"],[783,\"radar_car_robbery_board\",\"png\"],\r\n [784,\"radar_car_robbery_prep\",\"png\"],[785,\"radar_street_race_series\",\"png\"],\r\n [786,\"radar_pursuit_series\",\"png\"],[787,\"radar_car_meet_organiser\",\"png\"],\r\n [788,\"radar_securoserv\",\"png\"],[789,\"radar_bounty_collectibles\",\"png\"],\r\n [790,\"radar_movie_collectibles\",\"png\"],[791,\"radar_trailer_ramp\",\"png\"],\r\n [792,\"radar_race_organiser\",\"png\"],[793,\"radar_chalkboard_list\",\"png\"],\r\n [794,\"radar_export_vehicle\",\"png\"],[795,\"radar_train\",\"png\"],\r\n [796,\"radar_heist_diamond\",\"png\"],[797,\"radar_heist_doomsday\",\"png\"],\r\n [798,\"radar_heist_island\",\"png\"],[799,\"radar_slamvan2\",\"png\"],\r\n [800,\"radar_crusader\",\"png\"],[801,\"radar_construction_outfit\",\"png\"],\r\n [802,\"radar_overlay_jammed\",\"png\"],[803,\"radar_heist_island_unavailable\",\"png\"],\r\n [804,\"radar_heist_diamond_unavailable\",\"png\"],[805,\"radar_heist_doomsday_unavailable\",\"png\"],\r\n [806,\"radar_placeholder_7\",\"png\"],[807,\"radar_placeholder_8\",\"png\"],\r\n [808,\"radar_placeholder_9\",\"png\"],[809,\"radar_featured_series\",\"png\"],\r\n [810,\"radar_vehicle_for_sale\",\"png\"],[811,\"radar_van_keys\",\"png\"],\r\n [812,\"radar_suv_service\",\"png\"],[813,\"radar_security_contract\",\"png\"],\r\n [814,\"radar_safe\",\"png\"],[815,\"radar_ped_r\",\"png\"],[816,\"radar_ped_e\",\"png\"],\r\n [817,\"radar_payphone\",\"png\"],[818,\"radar_patriot3\",\"png\"],\r\n [819,\"radar_music_studio\",\"png\"],[820,\"radar_jubilee\",\"png\"],\r\n [821,\"radar_granger2\",\"png\"],[822,\"radar_explosive_charge\",\"png\"],\r\n [823,\"radar_deity\",\"png\"],[824,\"radar_d_champion\",\"png\"],[825,\"radar_buffalo4\",\"png\"],\r\n [826,\"radar_agency\",\"png\"],[827,\"radar_biker_bar\",\"png\"],\r\n [828,\"radar_simeon_overlay\",\"png\"],[829,\"radar_junk_skydive\",\"png\"],\r\n [830,\"radar_luxury_car_showroom\",\"png\"],[831,\"radar_car_showroom\",\"png\"],\r\n [832,\"radar_car_showroom_simeon\",\"png\"],[833,\"radar_flaming_skull\",\"png\"],\r\n [834,\"radar_weapon_ammo\",\"png\"],[835,\"radar_community_series\",\"png\"],\r\n [836,\"radar_cayo_series\",\"png\"],[837,\"radar_clubhouse_contract\",\"png\"],\r\n [838,\"radar_agent_ulp\",\"png\"],[839,\"radar_acid\",\"png\"],[840,\"radar_acid_lab\",\"png\"],\r\n [841,\"radar_dax_overlay\",\"png\"],[842,\"radar_dead_drop_package\",\"png\"],\r\n [843,\"radar_downtown_cab\",\"png\"],[844,\"radar_gun_van\",\"png\"],\r\n [845,\"radar_stash_house\",\"png\"],[846,\"radar_tractor\",\"png\"],\r\n [847,\"radar_warehouse_juggalo\",\"png\"],[848,\"radar_warehouse_juggalo_dax\",\"png\"],\r\n [849,\"radar_weapon_crowbar\",\"png\"],[850,\"radar_duffel_bag\",\"png\"],\r\n [851,\"radar_oil_tanker\",\"png\"],[852,\"radar_acid_lab_tent\",\"png\"],\r\n [853,\"radar_van_burrito\",\"png\"],[854,\"radar_acid_boost\",\"png\"],\r\n [855,\"radar_ped_gang_leader\",\"png\"],[856,\"radar_multistorey_garage\",\"png\"],\r\n [857,\"radar_seized_asset_sales\",\"png\"],[858,\"radar_cayo_attrition\",\"png\"],\r\n [859,\"radar_bicycle\",\"png\"],[860,\"radar_bicycle_trial\",\"png\"],\r\n [861,\"radar_raiju\",\"png\"],[862,\"radar_conada2\",\"png\"],\r\n [863,\"radar_overlay_ready_for_sell\",\"png\"],[864,\"radar_overlay_missing_supplies\",\"png\"],\r\n [865,\"radar_streamer216\",\"png\"],[866,\"radar_signal_jammer\",\"png\"],\r\n [867,\"radar_salvage_yard\",\"png\"],[868,\"radar_robbery_prep_equipment\",\"png\"],\r\n [869,\"radar_robbery_prep_overlay\",\"png\"],[870,\"radar_yusuf\",\"png\"],\r\n [871,\"radar_vincent\",\"png\"],[872,\"radar_vinewood_garage\",\"png\"],\r\n [873,\"radar_lstb\",\"png\"],[874,\"radar_cctv_workstation\",\"png\"],\r\n [875,\"radar_hacking_device\",\"png\"],[876,\"radar_race_drag\",\"png\"],\r\n [877,\"radar_race_drift\",\"png\"],[878,\"radar_casino_prep\",\"png\"],\r\n [879,\"radar_planning_wall\",\"png\"],[880,\"radar_weapon_crate\",\"png\"],\r\n [881,\"radar_weapon_snowball\",\"png\"],[882,\"radar_train_signals_green\",\"png\"],\r\n [883,\"radar_train_signals_red\",\"png\"],[884,\"radar_office_transporter\",\"png\"],\r\n [885,\"radar_yankton_survival\",\"png\"],[886,\"radar_daily_bounty\",\"png\"],\r\n [887,\"radar_bounty_target\",\"png\"],[888,\"radar_filming_schedule\",\"png\"],\r\n [889,\"radar_pizza_this\",\"png\"],[890,\"radar_aircraft_carrier\",\"png\"],\r\n [891,\"radar_weapon_emp\",\"png\"],[892,\"radar_maude_eccles\",\"png\"],\r\n [893,\"radar_bail_bonds_office\",\"png\"],[894,\"radar_weapon_emp_mine\",\"png\"],\r\n [895,\"radar_zombie_disease\",\"png\"],[896,\"radar_zombie_proximity\",\"png\"],\r\n [897,\"radar_zombie_fire\",\"png\"],[898,\"radar_animal_possessed\",\"png\"],\r\n [899,\"radar_mobile_phone\",\"png\"],[900,\"radar_garment_factory\",\"png\"],\r\n [901,\"radar_garment_factory_for_sale\",\"png\"],[902,\"radar_garment_factory_equipment\",\"png\"],\r\n [903,\"radar_field_hangar\",\"png\"],[904,\"radar_field_hangar_for_sale\",\"png\"],\r\n [905,\"radar_cargobob_ch53\",\"png\"],[906,\"radar_chopper_lift_ammo\",\"png\"],\r\n [907,\"radar_chopper_lift_armor\",\"png\"],[908,\"radar_chopper_lift_explosives\",\"png\"],\r\n [909,\"radar_chopper_lift_upgrade\",\"png\"],[910,\"radar_chopper_lift_weapon\",\"png\"],\r\n [911,\"radar_cargo_ship\",\"png\"],[912,\"radar_submarine_missile\",\"png\"],\r\n [913,\"radar_propeller_engine\",\"png\"],[914,\"radar_shark\",\"png\"],\r\n [915,\"radar_fast_travel\",\"png\"],[916,\"radar_plane_duster2\",\"png\"],\r\n [917,\"radar_plane_titan2\",\"png\"],[918,\"radar_collectible\",\"png\"],\r\n [919,\"radar_field_hangar_discount\",\"png\"],[920,\"radar_garment_factory_discount\",\"png\"],\r\n [921,\"radar_weapon_gusenberg_sweeper\",\"png\"],[922,\"radar_weapon_tear_gas\",\"png\"],\r\n [923,\"radar_dog\",\"png\"],[924,\"radar_bobcat_security\",\"png\"],\r\n [925,\"radar_smoke_shop\",\"png\"],[926,\"radar_smoke_shop_for_sale\",\"png\"],\r\n [927,\"radar_smoke_shop_attention\",\"png\"],[928,\"radar_helitours\",\"png\"],\r\n [929,\"radar_helitours_for_sale\",\"png\"],[930,\"radar_helitours_attention\",\"png\"],\r\n [931,\"radar_car_wash_business\",\"png\"],[932,\"radar_car_wash_business_for_sale\",\"png\"],\r\n [933,\"radar_car_wash_business_attention\",\"png\"],[934,\"radar_attention\",\"png\"],\r\n [935,\"radar_alarm\",\"png\"],[936,\"radar_helitours_discount\",\"png\"],\r\n [937,\"radar_smoke_shop_discount\",\"png\"],[938,\"radar_car_wash_business_discount\",\"png\"],\r\n [939,\"radar_real_estate\",\"png\"],[940,\"radar_medical_courier\",\"png\"],\r\n [941,\"radar_gruppe_sechs\",\"png\"],[942,\"radar_fire_station\",\"png\"],\r\n [943,\"radar_fire_truck\",\"png\"],[944,\"radar_alpha_mail\",\"png\"],\r\n [945,\"radar_ls_meteor\",\"png\"],[946,\"radar_four20_survival\",\"png\"],\r\n [947,\"radar_community_mission_series\",\"png\"],[948,\"radar_property_mansion\",\"png\"],\r\n [949,\"radar_ai_keypad\",\"png\"],[950,\"radar_taxi_self_drive\",\"png\"],\r\n [951,\"radar_train_subway\",\"png\"],[952,\"radar_trashbag\",\"png\"],\r\n [953,\"radar_mission_creator\",\"png\"],[954,\"radar_cat\",\"png\"],\r\n [955,\"radar_mansion_ai_m\",\"png\"],[956,\"radar_mansion_ai_f\",\"png\"],\r\n [957,\"radar_mansion_ai_gang\",\"png\"],\r\n];\r\n\r\nconst BLIP_BASE = \"https://docs.fivem.net/blips/\";\r\n\r\nexport function blipUrl(name: string, ext: string) {\r\n return `${BLIP_BASE}${name}.${ext}`;\r\n}\r\n\r\n// ── Blip colors: [id, label, hex] ──────────────────────────────────────────\r\n\r\nconst BLIP_COLORS: [number, string, string][] = [\r\n [0,\"White\",\"#FFFFFF\"],[1,\"Red\",\"#E54141\"],[2,\"Green\",\"#3FA83F\"],\r\n [3,\"Blue\",\"#5B8CCF\"],[4,\"White\",\"#FFFFFF\"],[5,\"Yellow\",\"#F0D453\"],\r\n [6,\"Light Red\",\"#E88888\"],[7,\"Violet\",\"#8C5FA8\"],[8,\"Pink\",\"#E878C8\"],\r\n [9,\"Light Orange\",\"#F0A861\"],[10,\"Light Brown\",\"#C1A470\"],[11,\"Light Green\",\"#94D468\"],\r\n [12,\"Light Blue\",\"#68C8E8\"],[13,\"Light Purple\",\"#B898E8\"],[14,\"Dark Purple\",\"#583E8E\"],\r\n [15,\"Cyan\",\"#48C8B8\"],[16,\"Light Yellow\",\"#E8E898\"],[17,\"Orange\",\"#E87830\"],\r\n [18,\"Light Blue\",\"#78A8E8\"],[19,\"Dark Pink\",\"#C83878\"],[20,\"Dark Yellow\",\"#A0A038\"],\r\n [21,\"Dark Orange\",\"#B07828\"],[22,\"Light Gray\",\"#B0B0B0\"],[23,\"Light Pink\",\"#E8A8C0\"],\r\n [24,\"Lemon Green\",\"#88F068\"],[25,\"Forest Green\",\"#388038\"],[26,\"Electric Blue\",\"#2060E0\"],\r\n [27,\"Bright Purple\",\"#9840E0\"],[28,\"Dark Yellow\",\"#7C7C28\"],[29,\"Dark Blue\",\"#283878\"],\r\n [30,\"Dark Cyan\",\"#287078\"],[31,\"Light Brown\",\"#A08858\"],[32,\"Light Blue\",\"#78B0E8\"],\r\n [33,\"Light Yellow\",\"#E8E868\"],[34,\"Light Pink\",\"#F0A0C0\"],[35,\"Light Red\",\"#E07868\"],\r\n [36,\"Beige\",\"#D8C898\"],[37,\"White\",\"#FFFFFF\"],[38,\"Blue\",\"#4870A0\"],\r\n [39,\"Light Gray\",\"#909898\"],[40,\"Dark Gray\",\"#585858\"],[41,\"Pink Red\",\"#E07088\"],\r\n [42,\"Blue\",\"#5090B8\"],[43,\"Light Green\",\"#88C868\"],[44,\"Light Orange\",\"#E09048\"],\r\n [45,\"White\",\"#F0F0F0\"],[46,\"Gold\",\"#D8B838\"],[47,\"Orange\",\"#E07020\"],\r\n];\r\n\r\n// ── Data for Select ────────────────────────────────────────────────────────\r\n\r\nconst BLIP_ICON_DATA: ComboboxItem[] = BLIP_ENTRIES.map(([id, name]) => ({\r\n value: String(id),\r\n label: `${id} — ${name}`,\r\n}));\r\n\r\nconst BLIP_COLOR_DATA: ComboboxItem[] = BLIP_COLORS.map(([id, label]) => ({\r\n value: String(id),\r\n label: `${id} — ${label}`,\r\n}));\r\n\r\n// lookup maps for rendering\r\nconst blipEntryMap = new Map(BLIP_ENTRIES.map(([id, name, ext]) => [String(id), { id, name, ext }]));\r\nconst blipColorMap = new Map(BLIP_COLORS.map(([id, label, hex]) => [String(id), { id, label, hex }]));\r\n\r\n// ── Public lookups for any consumer wanting raw access (e.g. <BlipMarker>\r\n// in cfx-react's Map subsystem). Wrappers around the internal maps that\r\n// take a number/string id and normalise it to the string-keyed lookup.\r\n\r\n/** Look up a blip entry by sprite id. Returns `{ id, name, ext }` or undefined. */\r\nexport function getBlipEntry(spriteId: number | string | null | undefined) {\r\n if (spriteId == null) return undefined;\r\n return blipEntryMap.get(String(spriteId));\r\n}\r\n\r\n/** Look up a blip color by color id. Returns `{ id, label, hex }` or undefined. */\r\nexport function getBlipColor(colorId: number | string | null | undefined) {\r\n if (colorId == null) return undefined;\r\n return blipColorMap.get(String(colorId));\r\n}\r\n\r\n/** Convenience: build the sprite URL straight from a sprite id. */\r\nexport function blipUrlForSprite(spriteId: number | string | null | undefined): string | null {\r\n const entry = getBlipEntry(spriteId);\r\n return entry ? blipUrl(entry.name, entry.ext) : null;\r\n}\r\n\r\n// ── Render helpers ─────────────────────────────────────────────────────────\r\n\r\nconst renderBlipOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const entry = blipEntryMap.get(option.value);\r\n if (!entry) return option.label;\r\n return (\r\n <Group gap=\"sm\" wrap=\"nowrap\">\r\n <Image\r\n src={blipUrl(entry.name, entry.ext)}\r\n alt={entry.name}\r\n w={24} h={24}\r\n fit=\"contain\"\r\n style={{ imageRendering: \"pixelated\" }}\r\n />\r\n <Text size=\"xs\" truncate>\r\n {entry.id} — {entry.name}\r\n </Text>\r\n </Group>\r\n );\r\n};\r\n\r\nconst renderColorOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const entry = blipColorMap.get(option.value);\r\n if (!entry) return option.label;\r\n return (\r\n <Group gap=\"sm\" wrap=\"nowrap\">\r\n <Box\r\n w={24} h={24}\r\n style={{\r\n borderRadius: 4,\r\n backgroundColor: entry.hex,\r\n border: \"1px solid rgba(255,255,255,0.15)\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <Text size=\"xs\" truncate>\r\n {entry.id} — {entry.label}\r\n </Text>\r\n </Group>\r\n );\r\n};\r\n\r\n// ── BlipIconSelect ─────────────────────────────────────────────────────────\r\n\r\nexport type BlipIconSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"searchable\" | \"renderOption\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipIconSelect({ value, onChange, label = \"Blip Icon\", size = \"xs\", ...rest }: BlipIconSelectProps) {\r\n const entry = value != null ? blipEntryMap.get(String(value)) : undefined;\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n searchable\r\n data={BLIP_ICON_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n renderOption={renderBlipOption}\r\n maxDropdownHeight={300}\r\n nothingFoundMessage=\"No results\"\r\n leftSection={\r\n entry ? (\r\n <Image\r\n src={blipUrl(entry.name, entry.ext)}\r\n alt={entry.name}\r\n w={18} h={18}\r\n fit=\"contain\"\r\n style={{ imageRendering: \"pixelated\" }}\r\n />\r\n ) : undefined\r\n }\r\n />\r\n );\r\n}\r\n\r\n// ── BlipColorSelect ────────────────────────────────────────────────────────\r\n\r\nexport type BlipColorSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"searchable\" | \"renderOption\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipColorSelect({ value, onChange, label = \"Blip Color\", size = \"xs\", ...rest }: BlipColorSelectProps) {\r\n const entry = value != null ? blipColorMap.get(String(value)) : undefined;\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n searchable\r\n data={BLIP_COLOR_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n renderOption={renderColorOption}\r\n maxDropdownHeight={300}\r\n nothingFoundMessage=\"No results\"\r\n leftSection={\r\n entry ? (\r\n <Box\r\n w={18} h={18}\r\n style={{\r\n borderRadius: 4,\r\n backgroundColor: entry.hex,\r\n border: \"1px solid rgba(255,255,255,0.15)\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n ) : undefined\r\n }\r\n />\r\n );\r\n}\r\n\r\n// ── BlipDisplaySelect ──────────────────────────────────────────────────────\r\n// Sets the FiveM blip's display behaviour. Most server owners only want one\r\n// of the four meaningful patterns; the duplicate ids are exposed verbatim so\r\n// existing saved values keep displaying correctly.\r\n\r\nconst BLIP_DISPLAY_DATA: { value: string; label: string }[] = [\r\n { value: \"2\", label: \"2 — Main map + minimap (selectable)\" },\r\n { value: \"3\", label: \"3 — Main map only (selectable)\" },\r\n { value: \"4\", label: \"4 — Main map only (selectable)\" },\r\n { value: \"5\", label: \"5 — Minimap only\" },\r\n { value: \"6\", label: \"6 — Main map + minimap (selectable)\" },\r\n { value: \"8\", label: \"8 — Main map + minimap (not selectable)\" },\r\n { value: \"9\", label: \"9 — Minimap only\" },\r\n { value: \"10\", label: \"10 — Main map + minimap (not selectable)\" },\r\n];\r\n\r\nexport type BlipDisplaySelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number | null;\r\n onChange: (id: number) => void;\r\n};\r\n\r\nexport function BlipDisplaySelect({ value, onChange, label = \"Blip Display\", size = \"xs\", ...rest }: BlipDisplaySelectProps) {\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n {...rest}\r\n data={BLIP_DISPLAY_DATA}\r\n value={value != null ? String(value) : null}\r\n onChange={(val) => val != null && onChange(Number(val))}\r\n allowDeselect={false}\r\n maxDropdownHeight={300}\r\n />\r\n );\r\n}\r\n","\r\nconst colorNames = {\r\n AliceBlue: { r: 240, g: 248, b: 255 },\r\n AntiqueWhite: { r: 250, g: 235, b: 215 },\r\n Aqua: { r: 0, g: 255, b: 255 },\r\n Aquamarine: { r: 127, g: 255, b: 212 },\r\n Azure: { r: 240, g: 255, b: 255 },\r\n Beige: { r: 245, g: 245, b: 220 },\r\n Bisque: { r: 255, g: 228, b: 196 },\r\n Black: { r: 0, g: 0, b: 0 },\r\n BlanchedAlmond: { r: 255, g: 235, b: 205 },\r\n Blue: { r: 0, g: 0, b: 255 },\r\n BlueViolet: { r: 138, g: 43, b: 226 },\r\n Brown: { r: 165, g: 42, b: 42 },\r\n BurlyWood: { r: 222, g: 184, b: 135 },\r\n CadetBlue: { r: 95, g: 158, b: 160 },\r\n Chartreuse: { r: 127, g: 255, b: 0 },\r\n Chocolate: { r: 210, g: 105, b: 30 },\r\n Coral: { r: 255, g: 127, b: 80 },\r\n CornflowerBlue: { r: 100, g: 149, b: 237 },\r\n Cornsilk: { r: 255, g: 248, b: 220 },\r\n Crimson: { r: 220, g: 20, b: 60 },\r\n Cyan: { r: 0, g: 255, b: 255 },\r\n DarkBlue: { r: 0, g: 0, b: 139 },\r\n DarkCyan: { r: 0, g: 139, b: 139 },\r\n DarkGoldenRod: { r: 184, g: 134, b: 11 },\r\n DarkGray: { r: 169, g: 169, b: 169 },\r\n DarkGreen: { r: 0, g: 100, b: 0 },\r\n DarkKhaki: { r: 189, g: 183, b: 107 },\r\n DarkMagenta: { r: 139, g: 0, b: 139 },\r\n DarkOliveGreen: { r: 85, g: 107, b: 47 },\r\n DarkOrange: { r: 255, g: 140, b: 0 },\r\n DarkOrchid: { r: 153, g: 50, b: 204 },\r\n DarkRed: { r: 139, g: 0, b: 0 },\r\n DarkSalmon: { r: 233, g: 150, b: 122 },\r\n DarkSeaGreen: { r: 143, g: 188, b: 143 },\r\n DarkSlateBlue: { r: 72, g: 61, b: 139 },\r\n DarkSlateGray: { r: 47, g: 79, b: 79 },\r\n DarkTurquoise: { r: 0, g: 206, b: 209 },\r\n DarkViolet: { r: 148, g: 0, b: 211 },\r\n DeepPink: { r: 255, g: 20, b: 147 },\r\n DeepSkyBlue: { r: 0, g: 191, b: 255 },\r\n DimGray: { r: 105, g: 105, b: 105 },\r\n DodgerBlue: { r: 30, g: 144, b: 255 },\r\n FireBrick: { r: 178, g: 34, b: 34 },\r\n FloralWhite: { r: 255, g: 250, b: 240 },\r\n ForestGreen: { r: 34, g: 139, b: 34 },\r\n Fuchsia: { r: 255, g: 0, b: 255 },\r\n Gainsboro: { r: 220, g: 220, b: 220 },\r\n GhostWhite: { r: 248, g: 248, b: 255 },\r\n Gold: { r: 255, g: 215, b: 0 },\r\n GoldenRod: { r: 218, g: 165, b: 32 },\r\n Gray: { r: 128, g: 128, b: 128 },\r\n Green: { r: 0, g: 128, b: 0 },\r\n GreenYellow: { r: 173, g: 255, b: 47 },\r\n HoneyDew: { r: 240, g: 255, b: 240 },\r\n HotPink: { r: 255, g: 105, b: 180 },\r\n IndianRed: { r: 205, g: 92, b: 92 },\r\n Indigo: { r: 75, g: 0, b: 130 },\r\n Ivory: { r: 255, g: 255, b: 240 },\r\n Khaki: { r: 240, g: 230, b: 140 },\r\n Lavender: { r: 230, g: 230, b: 250 },\r\n LavenderBlush: { r: 255, g: 240, b: 245 },\r\n LawnGreen: { r: 124, g: 252, b: 0 },\r\n LemonChiffon: { r: 255, g: 250, b: 205 },\r\n LightBlue: { r: 173, g: 216, b: 230 },\r\n LightCoral: { r: 240, g: 128, b: 128 },\r\n LightCyan: { r: 224, g: 255, b: 255 },\r\n LightGoldenRodYellow: { r: 250, g: 250, b: 210 },\r\n LightGray: { r: 211, g: 211, b: 211 },\r\n LightGreen: { r: 144, g: 238, b: 144 },\r\n LightPink: { r: 255, g: 182, b: 193 },\r\n LightSalmon: { r: 255, g: 160, b: 122 },\r\n LightSeaGreen: { r: 32, g: 178, b: 170 },\r\n LightSkyBlue: { r: 135, g: 206, b: 250 },\r\n LightSlateGray: { r: 119, g: 136, b: 153 },\r\n LightSteelBlue: { r: 176, g: 196, b: 222 },\r\n LightYellow: { r: 255, g: 255, b: 224 },\r\n Lime: { r: 0, g: 255, b: 0 },\r\n LimeGreen: { r: 50, g: 205, b: 50 },\r\n Linen: { r: 250, g: 240, b: 230 },\r\n Magenta: { r: 255, g: 0, b: 255 },\r\n Maroon: { r: 128, g: 0, b: 0 }, // Maroon\r\n MediumAquaMarine: { r: 102, g: 205, b: 170 },\r\n MediumBlue: { r: 0, g: 0, b: 205 },\r\n MediumOrchid: { r: 186, g: 85, b: 211 },\r\n MediumPurple: { r: 147, g: 112, b: 219 },\r\n MediumSeaGreen: { r: 60, g: 179, b: 113 },\r\n MediumSlateBlue: { r: 123, g: 104, b: 238 },\r\n MediumSpringGreen: { r: 0, g: 250, b: 154 },\r\n MediumTurquoise: { r: 72, g: 209, b: 204 },\r\n MediumVioletRed: { r: 199, g: 21, b: 133 },\r\n MidnightBlue: { r: 25, g: 25, b: 112 },\r\n MintCream: { r: 245, g: 255, b: 250 },\r\n MistyRose: { r: 255, g: 228, b: 225 },\r\n Moccasin: { r: 255, g: 228, b: 181 },\r\n NavajoWhite: { r: 255, g: 222, b: 173 },\r\n Navy: { r: 0, g: 0, b: 128 },\r\n OldLace: { r: 253, g: 245, b: 230 },\r\n Olive: { r: 128, g: 128, b: 0 },\r\n OliveDrab: { r: 107, g: 142, b: 35 },\r\n Orange: { r: 255, g: 165, b: 0 },\r\n OrangeRed: { r: 255, g: 69, b: 0 },\r\n Orchid: { r: 218, g: 112, b: 214 },\r\n PaleGoldenRod: { r: 238, g: 232, b: 170 },\r\n PaleGreen: { r: 152, g: 251, b: 152 },\r\n PaleTurquoise: { r: 175, g: 238, b: 238 },\r\n PaleVioletRed: { r: 219, g: 112, b: 147 },\r\n PapayaWhip: { r: 255, g: 239, b: 213 },\r\n PeachPuff: { r: 255, g: 218, b: 185 },\r\n Peru: { r: 205, g: 133, b: 63 },\r\n Pink: { r: 255, g: 192, b: 203 },\r\n Plum: { r: 221, g: 160, b: 221 },\r\n PowderBlue: { r: 176, g: 224, b: 230 },\r\n Purple: { r: 128, g: 0, b: 128 },\r\n RebeccaPurple: { r: 102, g: 51, b: 153 },\r\n Red: { r: 255, g: 0, b: 0 },\r\n RosyBrown: { r: 188, g: 143, b: 143 },\r\n RoyalBlue: { r: 65, g: 105, b: 225 },\r\n SaddleBrown: { r: 139, g: 69, b: 19 },\r\n Salmon: { r: 250, g: 128, b: 114 },\r\n SandyBrown: { r: 244, g: 164, b: 96 },\r\n SeaGreen: { r: 46, g: 139, b: 87 },\r\n SeaShell: { r: 255, g: 245, b: 238 },\r\n Sienna: { r: 160, g: 82, b: 45 },\r\n Silver: { r: 192, g: 192, b: 192 },\r\n SkyBlue: { r: 135, g: 206, b: 235 },\r\n SlateBlue: { r: 106, g: 90, b: 205 },\r\n SlateGray: { r: 112, g: 128, b: 144 },\r\n Snow: { r: 255, g: 250, b: 250 },\r\n SpringGreen: { r: 0, g: 255, b: 127 },\r\n SteelBlue: { r: 70, g: 130, b: 180 },\r\n Tan: { r: 210, g: 180, b: 140 },\r\n Teal: { r: 0, g: 128, b: 128 },\r\n Thistle: { r: 216, g: 191, b: 216 },\r\n Tomato: { r: 255, g: 99, b: 71 },\r\n Turquoise: { r: 64, g: 224, b: 208 },\r\n Violet: { r: 238, g: 130, b: 238 },\r\n Wheat: { r: 245, g: 222, b: 179 },\r\n White: { r: 255, g: 255, b: 255 },\r\n WhiteSmoke: { r: 245, g: 245, b: 245 },\r\n Yellow: { r: 255, g: 255, b: 0 },\r\n YellowGreen: { r: 154, g: 205, b: 50 }\r\n};\r\n\r\n\r\n\r\n\r\nexport function colorWithAlpha(color: string, alpha: number): string {\r\n const lowerCasedColor = color.toLowerCase() as keyof typeof colorNames;\r\n \r\n if (colorNames[lowerCasedColor]) {\r\n const rgb = colorNames[lowerCasedColor];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n }\r\n \r\n // If color is in hex format (#RRGGBB)\r\n if (/^#([A-Fa-f0-9]{6})$/.test(color)) {\r\n const hex = color.slice(1);\r\n const bigint = parseInt(hex, 16);\r\n const r = (bigint >> 16) & 255;\r\n const g = (bigint >> 8) & 255;\r\n const b = bigint & 255;\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n \r\n // If color is in rgb format (rgb(r, g, b))\r\n if (/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/.test(color)) {\r\n const result = color.match(/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/);\r\n if (result) {\r\n return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha})`;\r\n }\r\n }\r\n \r\n // Default to original color if format is not recognized\r\n return color;\r\n}","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { z } from \"zod\";\n\n/**\n * Per-resource theme override block.\n *\n * Single source of truth for the shape + defaults that were previously\n * duplicated across `components/ThemeOverrideSection.tsx` and\n * `utils/useSettings.ts`. Both now import from here.\n *\n * Data shape (driven by a schema block on the consumer side):\n * theme: {\n * useOverride: boolean,\n * primaryColor: string, // \"dirk\" | \"custom\" | mantine palette name\n * primaryShade: 0..9,\n * customTheme: string[10], // hex stops\n * }\n */\n\n/**\n * The 10-stop hex palette used as the fallback custom theme. This exact tuple\n * was duplicated in ThemeOverrideSection (DEFAULT_PALETTE) and useSettings\n * (customTheme). Keep it as a 10-tuple — Mantine `MantineColorsTuple` expects\n * exactly ten stops.\n */\nexport const DEFAULT_PALETTE: string[] = [\n \"#f0f4ff\",\n \"#d9e3ff\",\n \"#bfcfff\",\n \"#a6bbff\",\n \"#8ca7ff\",\n \"#7393ff\",\n \"#5a7fff\",\n \"#406bff\",\n \"#2547ff\",\n \"#0b33ff\",\n];\n\n/**\n * Zod schema for the theme override block. `customTheme` is validated as an\n * array of strings (the editor enforces the 10-length shape at the UI layer\n * by falling back to DEFAULT_PALETTE when the count is wrong).\n */\nexport const ThemeOverrideSchema = z.object({\n useOverride: z.boolean(),\n primaryColor: z.string(),\n primaryShade: z.number(),\n customTheme: z.array(z.string()),\n});\n\nexport type ThemeOverrideValue = z.infer<typeof ThemeOverrideSchema>;\n\n/**\n * Canonical default theme override block. Used as the merge fallback in\n * ThemeOverrideSection and (the palette portion) as the default custom theme\n * in useSettings.\n */\nexport const defaultThemeOverride: ThemeOverrideValue = {\n useOverride: false,\n primaryColor: \"dirk\",\n primaryShade: 5,\n customTheme: DEFAULT_PALETTE,\n};\n","import { MantineColorsTuple } from \"@mantine/core\";\r\nimport { create } from \"zustand\";\r\nimport { DEFAULT_PALETTE } from \"../types/theme\";\r\n\r\nexport type SettingsState = {\r\n game: \"fivem\" | \"rdr3\";\r\n currency: string;\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n resourceVersion?: string;\r\n customTheme?: MantineColorsTuple;\r\n overideResourceName?: string;\r\n serverName?: string;\r\n logo?: string;\r\n language?: string;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n currency: \"$\",\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n resourceVersion: \"dev\",\r\n customTheme: DEFAULT_PALETTE as unknown as MantineColorsTuple,\r\n}));\r\n\r\n// registerInitialFetch<Partial<SettingsState>>('GET_SETTINGS', undefined).then((data) => {\r\n// if (!data) {\r\n// console.warn('No settings data received from GET_SETTINGS fetch.');\r\n// return;\r\n// }\r\n// useSettings.setState({\r\n// ...data,\r\n// });\r\n// })\r\n","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\nimport { useSettings } from \"./useSettings\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const overrideResourceName = useSettings.getState().overideResourceName;\r\n\r\n // Resource-name resolution:\r\n // 1. NUI iframes expose `window.GetParentResourceName` — use that.\r\n // 2. DUIs don't have it, but DirkProvider sets `overideResourceName`\r\n // once it mounts, so consumer DUIs that wait until then resolve fine.\r\n // 3. If NEITHER is available (e.g. a DUI before its DirkProvider has\r\n // mounted, which happens for module-level `registerInitialFetch`\r\n // calls in `locales.ts`), there's no valid resource to call. Skip\r\n // the fetch entirely — firing it against a placeholder URL just\r\n // produces a doomed network request + an \"Uncaught (in promise)\r\n // TypeError: Failed to fetch\" in older consumer builds that\r\n // lacked the try/catch fallback below. Caller can rely on the\r\n // mockData return or refetch once context is established.\r\n const hasResourceContext =\r\n typeof (window as any).GetParentResourceName === \"function\" ||\r\n !!overrideResourceName;\r\n\r\n if (!hasResourceContext) {\r\n return (mockData ?? ({} as T));\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : overrideResourceName as string;\r\n\r\n try {\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n } catch {\r\n return (mockData ?? ({} as T));\r\n }\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n runFetches().catch(() => {});\r\n }, []);\r\n};\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string, mockData?: T): Promise<T> => { \r\n return fetchNui<T>('FETCH_LUA_TABLE', { tableName }, mockData);\r\n} \r\n\r\nexport const registerInitialLuaTableFetch = <T>(tableName: string, mockData?: T): Promise<T> => { \r\n return registerInitialFetch<T>('FETCH_LUA_TABLE', { tableName }, mockData);\r\n} \r\n\r\n\r\n\r\n// useage example:\r\n// registerInitialLuaTableFetch<{ [key: string]: string }>('my_lua_table', { key1: 'value1', key2: 'value2' }); \r\n","import { create } from \"zustand\";\r\nimport { fetchNui, registerInitialFetch } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\nconst reportedMissing = new Set<string>();\r\nfunction reportMissingLocale(key: string) {\r\n if (!key || reportedMissing.has(key)) return;\r\n reportedMissing.add(key);\r\n fetchNui('REPORT_MISSING_LOCALE', { key }).catch(() => {});\r\n}\r\n\r\n\r\n// Package-level locale defaults for dirk-cfx-react's own chrome (the ConfigPanel\r\n// buttons, modals, etc.). Merged UNDER the consumer's locale dict on every\r\n// load/update, so a consumer that doesn't define these keys still renders\r\n// English (never the raw key), and any consumer CAN override them (e.g. a\r\n// Spanish es.json that provides the same keys).\r\nconst PACKAGE_DEFAULTS: LocalesProps = {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\",\r\n \"cfgpanel_discard\": \"Discard\",\r\n \"cfgpanel_manual_edit\": \"Manual Edit\",\r\n \"cfgpanel_reset_defaults\": \"Reset Defaults\",\r\n \"cfgpanel_version\": \"Version\",\r\n \"cfgpanel_back_title\": \"Back to script list\",\r\n \"cfgpanel_undo\": \"Undo\",\r\n \"cfgpanel_redo\": \"Redo\",\r\n \"cfgpanel_save\": \"Save\",\r\n \"cfgpanel_saving\": \"Saving...\",\r\n \"cfgpanel_history\": \"History\",\r\n \"cfgpanel_reset_title\": \"Reset to Defaults\",\r\n \"cfgpanel_reset_desc\": \"This will permanently reset ALL config back to the defaults. Every value you have configured will be overwritten. This cannot be undone.\",\r\n \"cfgpanel_reset_confirm\": \"Reset Config\",\r\n \"cfgpanel_discard_title\": \"Discard Unsaved Changes?\",\r\n \"cfgpanel_discard_desc_back\": \"You have unsaved changes. Going back now will discard them.\",\r\n \"cfgpanel_discard_desc_close\": \"You have unsaved changes. Closing now will discard them.\",\r\n \"cfgpanel_discard_confirm_back\": \"Go Back Without Saving\",\r\n \"cfgpanel_discard_confirm_close\": \"Close Without Saving\",\r\n \"cfgpanel_json_title\": \"Config JSON\",\r\n \"cfgpanel_cancel\": \"Cancel\",\r\n \"cfgpanel_apply\": \"Apply\",\r\n \"cfgpanel_history_title\": \"Config History\",\r\n \"cfgpanel_close\": \"Close\",\r\n};\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: { ...PACKAGE_DEFAULTS },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists) reportMissingLocale(key);\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function\r\nexport const locale = localeStore.getState().locale;\r\n\r\nregisterInitialFetch<LocalesProps>('GET_LOCALES', undefined).then((data) => {\r\n localeStore.setState({ locales: { ...PACKAGE_DEFAULTS, ...data } });\r\n}).catch(() => {})\r\n\r\n// dirk_lib broadcasts UPDATE_DIRK_LIB_LOCALES whenever an admin changes the\r\n// `language` setting, so the dict updates live without a resource restart.\r\nif (typeof window !== \"undefined\") {\r\n window.addEventListener(\"message\", (event) => {\r\n const msg = event.data;\r\n if (!msg || msg.action !== \"UPDATE_DIRK_LIB_LOCALES\") return;\r\n if (!msg.data || typeof msg.data !== \"object\") return;\r\n // Defensive: never overwrite a populated dict with an empty one. dirk_lib\r\n // and consumer dui.lua listeners can both fire mid-table.wipe/repopulate\r\n // inside lib.locale(), and a stray {} broadcast would silently snap the\r\n // whole NUI back to raw keys (e.g. \"ModifyRod\" instead of the translation).\r\n if (Object.keys(msg.data).length === 0) return;\r\n localeStore.setState({ locales: { ...PACKAGE_DEFAULTS, ...(msg.data as LocalesProps) } });\r\n });\r\n}","// ------------------ Game <-> Map Conversion ------------------\r\nexport const mapCenter: [number, number] = [-119.43, 58.84]\r\nexport const latPr100 = 1.421\r\n\r\n/** Convert game world coordinates -> Leaflet map coordinates */\r\nexport function gameToMap(x: number, y: number): [number, number] {\r\n return [\r\n mapCenter[0] + (latPr100 / 100) * y, // lng\r\n mapCenter[1] + (latPr100 / 100) * x, // lat\r\n ]\r\n}\r\n\r\n/** Convert Leaflet map coordinates -> game world coordinates */\r\nexport function mapToGame(lat: number, lng: number): [number, number] {\r\n return [\r\n ((lng - mapCenter[1]) * 100) / latPr100,\r\n ((lat - mapCenter[0]) * 100) / latPr100,\r\n ]\r\n}\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\n\r\nexport type InventoryItem = {\r\n name: string;\r\n label: string;\r\n weight: number;\r\n image: string;\r\n};\r\n\r\nexport type InventoryItems = Record<string, InventoryItem>;\r\n\r\nexport const useItems = create<InventoryItems>(() => ({}));\r\n\r\nexport const useItemsList = (excludeItemNames: string[] = []): InventoryItem[] => {\r\n const excludeSet = new Set(excludeItemNames);\r\n return Object.values(useItems.getState()).filter((item) => !excludeSet.has(item.name));\r\n};\r\n\r\nexport const getItemImageUrl = (itemName: string): string => {\r\n return useItems.getState()[itemName]?.image || \"\";\r\n};\r\n\r\nregisterInitialFetch<InventoryItems>(\"FETCH_ALL_ITEMS\", null, {\r\n item1: { name: \"item1\", label: \"Item 1\", weight: 0.5, image: \"item1.png\" },\r\n item2: { name: \"item2\", label: \"Item 2\", weight: 1.0, image: \"item2.png\" },\r\n item3: { name: \"item3\", label: \"Item 3\", weight: 2.5, image: \"item3.png\" },\r\n}).then((fetchedItems) => {\r\n if (!fetchedItems) return;\r\n useItems.setState(fetchedItems);\r\n}).catch(() => {});\r\n","import { create } from \"zustand\";\r\nimport { fetchNui } from \"./fetchNui\";\r\n\r\n// Shape mirrors lib.framework.Group / lib.framework.Grade in dirk_lib.\r\n// payment is QB/qbx `payment` ⊕ ESX `salary`; nil on ND core.\r\n// bankAuth is qbx-native; defaults to isBoss on frameworks without it.\r\nexport type FrameworkGrade = {\r\n grade: number;\r\n name: string;\r\n label: string;\r\n payment?: number;\r\n isBoss: boolean;\r\n bankAuth: boolean;\r\n};\r\n\r\nexport type FrameworkGroup = {\r\n name: string;\r\n label: string;\r\n type: \"job\" | \"gang\";\r\n category?: string;\r\n whitelisted?: boolean;\r\n defaultDuty?: boolean;\r\n offDutyPay?: boolean;\r\n grades: FrameworkGrade[];\r\n};\r\n\r\ntype FrameworkGroupsBundle = {\r\n jobs: FrameworkGroup[];\r\n gangs: FrameworkGroup[];\r\n};\r\n\r\ntype FrameworkGroupsStore = FrameworkGroupsBundle & {\r\n loaded: boolean;\r\n};\r\n\r\nexport const useFrameworkGroups = create<FrameworkGroupsStore>(() => ({\r\n jobs: [],\r\n gangs: [],\r\n loaded: false,\r\n}));\r\n\r\n// Lazy fetch — only fires when a group picker actually mounts (GroupName /\r\n// GroupRank call ensureFrameworkGroups() in an effect). This used to run at\r\n// module load in EVERY consumer NUI, so every player hit the\r\n// dirk_lib:getFrameworkGroups server callback on resource start even when no\r\n// group picker was ever shown — pure wasted work for gameplay-only UIs.\r\n//\r\n// `frameworkGroupsRequested` is a module-scoped (shared, singleton) guard set\r\n// synchronously before the await, so any number of pickers mounting at once\r\n// collapse to a SINGLE round-trip. On success it stays set (never refetches).\r\n// On failure it is reset so a later picker-mount can retry a transient error;\r\n// picker mounts are sparse + user-driven, so this can't spam the callback.\r\nlet frameworkGroupsRequested = false;\r\nexport function ensureFrameworkGroups(): void {\r\n if (frameworkGroupsRequested) return;\r\n frameworkGroupsRequested = true;\r\n fetchNui<FrameworkGroupsBundle>(\"GET_FRAMEWORK_GROUPS\", undefined)\r\n .then((data) => {\r\n useFrameworkGroups.setState({\r\n jobs: Array.isArray(data?.jobs) ? data.jobs : [],\r\n gangs: Array.isArray(data?.gangs) ? data.gangs : [],\r\n loaded: true,\r\n });\r\n })\r\n .catch(() => {\r\n frameworkGroupsRequested = false; // allow a later picker-mount to retry\r\n useFrameworkGroups.setState({ loaded: true });\r\n });\r\n}\r\n\r\n// Helper for components that don't care about the job/gang split.\r\nexport function selectAllGroups(state: FrameworkGroupsStore): FrameworkGroup[] {\r\n return [...state.jobs, ...state.gangs];\r\n}\r\n","export const INPUT_MAPPER_PRIMARY_OPTIONS = [\r\n \"DIGITALBUTTON_AXIS\",\r\n \"GAME_CONTROLLED\",\r\n \"JOYSTICK_AXIS\",\r\n \"JOYSTICK_AXIS_NEGATIVE\",\r\n \"JOYSTICK_AXIS_POSITIVE\",\r\n \"JOYSTICK_BUTTON\",\r\n \"JOYSTICK_IAXIS\",\r\n \"JOYSTICK_POV\",\r\n \"JOYSTICK_POV_AXIS\",\r\n \"KEYBOARD\",\r\n \"MKB_AXIS\",\r\n \"MOUSE_ABSOLUTEAXIS\",\r\n \"MOUSE_BUTTON\",\r\n \"MOUSE_CENTEREDAXIS\",\r\n \"MOUSE_NORMALIZED\",\r\n \"MOUSE_RELATIVEAXIS\",\r\n \"MOUSE_SCALEDAXIS\",\r\n \"MOUSE_WHEEL\",\r\n \"PAD_ANALOGBUTTON\",\r\n \"PAD_AXIS\",\r\n \"PAD_DEBUGBUTTON\",\r\n \"PAD_DIGITALBUTTON\",\r\n \"TOUCHPAD_ABSOLUTE_AXIS\",\r\n \"TOUCHPAD_CENTERED_AXIS\",\r\n] as const;\r\n\r\nconst KEYBOARD_KEYS = [\r\n \"BACK\", \"TAB\", \"RETURN\", \"PAUSE\", \"CAPITAL\", \"ESCAPE\", \"SPACE\", \"PAGEUP\", \"PAGEDOWN\",\r\n \"END\", \"HOME\", \"LEFT\", \"UP\", \"RIGHT\", \"DOWN\", \"INSERT\", \"DELETE\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\",\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"F1\", \"F2\", \"F3\", \"F4\", \"F5\", \"F6\", \"F7\", \"F8\", \"F9\", \"F10\", \"F11\", \"F12\",\r\n \"NUMPAD0\", \"NUMPAD1\", \"NUMPAD2\", \"NUMPAD3\", \"NUMPAD4\", \"NUMPAD5\", \"NUMPAD6\", \"NUMPAD7\", \"NUMPAD8\", \"NUMPAD9\",\r\n \"MULTIPLY\", \"ADD\", \"SUBTRACT\", \"DECIMAL\", \"DIVIDE\", \"NUMPADENTER\",\r\n \"LSHIFT\", \"RSHIFT\", \"LCONTROL\", \"RCONTROL\", \"LMENU\", \"RMENU\",\r\n \"LWIN\", \"RWIN\", \"APPS\", \"NUMLOCK\", \"SCROLL\",\r\n \"OEM_1\", \"SEMICOLON\", \"EQUALS\", \"PLUS\", \"COMMA\", \"MINUS\", \"PERIOD\", \"SLASH\", \"OEM_2\", \"OEM_3\", \"GRAVE\",\r\n \"LBRACKET\", \"OEM_4\", \"BACKSLASH\", \"OEM_5\", \"RBRACKET\", \"OEM_6\", \"APOSTROPHE\", \"OEM_7\", \"OEM_102\",\r\n] as const;\r\n\r\nconst MOUSE_BUTTON_KEYS = [\r\n \"MOUSE_LEFT\",\r\n \"MOUSE_RIGHT\",\r\n \"MOUSE_MIDDLE\",\r\n \"MOUSE_EXTRABTN1\",\r\n \"MOUSE_EXTRABTN2\",\r\n \"MOUSE_EXTRABTN3\",\r\n \"MOUSE_EXTRABTN4\",\r\n \"MOUSE_EXTRABTN5\",\r\n \"IOM_WHEEL_UP\",\r\n \"IOM_WHEEL_DOWN\",\r\n] as const;\r\n\r\nconst MOUSE_WHEEL_KEYS = [\"IOM_WHEEL_UP\", \"IOM_WHEEL_DOWN\"] as const;\r\n\r\nconst MOUSE_AXIS_KEYS = [\r\n \"IOM_AXIS_X\",\r\n \"IOM_AXIS_Y\",\r\n \"IOM_AXIS_WHEEL\",\r\n \"IOM_AXIS_WHEEL_DELTA\",\r\n \"IOM_AXIS_WHEEL_RELATIVE\",\r\n \"IOM_IAXIS_X\",\r\n \"IOM_IAXIS_Y\",\r\n \"IOM_IAXIS_WHEEL\",\r\n \"IOM_IAXIS_WHEEL_DELTA\",\r\n \"IOM_IAXIS_WHEEL_RELATIVE\",\r\n \"IOM_AXIS_X_LEFT\",\r\n \"IOM_AXIS_X_RIGHT\",\r\n \"IOM_AXIS_Y_UP\",\r\n \"IOM_AXIS_Y_DOWN\",\r\n \"BASIC_MOUSE_AXIS_MAX\",\r\n \"MOUSE_AXIS_MAX\",\r\n] as const;\r\n\r\nconst PAD_BUTTON_KEYS = [\r\n \"L1_INDEX\",\r\n \"R1_INDEX\",\r\n \"L2_INDEX\",\r\n \"R2_INDEX\",\r\n \"L3_INDEX\",\r\n \"R3_INDEX\",\r\n \"LUP_INDEX\",\r\n \"LRIGHT_INDEX\",\r\n \"LDOWN_INDEX\",\r\n \"LLEFT_INDEX\",\r\n \"RUP_INDEX\",\r\n \"RRIGHT_INDEX\",\r\n \"RDOWN_INDEX\",\r\n \"RLEFT_INDEX\",\r\n \"SELECT_INDEX\",\r\n \"START_INDEX\",\r\n \"TOUCH_INDEX\",\r\n] as const;\r\n\r\nconst PAD_DEBUG_KEYS = [\r\n \"L1\",\r\n \"R1\",\r\n \"L2\",\r\n \"R2\",\r\n \"L3\",\r\n \"R3\",\r\n \"LUP\",\r\n \"LRIGHT\",\r\n \"LDOWN\",\r\n \"LLEFT\",\r\n \"RUP\",\r\n \"RRIGHT\",\r\n \"RDOWN\",\r\n \"RLEFT\",\r\n \"SELECT\",\r\n \"START\",\r\n \"TOUCH\",\r\n] as const;\r\n\r\nconst PAD_AXIS_KEYS = [\r\n \"IOM_AXIS_LX\",\r\n \"IOM_AXIS_LY\",\r\n \"IOM_AXIS_RX\",\r\n \"IOM_AXIS_RY\",\r\n \"IOM_AXIS_LUP\",\r\n \"IOM_AXIS_LDOWN\",\r\n \"IOM_AXIS_LLEFT\",\r\n \"IOM_AXIS_LRIGHT\",\r\n \"IOM_AXIS_LUR\",\r\n \"IOM_AXIS_LUL\",\r\n \"IOM_AXIS_LDR\",\r\n \"IOM_AXIS_LDL\",\r\n \"IOM_AXIS_RUP\",\r\n \"IOM_AXIS_RDOWN\",\r\n \"IOM_AXIS_RLEFT\",\r\n \"IOM_AXIS_RRIGHT\",\r\n \"IOM_AXIS_RUR\",\r\n \"IOM_AXIS_RUL\",\r\n \"IOM_AXIS_RDR\",\r\n \"IOM_AXIS_RDL\",\r\n \"IOM_AXIS_DPADX\",\r\n \"IOM_AXIS_DPADY\",\r\n \"IOM_AXIS_LY_UP\",\r\n \"IOM_AXIS_LY_DOWN\",\r\n \"IOM_AXIS_LX_LEFT\",\r\n \"IOM_AXIS_LX_RIGHT\",\r\n \"IOM_AXIS_RY_UP\",\r\n \"IOM_AXIS_RY_DOWN\",\r\n \"IOM_AXIS_RX_LEFT\",\r\n \"IOM_AXIS_RX_RIGHT\",\r\n] as const;\r\n\r\nconst JOYSTICK_AXIS_KEYS = Array.from({ length: 8 }, (_, i) => `IOM_JOYSTICK_AXIS${i + 1}`);\r\nconst JOYSTICK_BUTTON_KEYS = Array.from({ length: 32 }, (_, i) => `IOM_JOYSTICK_BUTTON${i + 1}`);\r\nconst JOYSTICK_POV_KEYS = Array.from({ length: 4 }, (_, p) => {\r\n const idx = p + 1;\r\n return [\r\n `IOM_POV${idx}_UP`,\r\n `IOM_POV${idx}_RIGHT`,\r\n `IOM_POV${idx}_DOWN`,\r\n `IOM_POV${idx}_LEFT`,\r\n ];\r\n}).flat();\r\n\r\nexport const INPUT_MAPPER_KEYS_BY_PRIMARY: Record<string, string[]> = {\r\n DIGITALBUTTON_AXIS: [],\r\n GAME_CONTROLLED: [],\r\n JOYSTICK_AXIS: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_AXIS_NEGATIVE: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_AXIS_POSITIVE: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_BUTTON: [...JOYSTICK_BUTTON_KEYS],\r\n JOYSTICK_IAXIS: [...JOYSTICK_AXIS_KEYS],\r\n JOYSTICK_POV: [...JOYSTICK_POV_KEYS],\r\n JOYSTICK_POV_AXIS: [...JOYSTICK_POV_KEYS],\r\n KEYBOARD: [...KEYBOARD_KEYS],\r\n MKB_AXIS: [],\r\n MOUSE_ABSOLUTEAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_BUTTON: [...MOUSE_BUTTON_KEYS],\r\n MOUSE_CENTEREDAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_NORMALIZED: [...MOUSE_AXIS_KEYS],\r\n MOUSE_RELATIVEAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_SCALEDAXIS: [...MOUSE_AXIS_KEYS],\r\n MOUSE_WHEEL: [...MOUSE_WHEEL_KEYS],\r\n PAD_ANALOGBUTTON: [...PAD_BUTTON_KEYS],\r\n PAD_AXIS: [...PAD_AXIS_KEYS],\r\n PAD_DEBUGBUTTON: [...PAD_DEBUG_KEYS],\r\n PAD_DIGITALBUTTON: [...PAD_BUTTON_KEYS],\r\n TOUCHPAD_ABSOLUTE_AXIS: [],\r\n TOUCHPAD_CENTERED_AXIS: [],\r\n};\r\n","// Curated list of FiveM control IDs (the IsControlPressed / DisableControlAction\r\n// numeric IDs). Sourced from https://docs.fivem.net/docs/game-references/controls/.\r\n// Not every control is included — the full list is ~349 entries and most are\r\n// obscure cellphone-scroll / replay-editor inputs no script ever cares about.\r\n// What's here covers the practical surface for scene whitelisting, raid\r\n// keybinds, vehicle scripts, etc. Add more as needed.\r\n\r\nexport type GtaControl = {\r\n /** Numeric control ID passed to IsControlPressed / EnableControlAction. */\r\n id: number;\r\n /** Symbolic name as it appears in the FiveM docs (e.g. INPUT_LOOK_LR). */\r\n symbol: string;\r\n /** Friendly label suitable for UI display (e.g. \"Look Left/Right\"). */\r\n label: string;\r\n /** Default keyboard binding shown for context (e.g. \"Mouse X\", \"E\"). */\r\n defaultKey?: string;\r\n /** Group used for ordering and section headers in pickers. */\r\n group: GtaControlGroup;\r\n};\r\n\r\nexport type GtaControlGroup =\r\n | \"Camera\"\r\n | \"Movement\"\r\n | \"Combat\"\r\n | \"Cover\"\r\n | \"Vehicle\"\r\n | \"Vehicle (Plane/Heli)\"\r\n | \"Vehicle (Boat/Bike)\"\r\n | \"Phone\"\r\n | \"Frontend / UI\"\r\n | \"Multiplayer\"\r\n | \"Misc\";\r\n\r\nexport const GTA_CONTROLS: GtaControl[] = [\r\n // ── Camera ─────────────────────────────────────────────────────────────────\r\n { id: 0, symbol: \"INPUT_NEXT_CAMERA\", label: \"Switch Camera\", defaultKey: \"V\", group: \"Camera\" },\r\n { id: 1, symbol: \"INPUT_LOOK_LR\", label: \"Look Left/Right\", defaultKey: \"Mouse X\", group: \"Camera\" },\r\n { id: 2, symbol: \"INPUT_LOOK_UD\", label: \"Look Up/Down\", defaultKey: \"Mouse Y\", group: \"Camera\" },\r\n { id: 3, symbol: \"INPUT_LOOK_UP_ONLY\", label: \"Look Up Only\", group: \"Camera\" },\r\n { id: 4, symbol: \"INPUT_LOOK_DOWN_ONLY\", label: \"Look Down Only\", group: \"Camera\" },\r\n { id: 5, symbol: \"INPUT_LOOK_LEFT_ONLY\", label: \"Look Left Only\", group: \"Camera\" },\r\n { id: 6, symbol: \"INPUT_LOOK_RIGHT_ONLY\", label: \"Look Right Only\", group: \"Camera\" },\r\n { id: 8, symbol: \"INPUT_CINEMATIC_SLOWMO\", label: \"Cinematic Slowmo\", defaultKey: \"Insert\", group: \"Camera\" },\r\n { id: 26, symbol: \"INPUT_LOOK_BEHIND\", label: \"Look Behind\", defaultKey: \"C\", group: \"Camera\" },\r\n { id: 27, symbol: \"INPUT_PHONE\", label: \"Phone\", defaultKey: \"Up Arrow\", group: \"Phone\" },\r\n\r\n // ── Movement ───────────────────────────────────────────────────────────────\r\n { id: 21, symbol: \"INPUT_SPRINT\", label: \"Sprint\", defaultKey: \"Left Shift\", group: \"Movement\" },\r\n { id: 22, symbol: \"INPUT_JUMP\", label: \"Jump\", defaultKey: \"Space\", group: \"Movement\" },\r\n { id: 23, symbol: \"INPUT_ENTER\", label: \"Enter Vehicle\", defaultKey: \"F\", group: \"Movement\" },\r\n { id: 30, symbol: \"INPUT_MOVE_LR\", label: \"Move Left/Right\", group: \"Movement\" },\r\n { id: 31, symbol: \"INPUT_MOVE_UD\", label: \"Move Up/Down\", group: \"Movement\" },\r\n { id: 32, symbol: \"INPUT_MOVE_UP_ONLY\", label: \"Move Forward (W)\", group: \"Movement\" },\r\n { id: 33, symbol: \"INPUT_MOVE_DOWN_ONLY\", label: \"Move Back (S)\", group: \"Movement\" },\r\n { id: 34, symbol: \"INPUT_MOVE_LEFT_ONLY\", label: \"Move Left (A)\", group: \"Movement\" },\r\n { id: 35, symbol: \"INPUT_MOVE_RIGHT_ONLY\", label: \"Move Right (D)\", group: \"Movement\" },\r\n { id: 36, symbol: \"INPUT_DUCK\", label: \"Duck / Stealth\", defaultKey: \"Left Ctrl\", group: \"Movement\" },\r\n { id: 37, symbol: \"INPUT_SELECT_WEAPON\", label: \"Weapon Wheel\", defaultKey: \"Tab\", group: \"Combat\" },\r\n { id: 38, symbol: \"INPUT_PICKUP\", label: \"Pickup / Interact\", defaultKey: \"E\", group: \"Movement\" },\r\n\r\n // ── Combat ─────────────────────────────────────────────────────────────────\r\n { id: 24, symbol: \"INPUT_ATTACK\", label: \"Attack / Fire\", defaultKey: \"Mouse 1\", group: \"Combat\" },\r\n { id: 25, symbol: \"INPUT_AIM\", label: \"Aim\", defaultKey: \"Mouse 2\", group: \"Combat\" },\r\n { id: 45, symbol: \"INPUT_RELOAD\", label: \"Reload\", defaultKey: \"R\", group: \"Combat\" },\r\n { id: 47, symbol: \"INPUT_DETONATE\", label: \"Detonate\", defaultKey: \"G\", group: \"Combat\" },\r\n { id: 257, symbol: \"INPUT_ATTACK2\", label: \"Attack 2\", group: \"Combat\" },\r\n { id: 140, symbol: \"INPUT_MELEE_ATTACK_LIGHT\", label: \"Melee Light\", defaultKey: \"R\", group: \"Combat\" },\r\n { id: 141, symbol: \"INPUT_MELEE_ATTACK_HEAVY\", label: \"Melee Heavy\", defaultKey: \"Q\", group: \"Combat\" },\r\n { id: 142, symbol: \"INPUT_MELEE_ATTACK_ALTERNATE\", label: \"Melee Alternate\", defaultKey: \"Mouse 1\", group: \"Combat\" },\r\n { id: 263, symbol: \"INPUT_MELEE_ATTACK1\", label: \"Melee Attack 1\", group: \"Combat\" },\r\n { id: 264, symbol: \"INPUT_MELEE_ATTACK2\", label: \"Melee Attack 2\", group: \"Combat\" },\r\n\r\n // ── Cover ──────────────────────────────────────────────────────────────────\r\n { id: 44, symbol: \"INPUT_COVER\", label: \"Cover\", defaultKey: \"Q\", group: \"Cover\" },\r\n\r\n // ── Vehicle (general) ──────────────────────────────────────────────────────\r\n { id: 59, symbol: \"INPUT_VEH_MOVE_LR\", label: \"Vehicle Steering\", group: \"Vehicle\" },\r\n { id: 63, symbol: \"INPUT_VEH_MOVE_LEFT_ONLY\", label: \"Vehicle Steer Left\", group: \"Vehicle\" },\r\n { id: 64, symbol: \"INPUT_VEH_MOVE_RIGHT_ONLY\", label: \"Vehicle Steer Right\", group: \"Vehicle\" },\r\n { id: 71, symbol: \"INPUT_VEH_ACCELERATE\", label: \"Vehicle Accelerate\", defaultKey: \"W\", group: \"Vehicle\" },\r\n { id: 72, symbol: \"INPUT_VEH_BRAKE\", label: \"Vehicle Brake\", defaultKey: \"S\", group: \"Vehicle\" },\r\n { id: 73, symbol: \"INPUT_VEH_DUCK\", label: \"Vehicle Duck\", defaultKey: \"X\", group: \"Vehicle\" },\r\n { id: 74, symbol: \"INPUT_VEH_HEADLIGHT\", label: \"Headlights\", defaultKey: \"H\", group: \"Vehicle\" },\r\n { id: 75, symbol: \"INPUT_VEH_EXIT\", label: \"Exit Vehicle\", defaultKey: \"F\", group: \"Vehicle\" },\r\n { id: 76, symbol: \"INPUT_VEH_HANDBRAKE\", label: \"Handbrake\", defaultKey: \"Space\", group: \"Vehicle\" },\r\n { id: 80, symbol: \"INPUT_VEH_CIN_CAM\", label: \"Cinematic Cam\", defaultKey: \"R\", group: \"Vehicle\" },\r\n { id: 81, symbol: \"INPUT_VEH_NEXT_RADIO\", label: \"Radio Next\", group: \"Vehicle\" },\r\n { id: 82, symbol: \"INPUT_VEH_PREV_RADIO\", label: \"Radio Prev\", group: \"Vehicle\" },\r\n { id: 83, symbol: \"INPUT_VEH_NEXT_RADIO_TRACK\", label: \"Radio Next Track\", group: \"Vehicle\" },\r\n { id: 84, symbol: \"INPUT_VEH_PREV_RADIO_TRACK\", label: \"Radio Prev Track\", group: \"Vehicle\" },\r\n { id: 85, symbol: \"INPUT_VEH_RADIO_WHEEL\", label: \"Radio Wheel\", defaultKey: \"Q\", group: \"Vehicle\" },\r\n { id: 86, symbol: \"INPUT_VEH_HORN\", label: \"Horn\", defaultKey: \"E\", group: \"Vehicle\" },\r\n { id: 90, symbol: \"INPUT_VEH_AIM\", label: \"Vehicle Aim\", group: \"Vehicle\" },\r\n { id: 91, symbol: \"INPUT_VEH_ATTACK\", label: \"Vehicle Attack\", group: \"Vehicle\" },\r\n { id: 92, symbol: \"INPUT_VEH_ATTACK2\", label: \"Vehicle Attack 2\", group: \"Vehicle\" },\r\n { id: 99, symbol: \"INPUT_VEH_SELECT_NEXT_WEAPON\", label: \"Veh Next Weapon\", group: \"Vehicle\" },\r\n { id: 100, symbol: \"INPUT_VEH_SELECT_PREV_WEAPON\", label: \"Veh Prev Weapon\", group: \"Vehicle\" },\r\n\r\n // ── Vehicle (Plane/Heli) ───────────────────────────────────────────────────\r\n { id: 152, symbol: \"INPUT_VEH_FLY_THROTTLE_UP\", label: \"Plane Throttle Up\", defaultKey: \"W\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 153, symbol: \"INPUT_VEH_FLY_THROTTLE_DOWN\", label: \"Plane Throttle Down\", defaultKey: \"S\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 154, symbol: \"INPUT_VEH_FLY_YAW_LEFT\", label: \"Plane Yaw Left\", defaultKey: \"A\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 155, symbol: \"INPUT_VEH_FLY_YAW_RIGHT\", label: \"Plane Yaw Right\", defaultKey: \"D\", group: \"Vehicle (Plane/Heli)\" },\r\n { id: 158, symbol: \"INPUT_VEH_FLY_ATTACK\", label: \"Plane Attack\", defaultKey: \"Mouse 1\", group: \"Vehicle (Plane/Heli)\" },\r\n\r\n // ── Vehicle (Boat / Bike) ──────────────────────────────────────────────────\r\n { id: 198, symbol: \"INPUT_VEH_BICYCLE_PEDAL\", label: \"Bike Pedal\", group: \"Vehicle (Boat/Bike)\" },\r\n\r\n // ── Phone ──────────────────────────────────────────────────────────────────\r\n { id: 137, symbol: \"INPUT_FRONTEND_SOCIAL_CLUB_SECONDARY\", label: \"Toggle Phone (alt)\", group: \"Phone\" },\r\n\r\n // ── Frontend / UI ──────────────────────────────────────────────────────────\r\n { id: 199, symbol: \"INPUT_FRONTEND_PAUSE\", label: \"Pause Menu\", defaultKey: \"P\", group: \"Frontend / UI\" },\r\n { id: 200, symbol: \"INPUT_FRONTEND_PAUSE_ALTERNATE\", label: \"Pause Menu (alt)\", defaultKey: \"Esc\", group: \"Frontend / UI\" },\r\n { id: 201, symbol: \"INPUT_FRONTEND_ACCEPT\", label: \"Accept\", defaultKey: \"Enter\", group: \"Frontend / UI\" },\r\n { id: 202, symbol: \"INPUT_FRONTEND_CANCEL\", label: \"Cancel\", defaultKey: \"Esc\", group: \"Frontend / UI\" },\r\n { id: 244, symbol: \"INPUT_INTERACTION_MENU\", label: \"Interaction Menu\", defaultKey: \"M\", group: \"Frontend / UI\" },\r\n\r\n // ── Multiplayer ────────────────────────────────────────────────────────────\r\n { id: 245, symbol: \"INPUT_MP_TEXT_CHAT_ALL\", label: \"Chat (All)\", defaultKey: \"T\", group: \"Multiplayer\" },\r\n { id: 246, symbol: \"INPUT_MP_TEXT_CHAT_TEAM\", label: \"Chat (Team)\", defaultKey: \"Y\", group: \"Multiplayer\" },\r\n { id: 247, symbol: \"INPUT_MP_TEXT_CHAT_FRIENDS\", label: \"Chat (Friends)\", group: \"Multiplayer\" },\r\n { id: 248, symbol: \"INPUT_MP_TEXT_CHAT_CREW\", label: \"Chat (Crew)\", group: \"Multiplayer\" },\r\n { id: 249, symbol: \"INPUT_PUSH_TO_TALK\", label: \"Push To Talk\", defaultKey: \"N\", group: \"Multiplayer\" },\r\n\r\n // ── Misc ───────────────────────────────────────────────────────────────────\r\n { id: 51, symbol: \"INPUT_CONTEXT\", label: \"Context (E)\", defaultKey: \"E\", group: \"Misc\" },\r\n { id: 52, symbol: \"INPUT_CONTEXT_SECONDARY\", label: \"Context Secondary\", defaultKey: \"Q\", group: \"Misc\" },\r\n { id: 19, symbol: \"INPUT_CHARACTER_WHEEL\", label: \"Character Wheel\", defaultKey: \"Left Alt\", group: \"Misc\" },\r\n { id: 105, symbol: \"INPUT_HUD_SPECIAL\", label: \"Special Ability\", defaultKey: \"Caps Lock\", group: \"Misc\" },\r\n { id: 121, symbol: \"INPUT_MULTIPLAYER_INFO\", label: \"Player List\", defaultKey: \"Z\", group: \"Misc\" },\r\n { id: 170, symbol: \"INPUT_SAVE_REPLAY_CLIP\", label: \"Save Replay Clip\", defaultKey: \"F1\", group: \"Misc\" },\r\n { id: 288, symbol: \"INPUT_REPLAY_START_STOP_RECORDING\", label: \"Replay Record\", defaultKey: \"F1\", group: \"Misc\" },\r\n { id: 289, symbol: \"INPUT_REPLAY_START_STOP_RECORDING_SECONDARY\", label: \"Replay Record (alt)\", group: \"Misc\" },\r\n];\r\n\r\nconst BY_ID = new Map<number, GtaControl>(GTA_CONTROLS.map((c) => [c.id, c]));\r\n\r\nexport function getGtaControl(id: number): GtaControl | undefined {\r\n return BY_ID.get(id);\r\n}\r\n\r\n/** Format a control id as `Label (id)`, falling back to `Control id` if unknown. */\r\nexport function formatGtaControl(id: number): string {\r\n const c = BY_ID.get(id);\r\n if (!c) return `Control ${id}`;\r\n return c.defaultKey ? `${c.label} (${id} · ${c.defaultKey})` : `${c.label} (${id})`;\r\n}\r\n\r\n/** Group order used by ControlSelect / ControlMultiSelect for the dropdown headings. */\r\nexport const GTA_CONTROL_GROUP_ORDER: GtaControlGroup[] = [\r\n \"Camera\",\r\n \"Movement\",\r\n \"Combat\",\r\n \"Cover\",\r\n \"Vehicle\",\r\n \"Vehicle (Plane/Heli)\",\r\n \"Vehicle (Boat/Bike)\",\r\n \"Phone\",\r\n \"Frontend / UI\",\r\n \"Multiplayer\",\r\n \"Misc\",\r\n];\r\n","import { colorWithAlpha } from \"@/utils\";\r\nimport { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, useMantineTheme } from \"@mantine/core\";\r\n\r\nexport type BorderedIconProps = {\r\n icon: string;\r\n color?: string;\r\n fontSize?: string;\r\n hovered?: boolean;\r\n hoverable?: boolean;\r\n radius?: string;\r\n p?: string;\r\n}\r\n\r\nexport function BorderedIcon(props: BorderedIconProps){\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex\r\n bg='rgba(0, 0, 0, 0.5)'\r\n p={props.p || 'xs'}\r\n justify='center'\r\n align='center'\r\n style={{\r\n aspectRatio: '1/1', \r\n \r\n borderRadius: theme.radius.xs,\r\n // border: `2px solid var(--mantine-primary-color-9)`,\r\n outline: `0.2vh solid ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,\r\n boxShadow: `inset 0 0 2vh ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7], 0.5)}`\r\n }}\r\n \r\n >\r\n <FontAwesomeIcon\r\n icon={props.icon as IconName}\r\n color={colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade as number], props.hovered ? 0.9: 0.9)}\r\n style={{\r\n fontSize: props.fontSize ? props.fontSize: '2.5vh',\r\n }}\r\n />\r\n </Flex>\r\n )\r\n}","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, Image, Text } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport React from \"react\";\r\n\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Flex' implicitly has an 'any' type.\r\nexport const MotionFlex = motion.create(Flex) as React.ComponentType<any>;\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Text' implicitly has an 'any' type.\r\nexport const MotionText = motion.create(Text) as React.ComponentType<any>;\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Image' implicitly has an 'any' type.\r\nexport const MotionImage = motion.create(Image) as React.ComponentType<any>;\r\n\r\nexport const MotionIcon = motion.create(FontAwesomeIcon);\r\n\r\n\r\n\r\n\r\n","import { AnimatePresence } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport function Counter(props: {count: number, color?: string, style?: React.CSSProperties}) {\r\n return (\r\n <AnimatePresence>\r\n {props.count > 0 && (\r\n <MotionFlex\r\n key='counter'\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n\r\n fz='1.25vh'\r\n h='1.75vh'\r\n justify={'center'}\r\n align='center'\r\n bg={props.color || 'rgba(0, 0, 0, 0.51)'}\r\n style={{\r\n borderRadius: '50%',\r\n aspectRatio: '1/1',\r\n marginBottom: '0.3vh',\r\n fontFamily: 'Akrobat Bold',\r\n boxShadow: '0 0 5px rgba(0, 0, 0, 0.3)',\r\n ...props.style\r\n }}\r\n >\r\n {props.count}\r\n </MotionFlex> \r\n )}\r\n </AnimatePresence>\r\n\r\n )\r\n}","import React, { useRef, useEffect, useState } from 'react';\r\nimport { motion, useMotionValue } from 'framer-motion';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport type FloatingParticlesProps = {\r\n icons?: React.ReactNode[];\r\n particleCount?: number;\r\n color?: string;\r\n size?: number;\r\n speed?: 'slow' | 'medium' | 'fast';\r\n opacity?: number;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n mouseRepelDistance?: number;\r\n mouseRepelStrength?: number;\r\n backgroundColor?: string;\r\n}\r\n\r\nexport type ParticleState = {\r\n id: number;\r\n baseX: number;\r\n baseY: number;\r\n currentX: number;\r\n currentY: number;\r\n icon: React.ReactNode | null;\r\n animationDuration: number;\r\n}\r\n\r\n\r\n\r\nexport const FloatingParticles: React.FC<FloatingParticlesProps> = ({\r\n icons = [],\r\n particleCount = 55,\r\n color = '#00a552ff',\r\n size = 32,\r\n speed = 'slow',\r\n opacity = 0.3,\r\n style = {},\r\n mouseRepelDistance = 150,\r\n mouseRepelStrength = 50,\r\n backgroundColor = 'transparent',\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [particles, setParticles] = useState<ParticleState[]>([]);\r\n \r\n const mouseX = useMotionValue(0);\r\n const mouseY = useMotionValue(0);\r\n\r\n const durationMap = {\r\n slow: { base: 10, variance: 10 },\r\n medium: { base: 2, variance: 2},\r\n fast: { base: 4, variance: 2 },\r\n };\r\n\r\n const duration = durationMap[speed];\r\n\r\n const seededRandom = (seed: number) => {\r\n const x = Math.sin(seed) * 10000;\r\n return x - Math.floor(x);\r\n };\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const bounds = containerRef.current.getBoundingClientRect();\r\n\r\n const newParticles: ParticleState[] = [...Array(particleCount)].map((_, i) => {\r\n const seedX = i * 123.456;\r\n const seedY = i * 789.012;\r\n const seedDuration = i * 345.678;\r\n \r\n const baseX = seededRandom(seedX) * bounds.width;\r\n const baseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n id: i,\r\n baseX,\r\n baseY,\r\n currentX: baseX,\r\n currentY: baseY,\r\n icon: icons.length > 0 ? icons[i % icons.length] : null,\r\n animationDuration: duration.base + seededRandom(seedDuration) * duration.variance,\r\n };\r\n });\r\n\r\n setParticles(newParticles);\r\n }, [particleCount, icons.length, duration.base, duration.variance]);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const bounds = containerRef.current!.getBoundingClientRect();\r\n const x = e.clientX - bounds.left;\r\n const y = e.clientY - bounds.top;\r\n \r\n mouseX.set(x);\r\n mouseY.set(y);\r\n\r\n setParticles(prevParticles => \r\n prevParticles.map(particle => {\r\n const dx = x - particle.baseX;\r\n const dy = y - particle.baseY;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < mouseRepelDistance && distance > 0) {\r\n const force = (mouseRepelDistance - distance) / mouseRepelDistance;\r\n const repelX = (dx / distance) * force * mouseRepelStrength * -1;\r\n const repelY = (dy / distance) * force * mouseRepelStrength * -1;\r\n\r\n return {\r\n ...particle,\r\n currentX: particle.baseX + repelX,\r\n currentY: particle.baseY + repelY,\r\n };\r\n } else {\r\n return {\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n };\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setParticles(prevParticles =>\r\n prevParticles.map(particle => ({\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n }))\r\n );\r\n };\r\n\r\n const container = containerRef.current;\r\n container.addEventListener('mousemove', handleMouseMove);\r\n container.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n container.removeEventListener('mousemove', handleMouseMove);\r\n container.removeEventListener('mouseleave', handleMouseLeave);\r\n };\r\n }, [mouseX, mouseY, mouseRepelDistance, mouseRepelStrength]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (!containerRef.current) return;\r\n \r\n const bounds = containerRef.current.getBoundingClientRect();\r\n \r\n setParticles(prevParticles =>\r\n prevParticles.map((particle, i) => {\r\n const seedX = i * 123.456 + bounds.width;\r\n const seedY = i * 789.012 + bounds.height;\r\n \r\n const newBaseX = seededRandom(seedX) * bounds.width;\r\n const newBaseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n ...particle,\r\n baseX: newBaseX,\r\n baseY: newBaseY,\r\n currentX: newBaseX,\r\n currentY: newBaseY,\r\n };\r\n })\r\n );\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n style={{\r\n position: 'absolute',\r\n overflow: 'hidden',\r\n width: '100%',\r\n height: '100%',\r\n zIndex: -1,\r\n \r\n backgroundColor,\r\n ...style,\r\n }}\r\n >\r\n <div style={{ position: 'absolute', inset: 0, pointerEvents: 'none' }}>\r\n {particles.map((particle) => (\r\n <motion.div\r\n key={particle.id}\r\n style={{\r\n position: 'absolute',\r\n width: size,\r\n height: size,\r\n color,\r\n opacity,\r\n left: 0,\r\n top: 0,\r\n }}\r\n animate={{\r\n x: particle.currentX,\r\n y: particle.currentY,\r\n scale: [0.8, 1.1, 0.8],\r\n opacity: [opacity * 0.5, opacity, opacity * 0.5],\r\n // random rotate between 0 and 360 so that not all particles rotate the same\r\n rotate: particle.id % 2 === 0 ? [0, 360] : [360, 0],\r\n }}\r\n transition={{\r\n x: { type: \"spring\", stiffness: 150, damping: 20 },\r\n y: { type: \"spring\", stiffness: 150, damping: 20 },\r\n rotate: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n ease: 'linear',\r\n \r\n },\r\n scale: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 111.222) * 5,\r\n ease: 'easeInOut',\r\n },\r\n opacity: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 333.444) * 5,\r\n ease: 'easeInOut',\r\n },\r\n }}\r\n >\r\n {particle.icon ? (\r\n <div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n <FontAwesomeIcon icon={particle.icon as any} style={{ width: '70%', height: '70%' }} />\r\n </div>\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n }}\r\n />\r\n )}\r\n </motion.div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n","import { useMantineTheme, Flex, Text } from \"@mantine/core\";\r\n\r\nexport type InfoBoxProps = {\r\n leftSide: string;\r\n rightSide: string;\r\n};\r\n\r\nexport function InfoBox(props: InfoBoxProps) {\r\n const theme = useMantineTheme();\r\n\r\n\r\n return (\r\n <Flex\r\n w='fit-content'\r\n h='fit-content'\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n overflow: 'hidden',\r\n border: `0.2vh solid rgba(77,77,77,0.3)`\r\n }}\r\n align='center'\r\n >\r\n <Flex\r\n miw='4vh'\r\n p='xxs'\r\n bg='rgba(77,77,77,0.2)'\r\n direction='column'\r\n justify='center'\r\n align='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}>{props.leftSide}</Text>\r\n </Flex>\r\n\r\n <Flex\r\n p='xxs'\r\n flex={1}\r\n miw='4vh'\r\n bg='rgba(77,77,77,0.5)'\r\n direction='column'\r\n align='center'\r\n justify='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.rightSide}</Text>\r\n </Flex>\r\n\r\n </Flex>\r\n );\r\n}\r\n","import { useMantineTheme, Flex, Text, alpha, Tooltip } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\nimport { Variants } from \"framer-motion\";\r\nimport { colorWithAlpha } from \"@/utils\";\r\nimport { Info } from \"lucide-react\";\r\n\r\nexport type InputContainerProps = {\r\n title?:string;\r\n error?: string;\r\n description?:string;\r\n children?:React.ReactNode;\r\n w?:string | number;\r\n flex?:number | string;\r\n h?:string | number;\r\n bg?:string;\r\n p?:string | number;\r\n variants?: Variants;\r\n style?:React.CSSProperties;\r\n rightSection?:React.ReactNode;\r\n}\r\n\r\nexport function InputContainer(props: InputContainerProps){\r\n const theme = useMantineTheme()\r\n return (\r\n <MotionFlex\r\n w={props.w || '100%'}\r\n flex={props.flex}\r\n direction='column'\r\n h={props.h}\r\n gap={props.title ? 'xs' : 0}\r\n \r\n\r\n bg={props.bg || alpha(theme.colors.dark[9], 0.65)}\r\n p={props.p || 'sm'}\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n boxShadow: theme.shadows.sm,\r\n overflow: 'hidden',\r\n border: props.error ? `1px solid rgba(255, 100, 100, 0.8)` : '1px solid var(--mantine-color-dark-7)', \r\n ...props.style,\r\n }}\r\n variants={props.variants}\r\n >\r\n\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n >\r\n {(props.title || props.description) && (\r\n <Flex\r\n align='center'\r\n flex={1}\r\n p={props.p == '0' ? 'sm' : 0}\r\n >\r\n {props.title && (\r\n <Text\r\n size=\"sm\"\r\n style={{\r\n lineHeight: '1.25vh',\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.title}</Text>\r\n )}\r\n {props.description && (\r\n <Tooltip\r\n label={props.description}\r\n position=\"top-end\"\r\n withArrow\r\n multiline\r\n maw=\"22vh\"\r\n styles={{\r\n tooltip: {\r\n background: alpha(theme.colors.dark[7], 0.95),\r\n border: `0.1vh solid rgba(255,255,255,0.1)`,\r\n color: 'rgba(255,255,255,0.75)',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.3vh',\r\n lineHeight: 1.3,\r\n padding: '0.6vh 0.8vh',\r\n letterSpacing: '0.03em',\r\n },\r\n }}\r\n >\r\n <Flex align='center' justify='center' style={{ marginLeft: 'auto', cursor: 'help' }}>\r\n <Info size=\"1.6vh\" color={alpha(theme.colors[theme.primaryColor][5], 0.45)} />\r\n </Flex>\r\n </Tooltip>\r\n )}\r\n </Flex>\r\n )}\r\n {props.error && (\r\n <Text\r\n size='xs'\r\n c={theme.colors.red[9]}\r\n fw={600}\r\n mb='auto'\r\n lh='0.8'\r\n >\r\n {props.error}\r\n </Text>\r\n )}\r\n {props.rightSection && (\r\n <Flex>\r\n {props.rightSection}\r\n </Flex>\r\n )}\r\n </Flex>\r\n {props.children} \r\n </MotionFlex>\r\n )\r\n}","import { create } from 'zustand';\r\n\r\n// Import sounds as URLs (TypeScript-safe)\r\nimport clickSoundUrl from './click_sound.mp3';\r\nimport hoverSoundUrl from './hover_sound.mp3';\r\n\r\n// Define a type for the store state and actions\r\ntype AudioPlayerStore = {\r\n play: (sound: string) => void;\r\n stop: (sound: string) => void;\r\n};\r\n\r\n// Create the store using Zustand\r\nexport const useAudio = create<AudioPlayerStore>(() => {\r\n const audioRefs: Record<string, HTMLAudioElement> = {};\r\n\r\n // Predefined sounds\r\n const sounds: Record<string, string> = {\r\n click: clickSoundUrl,\r\n hover: hoverSoundUrl,\r\n };\r\n\r\n // Initialize audio elements for each sound\r\n for (const [key, src] of Object.entries(sounds)) {\r\n audioRefs[key] = new Audio(src);\r\n }\r\n\r\n return {\r\n play: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.currentTime = 0;\r\n audio.volume = 0.1;\r\n audio.play();\r\n },\r\n stop: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.pause();\r\n audio.currentTime = 0;\r\n },\r\n };\r\n});\r\n","\r\nimport { useAudio } from \"@/hooks/useAudio/store\";\r\nimport { colorWithAlpha } from \"@/utils\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { alpha, Flex, FlexProps, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { MotionFlex, MotionIcon, MotionText } from \"./Motion\";\r\n\r\n\r\nexport type SegmentProps = {\r\n label: string;\r\n value: string;\r\n icon?: string; // Optional icon for the segment\r\n rightSection?: React.ReactNode;\r\n color?: string;\r\n}\r\n\r\nexport type SegmentedControlProps = {\r\n w?: string; // Width of the entire control\r\n multi?: boolean; // Optional prop to allow multiple selections\r\n value?: string | string[]; // Controlled value, if provided\r\n onChange?: (value: string | string[]) => void; // Callback for value change\r\n fz?: string; // Font size for the segments\r\n justify?: FlexProps['justify']; \r\n items: SegmentProps[];\r\n sounds?: boolean;\r\n roundEdges?: boolean;\r\n color?: string;\r\n} & FlexProps;\r\n\r\nexport function SegmentedControl(props: SegmentedControlProps) {\r\n const theme = useMantineTheme();\r\n const play = useAudio((state) => state.play);\r\n\r\n const handleChange = (newValue: string | string[]) => {\r\n if (props.sounds) play('click');\r\n if (props.onChange) {\r\n props.onChange(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Flex\r\n bg='rgba(33, 33, 33, 0.6)'\r\n w={props.w || 'fit-content'}\r\n style={{\r\n borderRadius: props.roundEdges !== false ? theme.radius.xs : 0,\r\n overflow: 'hidden',\r\n }}\r\n {...props}\r\n >\r\n {props.items.map((item, index) => (\r\n <motion.div\r\n key={index}\r\n initial={{ x: -100, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, delay: index * 0.1, ease: 'easeInOut' }}\r\n\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flex: 1,\r\n }}\r\n >\r\n <Segment\r\n key={item.value}\r\n label={item.label}\r\n value={item.value}\r\n icon={item.icon}\r\n rightSection={item.rightSection}\r\n fz={props.fz}\r\n color={props.color}\r\n selected={!props.multi ? props.value === item.value : Array.isArray(props.value) && props.value.includes(item.value)}\r\n onClick={() => {\r\n\r\n if (props.multi) {\r\n const newValue = Array.isArray(props.value)\r\n ? props.value.includes(item.value)\r\n ? props.value.filter((v) => v !== item.value)\r\n : [...props.value, item.value]\r\n : [item.value];\r\n\r\n handleChange(newValue);\r\n } else {\r\n handleChange(item.value);\r\n }\r\n }}\r\n />\r\n </motion.div>\r\n ))}\r\n </Flex>\r\n )\r\n}\r\n\r\nfunction Segment(props: SegmentProps & {\r\n selected: boolean;\r\n onClick: () => void;\r\n fz?: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n\r\n return (\r\n <MotionFlex\r\n onClick={props.onClick}\r\n w='100%'\r\n direction=\"column\"\r\n align=\"center\"\r\n // p='xs'\r\n h='100%'\r\n bg={props.selected ? props.color ? colorWithAlpha(props.color, 0.2) : colorWithAlpha(theme.colors[theme.primaryColor][theme.primaryShade as number], 0.2) : 'transparent'}\r\n pos=\"relative\"\r\n style={{\r\n // position: \"relative\",\r\n cursor: \"pointer\",\r\n }}\r\n justify={'center'}\r\n whileHover={{ scale: 1.05 }}\r\n whileTap={{ scale: 0.95 }}\r\n >\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n // bg='red'\r\n p='xs'\r\n >\r\n \r\n {props.icon && \r\n <MotionIcon\r\n icon={props.icon as IconProp}\r\n // size='sm'\r\n initial={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n animate={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n exit={{\r\n color: 'inherit',\r\n }}\r\n style={{\r\n fontSize: theme.fontSizes.xs,\r\n marginBottom: '0.2vh',\r\n }}\r\n />\r\n }\r\n <MotionText\r\n size={props.fz || 'xs'}\r\n initial={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'rgba(255, 255, 255, 0.7)', \r\n }}\r\n animate={{\r\n color: props.selected ? props.color || theme.colors[theme.primaryColor][5] : 'rgba(255, 255, 255, 0.7)', \r\n }}\r\n exit={{\r\n color: 'rgba(255, 255, 255, 0.7)',\r\n }}\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.label.toUpperCase()}</MotionText>\r\n {props.rightSection}\r\n </Flex>\r\n\r\n {/* Enhanced bottom border with smooth animation */}\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scaleX: props.selected ? 1 : 0,\r\n opacity: props.selected ? 1 : 0,\r\n }}\r\n transition={{\r\n duration: 0.3,\r\n ease: [0.4, 0, 0.2, 1], // Custom easing curve for smooth feel\r\n }}\r\n style={{\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n height: '0.2vh',\r\n backgroundColor: props.color || theme.colors[theme.primaryColor][5],\r\n transformOrigin: 'center',\r\n }}\r\n />\r\n </MotionFlex>\r\n );\r\n}","import { createContext, useContext, useRef } from \"react\";\r\nimport { create, StoreApi, useStore } from \"zustand\";\r\nimport {SegmentedControl, SegmentProps} from \"./SegmentedControl\";\r\n\r\nexport type NavigationStore = {\r\n pageId: string;\r\n}\r\n\r\nexport const NavigationContext = createContext<StoreApi<NavigationStore> | null>(null);\r\n\r\nexport function useNavigation<T>(selector: (state: NavigationStore) => T){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigation must be used within a NavigationProvider');\r\n }\r\n return useStore(navigation, selector);\r\n}\r\n\r\n// Hook to get the store API for setting state\r\nexport function useNavigationStore(){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigationStore must be used within a NavigationProvider');\r\n }\r\n return navigation;\r\n}\r\n\r\nexport function NavigationProvider({ children, defaultPage }: { children: React.ReactNode, defaultPage?: string }){\r\n const storeRef = useRef<StoreApi<NavigationStore>>(\r\n create<NavigationStore>(() => ({\r\n pageId: defaultPage || 'home',\r\n }))\r\n );\r\n\r\n return (\r\n <NavigationContext.Provider value={storeRef.current}>\r\n {children}\r\n </NavigationContext.Provider>\r\n );\r\n}\r\n\r\nexport function NavBar(props: {\r\n items: SegmentProps[];\r\n}){\r\n const pageId = useNavigation((state) => state.pageId);\r\n const store = useNavigationStore();\r\n \r\n return (\r\n <SegmentedControl\r\n sounds\r\n w='100%'\r\n value={pageId}\r\n items={props.items}\r\n onChange={(value) => {\r\n store.setState({ pageId: value as string });\r\n }}\r\n />\r\n )\r\n}","import { motion, Variants } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport type ProgressProps = {\r\n progress: number; // 0 - 100 range\r\n segments: number; // Number of segments (e.g., 5, 10, etc.)\r\n size?: string | number;\r\n};\r\n\r\nconst containerVariants: Variants = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: {\r\n staggerChildren: 0.1,\r\n delayChildren: 0.05,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n transition: {\r\n staggerChildren: 0.05,\r\n staggerDirection: -1,\r\n }\r\n }\r\n};\r\n\r\n// Child item variants\r\nconst itemVariants: Variants = {\r\n hidden: { \r\n opacity: 0, \r\n x: 20,\r\n scale: 0.95,\r\n },\r\n visible: {\r\n opacity: 1,\r\n x: 0,\r\n scale: 1,\r\n transition: {\r\n type: \"spring\",\r\n stiffness: 300,\r\n damping: 24,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n x: -10,\r\n scale: 0.95,\r\n transition: {\r\n duration: 0.2,\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nexport function SegmentedProgress(props: ProgressProps) {\r\n const progressPerSegment = 100 / props.segments; // Percentage per segment\r\n const filledSegments = Math.floor(props.progress / progressPerSegment);\r\n const partialFill = (props.progress % progressPerSegment) / progressPerSegment; // 0 to 1 range for partial fill\r\n\r\n return (\r\n <MotionFlex \r\n w=\"100%\" \r\n h={props.size || '1vh'}\r\n gap='xs'\r\n initial='hidden'\r\n animate='visible'\r\n variants={containerVariants}\r\n >\r\n {[...Array(props.segments)].map((_, index) => {\r\n const isFilled = index < filledSegments;\r\n const isPartial = index === filledSegments;\r\n\r\n return (\r\n <motion.div\r\n key={index}\r\n variants={itemVariants}\r\n style={{\r\n flex: 1,\r\n height: \"100%\",\r\n background: isFilled\r\n ? \"rgba(255, 255, 255, 0.8)\"\r\n : isPartial\r\n ? `linear-gradient(to right, rgba(255, 255, 255, 0.8) ${partialFill * 100}%, rgba(255, 255, 255, 0.2) ${partialFill * 100}%)`\r\n : \"rgba(255, 255, 255, 0.2)\",\r\n transition: \"background 0.3s ease\",\r\n }}\r\n />\r\n );\r\n })}\r\n </MotionFlex>\r\n );\r\n}","import { colorWithAlpha } from \"@/utils\";\r\nimport { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { Flex, MantineSize, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { BorderedIcon } from \"./BorderedIcon\";\r\nimport { useSettings } from \"@/utils/useSettings\";\r\n\r\nexport type ButtonProps = {\r\n icon: string;\r\n onClick?: () => void;\r\n};\r\n\r\nexport type TitleSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport type TitleProps = {\r\n title: string;\r\n description: string;\r\n icon: string;\r\n iconColor?: string;\r\n bg?: string;\r\n w?: string;\r\n removeBorder?: boolean;\r\n borderColor?: string;\r\n p?: string;\r\n /**\r\n * Scale of the whole block — icon, title text, description text, and inner\r\n * spacing all follow this single value. Defaults to \"md\" to preserve the\r\n * historical look so existing consumers don't shift.\r\n */\r\n size?: TitleSize;\r\n rightSection?: React.ReactNode;\r\n};\r\n\r\ntype SizePreset = {\r\n iconFontSize: string;\r\n iconPadding: string;\r\n titleSize: MantineSize | string;\r\n titleLineHeight: string;\r\n descriptionSize: MantineSize | string;\r\n innerGap: MantineSize | string;\r\n bottomPad: MantineSize | string;\r\n};\r\n\r\nfunction getSizePreset(size: TitleSize, themeMdFontSize: string): SizePreset {\r\n switch (size) {\r\n case \"xs\":\r\n return { iconFontSize: \"1.2vh\", iconPadding: \"xxs\", titleSize: \"xxs\", titleLineHeight: \"1.2vh\", descriptionSize: \"xxs\", innerGap: \"xs\", bottomPad: \"xs\" };\r\n case \"sm\":\r\n return { iconFontSize: \"1.6vh\", iconPadding: \"xxs\", titleSize: \"xs\", titleLineHeight: \"1.6vh\", descriptionSize: \"xxs\", innerGap: \"xs\", bottomPad: \"xs\" };\r\n case \"lg\":\r\n return { iconFontSize: \"2.6vh\", iconPadding: \"sm\", titleSize: \"md\", titleLineHeight: \"2.6vh\", descriptionSize: \"sm\", innerGap: \"sm\", bottomPad: \"sm\" };\r\n case \"xl\":\r\n return { iconFontSize: \"3.2vh\", iconPadding: \"sm\", titleSize: \"lg\", titleLineHeight: \"3.2vh\", descriptionSize: \"md\", innerGap: \"md\", bottomPad: \"md\" };\r\n case \"md\":\r\n default:\r\n return { iconFontSize: themeMdFontSize, iconPadding: \"xs\", titleSize: \"sm\", titleLineHeight: themeMdFontSize, descriptionSize: \"xs\", innerGap: \"sm\", bottomPad: \"sm\" };\r\n }\r\n}\r\n\r\nexport function Title(props: TitleProps) {\r\n const game = useSettings((state) => state.game);\r\n const theme = useMantineTheme();\r\n const preset = getSizePreset(props.size ?? \"md\", theme.fontSizes.md);\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n bg={props.bg || \"transparent\"}\r\n gap=\"xs\"\r\n w={props.w || \"100%\"}\r\n p={props.p || \"unset\"}\r\n pb={!props.p ? preset.bottomPad : props.p}\r\n style={{\r\n userSelect: \"none\",\r\n borderBottom: props.removeBorder ? \"none\" : `0.3vh solid ${props.borderColor || colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`,\r\n }}\r\n >\r\n <Flex align=\"center\" justify={\"center\"}>\r\n <Flex align=\"center\" gap={preset.innerGap} pr=\"xs\">\r\n <BorderedIcon\r\n icon={props.icon as IconName}\r\n fontSize={preset.iconFontSize}\r\n color={props.iconColor}\r\n p={preset.iconPadding}\r\n />\r\n <Flex direction=\"column\" gap=\"0.25vh\">\r\n <Text\r\n p=\"0\"\r\n size={preset.titleSize as MantineSize}\r\n style={{\r\n lineHeight: preset.titleLineHeight,\r\n fontFamily: game == \"fivem\" ? \"Akrobat Bold\" : \"Red Dead\",\r\n letterSpacing: \"0.05em\",\r\n textTransform: \"uppercase\",\r\n }}\r\n >\r\n {props.title}\r\n </Text>\r\n <Text\r\n size={preset.descriptionSize as MantineSize}\r\n c=\"grey\"\r\n style={{ whiteSpace: \"normal\", wordWrap: \"break-word\" }}\r\n >\r\n {props.description}\r\n </Text>\r\n </Flex>\r\n </Flex>\r\n <Flex ml=\"auto\" align=\"center\" gap=\"xs\">\r\n {props.rightSection}\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n );\r\n}\r\n","\r\nimport { Flex, Progress, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\n\r\nexport function LevelBanner(props: {\r\n exp: number;\r\n level: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n\r\n color?: string;\r\n}){ \r\n return (\r\n <MotionFlex\r\n // bg='rgba(77, 77, 77, 0.3)'\r\n w='35vh'\r\n pos='absolute'\r\n left='50%'\r\n align='center'\r\n gap='xs'\r\n style={{\r\n \r\n borderRadius: useMantineTheme().radius.xxs,\r\n }}\r\n // direction={'column'}\r\n initial={{ opacity: 0, y: -10, transform: 'translateX(-50%)' }}\r\n animate={{ opacity: 1, y: 0, transform: 'translateX(-50%)' }}\r\n exit={{ opacity: 0, y: -10, transform: 'translateX(-50%)' }}\r\n transition={{ duration: 0.3 }}\r\n direction={'column'}\r\n >\r\n <Flex\r\n w='100%'\r\n justify={'space-between'}\r\n >\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.9)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n }}\r\n >LVL {props.level}</Text>\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.7)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n }}\r\n >{props.exp}/{props.nextLevelXP} XP</Text>\r\n <Text\r\n size='xxs'\r\n c='rgba(255, 255, 255, 0.7)'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em', \r\n }}\r\n >LVL {props.level + 1}</Text>\r\n </Flex>\r\n <Progress\r\n color={props.color}\r\n w='100%'\r\n size='sm'\r\n value={props.progressToLevel}\r\n />\r\n </MotionFlex>\r\n\r\n )\r\n}\r\n\r\n","import { colorWithAlpha, locale } from \"@/utils\";\r\nimport { Flex, RingProgress, Text, alpha, useMantineTheme } from \"@mantine/core\";\r\n\r\nexport function LevelPanel(props: {\r\n exp: number;\r\n level: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n text?: string;\r\n color?: string;\r\n}){\r\n const theme = useMantineTheme();\r\n\r\n return (\r\n <Flex\r\n w='fit-content'\r\n pr='8vh'\r\n pl='8vh'\r\n \r\n bg='linear-gradient(180deg, rgba(30, 30, 30, 0.82) 0%, rgba(30, 30, 30, 0.3) 50%, rgba(30, 30, 30, 0.6) 100%)' \r\n style={{\r\n borderRadius: theme.radius.xs,\r\n boxShadow: theme.shadows.sm,\r\n outline: '0.2vh solid rgba(255,255,255,0.1)',\r\n }}\r\n justify={'center'}\r\n align={'center'}\r\n direction={'column'}\r\n p='sm'\r\n >\r\n\r\n <RingProgress\r\n size={190}\r\n roundCaps\r\n thickness={10}\r\n sections={[{ value: props.progressToLevel, color:colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.9) }]}\r\n label={\r\n <Flex\r\n justify={'center'}\r\n align={'center'}\r\n direction={'column'}\r\n >\r\n <Text\r\n size='6vh'\r\n c={colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.9)}\r\n style={{\r\n fontFamily: 'Akrobat Black',\r\n textShadow: `0 0 10px ${colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade as number], 0.7)}`, \r\n }}\r\n >\r\n {props.level}\r\n </Text>\r\n </Flex>\r\n }\r\n />\r\n <Text\r\n size='sm'\r\n style={{\r\n fontFamily: 'Akrobat Black',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >\r\n {props.text || locale('Level')}\r\n </Text>\r\n <Text\r\n size='xs'\r\n c='rgba(255,255,255,0.6)'\r\n >\r\n {props.exp}/{props.nextLevelXP} {locale('EXP')}\r\n </Text>\r\n </Flex>\r\n )\r\n}\r\n","import { alpha, Flex, Portal, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { X } from \"lucide-react\";\r\nimport React, { useRef } from \"react\";\r\n\r\nexport type ModalProps = {\r\n title: string;\r\n icon?: React.ElementType;\r\n iconColor?: string;\r\n description?: string;\r\n badge?: { label: string; color: string };\r\n onClose: () => void;\r\n width?: string;\r\n maxHeight?: string;\r\n height?: string;\r\n zIndex?: number;\r\n clickOutside?: boolean;\r\n children: React.ReactNode;\r\n};\r\n\r\nexport function Modal({\r\n title,\r\n icon: Icon,\r\n iconColor,\r\n description,\r\n badge,\r\n onClose,\r\n width = \"52vh\",\r\n maxHeight = \"85vh\",\r\n height,\r\n zIndex = 100,\r\n clickOutside = true,\r\n children,\r\n}: ModalProps) {\r\n const theme = useMantineTheme();\r\n const pointerDownOnOverlay = useRef(false);\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n zIndex,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n background: \"rgba(0,0,0,0.65)\",\r\n }}\r\n onPointerDown={(e) => {\r\n pointerDownOnOverlay.current = e.target === e.currentTarget;\r\n }}\r\n onClick={(e) => {\r\n if (clickOutside && e.target === e.currentTarget && pointerDownOnOverlay.current) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.96, y: 8 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.98),\r\n border: `0.1vh solid ${theme.colors.dark[7]}`,\r\n borderRadius: theme.radius.sm,\r\n width,\r\n maxHeight,\r\n height,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n userSelect: \"none\",\r\n }}\r\n >\r\n {/* Header */}\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n style={{\r\n borderBottom: `0.1vh solid ${theme.colors.dark[7]}`,\r\n flexShrink: 0,\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"xs\">\r\n {Icon && (\r\n <Icon\r\n color={iconColor ?? \"rgba(255,255,255,0.6)\"}\r\n size=\"2vh\"\r\n />\r\n )}\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"sm\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n >\r\n {title}\r\n </Text>\r\n {badge && (\r\n <div\r\n style={{\r\n background: alpha(badge.color, 0.12),\r\n border: `0.1vh solid ${alpha(badge.color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: `0 ${theme.spacing.xxs}`,\r\n }}\r\n >\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c={badge.color}\r\n >\r\n {badge.label}\r\n </Text>\r\n </div>\r\n )}\r\n </Flex>\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: theme.spacing.xxs,\r\n borderRadius: theme.radius.xs,\r\n display: \"flex\",\r\n }}\r\n >\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Description */}\r\n {description && (\r\n <Flex px=\"sm\" pt=\"xs\">\r\n <Text\r\n ff=\"Akrobat Regular\"\r\n size=\"xs\"\r\n c=\"rgba(255,255,255,0.65)\"\r\n style={{ lineHeight: 1.5 }}\r\n >\r\n {description}\r\n </Text>\r\n </Flex>\r\n )}\r\n\r\n {/* Content */}\r\n <div style={{ flex: 1, minHeight: 0, display: \"flex\", flexDirection: \"column\" }}>\r\n {children}\r\n </div>\r\n </motion.div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Button, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\n\r\nexport type PromptButton = {\r\n icon?: string;\r\n text: string;\r\n color?: string;\r\n variant?: 'filled' | 'outline' | 'light' | 'subtle' | 'default';\r\n onClick: () => void;\r\n}\r\n\r\nexport type Prompt = {\r\n message: string;\r\n buttons: PromptButton[];\r\n};\r\n\r\nexport function PromptModal(props: Prompt) {\r\n const theme = useMantineTheme();\r\n return (\r\n <MotionFlex\r\n gap='sm'\r\n direction={'column'}\r\n flex={1}\r\n >\r\n <Text\r\n size='xs'\r\n c='rgba(255, 255, 255, 0.8)'\r\n >{props.message}</Text>\r\n <Flex\r\n gap='sm'\r\n >\r\n {props.buttons.map((button, index) => (\r\n <Button\r\n key={index}\r\n variant={button.variant}\r\n color={button.color}\r\n flex={0.5}\r\n onClick={button.onClick}\r\n leftSection={button.icon ? (\r\n <FontAwesomeIcon\r\n icon={button.icon as IconProp}\r\n style={{\r\n fontSize: theme.fontSizes.xs,\r\n }}\r\n />\r\n ): undefined}\r\n >\r\n {button.text}\r\n </Button>\r\n ))}\r\n </Flex>\r\n </MotionFlex>\r\n )\r\n} \r\n\r\n","import { createContext, useContext, useRef } from \"react\";\r\nimport { create, StoreApi, useStore } from \"zustand\";\r\nimport { Modal } from \"./Modal\";\r\nimport { AnimatePresence } from \"framer-motion\";\r\nimport React from \"react\";\r\n\r\nexport type StoreModalProps = {\r\n children: React.ReactNode;\r\n title: string;\r\n icon?: React.ElementType;\r\n iconColor?: string;\r\n description?: string;\r\n badge?: { label: string; color: string };\r\n height?: string;\r\n width?: string;\r\n maxHeight?: string;\r\n zIndex?: number;\r\n clickOutside?: boolean;\r\n};\r\n\r\ntype ModalStore = {\r\n active: StoreModalProps | null;\r\n}\r\n\r\nexport const ModalContext = createContext<StoreApi<ModalStore> | null>(null);\r\n\r\nexport function useModal<T>(selector: (state: ModalStore) => T): T {\r\n const modal = useContext(ModalContext);\r\n if(!modal){\r\n throw new Error('useModal must be used within a ModalProvider');\r\n }\r\n return useStore(modal, selector);\r\n}\r\n\r\nfunction StoreModal() {\r\n const active = useModal((state) => state.active);\r\n const { hideModal } = useModalActions();\r\n\r\n return (\r\n <AnimatePresence>\r\n {active && (\r\n <Modal\r\n title={active.title}\r\n icon={active.icon}\r\n iconColor={active.iconColor}\r\n description={active.description}\r\n badge={active.badge}\r\n onClose={hideModal}\r\n width={active.width}\r\n maxHeight={active.maxHeight}\r\n height={active.height}\r\n zIndex={active.zIndex}\r\n clickOutside={active.clickOutside}\r\n >\r\n {active.children}\r\n </Modal>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ModalProvider({ children }: { children: React.ReactNode }){\r\n const storeRef = useRef<StoreApi<ModalStore>>(\r\n create<ModalStore>(() => ({\r\n active: null,\r\n }))\r\n );\r\n\r\n return (\r\n <ModalContext.Provider value={storeRef.current}>\r\n <StoreModal/>\r\n {children}\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport function useModalActions() {\r\n const modal = useContext(ModalContext);\r\n if (!modal) throw new Error(\"useModalActions must be used within a ModalProvider\");\r\n\r\n const showModal = (openModal: StoreModalProps) => {\r\n modal.setState({ active: openModal });\r\n };\r\n\r\n const hideModal = () => {\r\n modal.setState({ active: null });\r\n };\r\n\r\n return { showModal, hideModal };\r\n}\r\n\r\n","import { alpha, Flex, Portal, Text, TextInput, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { AlertTriangle, Trash2, X } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\n\r\nexport type ConfirmModalProps = {\r\n title: string;\r\n description: string;\r\n confirmLabel?: string;\r\n /** If provided, user must type this exact string to enable the confirm button */\r\n confirmText?: string;\r\n onConfirm: () => void;\r\n onClose: () => void;\r\n zIndex?: number;\r\n};\r\n\r\nexport function ConfirmModal({\r\n title,\r\n description,\r\n confirmLabel = \"Delete\",\r\n confirmText,\r\n onConfirm,\r\n onClose,\r\n zIndex = 200,\r\n}: ConfirmModalProps) {\r\n const theme = useMantineTheme();\r\n const [typed, setTyped] = useState(\"\");\r\n const canConfirm = !confirmText || typed === confirmText;\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n zIndex,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n background: \"rgba(0,0,0,0.7)\",\r\n }}\r\n onClick={onClose}\r\n >\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.95, y: 8 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: 8 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n onClick={(e) => e.stopPropagation()}\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.98),\r\n border: `0.1vh solid ${alpha(\"#ef4444\", 0.3)}`,\r\n borderRadius: theme.radius.sm,\r\n width: \"44vh\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Header */}\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n style={{\r\n borderBottom: `0.1vh solid ${alpha(\"#ef4444\", 0.2)}`,\r\n background: alpha(\"#ef4444\", 0.06),\r\n flexShrink: 0,\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"xs\">\r\n <AlertTriangle size=\"1.8vh\" color=\"#ef4444\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"sm\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"#ef4444\"\r\n >\r\n {title}\r\n </Text>\r\n </Flex>\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: theme.spacing.xxs,\r\n borderRadius: theme.radius.xs,\r\n display: \"flex\",\r\n }}\r\n >\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Body */}\r\n <Flex direction=\"column\" gap=\"sm\" p=\"sm\">\r\n <Text\r\n ff=\"Akrobat Regular\"\r\n size=\"xs\"\r\n c=\"rgba(255,255,255,0.65)\"\r\n style={{ lineHeight: 1.5 }}\r\n >\r\n {description}\r\n </Text>\r\n\r\n {confirmText && (\r\n <Flex direction=\"column\" gap=\"xxs\">\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.07em\"\r\n c=\"rgba(255,255,255,0.35)\"\r\n >\r\n Type{\" \"}\r\n <Text component=\"span\" ff=\"Akrobat Bold\" c=\"#ef4444\">\r\n {confirmText}\r\n </Text>{\" \"}\r\n to confirm\r\n </Text>\r\n <TextInput\r\n size=\"xs\"\r\n placeholder={confirmText}\r\n value={typed}\r\n onChange={(e) => setTyped(e.currentTarget.value)}\r\n styles={(t) => ({\r\n input: {\r\n backgroundColor: alpha(t.colors.dark[7], 0.5),\r\n border: `0.1vh solid ${alpha(\r\n typed === confirmText\r\n ? \"#ef4444\"\r\n : t.colors.dark[5],\r\n 0.5\r\n )}`,\r\n color: \"rgba(255,255,255,0.85)\",\r\n fontFamily: \"Akrobat Regular\",\r\n },\r\n })}\r\n autoFocus\r\n />\r\n </Flex>\r\n )}\r\n </Flex>\r\n\r\n {/* Footer */}\r\n <Flex\r\n justify=\"flex-end\"\r\n gap=\"xs\"\r\n px=\"sm\"\r\n py=\"sm\"\r\n style={{\r\n borderTop: `0.1vh solid ${theme.colors.dark[7]}`,\r\n flexShrink: 0,\r\n }}\r\n >\r\n <motion.button\r\n onClick={onClose}\r\n whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{\r\n background: \"transparent\",\r\n border: `0.1vh solid ${theme.colors.dark[6]}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.5vh 1vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n }}\r\n >\r\n <X size=\"1.4vh\" color=\"rgba(255,255,255,0.4)\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"rgba(255,255,255,0.4)\"\r\n >\r\n Cancel\r\n </Text>\r\n </motion.button>\r\n\r\n <motion.button\r\n onClick={() => {\r\n if (canConfirm) {\r\n onConfirm();\r\n onClose();\r\n }\r\n }}\r\n whileHover={\r\n canConfirm\r\n ? {\r\n background: alpha(\"#ef4444\", 0.22),\r\n borderColor: alpha(\"#ef4444\", 0.6),\r\n }\r\n : undefined\r\n }\r\n whileTap={canConfirm ? { scale: 0.97 } : undefined}\r\n style={{\r\n background: alpha(\"#ef4444\", canConfirm ? 0.14 : 0.05),\r\n border: `0.1vh solid ${alpha(\r\n \"#ef4444\",\r\n canConfirm ? 0.45 : 0.15\r\n )}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.5vh 1vh\",\r\n cursor: canConfirm ? \"pointer\" : \"not-allowed\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n opacity: canConfirm ? 1 : 0.45,\r\n transition: \"opacity 0.15s\",\r\n }}\r\n >\r\n <Trash2 size=\"1.4vh\" color=\"#ef4444\" />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"#ef4444\"\r\n >\r\n {confirmLabel}\r\n </Text>\r\n </motion.button>\r\n </Flex>\r\n </motion.div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n}\r\n","// Yellow ⚠ warning banner shown at the top of any scriptConfig admin panel\r\n// when one or more configured items aren't registered in the player's\r\n// inventory items table.\r\n//\r\n// Driven by dirk_lib's `<scriptName>:getMissingItems` callback (server-side\r\n// audit walks the schema's x-installItem / x-installItemList annotations,\r\n// cross-references `lib.inventory.item(name)`, and returns the missing names\r\n// + ready-to-paste install snippets per format).\r\n//\r\n// Auto-mounted by ConfigPanel above its tab AnimatePresence so it survives\r\n// tab switches without remounting. Consumers can suppress it by passing\r\n// `suppressMissingItemsBanner` to ConfigPanel.\r\n//\r\n// To use this in another consumer: nothing to do. ConfigPanel mounts it.\r\n// Just annotate the consumer's schema.json with x-installItem /\r\n// x-installItemList on item-name fields, and dirk_lib does the rest.\r\n\r\nimport { alpha, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { AlertTriangle, ChevronDown, Check, Copy, RefreshCw } from \"lucide-react\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { create } from \"zustand\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\n\r\ntype MissingItem = {\r\n name: string;\r\n label?: string;\r\n weight?: number;\r\n description?: string;\r\n};\r\n\r\ntype AuditPayload = {\r\n missing: MissingItem[];\r\n snippets: { ox: string; qb: string; esx: string };\r\n};\r\n\r\ntype AuditResponse = {\r\n success: boolean;\r\n _error?: string;\r\n data?: AuditPayload;\r\n};\r\n\r\ntype TabId = \"ox\" | \"qb\" | \"esx\";\r\n\r\nconst TABS: { id: TabId; label: string }[] = [\r\n { id: \"ox\", label: \"ox_inventory\" },\r\n { id: \"qb\", label: \"qb-inventory\" },\r\n { id: \"esx\", label: \"ESX legacy SQL\" },\r\n];\r\n\r\n// Module-level audit store. Persists across component re-mounts (ConfigPanel\r\n// keys its tab content by activeTab, so each tab switch unmounts + remounts\r\n// children). Stored data survives, fetch fires once per panel session.\r\ntype AuditStore = {\r\n data: AuditPayload | null;\r\n loaded: boolean;\r\n inFlight: boolean;\r\n refresh: () => Promise<void>;\r\n};\r\n\r\nexport const useMissingItemsAudit = create<AuditStore>((set, get) => ({\r\n data: null,\r\n loaded: false,\r\n inFlight: false,\r\n refresh: async () => {\r\n if (get().inFlight) return;\r\n set({ inFlight: true });\r\n try {\r\n const res = await fetchNui<AuditResponse>(\"GET_MISSING_ITEMS\", undefined, {\r\n success: true,\r\n data: { missing: [], snippets: { ox: \"\", qb: \"\", esx: \"\" } },\r\n });\r\n if (res?.success && res.data) {\r\n set({ data: res.data, loaded: true });\r\n } else {\r\n set({ loaded: true });\r\n }\r\n } catch {\r\n set({ loaded: true });\r\n } finally {\r\n set({ inFlight: false });\r\n }\r\n },\r\n}));\r\n\r\nexport function MissingItemsBanner() {\r\n const theme = useMantineTheme();\r\n const audit = useMissingItemsAudit((s) => s.data);\r\n const loaded = useMissingItemsAudit((s) => s.loaded);\r\n const inFlight = useMissingItemsAudit((s) => s.inFlight);\r\n const refresh = useMissingItemsAudit((s) => s.refresh);\r\n const [expanded, setExpanded] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>(\"ox\");\r\n const [hoveredTab, setHoveredTab] = useState<TabId | null>(null);\r\n const [copied, setCopied] = useState<TabId | null>(null);\r\n\r\n // First fetch — only when not yet loaded. Re-mount across tab switches\r\n // re-fires this useEffect but the `loaded` guard blocks the second hit.\r\n useEffect(() => {\r\n if (!loaded) refresh();\r\n }, [loaded, refresh]);\r\n\r\n const handleCopy = useCallback((tab: TabId) => {\r\n if (!audit) return;\r\n const text = audit.snippets[tab] ?? \"\";\r\n navigator.clipboard.writeText(text).then(() => {\r\n setCopied(tab);\r\n setTimeout(() => setCopied((c) => (c === tab ? null : c)), 1500);\r\n }).catch(() => {});\r\n }, [audit]);\r\n\r\n const handleRefresh = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n refresh();\r\n }, [refresh]);\r\n\r\n if (!audit || audit.missing.length === 0) return null;\r\n\r\n const warnColor = \"#f59e0b\"; // amber\r\n const names = audit.missing.map((m) => m.name);\r\n\r\n return (\r\n <div\r\n style={{\r\n background: alpha(warnColor, 0.06),\r\n border: `0.1vh solid ${alpha(warnColor, 0.35)}`,\r\n borderLeft: `0.3vh solid ${warnColor}`,\r\n borderRadius: theme.radius.xs,\r\n margin: \"0.6vh 1vh\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Summary row */}\r\n <Flex align=\"center\" gap=\"0.8vh\" p=\"0.8vh 1vh\" style={{ cursor: \"pointer\" }} onClick={() => setExpanded((e) => !e)}>\r\n <AlertTriangle size=\"1.8vh\" color={warnColor} strokeWidth={2.5} />\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0 }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.07em\" c={warnColor}>\r\n {audit.missing.length === 1\r\n ? \"1 item missing from your inventory\"\r\n : `${audit.missing.length} items missing from your inventory`}\r\n </Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.5)\" lineClamp={1} style={{ fontFamily: \"monospace\" }}>\r\n {names.join(\", \")}\r\n </Text>\r\n </Flex>\r\n {/* Refresh button — re-runs the audit. Bounded: server callback, no\r\n event listener loops. */}\r\n <button\r\n onClick={handleRefresh}\r\n disabled={inFlight}\r\n style={{\r\n background: \"transparent\",\r\n border: \"none\",\r\n padding: \"0.3vh\",\r\n cursor: inFlight ? \"wait\" : \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n opacity: inFlight ? 0.4 : 0.7,\r\n }}\r\n title=\"Re-check\"\r\n >\r\n <motion.span\r\n animate={{ rotate: inFlight ? 360 : 0 }}\r\n transition={inFlight ? { duration: 1, repeat: Infinity, ease: \"linear\" } : { duration: 0 }}\r\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n >\r\n <RefreshCw size=\"1.5vh\" color={alpha(warnColor, 0.7)} />\r\n </motion.span>\r\n </button>\r\n <motion.div\r\n animate={{ rotate: expanded ? 180 : 0 }}\r\n transition={{ duration: 0.18 }}\r\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n >\r\n <ChevronDown size=\"1.8vh\" color={alpha(warnColor, 0.7)} />\r\n </motion.div>\r\n </Flex>\r\n\r\n {/* Expandable code view */}\r\n <AnimatePresence initial={false}>\r\n {expanded && (\r\n <motion.div\r\n key=\"expanded\"\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.18, ease: \"easeOut\" }}\r\n style={{ overflow: \"hidden\", borderTop: `0.1vh solid ${alpha(warnColor, 0.18)}` }}\r\n >\r\n {/* Tab strip — plain buttons. Framer-motion's whileHover/whileTap\r\n caused two glitches we don't need: a shrink-spring on click\r\n and stuck hover-tint on the previously-active tab until you\r\n hover it again. CSS-driven hover state is sync'd with React\r\n state cleanly. */}\r\n <Flex gap=\"0\" style={{ borderBottom: `0.1vh solid ${alpha(warnColor, 0.18)}` }}>\r\n {TABS.map((tab) => {\r\n const active = tab.id === activeTab;\r\n const hovered = hoveredTab === tab.id;\r\n let bg: string = \"transparent\";\r\n if (active) bg = alpha(warnColor, 0.12);\r\n else if (hovered) bg = alpha(warnColor, 0.08);\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={(e) => { e.stopPropagation(); setActiveTab(tab.id); }}\r\n onMouseEnter={() => setHoveredTab(tab.id)}\r\n onMouseLeave={() => setHoveredTab((h) => (h === tab.id ? null : h))}\r\n style={{\r\n flex: 1,\r\n background: bg,\r\n border: \"none\",\r\n borderBottom: active ? `0.2vh solid ${warnColor}` : \"0.2vh solid transparent\",\r\n padding: \"0.3vh 1vh\",\r\n cursor: active ? \"default\" : \"pointer\",\r\n color: active ? warnColor : \"rgba(255,255,255,0.5)\",\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"var(--mantine-font-size-xxs)\",\r\n letterSpacing: \"0.07em\",\r\n textTransform: \"uppercase\",\r\n transition: \"background 0.12s\",\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n );\r\n })}\r\n </Flex>\r\n\r\n <CodeView\r\n code={audit.snippets[activeTab] ?? \"\"}\r\n copied={copied === activeTab}\r\n onCopy={(e) => { e.stopPropagation(); handleCopy(activeTab); }}\r\n warnColor={warnColor}\r\n />\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nfunction CodeView({\r\n code,\r\n copied,\r\n onCopy,\r\n warnColor,\r\n}: {\r\n code: string;\r\n copied: boolean;\r\n onCopy: (e: React.MouseEvent) => void;\r\n warnColor: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n const [hovered, setHovered] = useState(false);\r\n const lines = code === \"\" ? [\"\"] : code.split(\"\\n\");\r\n const lineNumWidth = String(lines.length).length;\r\n\r\n const copyBg = copied\r\n ? alpha(\"#22c55e\", 0.15)\r\n : hovered\r\n ? alpha(warnColor, 0.18)\r\n : alpha(warnColor, 0.1);\r\n\r\n return (\r\n <div style={{ position: \"relative\" }}>\r\n <button\r\n onClick={onCopy}\r\n onMouseEnter={() => setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n style={{\r\n position: \"absolute\",\r\n top: \"0.6vh\",\r\n right: \"0.8vh\",\r\n zIndex: 2,\r\n background: copyBg,\r\n border: `0.1vh solid ${alpha(copied ? \"#22c55e\" : warnColor, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.4vh 0.7vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.4vh\",\r\n transition: \"background 0.12s\",\r\n }}\r\n >\r\n {copied\r\n ? <Check size=\"1.4vh\" color=\"#22c55e\" />\r\n : <Copy size=\"1.4vh\" color={warnColor} />}\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={copied ? \"#22c55e\" : warnColor}>\r\n {copied ? \"Copied\" : \"Copy\"}\r\n </Text>\r\n </button>\r\n\r\n <div style={{\r\n background: alpha(theme.colors.dark[9], 0.6),\r\n maxHeight: \"40vh\",\r\n overflowY: \"auto\",\r\n overflowX: \"auto\",\r\n padding: \"0.6vh 0\",\r\n }}>\r\n <table style={{ borderCollapse: \"collapse\", width: \"100%\", fontFamily: \"monospace\", fontSize: \"1.2vh\", lineHeight: 1.5 }}>\r\n <tbody>\r\n {lines.map((line, i) => (\r\n <tr key={i}>\r\n <td style={{\r\n width: `${lineNumWidth + 2}ch`,\r\n textAlign: \"right\",\r\n padding: \"0 0.8vh 0 1vh\",\r\n color: \"rgba(255,255,255,0.25)\",\r\n userSelect: \"none\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"top\",\r\n }}>{i + 1}</td>\r\n <td style={{\r\n padding: \"0 1vh\",\r\n color: \"rgba(255,255,255,0.85)\",\r\n whiteSpace: \"pre\",\r\n verticalAlign: \"top\",\r\n }}>{line || \"\"}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport React, { createContext, useContext, useMemo, useRef } from \"react\";\r\nimport { createStore, StoreApi, useStore } from \"zustand\";\r\n\r\n/* ======================================================\r\n Type Utilities\r\n====================================================== */\r\n\r\ntype PathValue<T, P extends string> = P extends keyof T\r\n ? T[P]\r\n : P extends `${infer K}.${infer R}`\r\n ? K extends keyof T\r\n ? PathValue<T[K], R>\r\n : never\r\n : never;\r\n\r\ntype Paths<T> = T extends object\r\n ? {\r\n [K in keyof T]: K extends string\r\n ? T[K] extends object\r\n ? T[K] extends any[] | Date | Function\r\n ? K\r\n : K | `${K}.${Paths<T[K]>}`\r\n : K\r\n : never;\r\n }[keyof T]\r\n : never;\r\n\r\ntype LoosePaths<T> = Paths<T> | (string & {});\r\n\r\n/* ======================================================\r\n Utilities\r\n====================================================== */\r\n\r\nfunction getNested(obj: any, path: string): any {\r\n return path.split(\".\").reduce((acc, key) => (acc ? acc[key] : undefined), obj);\r\n}\r\n\r\nfunction setNested(obj: any, path: string, value: any): any {\r\n const keys = path.split(\".\");\r\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\r\n let current = root;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n const nextKey = keys[i + 1];\r\n const isIndex = !isNaN(Number(nextKey));\r\n\r\n const existing = current[key];\r\n\r\n current[key] =\r\n existing != null\r\n ? Array.isArray(existing)\r\n ? [...existing]\r\n : { ...existing }\r\n : isIndex\r\n ? []\r\n : {};\r\n\r\n current = current[key];\r\n }\r\n\r\n current[keys[keys.length - 1]] = value;\r\n return root;\r\n}\r\n\r\nfunction deleteNested(obj: any, path: string): any {\r\n const keys = path.split(\".\");\r\n const newObj = { ...obj };\r\n let current = newObj;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!current[key]) return obj;\r\n current[key] = { ...current[key] };\r\n current = current[key];\r\n }\r\n\r\n delete current[keys[keys.length - 1]];\r\n return newObj;\r\n}\r\n\r\nfunction isPlainObject(value: any): value is Record<string, any> {\r\n return (\r\n value !== null &&\r\n typeof value === \"object\" &&\r\n !Array.isArray(value) &&\r\n !(value instanceof Date)\r\n );\r\n}\r\n\r\nfunction collectChangedPaths(values: any, initial: any, prefix = \"\"): string[] {\r\n if (Object.is(values, initial)) return [];\r\n\r\n const valuesIsObj = isPlainObject(values);\r\n const initialIsObj = isPlainObject(initial);\r\n const valuesIsArr = Array.isArray(values);\r\n const initialIsArr = Array.isArray(initial);\r\n\r\n if (valuesIsArr || initialIsArr) {\r\n const maxLen = Math.max(values?.length ?? 0, initial?.length ?? 0);\r\n const fields: string[] = [];\r\n for (let i = 0; i < maxLen; i++) {\r\n const nextPrefix = prefix ? `${prefix}.${i}` : `${i}`;\r\n fields.push(...collectChangedPaths(values?.[i], initial?.[i], nextPrefix));\r\n }\r\n return fields;\r\n }\r\n\r\n if (valuesIsObj || initialIsObj) {\r\n const keys = new Set([\r\n ...Object.keys(values ?? {}),\r\n ...Object.keys(initial ?? {}),\r\n ]);\r\n const fields: string[] = [];\r\n for (const key of keys) {\r\n const nextPrefix = prefix ? `${prefix}.${key}` : key;\r\n fields.push(...collectChangedPaths(values?.[key], initial?.[key], nextPrefix));\r\n }\r\n return fields;\r\n }\r\n\r\n return prefix ? [prefix] : [];\r\n}\r\n\r\nfunction computeChangedState<T>(\r\n values: Partial<T>,\r\n initialVals: Partial<T>\r\n): { fields: string[]; partial: Partial<T> } {\r\n const fields = collectChangedPaths(values, initialVals);\r\n let partial: Partial<T> = {};\r\n\r\n for (const path of fields) {\r\n partial = setNested(partial, path, getNested(values, path));\r\n }\r\n\r\n return { fields, partial };\r\n}\r\n\r\nfunction flattenRules(\r\n rules: any,\r\n prefix = \"\"\r\n): Record<string, ValidatorFn> {\r\n const result: Record<string, ValidatorFn> = {};\r\n\r\n for (const key in rules) {\r\n const fullPath = prefix ? `${prefix}.${key}` : key;\r\n const val = rules[key];\r\n\r\n if (typeof val === \"function\") result[fullPath] = val;\r\n else if (typeof val === \"object\")\r\n Object.assign(result, flattenRules(val, fullPath));\r\n }\r\n\r\n return result;\r\n}\r\n\r\nasync function runRule(\r\n rule: ValidatorFn,\r\n value: any,\r\n values: any\r\n): Promise<string | null> {\r\n const result = rule(value, values);\r\n return result instanceof Promise ? await result : result;\r\n}\r\n\r\n/* ======================================================\r\n Types\r\n====================================================== */\r\n\r\nexport type ValidatorFn<T = any> =\r\n | ((value: any, values: Partial<T>) => string | null)\r\n | ((value: any, values: Partial<T>) => Promise<string | null>);\r\n\r\nexport type ValidationRules<T> = {\r\n [K in keyof T]?: T[K] extends object\r\n ? ValidationRules<T[K]>\r\n : ValidatorFn<T>;\r\n};\r\n\r\nexport type FormState<T> = {\r\n values: Partial<T>;\r\n initialValues: Partial<T>;\r\n errors: Record<string, string>;\r\n\r\n partialChanged: Partial<T>;\r\n\r\n getInputProps: (path: string) => {\r\n value: any;\r\n error?: string;\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n };\r\n\r\n setValue: (path: string, value: any, options?: { validate?: boolean }) => void;\r\n setInitialValues: (newInitialValues: Partial<T>) => void;\r\n\r\n setError: (path: string, message: string) => void;\r\n clearError: (path: string) => void;\r\n\r\n validate: () => Promise<boolean>;\r\n validateField: (path: string) => Promise<boolean>;\r\n\r\n reset: () => void;\r\n reinitialize: (newValues: Partial<T>) => void;\r\n\r\n back: () => void;\r\n forward: () => void;\r\n canBack: boolean;\r\n canForward: boolean;\r\n\r\n changedFields: string[];\r\n changedCount: number;\r\n resetChangeCount: () => void;\r\n\r\n onSubmit?: (form: FormState<T>) => void;\r\n submit: () => Promise<void>;\r\n};\r\n\r\n/* ======================================================\r\n Store\r\n====================================================== */\r\n\r\nexport function createFormStore<T>(\r\n initialValues: Partial<T>,\r\n validationRules?: ValidationRules<T>,\r\n onSubmit?: (form: FormState<T>) => void\r\n) {\r\n const flatRules = validationRules ? flattenRules(validationRules) : {};\r\n\r\n const history: Partial<T>[] = [];\r\n const future: Partial<T>[] = [];\r\n const changed = new Set<string>();\r\n\r\n return createStore<FormState<T>>((set, get) => ({\r\n initialValues,\r\n values: initialValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n onSubmit,\r\n\r\n submit: async () => {\r\n const state = get();\r\n const isValid = await state.validate();\r\n if (isValid && state.onSubmit) {\r\n state.onSubmit(get());\r\n }\r\n },\r\n\r\n getInputProps: (path: string) => {\r\n return {\r\n value: getNested(get().values, path) ?? \"\",\r\n error: get().errors[path],\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\r\n get().setValue(path, e.target.value, { validate: true });\r\n },\r\n };\r\n },\r\n\r\n resetChangeCount: () => {\r\n changed.clear();\r\n set({ changedFields: [], changedCount: 0, partialChanged: {} });\r\n },\r\n\r\n setInitialValues: (newInitialValues) =>\r\n set({ initialValues: newInitialValues }),\r\n\r\n setValue: (path, value, options) => {\r\n const state = get();\r\n const currentValues = state.values;\r\n const newValues = setNested(currentValues, path, value);\r\n\r\n const oldValue = getNested(state.initialValues, path);\r\n const hasChanged = value !== oldValue;\r\n\r\n history.push(currentValues);\r\n future.length = 0;\r\n\r\n let newPartial = state.partialChanged;\r\n\r\n if (hasChanged) {\r\n changed.add(path);\r\n newPartial = setNested(newPartial, path, value);\r\n } else {\r\n changed.delete(path);\r\n newPartial = deleteNested(newPartial, path);\r\n }\r\n\r\n set({\r\n values: newValues,\r\n partialChanged: newPartial,\r\n canBack: history.length > 0,\r\n canForward: false,\r\n changedFields: Array.from(changed),\r\n changedCount: changed.size,\r\n });\r\n\r\n if (!options?.validate) return;\r\n\r\n const rule = flatRules[path];\r\n if (!rule) return;\r\n\r\n Promise.resolve(runRule(rule, value, newValues)).then((error) => {\r\n if (error)\r\n set((s) => ({ errors: setNested(s.errors, path, error) }));\r\n else\r\n set((s) => ({ errors: deleteNested(s.errors, path) }));\r\n });\r\n },\r\n\r\n setError: (path, message) =>\r\n set((s) => ({ errors: setNested(s.errors, path, message) })),\r\n\r\n clearError: (path) =>\r\n set((s) => ({ errors: deleteNested(s.errors, path) })),\r\n\r\n validateField: async (path) => {\r\n const state = get();\r\n const rule = flatRules[path];\r\n if (!rule) return true;\r\n\r\n const value = getNested(state.values, path);\r\n const error = await runRule(rule, value, state.values);\r\n\r\n if (error) {\r\n set((s) => ({ errors: setNested(s.errors, path, error) }));\r\n return false;\r\n }\r\n\r\n set((s) => ({ errors: deleteNested(s.errors, path) }));\r\n return true;\r\n },\r\n\r\n validate: async () => {\r\n const state = get();\r\n let isValid = true;\r\n let newErrors: Record<string, string> = {};\r\n\r\n for (const path in flatRules) {\r\n const rule = flatRules[path];\r\n const value = getNested(state.values, path);\r\n const error = await runRule(rule, value, state.values);\r\n\r\n if (error) {\r\n isValid = false;\r\n newErrors = setNested(newErrors, path, error);\r\n }\r\n }\r\n\r\n set({ errors: newErrors });\r\n return isValid;\r\n },\r\n\r\n reset: () => {\r\n history.length = 0;\r\n future.length = 0;\r\n changed.clear();\r\n\r\n set({\r\n values: get().initialValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n });\r\n },\r\n\r\n reinitialize: (newValues) => {\r\n history.length = 0;\r\n future.length = 0;\r\n changed.clear();\r\n\r\n set({\r\n values: newValues,\r\n initialValues: newValues,\r\n errors: {},\r\n partialChanged: {},\r\n canBack: false,\r\n canForward: false,\r\n changedFields: [],\r\n changedCount: 0,\r\n });\r\n },\r\n\r\n back: () => {\r\n if (!history.length) return;\r\n\r\n const prev = history.pop()!;\r\n future.push(get().values);\r\n\r\n const { fields, partial } = computeChangedState(prev, get().initialValues);\r\n\r\n set({\r\n values: prev,\r\n partialChanged: partial,\r\n canBack: history.length > 0,\r\n canForward: true,\r\n changedFields: fields,\r\n changedCount: fields.length,\r\n });\r\n },\r\n\r\n forward: () => {\r\n if (!future.length) return;\r\n\r\n const next = future.pop()!;\r\n history.push(get().values);\r\n\r\n const { fields, partial } = computeChangedState(next, get().initialValues);\r\n\r\n set({\r\n values: next,\r\n partialChanged: partial,\r\n canBack: true,\r\n canForward: future.length > 0,\r\n changedFields: fields,\r\n changedCount: fields.length,\r\n });\r\n },\r\n }));\r\n}\r\n\r\n/* ======================================================\r\n Context + Hook\r\n====================================================== */\r\n\r\nconst FormContext = createContext<StoreApi<FormState<any>> | null>(null);\r\n\r\nexport function FormProvider<T>({\r\n initialValues,\r\n validate,\r\n onSubmit,\r\n children,\r\n}: {\r\n initialValues: Partial<T>;\r\n validate?: ValidationRules<T>;\r\n onSubmit?: (form: FormState<T>) => void;\r\n children: React.ReactNode;\r\n}) {\r\n const storeRef = useRef(\r\n createFormStore<T>(initialValues, validate, onSubmit)\r\n );\r\n\r\n return (\r\n <FormContext.Provider value={storeRef.current}>\r\n {children}\r\n </FormContext.Provider>\r\n );\r\n}\r\n\r\nexport function useForm<T>() {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useForm must be used inside <FormProvider>\");\r\n }\r\n const state = useStore(store) as FormState<T>;\r\n\r\n const changedFields = useMemo(() => {\r\n return collectChangedPaths(state.values, state.initialValues);\r\n }, [state.values, state.initialValues]);\r\n\r\n return { ...state, changedFields, changedCount: changedFields.length } as FormState<T>;\r\n}\r\n\r\nexport function useFormField<T, P extends LoosePaths<T> = LoosePaths<T>>(\r\n path: P\r\n): P extends Paths<T> ? PathValue<T, P> | undefined : any {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormField must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => getNested(s.values, path));\r\n}\r\n\r\nexport function useFormFields<T, P extends LoosePaths<T> = LoosePaths<T>>(\r\n ...paths: P[]\r\n): { [K in P]: K extends Paths<T> ? PathValue<T, K> | undefined : any } {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormFields must be used inside <FormProvider>\");\r\n }\r\n \r\n return useStore(store, (s) => {\r\n const result = {} as { [K in P]: K extends Paths<T> ? PathValue<T, K> | undefined : any };\r\n for (const path of paths) {\r\n result[path] = getNested(s.values, path);\r\n }\r\n return result;\r\n });\r\n}\r\n\r\nexport function useFormError(path: string) {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormError must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => s.errors[path]);\r\n}\r\n\r\nexport function useFormErrors(...paths: string[]) {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormErrors must be used inside <FormProvider>\");\r\n }\r\n return useStore(store, (s) => {\r\n const result: Record<string, string | undefined> = {};\r\n for (const path of paths) {\r\n result[path] = s.errors[path];\r\n }\r\n return result;\r\n });\r\n}\r\n\r\nexport function useFormActions<T>() {\r\n const store = useContext(FormContext);\r\n if (!store) {\r\n throw new Error(\"useFormActions must be used inside <FormProvider>\");\r\n }\r\n return store.getState() as Pick<\r\n FormState<T>,\r\n | \"setValue\"\r\n | \"setError\"\r\n | \"clearError\"\r\n | \"validate\"\r\n | \"validateField\"\r\n | \"reset\"\r\n | \"reinitialize\"\r\n | \"back\"\r\n | \"forward\"\r\n | \"canBack\"\r\n | \"canForward\"\r\n | \"submit\"\r\n >;\r\n}","// Drop-in replacement for React's useState that survives unmount/remount.\r\n//\r\n// Why: ConfigPanel returns null when closed, which tears down the entire\r\n// React tree under it. Local component state (active tab, current edit\r\n// target, search text, view-mode toggles, etc.) is lost. Admins who close\r\n// and reopen the panel land back at the default state every time.\r\n//\r\n// useAdminState writes to a module-scope store keyed by an arbitrary\r\n// string. The store survives close/reopen because the NUI iframe stays\r\n// alive across SetNuiFocus toggles — only React unmounts.\r\n//\r\n// Reset scope: keys live for the lifetime of the iframe (= until the\r\n// resource restarts or the player reloads the NUI). That's exactly what\r\n// admins want — \"remember where I was in this session, but don't carry\r\n// over after a restart\".\r\n//\r\n// Usage:\r\n// const [activeTab, setActiveTab] = useAdminState(\"labs:viewMode\", \"list\");\r\n//\r\n// Key collisions: state is scoped per dirk-cfx-react module-scope, which\r\n// is per-iframe — so two different consumer resources can both use the key\r\n// \"viewMode\" without colliding. Within a single consumer, keep keys unique\r\n// (prefix with section name: \"labs:viewMode\", \"shells:editingId\" etc).\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\ntype Listener = () => void;\r\n\r\nconst store: Map<string, unknown> = new Map();\r\nconst listeners: Map<string, Set<Listener>> = new Map();\r\n\r\nfunction notify(key: string) {\r\n const ls = listeners.get(key);\r\n if (!ls) return;\r\n ls.forEach((fn) => fn());\r\n}\r\n\r\n/**\r\n * Like `useState` but the value persists in a module-scope store across\r\n * unmount/remount cycles. Identical API otherwise.\r\n *\r\n * @param key Stable string identifying this slot. Must be unique per\r\n * intended slot within the consumer's iframe.\r\n * @param initial Initial value if no value has been stored under `key` yet.\r\n */\r\nexport function useAdminState<T>(key: string, initial: T): [T, (v: T | ((prev: T) => T)) => void] {\r\n // useState here is just for triggering re-renders on cross-component\r\n // updates. The real value lives in the module-scope `store`.\r\n const [, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n const set = listeners.get(key) ?? new Set<Listener>();\r\n listeners.set(key, set);\r\n const handler = () => setTick((t) => t + 1);\r\n set.add(handler);\r\n return () => {\r\n set.delete(handler);\r\n if (set.size === 0) listeners.delete(key);\r\n };\r\n }, [key]);\r\n\r\n const value = (store.has(key) ? store.get(key) : initial) as T;\r\n\r\n const setValue = (v: T | ((prev: T) => T)) => {\r\n const next = typeof v === \"function\" ? (v as (p: T) => T)(value) : v;\r\n store.set(key, next);\r\n notify(key);\r\n };\r\n\r\n return [value, setValue];\r\n}\r\n\r\n/** Imperative clear — useful for \"reset everything\" admin actions. */\r\nexport function clearAdminState(key?: string) {\r\n if (key) {\r\n store.delete(key);\r\n notify(key);\r\n } else {\r\n const keys = Array.from(store.keys());\r\n store.clear();\r\n keys.forEach(notify);\r\n }\r\n}\r\n","import { fetchNui } from \"@/utils\";\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { create } from \"zustand\";\r\n\r\ntype ScriptConfigUpdateMeta<T> = {\r\n client_version?: number;\r\n latestVersion?: number;\r\n latestData?: Partial<T>;\r\n changed_paths?: Array<{ path: string; old: unknown; new: unknown }>;\r\n lastEditor?: { source?: number; name?: string; identifier?: string };\r\n};\r\n\r\nexport type ScriptConfigHistoryChange = {\r\n path: string;\r\n old: unknown;\r\n new: unknown;\r\n};\r\n\r\nexport type ScriptConfigHistoryEntry = {\r\n at_unix: number;\r\n at_utc: string;\r\n script: string;\r\n admin?: { source?: number; name?: string; identifier?: string };\r\n expected_version?: number;\r\n applied_version?: number;\r\n changes: ScriptConfigHistoryChange[];\r\n};\r\n\r\nexport type ScriptConfigHistoryRequest = {\r\n offset?: number;\r\n limit?: number;\r\n query?: string;\r\n path?: string;\r\n admin?: string;\r\n fromUnix?: number;\r\n toUnix?: number;\r\n};\r\n\r\nexport type ScriptConfigHistoryResponse = {\r\n success: boolean;\r\n _error?: string;\r\n data?: {\r\n items: ScriptConfigHistoryEntry[];\r\n total: number;\r\n limit: number;\r\n offset: number;\r\n nextOffset?: number;\r\n };\r\n};\r\n\r\ntype NuiResponse<T> = {\r\n success: boolean;\r\n message?: string;\r\n _error?: string;\r\n meta?: ScriptConfigUpdateMeta<T>;\r\n};\r\n\r\n// Derive the set of changed TOP-LEVEL section keys from a useForm changed-set\r\n// of dotted paths (e.g. [\"stores.0.name\", \"basic.weightUnit\"] → {\"stores\",\"basic\"}).\r\n// CONSERVATIVE by design: any changed path under section X marks the WHOLE\r\n// section X as changed, so the caller sends its full current value. This is what\r\n// lets deletions inside a section (a removed array element) propagate, because\r\n// the server/client overwrite the section wholesale rather than deep-merging.\r\nfunction changedTopLevelSections(changedFields?: readonly string[]): string[] {\r\n if (!changedFields || changedFields.length === 0) return [];\r\n const sections = new Set<string>();\r\n for (const path of changedFields) {\r\n if (typeof path !== \"string\" || path.length === 0) continue;\r\n const dot = path.indexOf(\".\");\r\n sections.add(dot === -1 ? path : path.slice(0, dot));\r\n }\r\n return Array.from(sections);\r\n}\r\n\r\n// ── Singleton registry ────────────────────────────────────────────────────────\r\n\r\nexport interface ScriptConfigInstance<T = any> {\r\n store: { getState: () => T; setState: (partial: Partial<T> | ((prev: T) => T)) => void };\r\n updateConfig: (newConfig: Partial<T>, changedFields?: readonly string[]) => Promise<NuiResponse<T>>;\r\n resetConfig: () => Promise<{ success: boolean; _error?: string }>;\r\n getHistory: (params?: ScriptConfigHistoryRequest) => Promise<ScriptConfigHistoryResponse>;\r\n fetchConfig: () => Promise<T | null>;\r\n}\r\n\r\nlet _instance: ScriptConfigInstance | null = null;\r\n\r\nexport function getScriptConfigInstance<T = any>(): ScriptConfigInstance<T> {\r\n if (!_instance) throw new Error(\"[dirk-cfx-react] createScriptConfig must be called before using ConfigPanel\");\r\n return _instance as ScriptConfigInstance<T>;\r\n}\r\n\r\nexport function createScriptConfig<T>(defaultValue: T) {\r\n const store = create<T>(() => defaultValue);\r\n let clientVersion = 0;\r\n\r\n const useScriptConfigHooks = () => {\r\n useNuiEvent<{ config?: Partial<T>; clientVersion?: number; sectionReplace?: boolean }>(\r\n \"UPDATE_SCRIPT_CONFIG\",\r\n (data) => {\r\n if (!data) return;\r\n\r\n if (typeof data.clientVersion === \"number\") {\r\n clientVersion = data.clientVersion as number;\r\n }\r\n\r\n if (data.config && typeof data.config === \"object\") {\r\n // Both apply modes use the same top-level merge-by-replace:\r\n // - sectionReplace: `config` holds only the changed sections; spreading\r\n // them over `prev` wholesale-overwrites those keys and leaves every\r\n // other (unsent) section exactly as-is. We MUST NOT full-replace here\r\n // or the unsent sections would vanish from the UI.\r\n // - fullReplace / merge / initial: `config` holds the FULL config, so\r\n // the same spread effectively replaces every key.\r\n store.setState((prev) => ({ ...prev, ...(data.config as Partial<T>) }));\r\n }\r\n }\r\n );\r\n };\r\n\r\n const fetchScriptConfig = async (): Promise<T | null> => {\r\n try {\r\n const response = await fetchNui<{\r\n success: boolean;\r\n data?: { config: T; clientVersion: number };\r\n }>(\"GET_FULL_SCRIPT_CONFIG\");\r\n\r\n if (response?.success && response.data?.config) {\r\n store.setState(() => response.data!.config as T);\r\n if (typeof response.data.clientVersion === \"number\") {\r\n clientVersion = response.data.clientVersion;\r\n }\r\n return response.data.config;\r\n }\r\n } catch { /* fallback to current store state */ }\r\n return null;\r\n };\r\n\r\n // `changedFields` is the useForm tracked changed-set (dotted paths). When\r\n // supplied AND it resolves to ≥1 top-level section, we send a SECTION-DELTA:\r\n // only the changed sections, each as its WHOLE current value, with\r\n // sectionReplace:true. The server/client then overwrite those keys wholesale\r\n // (which is what lets deletions inside a section propagate). When omitted or\r\n // empty, we fall back to the legacy full-send (server defaults to\r\n // fullReplace=true when no `sectionReplace` flag is present).\r\n const updateScriptConfig = async (\r\n newConfig: Partial<T>,\r\n changedFields?: readonly string[]\r\n ): Promise<NuiResponse<T>> => {\r\n store.setState((prev) => ({ ...prev, ...newConfig }));\r\n\r\n const sections = changedTopLevelSections(changedFields);\r\n\r\n let payload: { data: Partial<T>; expectedVersion: number; sectionReplace?: boolean };\r\n if (sections.length > 0) {\r\n // Section-delta: flat object keyed by top-level section name → whole\r\n // current section value (pulled from the just-applied store state so it\r\n // reflects the user's edits, including deletions).\r\n const current = store.getState() as Record<string, unknown>;\r\n const delta: Record<string, unknown> = {};\r\n for (const key of sections) delta[key] = current[key];\r\n payload = { data: delta as Partial<T>, expectedVersion: clientVersion, sectionReplace: true };\r\n } else {\r\n // No changed-set provided (or nothing resolved) but the user explicitly\r\n // saved → legacy full-send. No sectionReplace flag ⇒ server fullReplace.\r\n payload = { data: newConfig, expectedVersion: clientVersion };\r\n }\r\n\r\n const response = await fetchNui<NuiResponse<T>>(\"UPDATE_SCRIPT_CONFIG\", payload);\r\n\r\n if (response?.meta?.client_version != null) {\r\n clientVersion = response.meta.client_version as number;\r\n }\r\n\r\n if (response?.success === false && response?.meta?.latestData) {\r\n store.setState((prev) => ({ ...prev, ...(response.meta!.latestData as Partial<T>) }));\r\n }\r\n\r\n return response;\r\n };\r\n\r\n const getScriptConfigHistory = async (\r\n params: ScriptConfigHistoryRequest = {}\r\n ): Promise<ScriptConfigHistoryResponse> => {\r\n return fetchNui<ScriptConfigHistoryResponse>('GET_SCRIPT_CONFIG_HISTORY', params);\r\n };\r\n\r\n const resetConfig = async (): Promise<{ success: boolean; _error?: string }> => {\r\n const response = await fetchNui<{ success: boolean; _error?: string }>('RESET_SCRIPT_CONFIG');\r\n if (response?.success) {\r\n const fresh = await fetchScriptConfig();\r\n if (fresh) {\r\n store.setState(() => fresh);\r\n }\r\n }\r\n return response;\r\n };\r\n\r\n _instance = {\r\n store,\r\n updateConfig: updateScriptConfig,\r\n resetConfig,\r\n getHistory: getScriptConfigHistory,\r\n fetchConfig: fetchScriptConfig,\r\n };\r\n\r\n return {store, updateScriptConfig, resetConfig, getScriptConfigHistory, useScriptConfigHooks, fetchScriptConfig}\r\n}\r\n","// Shared store for \"in-world admin tools\" — flows where the React admin UI\r\n// releases NUI focus, lets the player do something in the game world, and\r\n// resolves a Promise when they confirm or cancel.\r\n//\r\n// Every tool (capture position, place object, etc.) plugs into the same\r\n// store so AdminOverlays can render at most one InstructionPanel at a time\r\n// and the tool's start() returns a typed Promise. Lua side fires the\r\n// matching SendNUIMessage('<TOOL_ID>_RESULT' / '<TOOL_ID>_CANCELLED'),\r\n// which AdminOverlays routes back to whichever tool is active.\r\nimport { create } from \"zustand\";\r\n\r\nexport type ActiveTool<Result = unknown> = {\r\n /** Tool id matching the SendNUIMessage event names from Lua. */\r\n id: string;\r\n /** Title shown in the InstructionPanel header. */\r\n title: string;\r\n /** Optional sub-text under the title. */\r\n hint?: string;\r\n /** Key bindings shown as labelled key caps. */\r\n keys?: { key: string; action: string }[];\r\n /** Resolve handler for the in-flight Promise. */\r\n resolve: (v: Result | null) => void;\r\n};\r\n\r\ntype AdminToolStore = {\r\n active: ActiveTool | null;\r\n /**\r\n * Begin a tool flow. Returns a Promise resolving to the tool's typed\r\n * result (or null on cancel / replacement). Replaces any currently-active\r\n * tool by cancelling it first — only one in-world prompt at a time.\r\n */\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) => Promise<Result | null>;\r\n /** Settle the currently-active tool with a value (called by SendNUIMessage handler). */\r\n resolveActive: (value: unknown) => void;\r\n /** Cancel the currently-active tool (called by SendNUIMessage handler or programmatic cancel). */\r\n cancelActive: () => void;\r\n};\r\n\r\nexport const useAdminToolStore = create<AdminToolStore>((set, get) => ({\r\n active: null,\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) =>\r\n new Promise<Result | null>((resolve) => {\r\n const prev = get().active;\r\n if (prev) prev.resolve(null); // bump the previous tool out\r\n set({ active: { ...spec, resolve: resolve as ActiveTool[\"resolve\"] } });\r\n }),\r\n resolveActive: (value) => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(value);\r\n set({ active: null });\r\n },\r\n cancelActive: () => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(null);\r\n set({ active: null });\r\n },\r\n}));\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/fonts.css';\r\nimport './styles/notify.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nlibrary.add(fas, far, fab);\r\n\r\nimport theme from \"@/theme\";\r\nimport { BackgroundImage, MantineColorShade, MantineColorsTuple, MantineProvider } from \"@mantine/core\";\r\nimport { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { fetchNui, isEnvBrowser } from \"@/utils\";\r\nimport { localeStore } from \"@/utils/locales\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { SettingsState, useSettings } from \"@/utils/useSettings\";\r\nimport { getScriptConfigInstance } from \"@/hooks/useScriptConfig\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { AdminOverlays } from \"@/components/AdminTools/AdminOverlays\";\r\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\r\n\r\n// Shared QueryClient for every consumer of <DirkProvider>. Hooks in this\r\n// library (usePlayers, ConfigPanel's history pagination, MissingItemsBanner\r\n// audit, etc.) all consume this so consumers don't need to wire their own\r\n// QueryClientProvider. Defaults match what ConfigPanel previously used in\r\n// its private QueryClient so the move doesn't change refetch cadence.\r\n//\r\n// Consumers that already wrap in their own outer QueryClientProvider (e.g.\r\n// dirk_fishing's App.tsx) still work — react-query picks the nearest\r\n// provider in the tree, and \"nearest\" here means this inner one. Anything\r\n// inside DirkProvider uses this client; anything outside uses the consumer's\r\n// outer one (if present).\r\nexport const dirkQueryClient = new QueryClient({\r\n defaultOptions: { queries: { staleTime: 30_000, gcTime: 5 * 60_000 } },\r\n});\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n overideResourceName?: string;\r\n themeOverride?: any;\r\n};\r\n\r\n// Shape DirkProvider looks for at `scriptConfig.theme` to detect a per-resource\r\n// theme override. Consumers opt in by adding a `theme` block to their schema.json\r\n// with these four fields — DirkProvider auto-detects and applies it. Resources\r\n// with no `theme` block (or `useOverride: false`) follow the global dirk_lib\r\n// theme as before. No bridge component, no extra wiring required from consumers.\r\ntype ScriptConfigThemeOverride = {\r\n useOverride?: boolean;\r\n primaryColor?: string;\r\n primaryShade?: number;\r\n customTheme?: MantineColorsTuple | string[];\r\n};\r\n\r\nexport function DirkProvider({ children, overideResourceName, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // Subscribe to locale changes so the entire tree re-renders when an admin\r\n // updates `language` via dirk_lib's scriptConfig — components calling\r\n // `locale(\"Foo\")` directly (no hook) get fresh strings on the next render.\r\n const _locales = localeStore((s) => s.locales);\r\n void _locales;\r\n\r\n // Per-resource theme override snapshot, read from `scriptConfig.theme` when\r\n // the consumer has a scriptConfig registered. Updated by the subscription\r\n // below; survives Mantine recomputes via useMemo deps.\r\n const [scTheme, setScTheme] = useState<ScriptConfigThemeOverride | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n useSettings.setState({\r\n overideResourceName,\r\n });\r\n }, [overideResourceName]);\r\n\r\n useEffect(() => {\r\n fetchNui('NUI_READY').catch(() => {});\r\n Promise.all([\r\n fetchNui<Partial<SettingsState>>('GET_SETTINGS'),\r\n fetchNui<{ version?: string }>('GET_RESOURCE_VERSION', undefined, { version: 'dev' }),\r\n ]).then(([data, resourceInfo]) => {\r\n useSettings.setState({\r\n ...data,\r\n resourceVersion: resourceInfo?.version || 'dev',\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n }, []);\r\n\r\n // Live updates: dirk_lib broadcasts UPDATE_DIRK_LIB_SETTINGS whenever an admin\r\n // changes appearance/localization via the scriptConfig UI. Merge the partial\r\n // patch into the settings store so theme / currency / branding update live\r\n // without a resource restart. Per-resource theme override is handled below\r\n // via the scriptConfig subscription — pushes here can flow through unchanged.\r\n useNuiEvent<Partial<SettingsState>>('UPDATE_DIRK_LIB_SETTINGS', (data) => {\r\n if (!data || typeof data !== 'object') return;\r\n useSettings.setState(data);\r\n });\r\n\r\n // ── Per-resource theme auto-detect ────────────────────────────────────────\r\n // If the consumer has called createScriptConfig() (i.e. has a registered\r\n // scriptConfig instance) AND their schema has a `theme` block with\r\n // `useOverride: true`, DirkProvider uses those theme values instead of\r\n // dirk_lib's global appearance. Consumers don't have to write any glue\r\n // code — they just add the `theme` block to schema.json and a Theme tab\r\n // (via ThemeOverrideSection) to their configurator. Everything else is\r\n // handled here.\r\n //\r\n // We also forward UPDATE_SCRIPT_CONFIG pushes into the store so this works\r\n // whether or not the consumer remembers to call useScriptConfigHooks().\r\n useNuiEvent<{ config?: Record<string, unknown>; clientVersion?: number }>(\r\n 'UPDATE_SCRIPT_CONFIG',\r\n (data) => {\r\n if (!data || !data.config || typeof data.config !== 'object') return;\r\n try {\r\n const inst = getScriptConfigInstance<Record<string, unknown>>();\r\n inst.store.setState((prev) => ({ ...prev, ...(data.config as Record<string, unknown>) }));\r\n } catch {\r\n // No scriptConfig instance registered — consumer doesn't use scriptConfig, ignore.\r\n }\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n let unsubscribe: (() => void) | undefined;\r\n try {\r\n const inst = getScriptConfigInstance<{ theme?: ScriptConfigThemeOverride }>();\r\n\r\n // Seed from whatever's already in the store (covers cases where the\r\n // store was hydrated before DirkProvider mounted, e.g. by an upstream\r\n // ConfigPanel open).\r\n setScTheme((inst.store.getState() as { theme?: ScriptConfigThemeOverride })?.theme ?? null);\r\n\r\n // Subscribe to store mutations so live edits / hydration completion\r\n // re-trigger the override application.\r\n const subscribable = inst.store as unknown as {\r\n subscribe?: (listener: (s: { theme?: ScriptConfigThemeOverride }) => void) => () => void;\r\n };\r\n if (typeof subscribable.subscribe === 'function') {\r\n unsubscribe = subscribable.subscribe((s) => {\r\n setScTheme(s?.theme ?? null);\r\n });\r\n }\r\n\r\n // Proactive hydration. The dirk_lib cold-start push that populates the\r\n // scriptConfig store is timing-sensitive (may fire before the NUI\r\n // iframe is ready). A single GET_FULL_SCRIPT_CONFIG round-trip on\r\n // mount removes that race entirely — the server callback blocks until\r\n // scriptConfig is hydrated, so the override block is guaranteed\r\n // populated before the first paint that depends on it.\r\n inst.fetchConfig?.().then((full) => {\r\n if (full && typeof full === 'object') {\r\n setScTheme((full as { theme?: ScriptConfigThemeOverride }).theme ?? null);\r\n }\r\n }).catch(() => {});\r\n } catch {\r\n // No scriptConfig instance — consumer doesn't use scriptConfig at all.\r\n // Fall through silently; global theme behaviour is unchanged.\r\n }\r\n return () => { unsubscribe?.(); };\r\n }, []);\r\n\r\n const overrideActive = scTheme?.useOverride === true;\r\n const effectivePrimaryColor = overrideActive ? (scTheme!.primaryColor ?? primaryColor) : primaryColor;\r\n const effectivePrimaryShade = overrideActive ? (scTheme!.primaryShade ?? primaryShade) : primaryShade;\r\n const effectiveCustomTheme = overrideActive\r\n ? ((scTheme!.customTheme as MantineColorsTuple | undefined) ?? customTheme)\r\n : customTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () => mergeMantineThemeSafe(\r\n { ...theme, primaryColor: effectivePrimaryColor, primaryShade: effectivePrimaryShade as MantineColorShade },\r\n effectiveCustomTheme,\r\n themeOverride\r\n ),\r\n [effectivePrimaryColor, effectivePrimaryShade, effectiveCustomTheme, themeOverride]\r\n );\r\n\r\n useEffect(() => {\r\n document.body.style.fontFamily =\r\n game === \"rdr3\"\r\n ? '\"Red Dead\", sans-serif'\r\n : '\"Akrobat Regular\", sans-serif';\r\n }, [game]);\r\n\r\n const content = isEnvBrowser() ? (\r\n <BackgroundImage\r\n w=\"100vw\"\r\n h=\"100vh\"\r\n src={game === \"fivem\"\r\n ? \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n >\r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n children\r\n );\r\n\r\n return (\r\n <QueryClientProvider client={dirkQueryClient}>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n <DirkErrorBoundary>\r\n {content}\r\n {/* Auto-mounted. Renders nothing unless an admin tool is active.\r\n Consumers never have to wire this up themselves — every admin\r\n tool flow that uses useAdminToolStore.begin() gets the\r\n bottom-right InstructionPanel + NUI message routing for free. */}\r\n <AdminOverlays />\r\n </DirkErrorBoundary>\r\n </MantineProvider>\r\n </QueryClientProvider>\r\n );\r\n}\r\n","import { alpha, Box, Flex, JsonInput, Loader, Text, TextInput, useMantineTheme } from \"@mantine/core\";\r\nimport { notifications } from \"@mantine/notifications\";\r\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\r\nimport { locale } from \"../utils/locales\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport {\r\n ArrowLeft, Check, ChevronDown, Code2, Filter, History, Redo2, RotateCcw,\r\n Save as SaveIcon, Search, Undo2, User, X, XCircle,\r\n} from \"lucide-react\";\r\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport type { UIEvent } from \"react\";\r\nimport { ConfirmModal } from \"./ConfirmModal\";\r\nimport { Modal } from \"./Modal\";\r\nimport { MissingItemsBanner, useMissingItemsAudit } from \"./MissingItemsBanner\";\r\nimport { MotionFlex } from \"./Motion\";\r\nimport { FormProvider, useForm, useFormActions } from \"../hooks/useForm\";\r\nimport { useAdminState } from \"../hooks/useAdminState\";\r\nimport { useSettings } from \"../utils/useSettings\";\r\nimport { dirkQueryClient } from \"../providers/DirkProvider\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\nimport { getScriptConfigInstance } from \"../hooks/useScriptConfig\";\r\nimport type {\r\n ScriptConfigHistoryEntry,\r\n ScriptConfigHistoryRequest,\r\n ScriptConfigHistoryResponse,\r\n} from \"../hooks/useScriptConfig\";\r\n\r\n// ── Types ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface NavItem {\r\n id: string;\r\n icon: React.ElementType;\r\n label: string;\r\n}\r\n\r\nexport interface ConfigPanelProps<T extends Record<string, any> = Record<string, any>> {\r\n navItems: readonly NavItem[];\r\n title: string;\r\n subtitle?: string;\r\n open: boolean;\r\n /** Defaults to fetchNui(\"CLOSE_ADMIN_SECTION\") */\r\n onClose?: () => void;\r\n children: (activeTab: string) => React.ReactNode;\r\n /** Default config for reset */\r\n defaultConfig: T;\r\n /** Zod schema for JSON validation (.safeParse) */\r\n schema?: { safeParse: (data: unknown) => { success: boolean; data?: T; error?: { issues: { path: PropertyKey[]; message: string }[] } } };\r\n /** Reset confirm typed text (e.g. \"dirk_fishing\") */\r\n resetConfirmText?: string;\r\n width?: string;\r\n height?: string;\r\n /** Skip the auto-mounted MissingItemsBanner. Default: false (banner shown).\r\n The banner self-hides when nothing is missing, so leaving it on costs\r\n nothing visually. */\r\n suppressMissingItemsBanner?: boolean;\r\n}\r\n\r\n// ── NavItem Button ────────────────────────────────────────────────────────────\r\n\r\nfunction NavItemButton({\r\n icon: Icon, label, active, onClick,\r\n}: {\r\n icon: React.ElementType;\r\n label: string;\r\n active: boolean;\r\n onClick: () => void;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n return (\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: active ? alpha(color, 0.15) : \"rgba(255,255,255,0.04)\" }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{\r\n width: \"100%\",\r\n background: active ? alpha(color, 0.12) : \"transparent\",\r\n border: \"none\",\r\n borderLeft: `0.2vh solid ${active ? color : \"transparent\"}`,\r\n borderRadius: `0 ${theme.radius.xs} ${theme.radius.xs} 0`,\r\n padding: \"0.7vh 1vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.7vh\",\r\n transition: \"border-color 0.15s, background 0.15s\",\r\n }}\r\n >\r\n <Icon color={active ? color : \"rgba(255,255,255,0.35)\"} />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.06em\" c={active ? color : \"rgba(255,255,255,0.35)\"}>\r\n {label}\r\n </Text>\r\n {active && (\r\n <motion.div\r\n layoutId=\"nav-active-dot\"\r\n style={{ marginLeft: \"auto\", width: \"0.4vh\", height: \"0.4vh\", borderRadius: \"50%\", background: color }}\r\n />\r\n )}\r\n </motion.button>\r\n );\r\n}\r\n\r\n// ── Config JSON Modal ─────────────────────────────────────────────────────────\r\n\r\nfunction ConfigJsonModal<T extends Record<string, any>>({\r\n onClose, schema,\r\n}: {\r\n onClose: () => void;\r\n schema?: ConfigPanelProps<T>[\"schema\"];\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const form = useForm<T>();\r\n const [json, setJson] = useState(() => JSON.stringify(form.values, null, 2));\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const handleSave = () => {\r\n try {\r\n const parsed = JSON.parse(json);\r\n if (schema) {\r\n const result = schema.safeParse(parsed);\r\n if (!result.success) {\r\n setError(result.error!.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"\\n\"));\r\n return;\r\n }\r\n const current = form.values as T;\r\n (Object.keys(result.data!) as (keyof T)[]).forEach((key) => {\r\n if (JSON.stringify(result.data![key]) !== JSON.stringify(current[key])) {\r\n form.setValue(key as string, result.data![key]);\r\n }\r\n });\r\n } else {\r\n const current = form.values as T;\r\n (Object.keys(parsed) as (keyof T)[]).forEach((key) => {\r\n if (JSON.stringify(parsed[key]) !== JSON.stringify(current[key])) {\r\n form.setValue(key as string, parsed[key]);\r\n }\r\n });\r\n }\r\n onClose();\r\n } catch (e: any) {\r\n setError(e.message);\r\n }\r\n };\r\n\r\n return (\r\n <Modal title={locale(\"cfgpanel_json_title\")} icon={Code2} iconColor={color} onClose={onClose} width=\"60vh\" maxHeight=\"80vh\" zIndex={200}>\r\n <Box flex={1} p=\"0.8vh\" style={{ overflowY: \"auto\" }}>\r\n <JsonInput\r\n value={json}\r\n spellCheck={false}\r\n onChange={setJson}\r\n rows={22}\r\n formatOnBlur\r\n validationError=\"Invalid JSON\"\r\n styles={() => ({\r\n input: { fontFamily: \"monospace\", fontSize: \"1.3vh\", lineHeight: 1.6, resize: \"none\" },\r\n })}\r\n />\r\n {error && <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"#ef4444\" mt=\"xxs\">{error}</Text>}\r\n </Box>\r\n <Flex justify=\"flex-end\" gap=\"xs\" px=\"sm\" py=\"xs\" style={{ borderTop: `0.1vh solid ${theme.colors.dark[7]}`, flexShrink: 0 }}>\r\n <motion.button onClick={onClose} whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: \"transparent\", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <X color=\"rgba(255,255,255,0.4)\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c=\"rgba(255,255,255,0.4)\">{locale(\"cfgpanel_cancel\")}</Text>\r\n </motion.button>\r\n <motion.button onClick={handleSave} whileHover={{ background: alpha(color, 0.25) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: alpha(color, 0.14), border: `0.1vh solid ${alpha(color, 0.4)}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <Check color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c={color}>{locale(\"cfgpanel_apply\")}</Text>\r\n </motion.button>\r\n </Flex>\r\n </Modal>\r\n );\r\n}\r\n\r\n// ── History helpers ───────────────────────────────────────────────────────────\r\n\r\nfunction formatValue(value: unknown): string {\r\n if (value === null) return \"null\";\r\n if (value === undefined) return \"undefined\";\r\n if (typeof value === \"string\") return value;\r\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\r\n try { return JSON.stringify(value); } catch { return String(value); }\r\n}\r\n\r\nfunction formatHistoryDateTime(entry: ScriptConfigHistoryEntry): string {\r\n if (entry.at_unix) {\r\n const date = new Date(entry.at_unix * 1000);\r\n if (!Number.isNaN(date.getTime())) {\r\n return date.toLocaleString(undefined, { year: \"numeric\", month: \"short\", day: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" });\r\n }\r\n }\r\n if (entry.at_utc) {\r\n const date = new Date(entry.at_utc);\r\n if (!Number.isNaN(date.getTime())) {\r\n return date.toLocaleString(undefined, { year: \"numeric\", month: \"short\", day: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" });\r\n }\r\n }\r\n return \"Unknown time\";\r\n}\r\n\r\nfunction historyEntryKey(entry: ScriptConfigHistoryEntry, index: number) {\r\n return `${entry.at_unix}-${entry.applied_version}-${index}`;\r\n}\r\n\r\n// ── History sub-components ────────────────────────────────────────────────────\r\n\r\nfunction ChangeDetails({ entry }: { entry: ScriptConfigHistoryEntry }) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex direction=\"column\" gap=\"0.45vh\" p=\"0.8vh\" style={{ border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, borderRadius: theme.radius.xs, background: alpha(theme.colors.dark[9], 0.35) }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">\r\n Version {entry.expected_version ?? \"?\"} {\"\\u2192\"} {entry.applied_version ?? \"?\"}\r\n </Text>\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"minmax(18vh, 22vh) minmax(0, 1fr) minmax(0, 1fr)\", gap: \"0.1vh\", border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.9)}`, borderRadius: theme.radius.xs, overflow: \"hidden\", background: alpha(theme.colors.dark[6], 0.8) }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>Path</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>From</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\" px=\"0.6vh\" py=\"0.45vh\" style={{ background: alpha(theme.colors.dark[8], 0.85) }}>To</Text>\r\n {(entry.changes || []).map((change, idx) => {\r\n const bg = idx % 2 === 0 ? alpha(theme.colors.dark[9], 0.5) : alpha(theme.colors.dark[8], 0.42);\r\n return [\r\n <Text key={`${idx}-p`} ff=\"Akrobat Bold\" size=\"xxs\" c=\"#8ad1ff\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\" }}>{change.path}</Text>,\r\n <Text key={`${idx}-o`} ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.5)\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\", whiteSpace: \"pre-wrap\" }}>{formatValue(change.old)}</Text>,\r\n <Text key={`${idx}-n`} ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.78)\" px=\"0.6vh\" py=\"0.55vh\" style={{ background: bg, wordBreak: \"break-word\", whiteSpace: \"pre-wrap\" }}>{formatValue(change.new)}</Text>,\r\n ];\r\n })}\r\n </div>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction HistoryTableRow({ entry, expanded, onToggle }: { entry: ScriptConfigHistoryEntry; expanded: boolean; onToggle: () => void }) {\r\n const theme = useMantineTheme();\r\n const admin = entry.admin?.name || entry.admin?.identifier || \"unknown\";\r\n const firstPath = entry.changes?.[0]?.path || \"-\";\r\n const changeCount = entry.changes?.length || 0;\r\n const versionText = `${entry.expected_version ?? \"?\"} \\u2192 ${entry.applied_version ?? \"?\"}`;\r\n\r\n return (\r\n <motion.div layout initial={{ opacity: 0, y: 6 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.16, ease: \"easeOut\" }}>\r\n <Flex direction=\"column\" gap=\"0.45vh\">\r\n <motion.button onClick={onToggle} whileHover={{ scale: 1.002 }} whileTap={{ scale: 0.997 }} transition={{ duration: 0.12 }}\r\n style={{ background: expanded ? alpha(theme.colors.dark[7], 0.45) : alpha(theme.colors.dark[8], 0.35), border: `0.1vh solid ${expanded ? alpha(theme.colors[theme.primaryColor][5], 0.35) : alpha(theme.colors.dark[6], 0.75)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.75vh\", cursor: \"pointer\", textAlign: \"left\" }}>\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"2.2vh 20vh 12vh 6vh 1fr minmax(16vh, auto)\", gap: \"0.8vh\", alignItems: \"center\" }}>\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <motion.div animate={{ rotate: expanded ? 0 : -90 }} transition={{ duration: 0.18, ease: \"easeOut\" }}>\r\n <ChevronDown size=\"1.5vh\" color={expanded ? \"rgba(255,255,255,0.6)\" : \"rgba(255,255,255,0.45)\"} />\r\n </motion.div>\r\n </div>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.75)\" lineClamp={1}>{formatHistoryDateTime(entry)}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\" lineClamp={1}>{admin}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\">{changeCount}</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.58)\" lineClamp={1}>{firstPath}</Text>\r\n <Text ff=\"monospace\" size=\"xxs\" c=\"rgba(255,255,255,0.68)\">{versionText}</Text>\r\n </div>\r\n </motion.button>\r\n <AnimatePresence initial={false}>\r\n {expanded && (\r\n <motion.div key=\"details\" initial={{ opacity: 0, height: 0, y: -4 }} animate={{ opacity: 1, height: \"auto\", y: 0 }} exit={{ opacity: 0, height: 0, y: -4 }} transition={{ duration: 0.2, ease: \"easeInOut\" }} style={{ overflow: \"hidden\" }}>\r\n <ChangeDetails entry={entry} />\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </Flex>\r\n </motion.div>\r\n );\r\n}\r\n\r\nfunction HistoryTableHeader() {\r\n const theme = useMantineTheme();\r\n return (\r\n <div style={{ display: \"grid\", gridTemplateColumns: \"2.2vh 20vh 12vh 6vh 1fr minmax(16vh, auto)\", gap: \"0.8vh\", alignItems: \"center\", border: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, borderRadius: theme.radius.xs, background: alpha(theme.colors.dark[8], 0.55), padding: \"0.55vh 0.75vh\" }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.35)\"> </Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Time</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Admin</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">#</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">First Change</Text>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">Version</Text>\r\n </div>\r\n );\r\n}\r\n\r\n// ── History Modal ─────────────────────────────────────────────────────────────\r\n\r\nfunction ConfigHistoryModal({\r\n onClose,\r\n}: {\r\n onClose: () => void;\r\n}) {\r\n const { getHistory } = getScriptConfigInstance();\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const [queryInput, setQueryInput] = useState(\"\");\r\n const [pathInput, setPathInput] = useState(\"\");\r\n const [adminInput, setAdminInput] = useState(\"\");\r\n const [query, setQuery] = useState(\"\");\r\n const [path, setPath] = useState(\"\");\r\n const [admin, setAdmin] = useState(\"\");\r\n const [expandedKey, setExpandedKey] = useState<string | null>(null);\r\n\r\n const filters = useMemo(() => ({ query, path, admin }), [query, path, admin]);\r\n\r\n const historyQuery = useInfiniteQuery({\r\n queryKey: [\"scriptConfigHistory\", filters],\r\n initialPageParam: 0,\r\n queryFn: async ({ pageParam }) => {\r\n const response = await getHistory({\r\n offset: pageParam,\r\n limit: 25,\r\n query: filters.query || undefined,\r\n path: filters.path || undefined,\r\n admin: filters.admin || undefined,\r\n });\r\n if (!response?.success || !response.data) {\r\n throw new Error(response?._error || \"Failed to load config history\");\r\n }\r\n return response.data;\r\n },\r\n getNextPageParam: (lastPage) => lastPage.nextOffset,\r\n });\r\n\r\n const rows = historyQuery.data?.pages.flatMap((page) => page.items) ?? [];\r\n const total = historyQuery.data?.pages[0]?.total ?? 0;\r\n\r\n const handleListScroll = (e: UIEvent<HTMLDivElement>) => {\r\n const el = e.currentTarget;\r\n if (el.scrollHeight - el.scrollTop - el.clientHeight < 280 && historyQuery.hasNextPage && !historyQuery.isFetchingNextPage) {\r\n historyQuery.fetchNextPage();\r\n }\r\n };\r\n\r\n return (\r\n <Modal title={locale(\"cfgpanel_history_title\")} icon={History} iconColor={color} onClose={onClose} width=\"88vh\" maxHeight=\"82vh\" zIndex={260}>\r\n <Flex direction=\"column\" style={{ flex: 1, minHeight: 0 }}>\r\n <Flex gap=\"xs\" p=\"sm\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[7], 0.8)}` }}>\r\n <TextInput leftSection={<Search size=\"1.4vh\" />} placeholder=\"Search path/admin/value\" value={queryInput} onChange={(e) => setQueryInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <TextInput leftSection={<Filter size=\"1.4vh\" />} placeholder=\"Path filter (e.g. basic.weightUnit)\" value={pathInput} onChange={(e) => setPathInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <TextInput leftSection={<User size=\"1.4vh\" />} placeholder=\"Admin filter\" value={adminInput} onChange={(e) => setAdminInput(e.currentTarget.value)} size=\"xs\" style={{ flex: 1 }} />\r\n <motion.button\r\n onClick={() => { setExpandedKey(null); setQuery(queryInput.trim()); setPath(pathInput.trim().toLowerCase()); setAdmin(adminInput.trim().toLowerCase()); }}\r\n whileHover={{ background: alpha(color, 0.2) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: alpha(color, 0.12), border: `0.1vh solid ${alpha(color, 0.35)}`, borderRadius: theme.radius.xs, padding: \"0.55vh 0.85vh\", cursor: \"pointer\" }}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={color}>Apply</Text>\r\n </motion.button>\r\n </Flex>\r\n\r\n <Flex direction=\"column\" gap=\"xs\" p=\"sm\" style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }} onScroll={handleListScroll}>\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.45)\">\r\n {historyQuery.isFetching && !historyQuery.data ? \"Loading history...\" : `${total} entries`}\r\n </Text>\r\n <HistoryTableHeader />\r\n {historyQuery.isError && <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"#ef4444\">{(historyQuery.error as Error).message}</Text>}\r\n {!historyQuery.isLoading && rows.length === 0 && !historyQuery.isError && (\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"rgba(255,255,255,0.45)\">No history found for current filters.</Text>\r\n )}\r\n <AnimatePresence initial={false}>\r\n {rows.map((entry, index) => {\r\n const key = historyEntryKey(entry, index);\r\n return <HistoryTableRow key={key} entry={entry} expanded={expandedKey === key} onToggle={() => setExpandedKey(expandedKey === key ? null : key)} />;\r\n })}\r\n </AnimatePresence>\r\n {(historyQuery.isFetchingNextPage || historyQuery.isLoading) && (\r\n <Flex justify=\"center\" py=\"sm\"><Loader size=\"sm\" color={color} /></Flex>\r\n )}\r\n </Flex>\r\n </Flex>\r\n <Flex justify=\"flex-end\" gap=\"xs\" px=\"sm\" py=\"xs\" style={{ borderTop: `0.1vh solid ${theme.colors.dark[7]}`, flexShrink: 0 }}>\r\n <motion.button onClick={onClose} whileHover={{ background: alpha(theme.colors.dark[7], 0.5) }} whileTap={{ scale: 0.97 }}\r\n style={{ background: \"transparent\", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: theme.spacing.xxs }}>\r\n <X color=\"rgba(255,255,255,0.4)\" size=\"1.5vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.05em\" c=\"rgba(255,255,255,0.4)\">{locale(\"cfgpanel_close\")}</Text>\r\n </motion.button>\r\n </Flex>\r\n </Modal>\r\n );\r\n}\r\n\r\n// ── ConfigPanel Inner ─────────────────────────────────────────────────────────\r\n\r\nfunction ConfigPanelInner<T extends Record<string, any>>({\r\n navItems, title, subtitle, children, isSaving, onClose,\r\n schema, resetConfirmText, defaultConfig,\r\n width, height, suppressMissingItemsBanner,\r\n}: Omit<ConfigPanelProps<T>, \"open\" | \"onClose\"> & { isSaving: boolean; onClose: () => void }) {\r\n const { updateConfig, resetConfig, getHistory } = getScriptConfigInstance<T>();\r\n const form = useForm<T>();\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const version = useSettings((s) => s.resourceVersion);\r\n // useAdminState so the selected tab survives close/reopen. The whole\r\n // ConfigPanel tree unmounts on close (line ~670: `if (!open) return null`),\r\n // so plain useState would reset to navItems[0] every time.\r\n const [activeTab, setActiveTab] = useAdminState(\"__dirkConfigPanel:activeTab\", navItems[0]?.id ?? \"\");\r\n const firstMountRef = useRef(true);\r\n const [jsonOpen, setJsonOpen] = useState(false);\r\n const [historyOpen, setHistoryOpen] = useState(false);\r\n const [resetOpen, setResetOpen] = useState(false);\r\n const [pendingAction, setPendingAction] = useState<\"close\" | \"back\" | null>(null);\r\n const changedCount = form.changedCount ?? 0;\r\n const isDirty = changedCount > 0;\r\n\r\n const goBack = () => fetchNui(\"CONFIG_PANEL_BACK\");\r\n\r\n const handleBack = () => {\r\n if (isDirty) {\r\n setPendingAction(\"back\");\r\n return;\r\n }\r\n goBack();\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyDown(e: KeyboardEvent) {\r\n if (e.key !== \"Escape\") return;\r\n if (isDirty) {\r\n e.preventDefault();\r\n setPendingAction(\"close\");\r\n return;\r\n }\r\n onClose();\r\n }\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\r\n }, [isDirty, onClose]);\r\n\r\n return (\r\n <>\r\n <AnimatePresence>{jsonOpen && <ConfigJsonModal onClose={() => setJsonOpen(false)} schema={schema} />}</AnimatePresence>\r\n <AnimatePresence>{historyOpen && <ConfigHistoryModal onClose={() => setHistoryOpen(false)} />}</AnimatePresence>\r\n <AnimatePresence>\r\n {resetOpen && (\r\n <ConfirmModal\r\n title={locale(\"cfgpanel_reset_title\")}\r\n description={locale(\"cfgpanel_reset_desc\")}\r\n confirmLabel={locale(\"cfgpanel_reset_confirm\")}\r\n confirmText={resetConfirmText}\r\n onConfirm={async () => {\r\n setResetOpen(false);\r\n const result = await resetConfig();\r\n if (result?.success) {\r\n const { store } = getScriptConfigInstance<T>();\r\n form.reinitialize(cloneConfig(store.getState()));\r\n // Mirror the save-success toast so the admin gets visible\r\n // feedback that the reset actually applied — previously the\r\n // modal just closed silently and admins had no way to tell\r\n // whether it had worked.\r\n notifications.show({\r\n color: \"green\",\r\n title: locale(\"ConfigResetSuccessTitle\"),\r\n message: locale(\"ConfigResetSuccessBody\"),\r\n autoClose: 3000,\r\n });\r\n return;\r\n }\r\n const err = result?._error || \"Unknown\";\r\n console.warn(`[ConfigPanel] config reset failed: ${err}`);\r\n notifications.show({\r\n color: \"red\",\r\n title: locale(\"ConfigResetFailedTitle\"),\r\n message: locale(\"ConfigResetFailedBody\", err),\r\n autoClose: 6000,\r\n });\r\n }}\r\n onClose={() => setResetOpen(false)}\r\n zIndex={300}\r\n />\r\n )}\r\n </AnimatePresence>\r\n <AnimatePresence>\r\n {pendingAction !== null && (\r\n <ConfirmModal\r\n title={locale(\"cfgpanel_discard_title\")}\r\n description={\r\n pendingAction === \"back\"\r\n ? locale(\"cfgpanel_discard_desc_back\")\r\n : locale(\"cfgpanel_discard_desc_close\")\r\n }\r\n confirmLabel={pendingAction === \"back\" ? locale(\"cfgpanel_discard_confirm_back\") : locale(\"cfgpanel_discard_confirm_close\")}\r\n onConfirm={() => {\r\n const action = pendingAction;\r\n setPendingAction(null);\r\n if (action === \"back\") goBack();\r\n else onClose();\r\n }}\r\n onClose={() => setPendingAction(null)}\r\n zIndex={300}\r\n />\r\n )}\r\n </AnimatePresence>\r\n\r\n <MotionFlex\r\n pos=\"absolute\" left=\"50%\" top=\"50%\"\r\n bg={alpha(theme.colors.dark[9], 0.9)}\r\n w={width ?? \"120vh\"} h={height ?? \"80vh\"} bdrs=\"sm\"\r\n style={{\r\n userSelect: \"none\", overflow: \"hidden\",\r\n transform: \"translate(-50%, -50%)\",\r\n boxShadow: \"0 0 10px rgba(0,0,0,0.5)\",\r\n border: `0.1vh solid ${theme.colors.dark[7]}`,\r\n }}\r\n direction=\"row\"\r\n initial={{ scale: 0.3, opacity: 0, transform: \"translate(-50%, -50%)\" }}\r\n animate={{ scale: 1, opacity: 1, transform: \"translate(-50%, -50%)\" }}\r\n exit={{ scale: 0.3, opacity: 0, transform: \"translate(-50%, -50%)\" }}\r\n >\r\n {/* ── Sidebar ── */}\r\n <Flex direction=\"column\" style={{ width: \"18vh\", flexShrink: 0, borderRight: `0.1vh solid ${alpha(theme.colors.dark[6], 0.8)}`, background: alpha(theme.colors.dark[8], 0.6), overflow: \"hidden\" }}>\r\n <Flex align=\"center\" gap=\"0.6vh\" px=\"sm\" py=\"sm\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[6], 0.5)}`, flexShrink: 0 }}>\r\n <motion.button\r\n title={locale(\"cfgpanel_back_title\")}\r\n onClick={handleBack}\r\n whileHover={{ background: alpha(color, 0.16), borderColor: alpha(color, 0.45) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n aspectRatio: \"1 / 1\",\r\n height: \"2.4vh\",\r\n background: alpha(color, 0.08),\r\n border: `0.1vh solid ${alpha(color, 0.3)}`,\r\n borderRadius: theme.radius.xs,\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n <ArrowLeft size=\"1.4vh\" color={color} />\r\n </motion.button>\r\n <Flex direction=\"column\" style={{ minWidth: 0, flex: 1, lineHeight: 1, overflow: \"hidden\" }}>\r\n <Text size=\"md\" ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.04em\" truncate>{title}</Text>\r\n {subtitle && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.08em\" c={color} truncate>\r\n {subtitle}\r\n </Text>\r\n )}\r\n </Flex>\r\n </Flex>\r\n\r\n {/* Quick controls */}\r\n <Flex gap=\"xxs\" px=\"xs\" py=\"xs\" style={{ borderBottom: `0.1vh solid ${alpha(theme.colors.dark[6], 0.4)}`, flexShrink: 0 }}>\r\n <motion.button title={locale(\"cfgpanel_undo\")} onClick={() => form.canBack && form.back()} disabled={!form.canBack}\r\n whileHover={form.canBack ? { background: \"rgba(255,255,255,0.07)\" } : undefined}\r\n whileTap={form.canBack ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: \"transparent\", border: `0.1vh solid ${alpha(theme.colors.dark[5], form.canBack ? 0.6 : 0.3)}`, borderRadius: theme.radius.xs, cursor: form.canBack ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: form.canBack ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <Undo2 size=\"1.5vh\" color=\"rgba(255,255,255,0.7)\" />\r\n </motion.button>\r\n <motion.button title={locale(\"cfgpanel_redo\")} onClick={() => form.canForward && form.forward()} disabled={!form.canForward}\r\n whileHover={form.canForward ? { background: \"rgba(255,255,255,0.07)\" } : undefined}\r\n whileTap={form.canForward ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: \"transparent\", border: `0.1vh solid ${alpha(theme.colors.dark[5], form.canForward ? 0.6 : 0.3)}`, borderRadius: theme.radius.xs, cursor: form.canForward ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: form.canForward ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <Redo2 size=\"1.5vh\" color=\"rgba(255,255,255,0.7)\" />\r\n </motion.button>\r\n <motion.button title={isSaving ? locale(\"cfgpanel_saving\") : isDirty ? `${locale(\"cfgpanel_save\")} (${changedCount})` : locale(\"cfgpanel_save\")}\r\n onClick={() => isDirty && !isSaving && form.submit()} disabled={!isDirty || isSaving}\r\n whileHover={isDirty && !isSaving ? { background: alpha(color, 0.25), borderColor: alpha(color, 0.5) } : undefined}\r\n whileTap={isDirty && !isSaving ? { scale: 0.97 } : undefined}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: isDirty ? alpha(color, 0.14) : \"transparent\", border: `0.1vh solid ${isDirty ? alpha(color, 0.35) : alpha(theme.colors.dark[5], 0.3)}`, borderRadius: theme.radius.xs, cursor: isDirty && !isSaving ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", opacity: isDirty ? 1 : 0.35, transition: \"opacity 0.2s, background 0.15s\" }}>\r\n {isSaving ? <Loader size=\"1.5vh\" color={color} type=\"dots\" /> : <SaveIcon color={isDirty ? color : \"rgba(255,255,255,0.35)\"} size=\"1.5vh\" />}\r\n </motion.button>\r\n <motion.button title={locale(\"cfgpanel_history\")} onClick={() => setHistoryOpen(true)}\r\n whileHover={{ background: alpha(\"#22d3ee\", 0.16), borderColor: alpha(\"#22d3ee\", 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ flex: 1, aspectRatio: \"1 / 1\", background: alpha(\"#22d3ee\", 0.07), border: `0.1vh solid ${alpha(\"#22d3ee\", 0.25)}`, borderRadius: theme.radius.xs, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\r\n <History color=\"#22d3ee\" size=\"1.5vh\" />\r\n </motion.button>\r\n </Flex>\r\n\r\n {/* Nav items */}\r\n <Flex direction=\"column\" gap=\"xxs\" p=\"xs\" style={{ flex: 1, overflowY: \"auto\" }}>\r\n {navItems.map((item) => (\r\n <NavItemButton key={item.id} icon={item.icon} label={item.label} active={activeTab === item.id} onClick={() => setActiveTab(item.id)} />\r\n ))}\r\n </Flex>\r\n\r\n {/* Bottom actions */}\r\n <Flex direction=\"column\" p=\"xs\" gap=\"xs\" style={{ borderTop: `0.1vh solid ${alpha(theme.colors.dark[6], 0.5)}`, flexShrink: 0 }}>\r\n <motion.button onClick={() => isDirty && form.reset()} disabled={!isDirty}\r\n whileHover={isDirty ? { background: alpha(\"#f97316\", 0.12), borderColor: alpha(\"#f97316\", 0.45) } : undefined}\r\n whileTap={isDirty ? { scale: 0.97 } : undefined}\r\n style={{ width: \"100%\", background: \"transparent\", border: `0.1vh solid ${isDirty ? alpha(\"#f97316\", 0.35) : alpha(theme.colors.dark[5], 0.3)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: isDirty ? \"pointer\" : \"default\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\", opacity: isDirty ? 1 : 0.35, transition: \"opacity 0.2s\" }}>\r\n <XCircle color={isDirty ? \"#f97316\" : \"rgba(255,255,255,0.35)\"} size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={isDirty ? \"#f97316\" : \"rgba(255,255,255,0.35)\"}>{locale(\"cfgpanel_discard\")}</Text>\r\n </motion.button>\r\n\r\n <div style={{ height: \"0.05vh\", background: \"rgba(255,255,255,0.07)\", margin: \"0.1vh 0\" }} />\r\n\r\n <motion.button onClick={() => setJsonOpen(true)}\r\n whileHover={{ background: alpha(color, 0.16), borderColor: alpha(color, 0.45) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ width: \"100%\", background: alpha(color, 0.07), border: `0.1vh solid ${alpha(color, 0.28)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\" }}>\r\n <Code2 color={color} size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>{locale(\"cfgpanel_manual_edit\")}</Text>\r\n </motion.button>\r\n\r\n <motion.button onClick={() => setResetOpen(true)}\r\n whileHover={{ background: alpha(\"#ef4444\", 0.16), borderColor: alpha(\"#ef4444\", 0.5) }}\r\n whileTap={{ scale: 0.97 }}\r\n style={{ width: \"100%\", background: alpha(\"#ef4444\", 0.07), border: `0.1vh solid ${alpha(\"#ef4444\", 0.25)}`, borderRadius: theme.radius.xs, padding: \"0.65vh 0.8vh\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.55vh\" }}>\r\n <RotateCcw color=\"#ef4444\" size=\"1.6vh\" />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c=\"#ef4444\">{locale(\"cfgpanel_reset_defaults\")}</Text>\r\n </motion.button>\r\n\r\n {version && (\r\n <Text size=\"0.95vh\" c=\"dimmed\" ta=\"center\" style={{ letterSpacing: \"0.04em\", opacity: 0.8 }}>\r\n {locale(\"cfgpanel_version\")} {version}\r\n </Text>\r\n )}\r\n </Flex>\r\n </Flex>\r\n\r\n {/* ── Right column: banner stacked above content ── */}\r\n {/* Wrapped in a column flex so the banner sits on top of the tab\r\n content. The parent MotionFlex is `direction=\"row\"` for sidebar +\r\n content-area, so without this wrapper the banner becomes a third\r\n column and gets squeezed to the left edge of the content area. */}\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0, overflow: \"hidden\" }}>\r\n {/* Above the AnimatePresence so it doesn't unmount on every tab\r\n switch. Self-hides when nothing's missing; consumers can disable\r\n entirely via `suppressMissingItemsBanner`. */}\r\n {!suppressMissingItemsBanner && <MissingItemsBanner />}\r\n\r\n <AnimatePresence mode=\"wait\">\r\n <motion.div key={activeTab} initial={firstMountRef.current ? (firstMountRef.current = false, false) : { opacity: 0, y: 4 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -4 }} transition={{ duration: 0.15 }}\r\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", overflowY: \"auto\" }}>\r\n {children(activeTab)}\r\n </motion.div>\r\n </AnimatePresence>\r\n </Flex>\r\n </MotionFlex>\r\n </>\r\n );\r\n}\r\n\r\n// ── Utility ───────────────────────────────────────────────────────────────────\r\n\r\nfunction cloneConfig<T>(value: T): T {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n}\r\n\r\n// ── ServerOnly Fetcher (merges x-serverOnly paths into form on admin open) ───\r\n\r\nfunction ServerOnlyFetcher<T extends Record<string, any>>() {\r\n const { fetchConfig } = getScriptConfigInstance<T>();\r\n const { reinitialize } = useFormActions<T>();\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n fetchConfig().then((full) => {\r\n if (!cancelled && full) reinitialize(full as Partial<T>);\r\n }).catch(() => {});\r\n return () => { cancelled = true; };\r\n }, []);\r\n\r\n return null;\r\n}\r\n\r\n// ── Public ConfigPanel ────────────────────────────────────────────────────────\r\n\r\nconst defaultOnClose = () => fetchNui(\"CLOSE_ADMIN_SECTION\");\r\n\r\nexport function ConfigPanel<T extends Record<string, any>>(props: ConfigPanelProps<T>) {\r\n const { open, onClose = defaultOnClose } = props;\r\n const { store, updateConfig } = getScriptConfigInstance<T>();\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n if (!open) return null;\r\n\r\n // No internal QueryClientProvider — DirkProvider now mounts a shared\r\n // client (dirkQueryClient) that this component, the missing-items audit,\r\n // usePlayers etc. all consume. Invalidations below use the same client.\r\n return (\r\n <>\r\n <FormProvider<T>\r\n initialValues={cloneConfig(store.getState())}\r\n onSubmit={async (form) => {\r\n if (isSaving) return;\r\n setIsSaving(true);\r\n try {\r\n // Pass the tracked changed-set (dotted paths) so updateConfig can\r\n // send a SECTION-DELTA (only the changed top-level sections, each as\r\n // its whole current value, with sectionReplace:true) instead of the\r\n // entire client-visible config. Falls back to a full-send when the\r\n // changed-set is empty (server then defaults to fullReplace).\r\n const result: any = await updateConfig(form.values as T, form.changedFields);\r\n if (result?.success) {\r\n form.reinitialize(cloneConfig(form.values as T));\r\n dirkQueryClient.invalidateQueries({ queryKey: [\"scriptConfigHistory\"] });\r\n // Re-run the missing-items audit since item-name fields might\r\n // have changed in this save. One-shot per save — not an event\r\n // listener loop, no spam.\r\n useMissingItemsAudit.getState().refresh();\r\n notifications.show({\r\n color: \"green\",\r\n title: locale(\"ConfigSaveSuccessTitle\"),\r\n message: locale(\"ConfigSaveSuccessBody\"),\r\n autoClose: 3000,\r\n });\r\n return;\r\n }\r\n form.reinitialize(cloneConfig(store.getState()));\r\n const err = result?._error || \"Unknown\";\r\n console.warn(`[ConfigPanel] config save failed: ${err}`);\r\n // Map common server-side error codes to friendlier copy. Falls\r\n // back to the raw code so unknown errors still surface something\r\n // visible instead of swallowing silently.\r\n const titleKey = err === \"NoPermission\" ? \"ConfigSaveNoPermissionTitle\"\r\n : err === \"VersionConflict\" ? \"ConfigSaveVersionConflictTitle\"\r\n : err === \"NotReady\" ? \"ConfigSaveNotReadyTitle\"\r\n : \"ConfigSaveFailedTitle\";\r\n const bodyKey = err === \"NoPermission\" ? \"ConfigSaveNoPermissionBody\"\r\n : err === \"VersionConflict\" ? \"ConfigSaveVersionConflictBody\"\r\n : err === \"NotReady\" ? \"ConfigSaveNotReadyBody\"\r\n : \"ConfigSaveFailedBody\";\r\n notifications.show({\r\n color: \"red\",\r\n title: locale(titleKey),\r\n message: locale(bodyKey, err),\r\n autoClose: 6000,\r\n });\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n }}\r\n >\r\n <ServerOnlyFetcher<T> />\r\n <AnimatePresence>\r\n {open && (\r\n <ConfigPanelInner<T>\r\n {...props}\r\n onClose={onClose}\r\n isSaving={isSaving}\r\n />\r\n )}\r\n </AnimatePresence>\r\n </FormProvider>\r\n </>\r\n );\r\n}\r\n","import { Flex, Image, Select, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AlertTriangle } from \"lucide-react\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { locale } from \"../utils/locales\";\r\nimport { useItems, useItemsList } from \"../utils/useItems\";\r\n\r\nexport type SelectItemProps = {\r\n label: string;\r\n value: string;\r\n onChange: (value: string) => void;\r\n style?: React.CSSProperties;\r\n excludeItemNames?: string[];\r\n};\r\n\r\nconst MISSING_COLOR = \"#f59e0b\"; // amber — matches MissingItemsBanner\r\n\r\nfunction LazyImage({ src, style }: { src: string; style?: React.CSSProperties }) {\r\n const [visible, setVisible] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry.isIntersecting) {\r\n setVisible(true);\r\n observer.disconnect();\r\n }\r\n });\r\n if (ref.current) observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n // No alt — when an item's image src 404s the alt string would render in\r\n // place of the image and blow the cell out, throwing the input layout\r\n // off (clicking the icon area then misses the input click target).\r\n return (\r\n <div ref={ref} style={{ width: \"4vh\", height: \"4vh\" }}>\r\n {visible && <Image src={src} fit=\"contain\" style={style} />}\r\n </div>\r\n );\r\n}\r\n\r\nexport function SelectItem(props: SelectItemProps) {\r\n const invItems = useItems();\r\n\r\n // True when something IS configured but it's not registered in the player's\r\n // items table. Drives all the amber styling below.\r\n const isMissing = !!props.value && !invItems[props.value];\r\n\r\n const formattedItems = useMemo(() => {\r\n const seen = new Set<string>();\r\n const list = useItemsList(props.excludeItemNames ?? [])\r\n .filter((item) => {\r\n if (seen.has(item.name)) return false;\r\n seen.add(item.name);\r\n return true;\r\n })\r\n .map((item) => ({ value: item.name, label: item.label, image: item.image }));\r\n\r\n // If the configured value isn't in the inventory items table, prepend a\r\n // synthetic entry so Mantine has something to match `value` against —\r\n // otherwise the input renders blank with no signal that anything's\r\n // configured. The raw item name doubles as the displayed label.\r\n if (isMissing) {\r\n list.unshift({ value: props.value, label: props.value, image: \"\" });\r\n }\r\n return list;\r\n // `useItemsList` already depends on `invItems` internally; `isMissing`\r\n // captures the value-vs-inventory delta so this list rebuilds whenever\r\n // the configured value or the items table changes.\r\n }, [invItems, props.excludeItemNames, props.value, isMissing]);\r\n\r\n return (\r\n <Select\r\n maxDropdownHeight=\"30vh\"\r\n label={locale(props.label)}\r\n size=\"xs\"\r\n flex={1}\r\n style={props.style}\r\n limit={50}\r\n value={props.value}\r\n onChange={(v) => props.onChange(v as string)}\r\n data={formattedItems}\r\n allowDeselect={false}\r\n searchable\r\n // Amber-tint the input text when the configured value isn't registered\r\n // — a glance is enough to spot which field is broken.\r\n styles={isMissing ? { input: { color: MISSING_COLOR } } : undefined}\r\n // Portal the dropdown so it isn't clipped by overflow:hidden parents\r\n // (e.g. live-editor side panels) and stack it above modal content.\r\n comboboxProps={{ withinPortal: true, zIndex: 2000 }}\r\n leftSectionWidth=\"4vh\"\r\n // Pointer events off on the leftSection so clicks anywhere on the\r\n // input (including over the item icon) bubble through to the input\r\n // and open the dropdown.\r\n leftSectionPointerEvents=\"none\"\r\n leftSection={\r\n isMissing ? (\r\n <Flex align=\"center\" justify=\"center\" w=\"4vh\" h=\"4vh\">\r\n <AlertTriangle size=\"2vh\" color={MISSING_COLOR} strokeWidth={2.5} />\r\n </Flex>\r\n ) : props.value ? (\r\n <Image\r\n fallbackSrc=\"/placeholder.png\"\r\n src={invItems[props.value]?.image || \"\"}\r\n fit=\"contain\"\r\n maw=\"4vh\"\r\n style={{ aspectRatio: \"1 / 1\" }}\r\n />\r\n ) : null\r\n }\r\n nothingFoundMessage={locale(\"NoItemsFound\")}\r\n renderOption={(item) => {\r\n const optionMissing = !invItems[item.option.value] && item.option.value === props.value;\r\n if (optionMissing) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" w=\"100%\">\r\n <Flex align=\"center\" justify=\"center\" w=\"4vh\" h=\"4vh\" style={{ flexShrink: 0 }}>\r\n <AlertTriangle size=\"2vh\" color={MISSING_COLOR} strokeWidth={2.5} />\r\n </Flex>\r\n <Flex direction=\"column\" style={{ flex: 1, minWidth: 0 }}>\r\n <Text size=\"sm\" c={MISSING_COLOR} style={{ fontFamily: \"monospace\" }}>\r\n {item.option.value}\r\n </Text>\r\n <Text size=\"xxs\" c=\"dimmed\">\r\n {locale(\"ItemNotInInventory\")}\r\n </Text>\r\n </Flex>\r\n <div style={{\r\n background: \"rgba(245,158,11,0.12)\",\r\n border: `0.1vh solid ${MISSING_COLOR}59`,\r\n borderRadius: \"0.3vh\",\r\n padding: \"0.1vh 0.6vh\",\r\n }}>\r\n <Text size=\"xxs\" c={MISSING_COLOR} ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.06em\">\r\n {locale(\"Missing\")}\r\n </Text>\r\n </div>\r\n </Flex>\r\n );\r\n }\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" w=\"100%\">\r\n <LazyImage\r\n src={invItems[item.option.value]?.image || \"\"}\r\n style={{ aspectRatio: \"1 / 1\" }}\r\n />\r\n <Flex direction=\"column\">\r\n <Text size=\"sm\">{item.option.label}</Text>\r\n <Text size=\"xxs\" c=\"dimmed\">{item.option.value}</Text>\r\n </Flex>\r\n </Flex>\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n","import { alpha, Flex, NumberInput, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Crosshair, Eye, EyeOff, MapPin, RotateCcw, Trash2 } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\nimport { locale } from \"../utils/locales\";\r\n\r\nexport type Vector4Value = { x: number; y: number; z: number; w: number };\r\n\r\nexport type PositionPickerProps = {\r\n label?: string;\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n /**\r\n * If set, the picker treats `value` as an offset from this entity reference\r\n * (e.g. \"shell\"). The Lua side must handle GET_POSITION + relativeTo by\r\n * returning (playerCoords - entityCoords) instead of world coords, and must\r\n * resolve the same reference when previewing.\r\n */\r\n relativeTo?: string;\r\n /** Optional NUI event name to fetch the current position. Defaults to GET_POSITION. */\r\n fetchEvent?: string;\r\n /** Optional NUI event name to draw a marker at the value. Defaults to PREVIEW_POSITION. */\r\n previewEvent?: string;\r\n /** Optional NUI event name to clear the preview marker. Defaults to STOP_PREVIEW_POSITION. */\r\n stopPreviewEvent?: string;\r\n description?: string;\r\n showHeading?: boolean;\r\n};\r\n\r\nconst ZERO: Vector4Value = { x: 0, y: 0, z: 0, w: 0 };\r\n\r\nexport function PositionPicker(props: PositionPickerProps) {\r\n const {\r\n label,\r\n value,\r\n onChange,\r\n relativeTo,\r\n fetchEvent = \"GET_POSITION\",\r\n previewEvent = \"PREVIEW_POSITION\",\r\n stopPreviewEvent = \"STOP_PREVIEW_POSITION\",\r\n description,\r\n showHeading = true,\r\n } = props;\r\n\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n const [previewing, setPreviewing] = useState(false);\r\n const previewingRef = useRef(false);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (previewingRef.current) {\r\n fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {});\r\n }\r\n };\r\n }, [stopPreviewEvent, relativeTo]);\r\n\r\n const set = <K extends keyof Vector4Value>(key: K, val: number) => {\r\n const next = { ...value, [key]: val };\r\n onChange(next);\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const grab = async () => {\r\n try {\r\n const resp = await fetchNui<Vector4Value | null>(fetchEvent, { relativeTo }, value);\r\n if (resp && typeof resp === \"object\") {\r\n const next: Vector4Value = {\r\n x: Number(resp.x ?? 0),\r\n y: Number(resp.y ?? 0),\r\n z: Number(resp.z ?? 0),\r\n w: Number(resp.w ?? 0),\r\n };\r\n onChange(next);\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {});\r\n }\r\n }\r\n } catch {\r\n // ignore — Lua side may not be wired up yet\r\n }\r\n };\r\n\r\n const togglePreview = async () => {\r\n const nextState = !previewing;\r\n setPreviewing(nextState);\r\n previewingRef.current = nextState;\r\n if (nextState) {\r\n await fetchNui(previewEvent, { value, relativeTo }).catch(() => {});\r\n } else {\r\n await fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const reset = () => {\r\n onChange({ ...ZERO });\r\n if (previewingRef.current) {\r\n fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {});\r\n }\r\n };\r\n\r\n const numberStyles = {\r\n input: { textAlign: \"right\" as const, fontFamily: \"monospace\" },\r\n };\r\n\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n gap=\"xxs\"\r\n p=\"xs\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.35),\r\n border: \"0.1vh solid rgba(255,255,255,0.05)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n {(label || description) && (\r\n <Flex justify=\"space-between\" align=\"center\" gap=\"xs\">\r\n <Flex direction=\"column\" gap={0} style={{ minWidth: 0 }}>\r\n {label && (\r\n <Flex align=\"center\" gap=\"xxs\">\r\n <MapPin size=\"1.4vh\" color={alpha(color, 0.7)} />\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n c=\"rgba(255,255,255,0.75)\"\r\n >\r\n {locale(label)}\r\n </Text>\r\n {relativeTo && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={alpha(color, 0.5)} lts=\"0.05em\">\r\n · {locale(\"RelativeTo\")} {relativeTo}\r\n </Text>\r\n )}\r\n </Flex>\r\n )}\r\n {description && (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"dimmed\" lh={1.3}>\r\n {locale(description)}\r\n </Text>\r\n )}\r\n </Flex>\r\n\r\n <Flex gap=\"xxs\" style={{ flexShrink: 0 }}>\r\n <PickerButton tooltip={locale(\"GrabMyPosition\")} onClick={grab} color={color}>\r\n <Crosshair size=\"1.4vh\" color={color} />\r\n </PickerButton>\r\n <PickerButton\r\n tooltip={previewing ? locale(\"StopPreview\") : locale(\"PreviewInWorld\")}\r\n onClick={togglePreview}\r\n color={color}\r\n active={previewing}\r\n >\r\n {previewing ? (\r\n <EyeOff size=\"1.4vh\" color={color} />\r\n ) : (\r\n <Eye size=\"1.4vh\" color={alpha(color, 0.7)} />\r\n )}\r\n </PickerButton>\r\n <PickerButton tooltip={locale(\"Reset\")} onClick={reset} color=\"#ef4444\">\r\n <RotateCcw size=\"1.4vh\" color=\"#ef4444\" />\r\n </PickerButton>\r\n </Flex>\r\n </Flex>\r\n )}\r\n\r\n <Flex gap=\"xxs\">\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"X\"\r\n value={value.x}\r\n onChange={(v) => set(\"x\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"Y\"\r\n value={value.y}\r\n onChange={(v) => set(\"y\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"Z\"\r\n value={value.z}\r\n onChange={(v) => set(\"z\", Number(v))}\r\n decimalScale={4}\r\n step={0.1}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n {showHeading && (\r\n <NumberInput\r\n size=\"xs\"\r\n label=\"W\"\r\n value={value.w}\r\n onChange={(v) => set(\"w\", Number(v))}\r\n decimalScale={2}\r\n step={1}\r\n min={0}\r\n max={360}\r\n style={{ flex: 1 }}\r\n styles={numberStyles}\r\n />\r\n )}\r\n </Flex>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction PickerButton({\r\n children,\r\n onClick,\r\n tooltip,\r\n color,\r\n active,\r\n}: {\r\n children: React.ReactNode;\r\n onClick: () => void;\r\n tooltip: string;\r\n color: string;\r\n active?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Tooltip label={tooltip} position=\"top\" withArrow>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: active ? alpha(color, 0.22) : alpha(color, 0.08),\r\n border: `0.1vh solid ${alpha(color, active ? 0.5 : 0.3)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: \"0.4vh 0.6vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n {children}\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\n// ── Compact row pieces ───────────────────────────────────────────────────────\r\n// Lower-friction siblings of <PositionPicker> for cases where you want a\r\n// scannable list of positions instead of a single full editor. Use these\r\n// when each row in a list should expose Set / Goto actions and just show\r\n// the resulting `vector4(x, y, z, w)` underneath — no inline number inputs.\r\n//\r\n// Lua side must register `GET_POSITION` (returns current world coords + heading)\r\n// and `GOTO_POSITION` (teleports the player to {x,y,z,w}). dirk_druglabsv2's\r\n// `src/client/shellEditor.lua` is the canonical example.\r\n\r\nfunction fmtV4(n: number) {\r\n return Number.isFinite(n) ? n.toFixed(2) : \"0.00\";\r\n}\r\n\r\n/** Read-only `vector4(x, y, z, w)` line in the same boxed style as PositionPicker. */\r\nexport function Vector4Display({ value }: { value: Vector4Value }) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Flex\r\n align=\"center\"\r\n gap=\"xs\"\r\n p=\"xs\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.35),\r\n border: \"0.1vh solid rgba(255,255,255,0.05)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n <Text\r\n ff=\"monospace\"\r\n size=\"xxs\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n style={{ flex: 1, letterSpacing: \"0.02em\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}\r\n >\r\n vector4({fmtV4(value.x)}, {fmtV4(value.y)}, {fmtV4(value.z)}, {fmtV4(value.w)})\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n/** Reusable styled action button used by Set/Goto/etc. */\r\nfunction Vector4ActionButton({\r\n icon,\r\n label,\r\n tooltip,\r\n onClick,\r\n color,\r\n compact,\r\n}: {\r\n icon: React.ReactNode;\r\n label: string;\r\n tooltip: string;\r\n onClick: () => void;\r\n color: string;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n return (\r\n <Tooltip label={tooltip} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n {icon}\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {label}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\n/** Grabs the player's current world coords+heading via `GET_POSITION`. */\r\nexport function WorldPositionSetButton({\r\n value,\r\n onChange,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const grab = async () => {\r\n try {\r\n const resp = await fetchNui<Vector4Value | null>(\"GET_POSITION\", {}, value);\r\n if (!resp || typeof resp !== \"object\") return;\r\n onChange({\r\n x: Number(resp.x ?? 0),\r\n y: Number(resp.y ?? 0),\r\n z: Number(resp.z ?? 0),\r\n w: Number(resp.w ?? 0),\r\n });\r\n } catch {\r\n // Lua surfaces a notify on failure\r\n }\r\n };\r\n return (\r\n <Vector4ActionButton\r\n icon={<Crosshair size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Set\")}\r\n tooltip={locale(\"SetWorldTooltip\")}\r\n onClick={grab}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n/** Teleports the player to the stored coords via `GOTO_POSITION`. */\r\nexport function WorldPositionGotoButton({\r\n value,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const goto = () => {\r\n fetchNui(\"GOTO_POSITION\", value).catch(() => {});\r\n };\r\n return (\r\n <Vector4ActionButton\r\n icon={<MapPin size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Goto\")}\r\n tooltip={locale(\"GotoWorldTooltip\")}\r\n onClick={goto}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n/** Red-tinted Delete button matching the Set/Goto styling. */\r\nexport function Vector4DeleteButton({\r\n onClick,\r\n compact,\r\n}: {\r\n onClick: () => void;\r\n compact?: boolean;\r\n}) {\r\n const color = \"#ef4444\";\r\n return (\r\n <Vector4ActionButton\r\n icon={<Trash2 size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />}\r\n label={locale(\"Delete\")}\r\n tooltip={locale(\"Delete\")}\r\n onClick={onClick}\r\n color={color}\r\n compact={compact}\r\n />\r\n );\r\n}\r\n\r\n","// Group / rank pickers backed by lib.framework on the Lua side.\r\n//\r\n// Two usage modes:\r\n//\r\n// Compound (group + rank pair):\r\n// <GroupSelect value={{ name: 'police', grade: 2 }} onChange={setValue} type=\"job\">\r\n// <GroupName />\r\n// <GroupRank />\r\n// </GroupSelect>\r\n//\r\n// Standalone (just the group name, no rank):\r\n// <GroupName value=\"police\" onChange={setName} type=\"job\" />\r\n//\r\n// <GroupRank> is compound-only — it reads the currently selected group\r\n// from context and lists that group's grades. Throws when used outside.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport React, { createContext, useContext, useEffect } from \"react\";\r\nimport {\r\n FrameworkGroup,\r\n ensureFrameworkGroups,\r\n selectAllGroups,\r\n useFrameworkGroups,\r\n} from \"../utils/useFrameworkGroups\";\r\nimport { locale } from \"../utils/locales\";\r\n\r\nexport type GroupValue = {\r\n name?: string;\r\n grade?: number;\r\n};\r\n\r\nexport type GroupType = \"job\" | \"gang\";\r\n\r\ntype GroupSelectContextShape = {\r\n value: GroupValue;\r\n onChange: (next: GroupValue) => void;\r\n type?: GroupType;\r\n};\r\n\r\nconst GroupSelectContext = createContext<GroupSelectContextShape | null>(null);\r\n\r\n// ── <GroupSelect> ────────────────────────────────────────────────────────────\r\n// Wrapper that owns the {name, grade} pair and exposes it to children via\r\n// context. Renders nothing of its own — children handle presentation. Pass\r\n// any layout props through `style` if needed (e.g. width).\r\n\r\nexport type GroupSelectProps = {\r\n value: GroupValue;\r\n onChange: (next: GroupValue) => void;\r\n type?: GroupType;\r\n children: React.ReactNode;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupSelect({\r\n value,\r\n onChange,\r\n type,\r\n children,\r\n style,\r\n}: GroupSelectProps) {\r\n return (\r\n <GroupSelectContext.Provider value={{ value, onChange, type }}>\r\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.4vh\", ...style }}>\r\n {children}\r\n </div>\r\n </GroupSelectContext.Provider>\r\n );\r\n}\r\n\r\n// ── filtering ────────────────────────────────────────────────────────────────\r\n\r\nfunction filterByType(\r\n jobs: FrameworkGroup[],\r\n gangs: FrameworkGroup[],\r\n type?: GroupType,\r\n): FrameworkGroup[] {\r\n if (type === \"job\") return jobs;\r\n if (type === \"gang\") return gangs;\r\n return [...jobs, ...gangs];\r\n}\r\n\r\n// ── <GroupName> ──────────────────────────────────────────────────────────────\r\n// Group dropdown. Works standalone (own value/onChange) OR inside\r\n// <GroupSelect> (reads context, ignores standalone props). When the name\r\n// changes inside compound mode, the grade is reset to undefined since the\r\n// previous grade key may not exist in the new group.\r\n\r\nexport type GroupNameProps = {\r\n value?: string;\r\n onChange?: (name: string) => void;\r\n type?: GroupType;\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n size?: string;\r\n disabled?: boolean;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupName(props: GroupNameProps) {\r\n const ctx = useContext(GroupSelectContext);\r\n const jobs = useFrameworkGroups((s) => s.jobs);\r\n const gangs = useFrameworkGroups((s) => s.gangs);\r\n\r\n // Lazily pull jobs/gangs the first time a picker mounts (once process-wide,\r\n // guarded inside ensureFrameworkGroups). Replaces the old eager module-load\r\n // fetch that every consumer NUI ran whether or not a picker was ever shown.\r\n useEffect(() => {\r\n ensureFrameworkGroups();\r\n }, []);\r\n\r\n const inCompound = ctx !== null;\r\n const currentValue = inCompound ? ctx!.value.name : props.value;\r\n const filterType = inCompound ? ctx!.type : props.type;\r\n\r\n const list = filterByType(jobs, gangs, filterType);\r\n\r\n // When type is undefined we render Mantine's grouped data shape so the\r\n // user sees Jobs / Gangs sections in the dropdown.\r\n const data =\r\n filterType === undefined\r\n ? [\r\n { group: locale(\"Jobs\") || \"Jobs\", items: jobs.map((g) => ({ value: g.name, label: g.label })) },\r\n { group: locale(\"Gangs\") || \"Gangs\", items: gangs.map((g) => ({ value: g.name, label: g.label })) },\r\n ]\r\n : list.map((g) => ({ value: g.name, label: g.label }));\r\n\r\n return (\r\n <Select\r\n label={props.label}\r\n description={props.description}\r\n placeholder={props.placeholder ?? (locale(\"SelectGroup\") || \"Select…\")}\r\n size={props.size ?? \"xs\"}\r\n disabled={props.disabled}\r\n style={props.style}\r\n data={data as any}\r\n value={currentValue ?? null}\r\n searchable\r\n onChange={(v) => {\r\n const name = v ?? \"\";\r\n if (inCompound) {\r\n // Reset grade when the group changes — old grade likely invalid.\r\n ctx!.onChange({ name: name || undefined, grade: undefined });\r\n } else if (props.onChange) {\r\n props.onChange(name);\r\n }\r\n }}\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\n// ── <GroupRank> ──────────────────────────────────────────────────────────────\r\n// Grade dropdown for the currently-selected group. Compound-only. Disabled\r\n// when no group is selected or the group has no grades.\r\n\r\nexport type GroupRankProps = {\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n size?: string;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nexport function GroupRank(props: GroupRankProps) {\r\n const ctx = useContext(GroupSelectContext);\r\n if (ctx === null) {\r\n throw new Error(\"<GroupRank> must be a child of <GroupSelect>\");\r\n }\r\n const jobs = useFrameworkGroups((s) => s.jobs);\r\n const gangs = useFrameworkGroups((s) => s.gangs);\r\n\r\n // Defensive: ensure groups are fetched even if GroupRank renders without a\r\n // GroupName sibling. No-op after the first call (guarded).\r\n useEffect(() => {\r\n ensureFrameworkGroups();\r\n }, []);\r\n\r\n const all = [...jobs, ...gangs];\r\n const selectedGroup = all.find((g) => g.name === ctx.value.name) ?? null;\r\n const grades = selectedGroup?.grades ?? [];\r\n\r\n const data = grades.map((g) => ({\r\n value: String(g.grade),\r\n label: `${g.grade} — ${g.label || g.name}${g.isBoss ? \" (boss)\" : \"\"}`,\r\n }));\r\n\r\n return (\r\n <Select\r\n label={props.label}\r\n description={props.description}\r\n placeholder={props.placeholder ?? (locale(\"SelectGrade\") || \"Select grade…\")}\r\n size={props.size ?? \"xs\"}\r\n style={props.style}\r\n data={data}\r\n value={ctx.value.grade != null ? String(ctx.value.grade) : null}\r\n onChange={(v) => {\r\n ctx.onChange({\r\n ...ctx.value,\r\n grade: v != null ? Number(v) : undefined,\r\n });\r\n }}\r\n disabled={!selectedGroup || grades.length === 0}\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\n// Convenience namespace export so consumers can write\r\n// `<GroupSelect.Name>` / `<GroupSelect.Rank>` if they prefer.\r\nGroupSelect.Name = GroupName;\r\nGroupSelect.Rank = GroupRank;\r\n","import { createContext, useContext, type ReactNode } from \"react\";\r\nimport { Flex, Select, TextInput } from \"@mantine/core\";\r\nimport { INPUT_MAPPER_KEYS_BY_PRIMARY, INPUT_MAPPER_PRIMARY_OPTIONS } from \"@/utils/inputMapper\";\r\n\r\nexport type FiveMControls = {\r\n _type: string;\r\n _key: string;\r\n};\r\n\r\ntype KeyBindContextValue = {\r\n value: FiveMControls;\r\n onChange: (next: FiveMControls) => void;\r\n};\r\n\r\nconst KeyBindContext = createContext<KeyBindContextValue | null>(null);\r\n\r\nfunction useKeyBindContext(): KeyBindContextValue {\r\n const ctx = useContext(KeyBindContext);\r\n if (!ctx) {\r\n throw new Error(\"FiveMKeyBindInput.* must be used inside <FiveMKeyBindInput>\");\r\n }\r\n return ctx;\r\n}\r\n\r\ntype RootProps = {\r\n value: FiveMControls;\r\n onChange: (next: FiveMControls) => void;\r\n children: ReactNode;\r\n};\r\n\r\nfunction Root({ value, onChange, children }: RootProps) {\r\n return (\r\n <KeyBindContext.Provider value={{ value, onChange }}>\r\n <Flex gap=\"xs\" style={{ flex: 1 }}>\r\n {children}\r\n </Flex>\r\n </KeyBindContext.Provider>\r\n );\r\n}\r\n\r\ntype CategoryProps = {\r\n label?: string;\r\n};\r\n\r\nfunction Category({ label = \"Primary\" }: CategoryProps) {\r\n const { value, onChange } = useKeyBindContext();\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._type}\r\n data={[...INPUT_MAPPER_PRIMARY_OPTIONS]}\r\n onChange={(nextType) => {\r\n if (!nextType) return;\r\n\r\n const keyOptions = INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];\r\n const hasCurrentKey = keyOptions.includes(value._key);\r\n const nextKey = hasCurrentKey ? value._key : (keyOptions[0] ?? value._key);\r\n\r\n onChange({\r\n ...value,\r\n _type: nextType,\r\n _key: nextKey,\r\n });\r\n }}\r\n searchable\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\ntype KeyProps = {\r\n label?: string;\r\n};\r\n\r\nfunction Key({ label = \"Key\" }: KeyProps) {\r\n const { value, onChange } = useKeyBindContext();\r\n\r\n const keyOptions = INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];\r\n\r\n if (keyOptions.length === 0) {\r\n return (\r\n <TextInput\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._key}\r\n onChange={(e) => onChange({ ...value, _key: e.currentTarget.value })}\r\n placeholder=\"Type key value\"\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value._key}\r\n data={keyOptions}\r\n onChange={(nextKey) => {\r\n if (!nextKey) return;\r\n onChange({ ...value, _key: nextKey });\r\n }}\r\n searchable\r\n allowDeselect={false}\r\n />\r\n );\r\n}\r\n\r\nexport const FiveMKeyBindInput = Object.assign(Root, {\r\n Category,\r\n Key,\r\n});\r\n","// FiveM control-id pickers. These are for the numeric control IDs you pass\r\n// to IsControlPressed / DisableControlAction / EnableControlAction (the\r\n// ones documented at https://docs.fivem.net/docs/game-references/controls/),\r\n// not for keybind primary keys — for those use FiveMKeyBindInput.\r\n//\r\n// Two flavours:\r\n// • <ControlSelect> — single id, returns number\r\n// • <ControlMultiSelect> — array of ids, returns number[]\r\n//\r\n// Both accept arbitrary Mantine Select / MultiSelect props so callers can\r\n// style/portal/disable as they need. Custom (uncatalogued) IDs the data\r\n// already contains in `value` are still rendered — they just appear in a\r\n// \"Custom\" group so the user can see and remove them.\r\n\r\nimport { MultiSelect, Select } from \"@mantine/core\";\r\nimport type { MultiSelectProps, SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_CONTROLS,\r\n GTA_CONTROL_GROUP_ORDER,\r\n formatGtaControl,\r\n type GtaControl,\r\n type GtaControlGroup,\r\n} from \"@/utils/gtaControls\";\r\n\r\n// Build the grouped Mantine data once per module-load. Each group entry is\r\n// `{ group: name, items: [{ value, label }, ...] }`.\r\nfunction buildGroupedData(extraIds: number[] = []) {\r\n // Dedupe by id — Mantine throws \"Duplicate options\" if two entries share\r\n // the same value. First occurrence wins so the catalogue order in\r\n // GTA_CONTROLS stays authoritative.\r\n const groups = new Map<GtaControlGroup, GtaControl[]>();\r\n const seen = new Set<number>();\r\n for (const c of GTA_CONTROLS) {\r\n if (seen.has(c.id)) continue;\r\n seen.add(c.id);\r\n if (!groups.has(c.group)) groups.set(c.group, []);\r\n groups.get(c.group)!.push(c);\r\n }\r\n\r\n const data = GTA_CONTROL_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((c) => ({\r\n value: String(c.id),\r\n label: formatGtaControl(c.id),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom (uncatalogued) ids in a \"Custom\" group so they're visible\r\n // in the dropdown rather than disappearing. Without this, MultiSelect drops\r\n // the chip silently when the value isn't in `data`.\r\n const knownIds = new Set(GTA_CONTROLS.map((c) => c.id));\r\n const customs = extraIds.filter((id) => !knownIds.has(id));\r\n if (customs.length > 0) {\r\n // The \"Custom\" group label is just a heading for unrecognised IDs the\r\n // caller has in their data — it's not a real GtaControlGroup, so cast\r\n // through unknown.\r\n data.push({\r\n group: \"Custom\" as unknown as GtaControlGroup,\r\n items: customs.map((id) => ({ value: String(id), label: `Control ${id}` })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\n// ── Single-control Select ──────────────────────────────────────────────────\r\n\r\nexport type ControlSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number | null | undefined;\r\n onChange: (id: number | null) => void;\r\n};\r\n\r\nexport function ControlSelect({\r\n value,\r\n onChange,\r\n label = \"Control\",\r\n size = \"xs\",\r\n searchable = true,\r\n ...rest\r\n}: ControlSelectProps) {\r\n const data = buildGroupedData(value != null ? [value] : []);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching controls\"\r\n {...rest}\r\n data={data}\r\n value={value != null ? String(value) : null}\r\n onChange={(v) => onChange(v == null ? null : Number(v))}\r\n />\r\n );\r\n}\r\n\r\n// ── Multi-control MultiSelect ──────────────────────────────────────────────\r\n\r\nexport type ControlMultiSelectProps = Omit<MultiSelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n value: number[];\r\n onChange: (ids: number[]) => void;\r\n};\r\n\r\nexport function ControlMultiSelect({\r\n value,\r\n onChange,\r\n label = \"Controls\",\r\n size = \"xs\",\r\n searchable = true,\r\n ...rest\r\n}: ControlMultiSelectProps) {\r\n const data = buildGroupedData(value);\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching controls\"\r\n {...rest}\r\n data={data}\r\n value={value.map(String)}\r\n onChange={(vals) => onChange(vals.map((v) => Number(v)).filter((n) => Number.isFinite(n)))}\r\n />\r\n );\r\n}\r\n","import { alpha, Loader, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Check, X } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\n\r\ntype SaveState = \"idle\" | \"pending\" | \"success\" | \"error\";\r\n\r\nexport function AsyncSaveButton({\r\n onSave,\r\n color,\r\n label = \"Save Changes\",\r\n style,\r\n}: {\r\n onSave: () => Promise<any>;\r\n color: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n}) {\r\n const theme = useMantineTheme();\r\n const [state, setState] = useState<SaveState>(\"idle\");\r\n\r\n const handleClick = async () => {\r\n if (state === \"pending\") return;\r\n setState(\"pending\");\r\n try {\r\n const result = await onSave();\r\n setState(result?.success === false ? \"error\" : \"success\");\r\n } catch {\r\n setState(\"error\");\r\n }\r\n setTimeout(() => setState(\"idle\"), 2000);\r\n };\r\n\r\n const c = state === \"error\" ? \"#ef4444\" : color;\r\n\r\n return (\r\n <motion.button\r\n onClick={handleClick}\r\n disabled={state === \"pending\"}\r\n whileHover={state === \"pending\" ? {} : { background: alpha(c, 0.25) }}\r\n whileTap={state === \"pending\" ? {} : { scale: 0.98 }}\r\n style={{\r\n background: alpha(c, 0.14),\r\n border: `0.1vh solid ${alpha(c, 0.4)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: `${theme.spacing.xxs} ${theme.spacing.xs}`,\r\n cursor: state === \"pending\" ? \"default\" : \"pointer\",\r\n display: \"flex\", alignItems: \"center\",\r\n justifyContent: \"center\", gap: theme.spacing.xxs,\r\n transition: \"background 0.2s, border-color 0.2s\",\r\n alignSelf: \"flex-end\",\r\n ...style,\r\n }}\r\n >\r\n {state === \"pending\"\r\n ? <Loader size=\"1.4vh\" color={c} type=\"oval\" />\r\n : state === \"error\"\r\n ? <X size=\"1.4vh\" color={c} />\r\n : <Check size=\"1.4vh\" color={c} />\r\n }\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" tt=\"uppercase\" lts=\"0.06em\" c={c}>\r\n {state === \"success\" ? \"Saved!\" : state === \"error\" ? \"Failed!\" : label}\r\n </Text>\r\n </motion.button>\r\n );\r\n}\r\n","import { Flex, Text } from \"@mantine/core\";\r\nimport { locale } from \"@/utils\";\r\nimport { LucideProps } from \"lucide-react\";\r\nimport { ComponentType } from \"react\";\r\n\r\nexport type AdminPageTitleProps = {\r\n title: string;\r\n icon: ComponentType<LucideProps>;\r\n color: string;\r\n};\r\n\r\nexport function AdminPageTitle(props: AdminPageTitleProps) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\">\r\n <props.icon color={props.color} />\r\n <Text ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.1em\" size=\"sm\" c=\"rgba(255,255,255,0.6)\">\r\n {locale(props.title)}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n","// Shared \"label + description + Switch on the right\" panel used across\r\n// configurators (BasicSection, BackstoriesSection, ThemeOverrideSection, …).\r\n// Centralising it here means a single visual style — dark[5] tinted\r\n// background, faint white outline, primary-colored track when on — instead of\r\n// each consumer hand-rolling slightly different borders/colours.\r\n//\r\n// Variants:\r\n// • default — tall row with description, used at the top of a tab/section\r\n// • compact — smaller padding + sm switch, for nested editor cards (e.g.\r\n// waypoint useNavmesh inside the SceneEditor walk-path block)\r\n//\r\n// `thumbIcon` supports the Lock-on-thumb pattern used by gated toggles.\r\n\r\nimport { alpha, Flex, Switch, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { ReactNode } from \"react\";\r\n\r\nexport type SwitchPanelProps = {\r\n label: ReactNode;\r\n description?: ReactNode;\r\n checked: boolean;\r\n onChange: (v: boolean) => void;\r\n disabled?: boolean;\r\n /** Icon rendered on the Switch's thumb (e.g. a Lock when locked). */\r\n thumbIcon?: ReactNode;\r\n /** Compact variant — used for nested rows inside an editor card. */\r\n compact?: boolean;\r\n};\r\n\r\nexport function SwitchPanel({\r\n label,\r\n description,\r\n checked,\r\n onChange,\r\n disabled,\r\n thumbIcon,\r\n compact,\r\n}: SwitchPanelProps) {\r\n const theme = useMantineTheme();\r\n const pc = theme.colors[theme.primaryColor];\r\n\r\n const bg = compact\r\n ? alpha(theme.colors.dark[6], 0.5)\r\n : alpha(theme.colors.dark[5], 0.35);\r\n const border = compact\r\n ? \"0.1vh solid rgba(255,255,255,0.04)\"\r\n : \"0.1vh solid rgba(255,255,255,0.05)\";\r\n\r\n return (\r\n <Flex\r\n justify=\"space-between\"\r\n align=\"center\"\r\n px={compact ? \"xs\" : \"xs\"}\r\n py={compact ? \"xxs\" : \"xs\"}\r\n style={{\r\n background: bg,\r\n border,\r\n borderRadius: theme.radius.xs,\r\n opacity: disabled ? 0.5 : 1,\r\n }}\r\n >\r\n <Flex direction=\"column\" gap=\"xxs\" style={{ flex: 1, minWidth: 0 }}>\r\n {typeof label === \"string\" ? (\r\n compact ? (\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n tt=\"uppercase\"\r\n lts=\"0.05em\"\r\n >\r\n {label}\r\n </Text>\r\n ) : (\r\n <Text ff=\"Akrobat Bold\" size=\"xs\" c=\"rgba(255,255,255,0.85)\">\r\n {label}\r\n </Text>\r\n )\r\n ) : (\r\n label\r\n )}\r\n {description && (\r\n typeof description === \"string\" ? (\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c={compact ? \"rgba(255,255,255,0.4)\" : \"rgba(255,255,255,0.45)\"}>\r\n {description}\r\n </Text>\r\n ) : (\r\n description\r\n )\r\n )}\r\n </Flex>\r\n <Switch\r\n checked={checked}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.currentTarget.checked)}\r\n size={compact ? \"sm\" : \"md\"}\r\n thumbIcon={thumbIcon}\r\n styles={{\r\n track: {\r\n background: checked ? alpha(pc[6], 0.4) : \"rgba(255,255,255,0.08)\",\r\n borderColor: checked ? alpha(pc[6], 0.6) : \"rgba(255,255,255,0.1)\",\r\n },\r\n }}\r\n />\r\n </Flex>\r\n );\r\n}\r\n","import { ActionIcon, Flex, Stack, Text } from \"@mantine/core\";\r\nimport { ChevronDown, ChevronUp, FlaskConical } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { isEnvBrowser } from \"../../utils/misc\";\r\n\r\nexport interface TestBedItem {\r\n key: string;\r\n label: string;\r\n active: boolean;\r\n onToggle: (next: boolean) => void;\r\n}\r\n\r\nexport type TestBedPlacement = \"top-left\" | \"top-center\" | \"top-right\";\r\n\r\nexport interface TestBedProps {\r\n items: TestBedItem[];\r\n /** localStorage key used to persist toggled state across reloads. Default: \"testbed:open-state\". */\r\n storageKey?: string;\r\n /** Disable localStorage persistence entirely. Default: false. */\r\n disablePersistence?: boolean;\r\n /** Header label shown in the collapsed pill. Default: \"TestBed\". */\r\n title?: string;\r\n /** Where to anchor the floating panel. Default: \"top-left\". */\r\n placement?: TestBedPlacement;\r\n}\r\n\r\nconst placementStyle = (placement: TestBedPlacement): React.CSSProperties => {\r\n switch (placement) {\r\n case \"top-center\":\r\n return { top: \"1vh\", left: \"50%\", transform: \"translateX(-50%)\" };\r\n case \"top-right\":\r\n return { top: \"1vh\", right: \"1vh\" };\r\n case \"top-left\":\r\n default:\r\n return { top: \"1vh\", left: \"1vh\" };\r\n }\r\n};\r\n\r\nconst loadPersistedState = (storageKey: string): Record<string, boolean> => {\r\n try {\r\n const raw = localStorage.getItem(storageKey);\r\n return raw ? JSON.parse(raw) : {};\r\n } catch {\r\n return {};\r\n }\r\n};\r\n\r\nconst savePersistedState = (storageKey: string, state: Record<string, boolean>) => {\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(state));\r\n } catch {}\r\n};\r\n\r\nexport function TestBed({\r\n items,\r\n storageKey = \"testbed:open-state\",\r\n disablePersistence = false,\r\n title = \"TestBed\",\r\n placement = \"top-left\",\r\n}: TestBedProps) {\r\n const [open, setOpen] = useState(false);\r\n const itemsRef = useRef(items);\r\n itemsRef.current = items;\r\n\r\n useEffect(() => {\r\n if (!isEnvBrowser() || disablePersistence) return;\r\n const persisted = loadPersistedState(storageKey);\r\n itemsRef.current.forEach((item) => {\r\n const persistedValue = persisted[item.key];\r\n if (typeof persistedValue === \"boolean\" && persistedValue !== item.active) {\r\n item.onToggle(persistedValue);\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (!isEnvBrowser()) return null;\r\n\r\n const toggle = (item: TestBedItem) => {\r\n const next = !item.active;\r\n item.onToggle(next);\r\n if (!disablePersistence) {\r\n const persisted = loadPersistedState(storageKey);\r\n persisted[item.key] = next;\r\n savePersistedState(storageKey, persisted);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n ...placementStyle(placement),\r\n zIndex: 2147483647,\r\n pointerEvents: \"auto\",\r\n fontSize: \"1.4vh\",\r\n }}\r\n >\r\n <Flex\r\n align=\"center\"\r\n gap=\"xs\"\r\n px=\"sm\"\r\n py=\"xs\"\r\n onClick={() => setOpen((v) => !v)}\r\n style={{\r\n cursor: \"pointer\",\r\n background: \"rgba(0,0,0,0.55)\",\r\n backdropFilter: \"blur(0.6vh)\",\r\n WebkitBackdropFilter: \"blur(0.6vh)\",\r\n border: \"0.1vh solid rgba(255,255,255,0.1)\",\r\n borderRadius: \"var(--mantine-radius-sm)\",\r\n userSelect: \"none\",\r\n minWidth: \"16vh\",\r\n }}\r\n >\r\n <FlaskConical size={14} color=\"rgba(255,255,255,0.7)\" />\r\n <Text\r\n size=\"xs\"\r\n ff=\"Akrobat Bold\"\r\n tt=\"uppercase\"\r\n lts=\"0.08em\"\r\n c=\"rgba(255,255,255,0.85)\"\r\n style={{ flex: 1 }}\r\n >\r\n {title}\r\n </Text>\r\n <ActionIcon size=\"xs\" variant=\"transparent\" c=\"rgba(255,255,255,0.6)\">\r\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\r\n </ActionIcon>\r\n </Flex>\r\n\r\n {open && (\r\n <Stack\r\n gap={4}\r\n mt=\"xxs\"\r\n p=\"xs\"\r\n style={{\r\n background: \"rgba(0,0,0,0.55)\",\r\n backdropFilter: \"blur(0.6vh)\",\r\n WebkitBackdropFilter: \"blur(0.6vh)\",\r\n border: \"0.1vh solid rgba(255,255,255,0.1)\",\r\n borderRadius: \"var(--mantine-radius-sm)\",\r\n minWidth: \"16vh\",\r\n maxHeight: \"80vh\",\r\n overflowY: \"auto\",\r\n }}\r\n >\r\n {items.map((item) => (\r\n <Flex\r\n key={item.key}\r\n align=\"center\"\r\n justify=\"space-between\"\r\n gap=\"xs\"\r\n px=\"xs\"\r\n py=\"xxs\"\r\n onClick={() => toggle(item)}\r\n style={{\r\n cursor: \"pointer\",\r\n borderRadius: \"var(--mantine-radius-xs)\",\r\n background: item.active ? \"rgba(245,158,11,0.15)\" : \"rgba(255,255,255,0.03)\",\r\n border: `0.1vh solid ${item.active ? \"rgba(245,158,11,0.35)\" : \"rgba(255,255,255,0.05)\"}`,\r\n userSelect: \"none\",\r\n }}\r\n >\r\n <Text\r\n size=\"xs\"\r\n ff=\"Akrobat Bold\"\r\n c={item.active ? \"#f59e0b\" : \"rgba(255,255,255,0.75)\"}\r\n >\r\n {item.label}\r\n </Text>\r\n <Text\r\n size=\"xxs\"\r\n ff=\"Akrobat Bold\"\r\n tt=\"uppercase\"\r\n lts=\"0.06em\"\r\n c={item.active ? \"#f59e0b\" : \"rgba(255,255,255,0.35)\"}\r\n >\r\n {item.active ? \"On\" : \"Off\"}\r\n </Text>\r\n </Flex>\r\n ))}\r\n </Stack>\r\n )}\r\n </div>\r\n );\r\n}\r\n","// Per-resource theme override editor. Rendered inside a consumer resource's\r\n// configurator (e.g. dirk_multichar, dirk_fishing) to let admins decouple\r\n// that resource's theme from dirk_lib's global appearance.\r\n//\r\n// Data shape (driven by a schema block on the consumer side):\r\n// theme: {\r\n// useOverride: boolean,\r\n// primaryColor: string, // \"dirk\" | \"custom\" | mantine palette name\r\n// primaryShade: 0..9,\r\n// customTheme: string[10], // hex stops\r\n// }\r\n//\r\n// The override flag goes through the same scriptConfig path as everything\r\n// else — the resource's GET_SETTINGS callback is responsible for deciding\r\n// whether to push the global theme keys or the override keys to NUI on\r\n// hydration. DirkProvider's UPDATE_DIRK_LIB_SETTINGS listener gates global\r\n// pushes when the consumer has its own override active (see useSettings).\r\n//\r\n// Reset-to-global = flip the override switch off. The saved palette stays so\r\n// admins can re-enable without re-picking colours. A separate wipe trash icon\r\n// nukes the local palette back to the schema default.\r\n\r\nimport { generateColors } from \"@mantine/colors-generator\";\r\nimport {\r\n ActionIcon,\r\n ColorInput,\r\n Flex,\r\n NumberInput,\r\n Popover,\r\n Select,\r\n Switch,\r\n Text,\r\n useMantineTheme,\r\n} from \"@mantine/core\";\r\nimport { Palette, RotateCcw } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport { useFormActions, useFormField } from \"@/hooks/useForm\";\r\nimport { locale } from \"@/utils/locales\";\r\nimport {\r\n DEFAULT_PALETTE,\r\n defaultThemeOverride as DEFAULT_VALUE,\r\n type ThemeOverrideValue,\r\n} from \"@/types/theme\";\r\nimport { AdminPageTitle } from \"./AdminPageTitle\";\r\nimport { SwitchPanel } from \"./SwitchPanel\";\r\n\r\n// NOTE: `ThemeOverrideValue` is intentionally NOT re-exported here anymore — it\r\n// now lives in `@/types/theme` (single source of truth, shared with\r\n// useSettings) and is surfaced via the top-level `types` barrel. Re-exporting\r\n// it from this module too would create an ambiguous `export *` at src/index.ts.\r\n\r\nconst MANTINE_COLOR_OPTIONS = [\r\n \"dirk\",\r\n \"red\",\r\n \"pink\",\r\n \"grape\",\r\n \"violet\",\r\n \"indigo\",\r\n \"blue\",\r\n \"cyan\",\r\n \"teal\",\r\n \"green\",\r\n \"lime\",\r\n \"yellow\",\r\n \"orange\",\r\n].map((value) => ({ value, label: value }));\r\n\r\nfunction GroupLabel({ label }: { label: string }) {\r\n return (\r\n <Flex align=\"center\" gap=\"xs\" mt=\"xxs\">\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.07em\" c=\"rgba(255,255,255,0.2)\">\r\n {label}\r\n </Text>\r\n <div style={{ flex: 1, height: \"0.05vh\", background: \"rgba(255,255,255,0.06)\" }} />\r\n </Flex>\r\n );\r\n}\r\n\r\nexport type ThemeOverrideSectionProps = {\r\n /**\r\n * Schema path the consumer stores its override block under. Defaults to\r\n * \"theme\" — matches the recommended schema key.\r\n */\r\n schemaKey?: string;\r\n /**\r\n * Optional title for the AdminPageTitle. Defaults to the localized\r\n * \"Theme\" string with a fallback.\r\n */\r\n title?: string;\r\n};\r\n\r\nexport function ThemeOverrideSection({\r\n schemaKey = \"theme\",\r\n title,\r\n}: ThemeOverrideSectionProps) {\r\n const mantineTheme = useMantineTheme();\r\n const color = mantineTheme.colors[mantineTheme.primaryColor][5];\r\n\r\n const raw = useFormField<Record<string, ThemeOverrideValue>>(schemaKey as never) as\r\n | Partial<ThemeOverrideValue>\r\n | undefined;\r\n // Normalise — the form field could be undefined at first paint, and any of\r\n // the inner fields could be missing if the schema default block hasn't\r\n // fully hydrated. Merge against DEFAULT_VALUE so the inputs always have\r\n // something to render.\r\n const value: ThemeOverrideValue = {\r\n useOverride: raw?.useOverride ?? DEFAULT_VALUE.useOverride,\r\n primaryColor: raw?.primaryColor ?? DEFAULT_VALUE.primaryColor,\r\n primaryShade: raw?.primaryShade ?? DEFAULT_VALUE.primaryShade,\r\n customTheme:\r\n Array.isArray(raw?.customTheme) && raw!.customTheme.length === 10\r\n ? (raw!.customTheme as string[])\r\n : DEFAULT_VALUE.customTheme,\r\n };\r\n\r\n const { setValue } = useFormActions<Record<string, ThemeOverrideValue>>();\r\n const set = <K extends keyof ThemeOverrideValue>(key: K, val: ThemeOverrideValue[K]) =>\r\n setValue(schemaKey as never, { ...value, [key]: val } as never);\r\n\r\n const useCustom = value.primaryColor === \"custom\";\r\n const editable = value.useOverride;\r\n\r\n const setSwatch = (index: number, hex: string) => {\r\n const next = [...value.customTheme];\r\n next[index] = hex;\r\n set(\"customTheme\", next);\r\n };\r\n\r\n const generateFromBase = (hex: string) => {\r\n try {\r\n const generated = generateColors(hex);\r\n set(\"customTheme\", generated as unknown as string[]);\r\n } catch {\r\n // invalid colour — ignore\r\n }\r\n };\r\n\r\n const resetPalette = () => set(\"customTheme\", DEFAULT_PALETTE);\r\n\r\n return (\r\n <Flex\r\n direction=\"column\"\r\n gap=\"xs\"\r\n p=\"sm\"\r\n style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }}\r\n >\r\n <AdminPageTitle\r\n icon={Palette}\r\n title={title || locale(\"Theme\") || \"Theme\"}\r\n color={color}\r\n />\r\n\r\n {/* Master toggle — flipping this off resets the resource to follow the\r\n global dirk_lib theme. The saved palette is preserved so re-enabling\r\n doesn't lose work. Uses the shared SwitchPanel so the outline + Switch\r\n styling match every other configurator section. */}\r\n <SwitchPanel\r\n label={locale(\"OverrideGlobalTheme\") || \"Override global theme\"}\r\n description={\r\n locale(\"OverrideGlobalThemeDesc\") ||\r\n \"When on, this resource uses its own primary colour and palette instead of dirk_lib's. Turn off to fall back to the global theme — your custom palette is kept.\"\r\n }\r\n checked={value.useOverride}\r\n onChange={(v) => set(\"useOverride\", v)}\r\n />\r\n\r\n <div\r\n style={{\r\n opacity: editable ? 1 : 0.4,\r\n pointerEvents: editable ? \"auto\" : \"none\",\r\n transition: \"opacity 0.15s\",\r\n }}\r\n >\r\n <GroupLabel label={locale(\"PrimaryColor\") || \"Primary Colour\"} />\r\n\r\n <Switch\r\n label={locale(\"UseCustomPalette\") || \"Use custom palette\"}\r\n size=\"md\"\r\n mt=\"xs\"\r\n checked={useCustom}\r\n onChange={(e) => set(\"primaryColor\", e.currentTarget.checked ? \"custom\" : \"dirk\")}\r\n styles={{\r\n label: {\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"0.65em\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n color: \"rgba(255,255,255,0.35)\",\r\n },\r\n }}\r\n />\r\n\r\n <Flex gap=\"xs\" mt=\"xs\">\r\n {!useCustom && (\r\n <Select\r\n label={locale(\"MantinePalette\") || \"Mantine palette\"}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n value={value.primaryColor}\r\n data={MANTINE_COLOR_OPTIONS}\r\n allowDeselect={false}\r\n onChange={(v) => v && set(\"primaryColor\", v)}\r\n />\r\n )}\r\n <NumberInput\r\n label={locale(\"Shade\") || \"Shade\"}\r\n size=\"xs\"\r\n style={{ flex: 1 }}\r\n min={0}\r\n max={9}\r\n value={value.primaryShade}\r\n onChange={(v) => set(\"primaryShade\", Number(v))}\r\n />\r\n </Flex>\r\n\r\n {useCustom && (\r\n <>\r\n <Flex align=\"center\" justify=\"space-between\" mt=\"sm\">\r\n <Text\r\n ff=\"Akrobat Bold\"\r\n size=\"xxs\"\r\n tt=\"uppercase\"\r\n lts=\"0.07em\"\r\n c=\"rgba(255,255,255,0.2)\"\r\n >\r\n {locale(\"CustomPalette\") || \"Custom palette\"}\r\n </Text>\r\n <ActionIcon\r\n size=\"sm\"\r\n variant=\"subtle\"\r\n onClick={resetPalette}\r\n title={locale(\"ResetPalette\") || \"Reset palette\"}\r\n >\r\n <RotateCcw size=\"1.4vh\" />\r\n </ActionIcon>\r\n </Flex>\r\n\r\n <ColorInput\r\n label={locale(\"BaseColor\") || \"Base colour\"}\r\n size=\"xs\"\r\n value={value.customTheme[value.primaryShade] ?? value.customTheme[5] ?? \"#000000\"}\r\n onChange={generateFromBase}\r\n eyeDropperIcon={<></>}\r\n />\r\n\r\n <Flex gap=\"xxs\" mt=\"xxs\">\r\n {value.customTheme.map((swatch, i) => (\r\n <SwatchTile\r\n key={i}\r\n index={i}\r\n value={swatch}\r\n isPrimary={i === value.primaryShade}\r\n onChange={(v) => setSwatch(i, v)}\r\n />\r\n ))}\r\n </Flex>\r\n </>\r\n )}\r\n </div>\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction SwatchTile({\r\n index,\r\n value,\r\n isPrimary,\r\n onChange,\r\n}: {\r\n index: number;\r\n value: string;\r\n isPrimary: boolean;\r\n onChange: (v: string) => void;\r\n}) {\r\n const [opened, setOpened] = useState(false);\r\n return (\r\n <Popover opened={opened} onChange={setOpened} position=\"bottom\" withArrow zIndex={10000}>\r\n <Popover.Target>\r\n <button\r\n onClick={() => setOpened((o) => !o)}\r\n title={`${index} · ${value}`}\r\n style={{\r\n flex: 1,\r\n aspectRatio: \"1 / 1\",\r\n background: value,\r\n border: isPrimary\r\n ? \"0.2vh solid rgba(255,255,255,0.85)\"\r\n : \"0.1vh solid rgba(255,255,255,0.15)\",\r\n borderRadius: \"0.4vh\",\r\n cursor: \"pointer\",\r\n padding: 0,\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n justifyContent: \"flex-end\",\r\n position: \"relative\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n fontFamily: \"Akrobat Bold\",\r\n fontSize: \"0.9vh\",\r\n lineHeight: 1,\r\n padding: \"0.2vh 0.3vh\",\r\n color: \"rgba(0,0,0,0.55)\",\r\n background: \"rgba(255,255,255,0.55)\",\r\n borderRadius: \"0.25vh\",\r\n margin: \"0.2vh\",\r\n }}\r\n >\r\n {index}\r\n </span>\r\n </button>\r\n </Popover.Target>\r\n <Popover.Dropdown p=\"xs\">\r\n <ColorInput\r\n size=\"xs\"\r\n value={value}\r\n onChange={onChange}\r\n format=\"hex\"\r\n eyeDropperIcon={<></>}\r\n />\r\n </Popover.Dropdown>\r\n </Popover>\r\n );\r\n}\r\n","// Fetches normalised player lists from dirk_lib's admin tool subsystem.\r\n//\r\n// Two modes, controlled by `includeOffline`:\r\n// • false (default) → online-only. Fast, cheap, refreshed every ~5s.\r\n// • true → DB-backed search across online + offline players.\r\n// Filtered server-side by `search`. Cap of 50.\r\n//\r\n// Caching: react-query handles dedupe + stale-while-revalidate, keyed on\r\n// (mode, search, limit). Multiple <PlayerSelect>s on screen share one\r\n// fetch. Typing \"j\" → \"jo\" → \"joh\" creates separate cache entries — each\r\n// stays cached for 5 minutes (gcTime) so re-typing reuses instantly.\r\n//\r\n// Admin gating: lives behind the ADMIN_TOOL_QUERY perm check on the\r\n// server. Outside an open admin panel, fetches return empty arrays.\r\n\r\nimport { useQuery, keepPreviousData } from \"@tanstack/react-query\";\r\nimport { fetchNui } from \"../utils/fetchNui\";\r\n\r\nexport type Player = {\r\n /** Server id when online, null when offline. */\r\n id: number | null;\r\n /** Persistent identifier — citizenid (qb/qbx) or license (esx). */\r\n citizenId: string;\r\n /** Steam/Discord display name from GetPlayerName(src). Blank for some\r\n * framework + offline combos (ESX users table doesn't store it). */\r\n name: string;\r\n /** First name + last name from the framework's character data. */\r\n charName: string;\r\n online: boolean;\r\n};\r\n\r\nexport type UsePlayersOptions = {\r\n /** When true, hits the DB and returns offline + online matches.\r\n * When false (default), returns only currently-connected players. */\r\n includeOffline?: boolean;\r\n /** Required when includeOffline=true; ignored otherwise. Server-side\r\n * filtered (LIKE) across char name, citizenId, account name. */\r\n search?: string;\r\n /** Default 50, max 50 (capped server-side). */\r\n limit?: number;\r\n /** Override staleTime — how long the cache stays fresh before background\r\n * refetch. Default 5s for online, 30s for search. */\r\n staleTimeMs?: number;\r\n /** Set to e.g. 10000 to auto-refresh every 10s. Off by default. */\r\n refetchIntervalMs?: number;\r\n};\r\n\r\nexport type UsePlayersResult = {\r\n players: Player[];\r\n isLoading: boolean;\r\n isFetching: boolean;\r\n error: Error | null;\r\n refresh: () => void;\r\n};\r\n\r\nexport function usePlayers(opts: UsePlayersOptions = {}): UsePlayersResult {\r\n const {\r\n includeOffline = false,\r\n search = \"\",\r\n limit = 50,\r\n staleTimeMs,\r\n refetchIntervalMs,\r\n } = opts;\r\n\r\n const query = useQuery<Player[]>({\r\n queryKey: includeOffline\r\n ? [\"dirk:players\", \"search\", search.trim().toLowerCase(), limit]\r\n : [\"dirk:players\", \"online\"],\r\n queryFn: async () => {\r\n const toolId = includeOffline ? \"searchPlayers\" : \"getOnlinePlayers\";\r\n const payload = includeOffline\r\n ? { id: toolId, value: { search: search.trim(), limit } }\r\n : { id: toolId };\r\n const result = await fetchNui<Player[] | null>(\r\n \"ADMIN_TOOL_QUERY\",\r\n payload,\r\n // Browser-dev fallback. Returns a couple of mock players so the\r\n // dev shell isn't blank.\r\n includeOffline\r\n ? [\r\n { id: 1, citizenId: \"ABC12345\", name: \"Dev User\", charName: \"John Doe\", online: true },\r\n { id: null, citizenId: \"DEF67890\", name: \"\", charName: \"Jane Offline\", online: false },\r\n ]\r\n : [\r\n { id: 1, citizenId: \"ABC12345\", name: \"Dev User\", charName: \"John Doe\", online: true },\r\n ],\r\n );\r\n return Array.isArray(result) ? result : [];\r\n },\r\n staleTime: staleTimeMs ?? (includeOffline ? 30_000 : 5_000),\r\n gcTime: 5 * 60_000,\r\n refetchInterval: refetchIntervalMs ?? false,\r\n refetchOnWindowFocus: false,\r\n placeholderData: includeOffline ? keepPreviousData : undefined,\r\n });\r\n\r\n return {\r\n players: query.data ?? [],\r\n isLoading: query.isLoading,\r\n isFetching: query.isFetching,\r\n error: (query.error as Error | null) ?? null,\r\n refresh: () => query.refetch(),\r\n };\r\n}\r\n","// Player picker. Drop-in Mantine <Select> wrapper around usePlayers().\r\n//\r\n// Default mode (online only):\r\n// <PlayerSelect value={citizenId} onChange={p => set('owner', p?.id)} />\r\n//\r\n// Search-driven offline support (includes the persistent players table):\r\n// <PlayerSelect includeOffline value={citizenId} onChange={p => set('owner', p?.citizenId)} />\r\n//\r\n// `value` is a citizenId string (or null). `onChange` receives the full\r\n// Player object so callers pick what to persist — server id for live\r\n// targeting, citizenId for persistent ownership.\r\n//\r\n// Each row renders with a colored status dot on the right:\r\n// • green for online (id is non-null)\r\n// • red for offline (id is null)\r\n//\r\n// In offline mode, typing into the input triggers debounced server-side\r\n// searches (300ms). react-query caches each unique search so retyping is\r\n// instant. A 🔄 refresh button in the rightSection forces a fresh fetch.\r\n\r\nimport { ActionIcon, Group, Loader, Select, Text, type SelectProps, useMantineTheme } from \"@mantine/core\";\r\nimport { RefreshCw } from \"lucide-react\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { usePlayers, type Player } from \"../../hooks/usePlayers\";\r\n\r\nexport type PlayerSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\" | \"rightSection\" | \"renderOption\"> & {\r\n value: string | null;\r\n onChange: (player: Player | null) => void;\r\n /** When true, runs a DB-backed search across offline + online. Enables\r\n * the search box behaviour. Default false (online only). */\r\n includeOffline?: boolean;\r\n /** Cap on results returned (max 50, server-enforced). */\r\n limit?: number;\r\n /** Localisable label overrides. Defaults are English. Pass locale()'d\r\n * strings from the consumer to translate the dropdown chrome. */\r\n loadingLabel?: string;\r\n onlineLabel?: string;\r\n offlineLabel?: string;\r\n refreshLabel?: string;\r\n};\r\n\r\nconst DEBOUNCE_MS = 300;\r\nconst ONLINE_COLOR = \"#3FA83F\"; // green\r\nconst OFFLINE_COLOR = \"#E54141\"; // red\r\n\r\nexport function PlayerSelect({\r\n value,\r\n onChange,\r\n includeOffline = false,\r\n limit = 50,\r\n searchable: searchableProp,\r\n placeholder,\r\n nothingFoundMessage: nothingFoundMessageProp,\r\n loadingLabel = \"Loading…\",\r\n onlineLabel = \"Online\",\r\n offlineLabel = \"Offline\",\r\n refreshLabel = \"Refresh player list\",\r\n ...rest\r\n}: PlayerSelectProps) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n\r\n // Local search input + debounced version we feed the hook — avoids a\r\n // request per keystroke.\r\n const [searchInput, setSearchInput] = useState(\"\");\r\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n\r\n const { players, isFetching, refresh } = usePlayers({\r\n includeOffline,\r\n search: includeOffline ? debouncedSearch : undefined,\r\n limit,\r\n });\r\n\r\n // Online first, then alphabetical by charName — admins want to see the\r\n // currently-connected players at the top of the list.\r\n const sortedPlayers = useMemo(\r\n () =>\r\n [...players].sort((a, b) => {\r\n if (a.online !== b.online) return a.online ? -1 : 1;\r\n return a.charName.localeCompare(b.charName);\r\n }),\r\n [players],\r\n );\r\n\r\n const playerByCitizen = useMemo(() => {\r\n const m = new Map<string, Player>();\r\n for (const p of sortedPlayers) m.set(p.citizenId, p);\r\n return m;\r\n }, [sortedPlayers]);\r\n\r\n const data = useMemo(() => {\r\n const items = sortedPlayers.map((p) => ({\r\n value: p.citizenId,\r\n label: formatLabel(p),\r\n }));\r\n // If the controlled value isn't in the current player list (e.g. a\r\n // persistent lab owner who isn't online and hasn't been searched yet),\r\n // inject a synthetic option so Mantine can render the value text\r\n // instead of falling back to the placeholder.\r\n if (value && !items.some((i) => i.value === value)) {\r\n items.unshift({ value, label: value });\r\n }\r\n return items;\r\n }, [sortedPlayers, value]);\r\n\r\n const selectedPlayer = value ? playerByCitizen.get(value) ?? null : null;\r\n const selectedLabel = selectedPlayer ? formatLabel(selectedPlayer) : null;\r\n\r\n // Debounce the search → debouncedSearch. Short-circuit when the input\r\n // exactly matches the currently-selected player's formatted label —\r\n // Mantine auto-fills the search input with the selected option's label\r\n // after a pick, and we don't want that to trigger a phantom search\r\n // (which would empty the data list, fall back to the synthetic option\r\n // with raw citizenId, then flip back via keepPreviousData → visible\r\n // label cycling between formatted name and raw id).\r\n useEffect(() => {\r\n if (!includeOffline) return;\r\n if (selectedLabel && searchInput === selectedLabel) return;\r\n const t = setTimeout(() => setDebouncedSearch(searchInput), DEBOUNCE_MS);\r\n return () => clearTimeout(t);\r\n }, [searchInput, includeOffline, selectedLabel]);\r\n\r\n // Custom row renderer — name on the left, colored dot on the right.\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const p = playerByCitizen.get(option.value);\r\n if (!p) return option.label;\r\n return (\r\n <Group justify=\"space-between\" wrap=\"nowrap\" gap=\"xs\" style={{ width: \"100%\" }}>\r\n <Text size=\"xs\" truncate style={{ flex: 1 }}>\r\n {formatLabel(p)}\r\n </Text>\r\n <StatusDot online={p.online} onlineLabel={onlineLabel} offlineLabel={offlineLabel} />\r\n </Group>\r\n );\r\n };\r\n\r\n return (\r\n <Select\r\n {...rest}\r\n data={data}\r\n value={value ?? null}\r\n onChange={(v) => {\r\n if (!v) return onChange(null);\r\n const player = playerByCitizen.get(v) ?? null;\r\n onChange(player);\r\n }}\r\n searchable={searchableProp ?? true}\r\n searchValue={includeOffline ? searchInput : undefined}\r\n onSearchChange={includeOffline ? setSearchInput : undefined}\r\n placeholder={placeholder}\r\n nothingFoundMessage={isFetching ? loadingLabel : (nothingFoundMessageProp ?? \"No players found\")}\r\n maxDropdownHeight={300}\r\n renderOption={renderOption}\r\n leftSection={selectedPlayer ? <StatusDot online={selectedPlayer.online} onlineLabel={onlineLabel} offlineLabel={offlineLabel} /> : undefined}\r\n rightSectionWidth=\"3.5vh\"\r\n rightSectionPointerEvents=\"all\"\r\n rightSection={\r\n <ActionIcon\r\n variant=\"subtle\"\r\n size=\"sm\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n refresh();\r\n }}\r\n aria-label={refreshLabel}\r\n title={refreshLabel}\r\n style={{ marginRight: \"0.6vh\" }}\r\n >\r\n {isFetching ? <Loader size=\"1.2vh\" color={color} /> : <RefreshCw size=\"1.4vh\" color={color} />}\r\n </ActionIcon>\r\n }\r\n />\r\n );\r\n}\r\n\r\nfunction StatusDot({ online, onlineLabel, offlineLabel }: { online: boolean; onlineLabel: string; offlineLabel: string }) {\r\n return (\r\n <span\r\n title={online ? onlineLabel : offlineLabel}\r\n style={{\r\n display: \"inline-block\",\r\n width: \"0.9vh\",\r\n height: \"0.9vh\",\r\n borderRadius: \"50%\",\r\n backgroundColor: online ? ONLINE_COLOR : OFFLINE_COLOR,\r\n boxShadow: `0 0 0.4vh ${online ? ONLINE_COLOR : OFFLINE_COLOR}`,\r\n flexShrink: 0,\r\n }}\r\n />\r\n );\r\n}\r\n\r\nfunction formatLabel(p: Player): string {\r\n // \"John Doe · Dirk · #42\" (online with display name)\r\n // \"John Doe · #42\" (online, blank display name)\r\n // \"John Doe\" (offline)\r\n const parts: string[] = [p.charName || p.citizenId];\r\n if (p.online) {\r\n if (p.name) parts.push(p.name);\r\n if (p.id != null) parts.push(`#${p.id}`);\r\n }\r\n return parts.join(\" · \");\r\n}\r\n","// Per-resource ACCESS-OVERRIDES editor. Rendered inside a consumer resource's\n// configurator (e.g. dirk_weed, dirk_fishing) to let admins grant access to a\n// resource's admin/config panel to specific ACE groups/permissions and\n// individual players (by identifier) — on top of whatever dirk_lib's global\n// admin gate already allows.\n//\n// Data shape (driven by a schema block on the consumer side):\n// access: {\n// groups: string[], // ACE groups / permissions, checked server-side\n// // via IsPlayerAceAllowed (e.g. group.admin,\n// // dirkscripts.command.fishing). NOT jobs/gangs.\n// identifiers: string[], // persistent player ids as PlayerSelect yields\n// // them — citizenid (qb/qbx) or license (esx).\n// }\n//\n// dirk_lib's server-side check matches each stored id against BOTH the\n// framework's persistent id (lib.player.identifier — what we store here, so it\n// works even for players granted while offline) AND raw FiveM identifiers\n// (GetPlayerIdentifiers — license:/discord:/…), so a hand-entered license: also\n// works.\n//\n// Editor-ONLY. This component just edits the block — it does NOT enforce\n// anything. Enforcement is entirely server-side in dirk_lib, which reads the\n// same scriptConfig path and decides whether a given source is allowed.\n//\n// Mirrors ThemeOverrideSection's idiom: AdminPageTitle header, a short\n// description, then editable rows. Each list normalises against an empty array\n// so the inputs always render even before the schema block hydrates.\n\nimport { ActionIcon, alpha, Flex, Text, TextInput, useMantineTheme } from \"@mantine/core\";\nimport { ShieldCheck, Plus, Trash2, Users, UserRound } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useFormActions, useFormField } from \"@/hooks/useForm\";\nimport { locale } from \"@/utils/locales\";\nimport { AdminPageTitle } from \"./AdminPageTitle\";\nimport { PlayerSelect } from \"./AdminTools/PlayerSelect\";\n\n// Common ACE groups offered as one-click quick-adds. Access is enforced\n// server-side via IsPlayerAceAllowed, so these are ACE group/permission\n// strings — NOT in-game jobs/gangs.\nconst COMMON_ACE_GROUPS = [\"group.admin\", \"group.mod\", \"group.superadmin\"];\n\n// locale() returns the **key itself** on miss (see utils/locales.ts), so the\n// classic `locale(k) || fallback` pattern never falls through. This helper\n// returns `fallback` whenever locale gave us the key back unchanged.\nconst t = (key: string, fallback: string) => {\n const v = locale(key);\n return v === key ? fallback : v;\n};\n\nexport type AccessOverrideValue = {\n /** ACE groups / permissions allowed to access this resource. Checked\n * server-side via IsPlayerAceAllowed (e.g. group.admin). NOT jobs/gangs. */\n groups: string[];\n /** Persistent player ids (citizenid on qb/qbx, license on esx — what\n * PlayerSelect yields). dirk_lib also matches raw FiveM identifiers. */\n identifiers: string[];\n};\n\nconst DEFAULT_VALUE: AccessOverrideValue = {\n groups: [],\n identifiers: [],\n};\n\nfunction SectionLabel({ icon: Icon, label }: { icon: typeof Users; label: string }) {\n return (\n <Flex align=\"center\" gap=\"xs\" mt=\"xs\">\n <Icon size=\"1.4vh\" color=\"rgba(255,255,255,0.3)\" />\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.07em\" c=\"rgba(255,255,255,0.2)\">\n {label}\n </Text>\n <div style={{ flex: 1, height: \"0.05vh\", background: \"rgba(255,255,255,0.06)\" }} />\n </Flex>\n );\n}\n\nfunction EmptyHint({ text }: { text: string }) {\n return (\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.25)\" ta=\"center\" py=\"xs\">\n {text}\n </Text>\n );\n}\n\nexport type AccessOverrideSectionProps = {\n /**\n * Schema path the consumer stores its access block under. Defaults to\n * \"access\" — matches the recommended schema key.\n */\n schemaKey?: string;\n /**\n * Optional title for the AdminPageTitle. Defaults to the localized\n * \"Access\" string with a fallback.\n */\n title?: string;\n /**\n * Optional description shown under the title. Defaults to a localized\n * explanation with a fallback.\n */\n description?: string;\n /**\n * When true, the player picker searches offline players (DB-backed) too.\n * Defaults to true so admins can grant access to players who aren't online.\n */\n includeOffline?: boolean;\n};\n\nexport function AccessOverrideSection({\n schemaKey = \"access\",\n title,\n description,\n includeOffline = true,\n}: AccessOverrideSectionProps) {\n const mantineTheme = useMantineTheme();\n const color = mantineTheme.colors[mantineTheme.primaryColor][5];\n\n const raw = useFormField<Record<string, AccessOverrideValue>>(schemaKey as never) as\n | Partial<AccessOverrideValue>\n | undefined;\n\n // Normalise — the form field could be undefined at first paint, and either\n // inner array could be missing if the schema default block hasn't fully\n // hydrated. Merge against DEFAULT_VALUE so the lists always render.\n const value: AccessOverrideValue = {\n groups: Array.isArray(raw?.groups) ? (raw!.groups as string[]) : DEFAULT_VALUE.groups,\n identifiers: Array.isArray(raw?.identifiers)\n ? (raw!.identifiers as string[])\n : DEFAULT_VALUE.identifiers,\n };\n\n const { setValue } = useFormActions<Record<string, AccessOverrideValue>>();\n const set = <K extends keyof AccessOverrideValue>(key: K, val: AccessOverrideValue[K]) =>\n setValue(schemaKey as never, { ...value, [key]: val } as never);\n\n // An in-progress \"add\" row is LOCAL state only — it isn't written to the form\n // (and so never persists an empty \"\" entry to the DB) until a real value is\n // picked. Committed rows live in the form. Only one pending add row per list.\n const [addingGroup, setAddingGroup] = useState(false);\n const [addingPlayer, setAddingPlayer] = useState(false);\n\n // ── groups (ACE) ──────────────────────────────────────────────────────────\n const commitGroup = (name: string) => {\n const g = name.trim();\n if (!g) return;\n if (!value.groups.includes(g)) set(\"groups\", [...value.groups, g]);\n setAddingGroup(false);\n };\n const setGroup = (index: number, name: string) => {\n const next = [...value.groups];\n next[index] = name;\n set(\"groups\", next);\n };\n // Quick-add a common ACE group; skip if it's already present.\n const quickAddGroup = (name: string) => {\n if (value.groups.includes(name)) return;\n set(\"groups\", [...value.groups, name]);\n };\n const removeGroup = (index: number) =>\n set(\"groups\", value.groups.filter((_, i) => i !== index));\n\n // ── identifiers ─────────────────────────────────────────────────────────\n const commitIdentifier = (id: string) => {\n if (!id) return;\n set(\"identifiers\", [...value.identifiers, id]);\n setAddingPlayer(false);\n };\n const setIdentifier = (index: number, id: string) => {\n const next = [...value.identifiers];\n next[index] = id;\n set(\"identifiers\", next.filter((x) => x !== \"\"));\n };\n const removeIdentifier = (index: number) =>\n set(\"identifiers\", value.identifiers.filter((_, i) => i !== index));\n\n return (\n <Flex\n direction=\"column\"\n gap=\"xs\"\n p=\"sm\"\n style={{ flex: 1, minHeight: 0, overflowY: \"auto\" }}\n >\n <AdminPageTitle\n icon={ShieldCheck}\n title={title || t(\"Access\", \"Access\")}\n color={color}\n />\n\n <Text ff=\"Akrobat Bold\" size=\"xxs\" c=\"rgba(255,255,255,0.4)\">\n {description ||\n t(\n \"AccessOverrideDesc\",\n \"Grant access to this resource's admin panel to specific ACE groups and players, in addition to your global dirk_lib admins. Enforcement is server-side.\",\n )}\n </Text>\n\n {/* ── Admin groups (ACE) ──────────────────────────────────────────── */}\n <SectionLabel icon={Users} label={t(\"AccessGroups\", \"Admin groups (ACE)\")} />\n\n {/* Quick-add chips for the common ACE groups. */}\n <Flex gap=\"xs\" wrap=\"wrap\">\n {COMMON_ACE_GROUPS.map((g) => {\n const added = value.groups.includes(g);\n return (\n <Flex\n key={g}\n align=\"center\"\n gap=\"xxs\"\n onClick={added ? undefined : () => quickAddGroup(g)}\n role=\"button\"\n tabIndex={added ? -1 : 0}\n aria-disabled={added}\n onKeyDown={(e) => {\n if (added) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n quickAddGroup(g);\n }\n }}\n px=\"xs\"\n py=\"xxs\"\n style={{\n cursor: added ? \"default\" : \"pointer\",\n opacity: added ? 0.4 : 1,\n background: alpha(color, 0.12),\n border: `0.1vh solid ${alpha(color, 0.4)}`,\n borderRadius: \"0.4vh\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n onMouseEnter={(e) => {\n if (added) return;\n e.currentTarget.style.background = alpha(color, 0.22);\n }}\n onMouseLeave={(e) => {\n if (added) return;\n e.currentTarget.style.background = alpha(color, 0.12);\n }}\n >\n {!added && <Plus size=\"1.2vh\" color={color} />}\n <Text ff=\"Akrobat Bold\" size=\"xxs\" lts=\"0.04em\" c={color}>\n {g}\n </Text>\n </Flex>\n );\n })}\n </Flex>\n\n <Flex direction=\"column\" gap=\"xxs\">\n {value.groups.length === 0 && !addingGroup && (\n <EmptyHint\n text={t(\"AccessNoGroups\", \"No ACE groups added. e.g. group.admin\")}\n />\n )}\n {value.groups.map((name, i) => (\n <Flex key={i} align=\"center\" gap=\"xs\">\n <TextInput\n value={name}\n onChange={(e) => setGroup(i, e.currentTarget.value)}\n placeholder={t(\"AccessGroupPlaceholder\", \"ACE group or permission, e.g. group.admin\")}\n size=\"xs\"\n style={{ flex: 1 }}\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => removeGroup(i)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n ))}\n {addingGroup && (\n <AceGroupAddRow\n placeholder={t(\"AccessGroupPlaceholder\", \"ACE group or permission, e.g. group.admin\")}\n onCommit={commitGroup}\n onCancel={() => setAddingGroup(false)}\n removeLabel={t(\"Remove\", \"Remove\")}\n />\n )}\n </Flex>\n\n {!addingGroup && (\n <AddRowButton label={t(\"AccessAddGroup\", \"Add group\")} onClick={() => setAddingGroup(true)} />\n )}\n\n {/* ── Players / identifiers ───────────────────────────────────────── */}\n <SectionLabel icon={UserRound} label={t(\"AccessPlayers\", \"Players\")} />\n\n <Flex direction=\"column\" gap=\"xxs\">\n {value.identifiers.length === 0 && !addingPlayer && (\n <EmptyHint text={t(\"AccessNoPlayers\", \"No players added.\")} />\n )}\n {value.identifiers.map((id, i) => (\n <Flex key={i} align=\"center\" gap=\"xs\">\n <PlayerSelect\n value={id || null}\n onChange={(p) => setIdentifier(i, p?.citizenId ?? \"\")}\n includeOffline={includeOffline}\n placeholder={t(\"AccessPickPlayer\", \"Pick a player…\")}\n style={{ flex: 1 }}\n size=\"xs\"\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => removeIdentifier(i)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n ))}\n {addingPlayer && (\n <Flex align=\"center\" gap=\"xs\">\n <PlayerSelect\n value={null}\n onChange={(p) => commitIdentifier(p?.citizenId ?? \"\")}\n includeOffline={includeOffline}\n placeholder={t(\"AccessPickPlayer\", \"Pick a player…\")}\n style={{ flex: 1 }}\n size=\"xs\"\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={() => setAddingPlayer(false)}\n title={t(\"Remove\", \"Remove\")}\n aria-label={t(\"Remove\", \"Remove\")}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n )}\n </Flex>\n\n {!addingPlayer && (\n <AddRowButton label={t(\"AccessAddPlayer\", \"Add player\")} onClick={() => setAddingPlayer(true)} />\n )}\n </Flex>\n );\n}\n\nfunction AddRowButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <Flex\n align=\"center\"\n justify=\"center\"\n gap=\"xs\"\n onClick={onClick}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }}\n py=\"xs\"\n style={{\n cursor: \"pointer\",\n border: \"0.1vh dashed rgba(255,255,255,0.12)\",\n borderRadius: \"0.4vh\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255,255,255,0.03)\";\n e.currentTarget.style.borderColor = \"rgba(255,255,255,0.2)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(255,255,255,0.12)\";\n }}\n >\n <Plus size=\"1.4vh\" color=\"rgba(255,255,255,0.4)\" />\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c=\"rgba(255,255,255,0.4)\">\n {label}\n </Text>\n </Flex>\n );\n}\n\n// Pending \"add ACE group\" row. Holds the draft text in LOCAL state and only\n// commits (to the form) on Enter / blur, so an empty \"\" entry never persists —\n// mirroring the local pending-row pattern used for the other lists.\nfunction AceGroupAddRow({\n placeholder,\n onCommit,\n onCancel,\n removeLabel,\n}: {\n placeholder: string;\n onCommit: (value: string) => void;\n onCancel: () => void;\n removeLabel: string;\n}) {\n const [draft, setDraft] = useState(\"\");\n const commit = () => {\n if (draft.trim()) onCommit(draft);\n else onCancel();\n };\n return (\n <Flex align=\"center\" gap=\"xs\">\n <TextInput\n value={draft}\n onChange={(e) => setDraft(e.currentTarget.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }}\n onBlur={commit}\n placeholder={placeholder}\n size=\"xs\"\n autoFocus\n style={{ flex: 1 }}\n />\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"md\"\n onClick={onCancel}\n title={removeLabel}\n aria-label={removeLabel}\n >\n <Trash2 size=\"1.4vh\" />\n </ActionIcon>\n </Flex>\n );\n}\n","// Curated list of GTA V AnimPostFX screen effects passed to AnimpostfxPlay().\r\n// Sourced from https://docs.altv.mp/gta/articles/references/animpost-fx.html\r\n// plus a handful of community-known effects (ULP_*, common cutscene overlays)\r\n// that ship in scene defaults across dirk_multichar / fishing / drug labs.\r\n//\r\n// Effects are grouped by what they're commonly used for so a picker can\r\n// present them with section headings instead of one giant alphabetical list.\r\n// Add new entries by appending to the right group — the picker reflows\r\n// automatically.\r\n\r\nexport type GtaAnimPostFx = {\r\n /** Effect name passed to AnimpostfxPlay(). Case-sensitive. */\r\n name: string;\r\n /** Friendly label for UI display. Defaults to the name if absent. */\r\n label?: string;\r\n /** Group used for ordering and section headers. */\r\n group: GtaAnimPostFxGroup;\r\n};\r\n\r\nexport type GtaAnimPostFxGroup =\r\n | \"Wake Up / Sleep\"\r\n | \"Character Switch\"\r\n | \"Cinematic Push-In\"\r\n | \"Death / Fail\"\r\n | \"Heist\"\r\n | \"Minigame\"\r\n | \"Drug / Trip\"\r\n | \"Color Filter / Tint\"\r\n | \"Multiplayer\"\r\n | \"Misc\";\r\n\r\nexport const GTA_ANIM_POST_FX_GROUP_ORDER: GtaAnimPostFxGroup[] = [\r\n \"Wake Up / Sleep\",\r\n \"Character Switch\",\r\n \"Cinematic Push-In\",\r\n \"Death / Fail\",\r\n \"Heist\",\r\n \"Minigame\",\r\n \"Drug / Trip\",\r\n \"Color Filter / Tint\",\r\n \"Multiplayer\",\r\n \"Misc\",\r\n];\r\n\r\nexport const GTA_ANIM_POST_FX: GtaAnimPostFx[] = [\r\n // ── Wake Up / Sleep (community-known; not in altV docs) ────────────────────\r\n { name: \"ULP_PlayerWakeUp\", label: \"Player Wake Up\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndNeutral\", label: \"Minigame End — Neutral\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndFranklin\", label: \"Minigame End — Franklin\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndMichael\", label: \"Minigame End — Michael\", group: \"Wake Up / Sleep\" },\r\n { name: \"MinigameEndTrevor\", label: \"Minigame End — Trevor\", group: \"Wake Up / Sleep\" },\r\n\r\n // ── Character Switch (Franklin / Michael / Trevor / Neutral variants) ─────\r\n { name: \"SwitchHUDIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDFranklinOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDMichaelOut\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchHUDTrevorOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklin\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenFranklinOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelMid\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenMichaelOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenTrevorOut\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenNeutralFIB5\", group: \"Character Switch\" },\r\n { name: \"SwitchOpenNeutralOutHeist\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneFranklin\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneMichael\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneNeutral\", group: \"Character Switch\" },\r\n { name: \"SwitchSceneTrevor\", group: \"Character Switch\" },\r\n { name: \"SwitchShortFranklinIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortFranklinMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortMichaelIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortMichaelMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortNeutralIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortNeutralMid\", group: \"Character Switch\" },\r\n { name: \"SwitchShortTrevorIn\", group: \"Character Switch\" },\r\n { name: \"SwitchShortTrevorMid\", group: \"Character Switch\" },\r\n { name: \"switch_cam_1\", group: \"Character Switch\" },\r\n { name: \"switch_cam_2\", group: \"Character Switch\" },\r\n\r\n // ── Cinematic Push-In (slow zoom intro to a character) ────────────────────\r\n { name: \"CamPushInFranklin\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInMichael\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInTrevor\", group: \"Cinematic Push-In\" },\r\n { name: \"CamPushInNeutral\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastIntroScene\", label: \"Beast Intro\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastLaunch\", group: \"Cinematic Push-In\" },\r\n { name: \"BeastTransition\", group: \"Cinematic Push-In\" },\r\n\r\n // ── Death / Fail (red tint, slow-mo blur) ─────────────────────────────────\r\n { name: \"DeathFailNeutralIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailFranklinIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMichaelIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailTrevorIn\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMPIn\", label: \"Death Fail — MP\", group: \"Death / Fail\" },\r\n { name: \"DeathFailMPDark\", label: \"Death Fail — MP Dark\", group: \"Death / Fail\" },\r\n { name: \"DeathFailOut\", group: \"Death / Fail\" },\r\n { name: \"Rampage\", group: \"Death / Fail\" },\r\n { name: \"RampageOut\", group: \"Death / Fail\" },\r\n\r\n // ── Heist (celebration / locate / pass) ───────────────────────────────────\r\n { name: \"HeistCelebEnd\", group: \"Heist\" },\r\n { name: \"HeistCelebPass\", group: \"Heist\" },\r\n { name: \"HeistCelebPassBW\", label: \"Heist Celeb Pass (B/W)\", group: \"Heist\" },\r\n { name: \"HeistCelebToast\", group: \"Heist\" },\r\n { name: \"HeistLocate\", group: \"Heist\" },\r\n { name: \"HeistTripSkipFade\", group: \"Heist\" },\r\n\r\n // ── Minigame / Menu ───────────────────────────────────────────────────────\r\n { name: \"MenuMGIn\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistIn\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistIntro\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistOut\", group: \"Minigame\" },\r\n { name: \"MenuMGHeistTint\", group: \"Minigame\" },\r\n { name: \"MenuMGSelectionIn\", group: \"Minigame\" },\r\n { name: \"MenuMGSelectionTint\", group: \"Minigame\" },\r\n { name: \"MenuMGTournamentIn\", group: \"Minigame\" },\r\n { name: \"MenuMGTournamentTint\", group: \"Minigame\" },\r\n { name: \"MinigameTransitionIn\", group: \"Minigame\" },\r\n { name: \"MinigameTransitionOut\", group: \"Minigame\" },\r\n\r\n // ── Drug / Trip (psychedelic, blur, distortion) ───────────────────────────\r\n { name: \"DMT_flight\", group: \"Drug / Trip\" },\r\n { name: \"DMT_flight_intro\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteIn\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteOut\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteEndIn\", group: \"Drug / Trip\" },\r\n { name: \"PeyoteEndOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsDrivingIn\", group: \"Drug / Trip\" },\r\n { name: \"DrugsDrivingOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFight\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFightIn\", group: \"Drug / Trip\" },\r\n { name: \"DrugsMichaelAliensFightOut\", group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFight\", group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFightIn\",group: \"Drug / Trip\" },\r\n { name: \"DrugsTrevorClownsFightOut\", group: \"Drug / Trip\" },\r\n { name: \"ChopVision\", label: \"Chop Vision (dog)\", group: \"Drug / Trip\" },\r\n\r\n // ── Color Filter / Tint (one-off and biker formation filters) ─────────────\r\n { name: \"PPFilter\", group: \"Color Filter / Tint\" },\r\n { name: \"PPFilterOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPGreen\", group: \"Color Filter / Tint\" },\r\n { name: \"PPGreenOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPOrange\", group: \"Color Filter / Tint\" },\r\n { name: \"PPOrangeOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPink\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPinkOut\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPurple\", group: \"Color Filter / Tint\" },\r\n { name: \"PPPurpleOut\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFilter\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFilterOut\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFormation\", group: \"Color Filter / Tint\" },\r\n { name: \"BikerFormationOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchOrange\", group: \"Color Filter / Tint\" },\r\n { name: \"InchOrangeOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPurple\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPurpleOut\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPickup\", group: \"Color Filter / Tint\" },\r\n { name: \"InchPickupOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerGreen\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerGreenOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerPink\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerPinkOut\", group: \"Color Filter / Tint\" },\r\n { name: \"TinyRacerIntroCam\", group: \"Color Filter / Tint\" },\r\n { name: \"DeadlineNeon\", group: \"Color Filter / Tint\" },\r\n\r\n // ── Multiplayer (celeb, killstreak, race, etc.) ───────────────────────────\r\n { name: \"MP_Celeb_Win\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Win_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Lose\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Lose_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Preload\", group: \"Multiplayer\" },\r\n { name: \"MP_Celeb_Preload_Fade\", group: \"Multiplayer\" },\r\n { name: \"MP_Bull_tost\", group: \"Multiplayer\" },\r\n { name: \"MP_Bull_tost_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Killstreak\", group: \"Multiplayer\" },\r\n { name: \"MP_Killstreak_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_Loser_Streak_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_OrbitalCannon\", group: \"Multiplayer\" },\r\n { name: \"MP_Powerplay\", group: \"Multiplayer\" },\r\n { name: \"MP_Powerplay_Out\", group: \"Multiplayer\" },\r\n { name: \"MP_SmugglerCheckpoint\", group: \"Multiplayer\" },\r\n { name: \"MP_TransformRaceFlash\", group: \"Multiplayer\" },\r\n { name: \"MP_WarpCheckpoint\", group: \"Multiplayer\" },\r\n { name: \"MP_corona_switch\", group: \"Multiplayer\" },\r\n { name: \"MP_intro_logo\", group: \"Multiplayer\" },\r\n { name: \"MP_job_load\", group: \"Multiplayer\" },\r\n { name: \"MP_race_crash\", group: \"Multiplayer\" },\r\n\r\n // ── Misc (success notifs, special weapons, sniper / pause / explosions) ───\r\n { name: \"SuccessFranklin\", group: \"Misc\" },\r\n { name: \"SuccessMichael\", group: \"Misc\" },\r\n { name: \"SuccessNeutral\", group: \"Misc\" },\r\n { name: \"SuccessTrevor\", group: \"Misc\" },\r\n { name: \"FocusIn\", group: \"Misc\" },\r\n { name: \"FocusOut\", group: \"Misc\" },\r\n { name: \"CrossLine\", group: \"Misc\" },\r\n { name: \"CrossLineOut\", group: \"Misc\" },\r\n { name: \"SniperOverlay\", group: \"Misc\" },\r\n { name: \"ExplosionJosh3\", group: \"Misc\" },\r\n { name: \"WeaponUpgrade\", group: \"Misc\" },\r\n { name: \"Dont_tazeme_bro\", label: \"Don't Taze Me Bro\", group: \"Misc\" },\r\n { name: \"LostTimeDay\", group: \"Misc\" },\r\n { name: \"LostTimeNight\", group: \"Misc\" },\r\n { name: \"PauseMenuOut\", group: \"Misc\" },\r\n { name: \"pennedIn\", group: \"Misc\" },\r\n { name: \"PennedInOut\", group: \"Misc\" },\r\n { name: \"RaceTurbo\", group: \"Misc\" },\r\n { name: \"DefaultFlash\", group: \"Misc\" },\r\n];\r\n\r\nexport function formatGtaAnimPostFx(name: string): string {\r\n const entry = GTA_ANIM_POST_FX.find((fx) => fx.name === name);\r\n return entry?.label ?? name;\r\n}\r\n","// FiveM AnimPostFX picker. Curated list from the altV docs + a few common\r\n// community-known overlays (ULP_PlayerWakeUp etc.) grouped by use-case so\r\n// admins building cutscenes can find \"the wake-up effect\" without reading\r\n// 150 raw effect names.\r\n//\r\n// Single-value Select (the AnimpostfxPlay native takes one effect name).\r\n// Custom uncatalogued values in `value` are preserved under a \"Custom\"\r\n// group so old data with effect names we haven't catalogued still display.\r\n//\r\n// For full freedom (typing any arbitrary effect name), pass `creatable` —\r\n// users can hit Enter on a search term to add it as a custom value.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport type { SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_ANIM_POST_FX,\r\n GTA_ANIM_POST_FX_GROUP_ORDER,\r\n formatGtaAnimPostFx,\r\n type GtaAnimPostFx,\r\n type GtaAnimPostFxGroup,\r\n} from \"@/utils/gtaAnimPostFx\";\r\n\r\nfunction buildGroupedData(extraNames: string[] = []) {\r\n const groups = new Map<GtaAnimPostFxGroup, GtaAnimPostFx[]>();\r\n const seen = new Set<string>();\r\n for (const fx of GTA_ANIM_POST_FX) {\r\n if (seen.has(fx.name)) continue;\r\n seen.add(fx.name);\r\n if (!groups.has(fx.group)) groups.set(fx.group, []);\r\n groups.get(fx.group)!.push(fx);\r\n }\r\n\r\n const data = GTA_ANIM_POST_FX_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((fx) => ({\r\n value: fx.name,\r\n label: formatGtaAnimPostFx(fx.name),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom values so the dropdown still shows the current selection.\r\n // Mantine drops chips silently when the value isn't in the data array.\r\n const knownNames = new Set(GTA_ANIM_POST_FX.map((fx) => fx.name));\r\n const customs = extraNames.filter((n) => n && !knownNames.has(n));\r\n if (customs.length > 0) {\r\n data.push({\r\n group: \"Custom\" as GtaAnimPostFxGroup,\r\n items: customs.map((n) => ({ value: n, label: n })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport type AnimPostFxSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n /** Current effect name. Empty string = no effect selected. */\r\n value: string;\r\n onChange: (name: string) => void;\r\n};\r\n\r\nexport function AnimPostFxSelect({\r\n value,\r\n onChange,\r\n label = \"Screen FX\",\r\n size = \"xs\",\r\n searchable = true,\r\n clearable = true,\r\n ...rest\r\n}: AnimPostFxSelectProps) {\r\n const data = buildGroupedData([value]);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n clearable={clearable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching effects\"\r\n placeholder=\"Pick an effect...\"\r\n {...rest}\r\n data={data}\r\n value={value || null}\r\n onChange={(v) => onChange(v ?? \"\")}\r\n />\r\n );\r\n}\r\n","// Curated list of GTA V scenario identifiers passed to\r\n// TaskStartScenarioInPlace / TaskStartScenarioAtPosition. Sourced from\r\n// https://wiki.rage.mp/wiki/Scenarios via the DurtyFree gta-v-data-dumps\r\n// mirror (scenariosCompact.json).\r\n//\r\n// Scenarios are grouped by what the ped is *doing* so a picker can present\r\n// section headings instead of one giant alphabetical list of ~250 entries.\r\n// Add new entries by appending to the right group — the picker reflows\r\n// automatically. Group order = the order they appear in a dropdown.\r\n\r\nexport type GtaScenario = {\r\n /** Scenario identifier passed to the TaskStartScenario* natives. Case-sensitive. */\r\n name: string;\r\n /** Friendly label for UI display. Falls back to the auto-formatted name. */\r\n label?: string;\r\n /** Group used for ordering and section headers. */\r\n group: GtaScenarioGroup;\r\n};\r\n\r\nexport type GtaScenarioGroup =\r\n | \"Sitting\"\r\n | \"Standing & Idle\"\r\n | \"Eating & Drinking\"\r\n | \"Smoking & Substances\"\r\n | \"Working\"\r\n | \"Sports & Fitness\"\r\n | \"Cops & Security\"\r\n | \"Crime & Streets\"\r\n | \"Tourists & Crowds\"\r\n | \"Props (Misc)\"\r\n | \"Movement\"\r\n | \"Animals\"\r\n | \"Vehicles\"\r\n | \"Code (Advanced)\";\r\n\r\nexport const GTA_SCENARIO_GROUP_ORDER: GtaScenarioGroup[] = [\r\n \"Sitting\",\r\n \"Standing & Idle\",\r\n \"Eating & Drinking\",\r\n \"Smoking & Substances\",\r\n \"Working\",\r\n \"Sports & Fitness\",\r\n \"Cops & Security\",\r\n \"Crime & Streets\",\r\n \"Tourists & Crowds\",\r\n \"Props (Misc)\",\r\n \"Movement\",\r\n \"Animals\",\r\n \"Vehicles\",\r\n \"Code (Advanced)\",\r\n];\r\n\r\nexport const GTA_SCENARIOS: GtaScenario[] = [\r\n // ── Sitting ────────────────────────────────────────────────────────────────\r\n { name: \"PROP_HUMAN_SEAT_ARMCHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BAR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_DRINK_BEER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FOOD\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BENCH_FOOD_FACILITY\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_BUS_STOP_WAIT\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_DRINK_BEER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_FOOD\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_UPRIGHT\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_UPRIGHT_SHOWROOM\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_CHAIR_MP_PLAYER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_COMPUTER\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_COMPUTER_LOW\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_DECKCHAIR\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_DECKCHAIR_DRINK\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_SEWING\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_STRIP_WATCH\", group: \"Sitting\" },\r\n { name: \"PROP_HUMAN_SEAT_SUNLOUNGER\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_LEDGE\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_LEDGE_EATING\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_STEPS\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL_EATING\", group: \"Sitting\" },\r\n { name: \"WORLD_HUMAN_SEAT_WALL_TABLET\", group: \"Sitting\" },\r\n\r\n // ── Standing & Idle ────────────────────────────────────────────────────────\r\n { name: \"Standing\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_HANG_OUT_STREET\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_LEANING\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_LEANING_CASINO_TERRACE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_FACILITY\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_UPRIGHT\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_FIRE\", group: \"Standing & Idle\" },\r\n { name: \"WORLD_HUMAN_STAND_FISHING\", group: \"Standing & Idle\" },\r\n { name: \"PROP_HUMAN_STAND_IMPATIENT\", group: \"Standing & Idle\" },\r\n\r\n // ── Eating & Drinking ──────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_DRINKING\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_DRINKING_FACILITY\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_DRINKING_CASINO_TERRACE\", group: \"Eating & Drinking\" },\r\n { name: \"WORLD_HUMAN_PICNIC\", group: \"Eating & Drinking\" },\r\n\r\n // ── Smoking & Substances ───────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_AA_COFFEE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_AA_SMOKE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_POT\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_SMOKING_POT_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_STUPOR\", group: \"Smoking & Substances\" },\r\n { name: \"WORLD_HUMAN_STUPOR_CLUBHOUSE\", group: \"Smoking & Substances\" },\r\n\r\n // ── Working ────────────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_CAR_PARK_ATTENDANT\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CLIPBOARD\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CLIPBOARD_FACILITY\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_CONST_DRILL\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_GARDENER_LEAF_BLOWER\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_GARDENER_PLANT\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_HAMMERING\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_JANITOR\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_MAID_CLEAN\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_MUSICIAN\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_VALET\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_VEHICLE_MECHANIC\", group: \"Working\" },\r\n { name: \"WORLD_HUMAN_WELDING\", group: \"Working\" },\r\n\r\n // ── Sports & Fitness ───────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_GOLF_PLAYER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_HIKER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_HIKER_STANDING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_JOG\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_JOG_STANDING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_MUSCLE_FLEX\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_MUSCLE_FREE_WEIGHTS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_POWER_WALKER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_PUSH_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SIT_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SUNBATHE\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SUNBATHE_BACK\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_SWIMMING\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_TENNIS_PLAYER\", group: \"Sports & Fitness\" },\r\n { name: \"WORLD_HUMAN_YOGA\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS_ARMY\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_MUSCLE_CHIN_UPS_PRISON\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS\", group: \"Sports & Fitness\" },\r\n { name: \"PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS_PRISON\", group: \"Sports & Fitness\" },\r\n\r\n // ── Cops & Security ────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_COP_IDLES\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_PATROL\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_CASINO\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_CLUBHOUSE\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_FACILITY\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_GUARD_STAND_ARMY\", group: \"Cops & Security\" },\r\n { name: \"WORLD_HUMAN_SECURITY_SHINE_TORCH\", group: \"Cops & Security\" },\r\n\r\n // ── Crime & Streets ────────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_DRUG_DEALER\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_DEALER_HARD\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_FIELD_WORKERS_RAKE\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_FIELD_WORKERS_WEEDING\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_PROCESSORS_COKE\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_DRUG_PROCESSORS_WEED\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_PROSTITUTE_HIGH_CLASS\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_PROSTITUTE_LOW_CLASS\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_FREEWAY\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_SLUMPED\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_STANDING\", group: \"Crime & Streets\" },\r\n { name: \"WORLD_HUMAN_BUM_WASH\", group: \"Crime & Streets\" },\r\n { name: \"PROP_HUMAN_BUM_BIN\", group: \"Crime & Streets\" },\r\n { name: \"PROP_HUMAN_BUM_SHOPPING_CART\", group: \"Crime & Streets\" },\r\n\r\n // ── Tourists & Crowds ──────────────────────────────────────────────────────\r\n { name: \"WORLD_HUMAN_BINOCULARS\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_CHEERING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_HUMAN_STATUE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_INSPECT_CROUCH\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_INSPECT_STAND\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_MOBILE_FILM_SHOCKING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_PAPARAZZI\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_PARTYING\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_STRIP_WATCH_STAND\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_SUPERHERO\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_TOURIST_MAP\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_TOURIST_MOBILE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_WINDOW_SHOP_BROWSE\", group: \"Tourists & Crowds\" },\r\n { name: \"WORLD_HUMAN_WINDOW_SHOP_BROWSE_SHOWROOM\", group: \"Tourists & Crowds\" },\r\n\r\n // ── Props (Misc) ───────────────────────────────────────────────────────────\r\n { name: \"PROP_HUMAN_ATM\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_BBQ\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_PARKING_METER\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_MOVIE_BULB\", group: \"Props (Misc)\" },\r\n { name: \"PROP_HUMAN_MOVIE_STUDIO_LIGHT\", group: \"Props (Misc)\" },\r\n { name: \"PROP_BIRD_IN_TREE\", group: \"Props (Misc)\" },\r\n { name: \"PROP_BIRD_TELEGRAPH_POLE\", group: \"Props (Misc)\" },\r\n\r\n // ── Movement ───────────────────────────────────────────────────────────────\r\n { name: \"Walk\", group: \"Movement\" },\r\n { name: \"Walk_Facility\", group: \"Movement\" },\r\n\r\n // ── Animals ────────────────────────────────────────────────────────────────\r\n { name: \"WORLD_BOAR_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_CAT_SLEEPING_GROUND\", group: \"Animals\" },\r\n { name: \"WORLD_CAT_SLEEPING_LEDGE\", group: \"Animals\" },\r\n { name: \"WORLD_COW_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_HOWL\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_REST\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_WANDER\", group: \"Animals\" },\r\n { name: \"WORLD_COYOTE_WALK\", group: \"Animals\" },\r\n { name: \"WORLD_CHICKENHAWK_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_CHICKENHAWK_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_CORMORANT_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_CROW_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_CROW_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_DEER_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_ROTTWEILER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_RETRIEVER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_SHEPHERD\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_BARKING_SMALL\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_ROTTWEILER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_RETRIEVER\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_SHEPHERD\", group: \"Animals\" },\r\n { name: \"WORLD_DOG_SITTING_SMALL\", group: \"Animals\" },\r\n { name: \"WORLD_DOLPHIN_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_FISH_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_FISH_IDLE\", group: \"Animals\" },\r\n { name: \"WORLD_GULL_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_GULL_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_PECKING\", group: \"Animals\" },\r\n { name: \"WORLD_HEN_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_MOUNTAIN_LION_REST\", group: \"Animals\" },\r\n { name: \"WORLD_MOUNTAIN_LION_WANDER\", group: \"Animals\" },\r\n { name: \"WORLD_ORCA_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_PIG_GRAZING\", group: \"Animals\" },\r\n { name: \"WORLD_PIGEON_FEEDING\", group: \"Animals\" },\r\n { name: \"WORLD_PIGEON_STANDING\", group: \"Animals\" },\r\n { name: \"WORLD_RABBIT_EATING\", group: \"Animals\" },\r\n { name: \"WORLD_RABBIT_FLEE\", group: \"Animals\" },\r\n { name: \"WORLD_RATS_EATING\", group: \"Animals\" },\r\n { name: \"WORLD_RATS_FLEEING\", group: \"Animals\" },\r\n { name: \"WORLD_SHARK_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_SHARK_HAMMERHEAD_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_STINGRAY_SWIM\", group: \"Animals\" },\r\n { name: \"WORLD_WHALE_SWIM\", group: \"Animals\" },\r\n\r\n // ── Vehicles ───────────────────────────────────────────────────────────────\r\n { name: \"DRIVE\", group: \"Vehicles\" },\r\n { name: \"PARK_VEHICLE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_ATTRACTOR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_AMBULANCE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_BALLAS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_FAMILY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_HARMONY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_BMX_VAGOS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_MOUNTAIN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BICYCLE_ROAD\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BIKE_OFF_ROAD_RACE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BIKER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE_ALAMO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BOAT_IDLE_MARQUIS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BROKEN_DOWN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_BUSINESSMEN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CLUCKIN_BELL_TRAILER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CONSTRUCTION_SOLO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_CONSTRUCTION_PASSENGERS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DISTANT_EMPTY_GROUND\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_PASSENGERS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_DRIVE_SOLO\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_EMPTY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_FARM_WORKER\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_FIRE_TRUCK\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_HELI_LIFEGUARD\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MARIACHI\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MECHANIC\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MILITARY_PLANES_BIG\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_MILITARY_PLANES_SMALL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PARK_PARALLEL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_PASSENGER_EXIT\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_BIKE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_POLICE_NEXT_TO_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_QUARRY\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SALTON\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SALTON_DIRT_BIKE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_SECURITY_CAR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_STREETRACE\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TANDL\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TOURBUS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TOURIST\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRACTOR\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRACTOR_BEACH\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRUCK_LOGS\", group: \"Vehicles\" },\r\n { name: \"WORLD_VEHICLE_TRUCKS_TRAILERS\", group: \"Vehicles\" },\r\n\r\n // ── Code (Advanced) ────────────────────────────────────────────────────────\r\n // These are engine-internal scenarios — rarely the right pick for cinematic\r\n // ped placements, but exposed because the game-data dump includes them.\r\n { name: \"CODE_HUMAN_COWER\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_CROSS_ROAD_WAIT\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_PARK_CAR\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_KNEEL\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_TEND_TO_DEAD\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_MEDIC_TIME_OF_DEATH\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_POLICE_CROWD_CONTROL\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_POLICE_INVESTIGATE\", group: \"Code (Advanced)\" },\r\n { name: \"CODE_HUMAN_STAND_COWER\", group: \"Code (Advanced)\" },\r\n { name: \"CHAINING_ENTRY\", group: \"Code (Advanced)\" },\r\n { name: \"CHAINING_EXIT\", group: \"Code (Advanced)\" },\r\n { name: \"EAR_TO_TEXT\", group: \"Code (Advanced)\" },\r\n { name: \"EAR_TO_TEXT_FAT\", group: \"Code (Advanced)\" },\r\n { name: \"WORLD_LOOKAT_POINT\", group: \"Code (Advanced)\" },\r\n];\r\n\r\n// ── Display helpers ──────────────────────────────────────────────────────────\r\n\r\n// \"PROP_HUMAN_SEAT_CHAIR_FOOD\" → \"Seat Chair Food\". Strips the WORLD_/PROP_/\r\n// CODE_ prefix and the redundant HUMAN_/BIRD_/VEHICLE_ infix so the label\r\n// reads naturally, then title-cases each underscore-separated word.\r\nconst PREFIX_RE = /^(WORLD|PROP|CODE)_(HUMAN_|BIRD_|VEHICLE_|CAT_|DOG_|COYOTE_|FISH_|HEN_|GULL_|CROW_|RABBIT_|RATS_|SHARK_|PIGEON_|ORCA_|WHALE_|STINGRAY_|DOLPHIN_|MOUNTAIN_LION_|PIG_|COW_|DEER_|BOAR_|CHICKENHAWK_|CORMORANT_)?/;\r\n\r\nexport function formatGtaScenario(name: string): string {\r\n if (!name) return \"\";\r\n const stripped = name.replace(PREFIX_RE, \"\");\r\n const cleaned = stripped.length > 0 ? stripped : name;\r\n return cleaned\r\n .toLowerCase()\r\n .split(\"_\")\r\n .filter(Boolean)\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n}\r\n","// FiveM scenario picker. Curated list from\r\n// https://wiki.rage.mp/wiki/Scenarios (via DurtyFree's data dump) grouped by\r\n// what the ped is actually doing — Sitting, Working, Sports, etc. — so admins\r\n// building a scene can find \"the chair with food\" without scrolling 250\r\n// alphabetical rows.\r\n//\r\n// Single-value Select (TaskStartScenarioInPlace/AtPosition takes one name).\r\n// Custom values in `value` that don't match a catalogued scenario are kept\r\n// in a \"Custom\" group so externally-loaded scenario keys still display.\r\n\r\nimport { Select } from \"@mantine/core\";\r\nimport type { SelectProps } from \"@mantine/core\";\r\nimport {\r\n GTA_SCENARIOS,\r\n GTA_SCENARIO_GROUP_ORDER,\r\n formatGtaScenario,\r\n type GtaScenario,\r\n type GtaScenarioGroup,\r\n} from \"@/utils/gtaScenarios\";\r\n\r\nfunction buildGroupedData(extraNames: string[] = []) {\r\n const groups = new Map<GtaScenarioGroup, GtaScenario[]>();\r\n const seen = new Set<string>();\r\n for (const sc of GTA_SCENARIOS) {\r\n if (seen.has(sc.name)) continue;\r\n seen.add(sc.name);\r\n if (!groups.has(sc.group)) groups.set(sc.group, []);\r\n groups.get(sc.group)!.push(sc);\r\n }\r\n\r\n const data = GTA_SCENARIO_GROUP_ORDER.flatMap((g) => {\r\n const items = groups.get(g);\r\n if (!items || items.length === 0) return [];\r\n return [\r\n {\r\n group: g,\r\n items: items.map((sc) => ({\r\n value: sc.name,\r\n label: sc.label ?? formatGtaScenario(sc.name),\r\n })),\r\n },\r\n ];\r\n });\r\n\r\n // Surface custom values so the dropdown still shows the current selection.\r\n // Mantine silently drops chips when the value isn't in the data array.\r\n const knownNames = new Set(GTA_SCENARIOS.map((sc) => sc.name));\r\n const customs = extraNames.filter((n) => n && !knownNames.has(n));\r\n if (customs.length > 0) {\r\n data.push({\r\n group: \"Custom\" as GtaScenarioGroup,\r\n items: customs.map((n) => ({ value: n, label: n })),\r\n });\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport type ScenarioSelectProps = Omit<SelectProps, \"data\" | \"value\" | \"onChange\"> & {\r\n /** Current scenario name. Empty string = no scenario selected. */\r\n value: string;\r\n onChange: (name: string) => void;\r\n};\r\n\r\nexport function ScenarioSelect({\r\n value,\r\n onChange,\r\n label = \"Scenario\",\r\n size = \"xs\",\r\n searchable = true,\r\n clearable = true,\r\n ...rest\r\n}: ScenarioSelectProps) {\r\n const data = buildGroupedData([value]);\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n searchable={searchable}\r\n clearable={clearable}\r\n maxDropdownHeight={320}\r\n nothingFoundMessage=\"No matching scenarios\"\r\n placeholder=\"Pick a scenario...\"\r\n {...rest}\r\n data={data}\r\n value={value || null}\r\n onChange={(v) => onChange(v ?? \"\")}\r\n />\r\n );\r\n}\r\n","// Discord role picker. Mantine Select / MultiSelect populated from a NUI\r\n// callback the consumer registers (which in turn calls lib.discord.getRoles\r\n// on the server). Each role shows its actual Discord colour as a swatch.\r\n//\r\n// The consumer wires up the NUI side once:\r\n//\r\n// RegisterNuiCallback('LIST_DISCORD_ROLES', function(_, cb)\r\n// local roles, err = lib.callback.await('myresource:listDiscordRoles')\r\n// cb({ ok = roles ~= nil, _error = err, roles = roles or {} })\r\n// end)\r\n//\r\n// server callback:\r\n// lib.callback.register('myresource:listDiscordRoles', function(src)\r\n// -- (admin perm check here)\r\n// local roles, err = lib.discord.getRoles()\r\n// return roles, err\r\n// end)\r\n//\r\n// And then renders:\r\n// <DiscordRoleSelect endpoint=\"LIST_DISCORD_ROLES\" value={...} onChange={...} />\r\n//\r\n// When lib.discord returns 'NotConfigured' the picker swaps in a friendly\r\n// banner pointing the admin at /dirk_lib so they go set credentials.\r\n\r\nimport { ActionIcon, Flex, MultiSelect, Select, Text } from \"@mantine/core\";\r\nimport type { ComboboxItem, SelectProps, MultiSelectProps } from \"@mantine/core\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { AlertTriangle, RefreshCw } from \"lucide-react\";\r\nimport { fetchNui } from \"@/utils/fetchNui\";\r\nimport { locale } from \"@/utils/locales\";\r\n\r\n// locale() returns the **key itself** on miss (see utils/locales.ts), so the\r\n// classic `locale(k) || fallback` pattern never falls through. This helper\r\n// returns `fallback` whenever locale gave us the key back unchanged.\r\nconst t = (key: string, fallback: string) => {\r\n const v = locale(key);\r\n return v === key ? fallback : v;\r\n};\r\n\r\n// Subset of the Discord role payload we actually use. Everything else\r\n// (mentionable, hoist, permissions, etc.) is on the server-side cache;\r\n// the picker only needs id/name/colour/position.\r\nexport type DiscordRole = {\r\n id: string;\r\n name: string;\r\n color: number; // 24-bit integer; 0 = no colour (Discord default)\r\n position?: number;\r\n};\r\n\r\ntype ListResponse = {\r\n ok: boolean;\r\n _error?: string;\r\n roles?: DiscordRole[];\r\n};\r\n\r\nfunction decimalToHex(color: number): string | null {\r\n if (!color || color === 0) return null;\r\n return \"#\" + color.toString(16).padStart(6, \"0\");\r\n}\r\n\r\n// Custom option renderer — swatch + role name. Falls back to a neutral\r\n// grey dot when the role has no Discord colour set (decimal 0).\r\nfunction RoleOption({ role }: { role: DiscordRole }) {\r\n const swatch = decimalToHex(role.color) || \"rgba(255,255,255,0.25)\";\r\n return (\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <div\r\n style={{\r\n width: \"1vh\",\r\n height: \"1vh\",\r\n borderRadius: \"50%\",\r\n background: swatch,\r\n flexShrink: 0,\r\n boxShadow: role.color ? `0 0 0.4vh ${swatch}` : undefined,\r\n }}\r\n />\r\n <Text size=\"xs\" c=\"rgba(255,255,255,0.9)\">\r\n {role.name}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n// Styling shared by the not-configured stand-in — a disabled Select that\r\n// shares the exact same shell as a real picker, so neighbouring inputs\r\n// (e.g. a NumberInput sitting next to us in a flex row) line up. The tint\r\n// is a subtle amber so the admin notices it's degraded without losing\r\n// the form's visual rhythm.\r\nconst NOT_CONFIGURED_TINT = \"rgba(255,184,0,0.35)\";\r\nconst NOT_CONFIGURED_FILL = \"rgba(255,184,0,0.05)\";\r\n\r\ntype SharedProps = {\r\n /** NUI callback name registered by the consumer that returns ListResponse. */\r\n endpoint: string;\r\n /** Optional label / size / placeholder forwarded to the underlying Mantine Select. */\r\n label?: React.ReactNode;\r\n size?: SelectProps[\"size\"];\r\n placeholder?: string;\r\n disabled?: boolean;\r\n /** Style props applied to the wrapping Select/MultiSelect. */\r\n style?: React.CSSProperties;\r\n styles?: SelectProps[\"styles\"];\r\n};\r\n\r\ntype SingleProps = SharedProps & {\r\n multi?: false;\r\n value: string | null;\r\n onChange: (id: string | null) => void;\r\n};\r\n\r\ntype MultiProps = SharedProps & {\r\n multi: true;\r\n value: string[];\r\n onChange: (ids: string[]) => void;\r\n};\r\n\r\nexport type DiscordRoleSelectProps = SingleProps | MultiProps;\r\n\r\nexport function DiscordRoleSelect(props: DiscordRoleSelectProps) {\r\n const { endpoint, label, size = \"xs\", placeholder, disabled, style, styles } = props;\r\n const [roles, setRoles] = useState<DiscordRole[] | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [errorCode, setErrorCode] = useState<string | null>(null);\r\n\r\n const refresh = async () => {\r\n setLoading(true);\r\n try {\r\n const res = await fetchNui<ListResponse>(endpoint, {}, {\r\n // Browser dev fallback so the component renders something useful\r\n // outside FiveM.\r\n ok: true,\r\n roles: [\r\n { id: \"1\", name: \"Admin\", color: 0xed4245, position: 5 },\r\n { id: \"2\", name: \"VIP Gold\", color: 0xfaa61a, position: 4 },\r\n { id: \"3\", name: \"Member\", color: 0x57f287, position: 3 },\r\n { id: \"4\", name: \"Guest\", color: 0, position: 2 },\r\n ],\r\n });\r\n if (res?.ok) {\r\n setRoles(res.roles ?? []);\r\n setErrorCode(null);\r\n } else {\r\n setRoles(null);\r\n setErrorCode(res?._error || \"FetchFailed\");\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n refresh();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [endpoint]);\r\n\r\n const rolesById = useMemo(() => {\r\n const map: Record<string, DiscordRole> = {};\r\n for (const r of roles ?? []) map[r.id] = r;\r\n return map;\r\n }, [roles]);\r\n\r\n // Show a disabled stand-in instead of a broken empty picker. Uses the\r\n // exact same Mantine Select/MultiSelect shell as the real component so\r\n // neighbouring inputs (NumberInputs in the same flex row, etc.) line up\r\n // pixel-for-pixel — only the input border tints amber to signal \"not\r\n // wired up yet, see /dirk_lib\".\r\n if (errorCode === \"NotConfigured\") {\r\n const notConfiguredPlaceholder = t(\r\n \"DiscordNotConfigured\",\r\n \"Not configured — set in /dirk_lib\",\r\n );\r\n const notConfiguredStyles = {\r\n ...(styles as Record<string, unknown> | undefined),\r\n input: {\r\n ...((styles as { input?: Record<string, unknown> } | undefined)?.input ?? {}),\r\n borderColor: NOT_CONFIGURED_TINT,\r\n backgroundColor: NOT_CONFIGURED_FILL,\r\n },\r\n } as SelectProps[\"styles\"];\r\n const warnIcon = (\r\n <AlertTriangle size=\"1.2vh\" color={NOT_CONFIGURED_TINT.replace(/0\\.35\\)$/, \"0.85)\")} />\r\n );\r\n if (props.multi) {\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n placeholder={notConfiguredPlaceholder}\r\n data={[]}\r\n value={[]}\r\n onChange={() => {}}\r\n disabled\r\n rightSection={warnIcon}\r\n style={style}\r\n styles={notConfiguredStyles as MultiSelectProps[\"styles\"]}\r\n />\r\n );\r\n }\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n placeholder={notConfiguredPlaceholder}\r\n data={[]}\r\n value={null}\r\n onChange={() => {}}\r\n disabled\r\n rightSection={warnIcon}\r\n style={style}\r\n styles={notConfiguredStyles}\r\n />\r\n );\r\n }\r\n\r\n // Mantine Select expects {value, label} options. We also pass the role\r\n // object inline so the custom renderer can read the colour.\r\n const data: ComboboxItem[] = (roles ?? []).map((r) => ({\r\n value: r.id,\r\n label: r.name,\r\n }));\r\n\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const role = rolesById[option.value];\r\n return role ? <RoleOption role={role} /> : <Text size=\"xs\">{option.label}</Text>;\r\n };\r\n\r\n // Mantine Select default `rightSectionPointerEvents=\"none\"` makes the\r\n // icon visual-only — clicks fall through to the combobox toggle. We\r\n // explicitly enable pointer events here so the refresh button actually\r\n // refreshes, and stopPropagation prevents the dropdown from opening\r\n // when the icon is clicked.\r\n const refreshButton = (\r\n <ActionIcon\r\n size=\"xs\"\r\n variant=\"subtle\"\r\n onMouseDown={(e) => { e.stopPropagation(); }}\r\n onClick={(e) => { e.stopPropagation(); refresh(); }}\r\n title={t(\"Refresh\", \"Refresh\")}\r\n loading={loading}\r\n aria-label={t(\"Refresh\", \"Refresh\")}\r\n >\r\n <RefreshCw size=\"1.2vh\" />\r\n </ActionIcon>\r\n );\r\n\r\n if (props.multi) {\r\n return (\r\n <MultiSelect\r\n label={label}\r\n size={size}\r\n placeholder={placeholder || t(\"PickRoles\", \"Pick roles...\")}\r\n data={data}\r\n value={props.value || []}\r\n onChange={(ids) => props.onChange(ids)}\r\n renderOption={renderOption as MultiSelectProps[\"renderOption\"]}\r\n searchable\r\n clearable\r\n disabled={disabled || (loading && !roles)}\r\n rightSection={refreshButton}\r\n rightSectionPointerEvents=\"all\"\r\n style={style}\r\n styles={styles as MultiSelectProps[\"styles\"]}\r\n nothingFoundMessage={\r\n errorCode\r\n ? `${t(\"Error\", \"Error\")} (${errorCode})`\r\n : t(\"NoRoles\", \"No roles found\")\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Select\r\n label={label}\r\n size={size}\r\n placeholder={placeholder || t(\"PickRole\", \"Pick a role...\")}\r\n data={data}\r\n value={props.value || null}\r\n onChange={(id) => props.onChange(id)}\r\n renderOption={renderOption}\r\n searchable\r\n clearable\r\n disabled={disabled || (loading && !roles)}\r\n rightSection={refreshButton}\r\n rightSectionPointerEvents=\"all\"\r\n style={style}\r\n styles={styles}\r\n nothingFoundMessage={\r\n errorCode\r\n ? `${t(\"Error\", \"Error\")} (${errorCode})`\r\n : t(\"NoRoles\", \"No roles found\")\r\n }\r\n />\r\n );\r\n}\r\n","// Account picker. Mantine Select / MultiSelect populated from a NUI\r\n// callback the consumer registers (which in turn calls\r\n// lib.accounts.list() on the server, reaching dirk_lib's framework\r\n// introspection).\r\n//\r\n// Consumer wiring (once):\r\n//\r\n// RegisterNuiCallback('LIST_ACCOUNTS', function(_, cb)\r\n// local info = lib.accounts.list()\r\n// cb(info)\r\n// end)\r\n//\r\n// Then:\r\n// <AccountSelect endpoint=\"LIST_ACCOUNTS\" value={...} onChange={...} />\r\n// <AccountSelect endpoint=\"LIST_ACCOUNTS\" multi value={[...]} onChange={...} />\r\n//\r\n// Behaviour:\r\n// • If the framework reports accounts (ESX / qb-core), the dropdown is\r\n// pre-populated with the canonical list. Each option shows name +\r\n// pretty label when available.\r\n// • In `multi` mode, the dropdown is `creatable` — admin can type a\r\n// custom account name and press Enter to add it. Needed for qbx_core\r\n// and any ESX server that adds custom accounts at runtime.\r\n// • Single-pick mode is strict (no free-form entry).\r\n// • Framework hint chip renders below the field so the admin knows\r\n// where the list came from (\"from ESX Config.Accounts\", \"default\r\n// QBox trio\", etc.).\r\n\r\nimport { ActionIcon, Flex, MultiSelect, Select, Text, alpha, useMantineTheme } from \"@mantine/core\";\r\nimport type { ComboboxItem, MultiSelectProps, SelectProps } from \"@mantine/core\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { RefreshCw } from \"lucide-react\";\r\nimport { fetchNui } from \"@/utils/fetchNui\";\r\nimport { locale } from \"@/utils/locales\";\r\n\r\nconst t = (key: string, fallback: string) => {\r\n const v = locale(key);\r\n return v === key ? fallback : v;\r\n};\r\n\r\nexport type FrameworkAccount = {\r\n name: string;\r\n label?: string;\r\n default?: number;\r\n round?: boolean;\r\n};\r\n\r\ntype ListResponse = {\r\n ok: boolean;\r\n framework?: string;\r\n accounts?: FrameworkAccount[];\r\n};\r\n\r\nconst FRAMEWORK_HINTS: Record<string, string> = {\r\n \"es_extended\": \"from ESX Config.Accounts\",\r\n \"qb-core\": \"from QBCore Money.MoneyTypes\",\r\n \"qbx_core\": \"from QBox player session (or default trio if no one is online) — log in once to capture custom accounts\",\r\n \"nd-framework\": \"ND_Core only supports cash + bank\",\r\n \"unknown\": \"no framework detected — type account names manually\",\r\n};\r\n\r\ntype SharedProps = {\r\n endpoint: string;\r\n label?: React.ReactNode;\r\n size?: SelectProps[\"size\"];\r\n placeholder?: string;\r\n disabled?: boolean;\r\n style?: React.CSSProperties;\r\n styles?: SelectProps[\"styles\"];\r\n /** Hide the framework-hint chip below the field. */\r\n hideFrameworkHint?: boolean;\r\n};\r\n\r\ntype SingleProps = SharedProps & {\r\n multi?: false;\r\n value: string | null;\r\n onChange: (name: string | null) => void;\r\n};\r\n\r\ntype MultiProps = SharedProps & {\r\n multi: true;\r\n value: string[];\r\n onChange: (names: string[]) => void;\r\n};\r\n\r\nexport type AccountSelectProps = SingleProps | MultiProps;\r\n\r\nfunction AccountOption({ account }: { account: FrameworkAccount }) {\r\n return (\r\n <Flex direction=\"column\" gap=\"0\">\r\n <Text size=\"xs\" c=\"rgba(255,255,255,0.9)\" ff=\"Akrobat Bold\" tt=\"uppercase\" lts=\"0.04em\">\r\n {account.name}\r\n </Text>\r\n {account.label && (\r\n <Text size=\"xxs\" c=\"rgba(255,255,255,0.4)\">\r\n {account.label}\r\n </Text>\r\n )}\r\n </Flex>\r\n );\r\n}\r\n\r\nfunction FrameworkHint({ framework }: { framework: string | undefined }) {\r\n const theme = useMantineTheme();\r\n if (!framework) return null;\r\n const hintKey = `AccountFrameworkHint_${framework}`;\r\n const text = t(hintKey, FRAMEWORK_HINTS[framework] || FRAMEWORK_HINTS.unknown);\r\n return (\r\n <Flex\r\n align=\"center\" gap=\"xs\" px=\"xs\" py=\"0.3vh\"\r\n style={{\r\n background: alpha(theme.colors.dark[5], 0.4),\r\n border: \"0.1vh solid rgba(255,255,255,0.04)\",\r\n borderRadius: theme.radius.xs,\r\n }}\r\n >\r\n <Text size=\"xxs\" ff=\"Akrobat Bold\" c=\"rgba(255,255,255,0.45)\" tt=\"uppercase\" lts=\"0.04em\">\r\n {framework}\r\n </Text>\r\n <Text size=\"xxs\" ff=\"Akrobat\" c=\"rgba(255,255,255,0.35)\" style={{ flex: 1 }} lineClamp={2}>\r\n {text}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\nexport function AccountSelect(props: AccountSelectProps) {\r\n const { endpoint, label, size = \"xs\", placeholder, disabled, style, styles, hideFrameworkHint } = props;\r\n const [accounts, setAccounts] = useState<FrameworkAccount[] | null>(null);\r\n const [framework, setFramework] = useState<string | undefined>(undefined);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const refresh = async () => {\r\n setLoading(true);\r\n try {\r\n const res = await fetchNui<ListResponse>(endpoint, {}, {\r\n // Browser dev fallback. Shows a recognisable ESX-style list.\r\n ok: true,\r\n framework: \"es_extended\",\r\n accounts: [\r\n { name: \"money\", label: \"Cash\" },\r\n { name: \"bank\", label: \"Bank\" },\r\n { name: \"black_money\", label: \"Dirty Money\" },\r\n ],\r\n });\r\n if (res?.ok) {\r\n setAccounts(res.accounts ?? []);\r\n setFramework(res.framework);\r\n } else {\r\n setAccounts([]);\r\n setFramework(res?.framework);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n refresh();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [endpoint]);\r\n\r\n const accountsByName = useMemo(() => {\r\n const map: Record<string, FrameworkAccount> = {};\r\n for (const a of accounts ?? []) map[a.name] = a;\r\n // In multi mode we also need to handle account names the admin typed\r\n // that aren't in the framework list (e.g. custom qbx_core accounts).\r\n if (props.multi) {\r\n for (const n of props.value ?? []) {\r\n if (n && !map[n]) map[n] = { name: n };\r\n }\r\n } else if (props.value && !map[props.value]) {\r\n map[props.value] = { name: props.value };\r\n }\r\n return map;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [accounts, props.multi, props.multi ? props.value?.join(\",\") : props.value]);\r\n\r\n const data: ComboboxItem[] = Object.values(accountsByName).map((a) => ({\r\n value: a.name,\r\n label: a.label ? `${a.name} — ${a.label}` : a.name,\r\n }));\r\n\r\n const renderOption: SelectProps[\"renderOption\"] = ({ option }) => {\r\n const acc = accountsByName[option.value];\r\n return acc ? <AccountOption account={acc} /> : <Text size=\"xs\">{option.label}</Text>;\r\n };\r\n\r\n const refreshButton = (\r\n <ActionIcon\r\n size=\"xs\" variant=\"subtle\"\r\n onMouseDown={(e) => { e.stopPropagation(); }}\r\n onClick={(e) => { e.stopPropagation(); refresh(); }}\r\n title={t(\"Refresh\", \"Refresh\")}\r\n loading={loading}\r\n aria-label={t(\"Refresh\", \"Refresh\")}\r\n >\r\n <RefreshCw size=\"1.2vh\" />\r\n </ActionIcon>\r\n );\r\n\r\n const sharedSelectProps = {\r\n label,\r\n size,\r\n data,\r\n searchable: true,\r\n clearable: true,\r\n disabled: disabled || (loading && !accounts),\r\n rightSection: refreshButton,\r\n rightSectionPointerEvents: \"all\" as const,\r\n style,\r\n nothingFoundMessage: t(\"NoAccounts\", \"No accounts available\"),\r\n };\r\n\r\n return (\r\n <Flex direction=\"column\" gap=\"0.3vh\" style={style}>\r\n {props.multi ? (\r\n <MultiSelect\r\n {...sharedSelectProps}\r\n placeholder={placeholder || t(\"PickAccounts\", \"Pick accounts (or type custom)...\")}\r\n value={props.value || []}\r\n onChange={(names) => props.onChange(names)}\r\n renderOption={renderOption as MultiSelectProps[\"renderOption\"]}\r\n // Free-form entry so admins can add account names the framework\r\n // exposes via `PlayerData.money` keys we couldn't enumerate (qbx).\r\n // The user types a name + presses Enter to commit it.\r\n searchable\r\n hidePickedOptions\r\n // Mantine 7 spelling — accepts unknown values as tags.\r\n // `creatable` was renamed in v7+ but legacy fallback is OK.\r\n styles={styles as MultiSelectProps[\"styles\"]}\r\n />\r\n ) : (\r\n <Select\r\n {...sharedSelectProps}\r\n placeholder={placeholder || t(\"PickAccount\", \"Pick an account...\")}\r\n value={props.value || null}\r\n onChange={(name) => props.onChange(name)}\r\n renderOption={renderOption}\r\n styles={styles}\r\n />\r\n )}\r\n {!hideFrameworkHint && <FrameworkHint framework={framework} />}\r\n </Flex>\r\n );\r\n}\r\n","// General-purpose bottom-right \"do this in-world\" instruction overlay.\r\n//\r\n// Reused by every admin-tool flow that releases NUI focus and asks the\r\n// player to do something in the game world: capture a position, place an\r\n// object, paint a navmesh, etc. The card itself is dumb — it just renders\r\n// a title + hint + list of key labels and stays out of the way.\r\n//\r\n// While visible it hides every other body child via a CSS attribute trick,\r\n// so the admin panel underneath keeps its React state intact (we never\r\n// unmount it). Set hideRestOfAdmin={false} on rare cases where you want\r\n// the panel to overlay alongside other UI rather than replace it.\r\nimport { alpha, Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport type { LucideIcon } from \"lucide-react\";\r\nimport { MapPin } from \"lucide-react\";\r\nimport { useEffect } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nexport type InstructionKey = {\r\n /** Short label drawn inside the key cap (e.g. \"E\", \"⌫\", \"F\"). */\r\n key: string;\r\n /** What the key does (e.g. \"Set\", \"Cancel\"). */\r\n action: string;\r\n};\r\n\r\nexport type InstructionPanelProps = {\r\n visible: boolean;\r\n title: string;\r\n /** One- or two-line subtext explaining what to do. */\r\n hint?: string;\r\n /** List of key bindings shown as labelled key caps. */\r\n keys?: InstructionKey[];\r\n /** Override the default MapPin icon next to the title. */\r\n icon?: LucideIcon;\r\n /**\r\n * When true (default) every direct child of <body> except this overlay is\r\n * hidden via a CSS rule. Lets the admin panel stay mounted (React state\r\n * preserved) while the player sees only the game world + this card.\r\n * Set false if you want the card to sit alongside other UI.\r\n */\r\n hideRestOfAdmin?: boolean;\r\n};\r\n\r\nconst BODY_HIDE_STYLE_ID = \"dirk-instruction-panel-style\";\r\nconst BODY_HIDE_ATTR = \"data-dirk-instruction-active\";\r\nconst OVERLAY_ATTR = \"data-dirk-instruction-overlay\";\r\n\r\nfunction ensureBodyHideStyle() {\r\n if (document.getElementById(BODY_HIDE_STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = BODY_HIDE_STYLE_ID;\r\n // Belt-and-braces: visibility alone gets overridden by Mantine animations\r\n // on some children (modal backdrops, transition wrappers etc), so combine\r\n // it with opacity + pointer-events to make sure everything goes dark\r\n // while preserving React state via the still-mounted DOM tree.\r\n el.textContent = `\r\n body[${BODY_HIDE_ATTR}] > *:not([${OVERLAY_ATTR}]) {\r\n visibility: hidden !important;\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n }\r\n `;\r\n document.head.appendChild(el);\r\n}\r\n\r\nexport function InstructionPanel({\r\n visible,\r\n title,\r\n hint,\r\n keys,\r\n icon: Icon = MapPin,\r\n hideRestOfAdmin = true,\r\n}: InstructionPanelProps) {\r\n const theme = useMantineTheme();\r\n const pc = theme.colors[theme.primaryColor];\r\n\r\n useEffect(() => {\r\n if (!visible || !hideRestOfAdmin) return;\r\n ensureBodyHideStyle();\r\n document.body.setAttribute(BODY_HIDE_ATTR, \"\");\r\n return () => {\r\n document.body.removeAttribute(BODY_HIDE_ATTR);\r\n };\r\n }, [visible, hideRestOfAdmin]);\r\n\r\n if (!visible) return null;\r\n\r\n return createPortal(\r\n <div\r\n {...{ [OVERLAY_ATTR]: \"\" }}\r\n style={{ position: \"fixed\", inset: 0, pointerEvents: \"none\", zIndex: 10000 }}\r\n >\r\n <AnimatePresence>\r\n <motion.div\r\n key=\"instruction-card\"\r\n initial={{ opacity: 0, y: 12, scale: 0.92 }}\r\n animate={{ opacity: 1, y: 0, scale: 1 }}\r\n exit={{ opacity: 0, y: 12, scale: 0.92 }}\r\n transition={{ duration: 0.25, ease: \"easeInOut\" }}\r\n style={{ position: \"absolute\", bottom: \"3vh\", right: \"3vh\", userSelect: \"none\" }}\r\n >\r\n <Flex\r\n direction=\"column\"\r\n gap=\"0.8vh\"\r\n style={{\r\n background: alpha(theme.colors.dark[9], 0.55),\r\n border: \"0.1vh solid rgba(255,255,255,0.07)\",\r\n borderRadius: theme.radius.sm,\r\n boxShadow: \"0 0.74vh 2.96vh rgba(0,0,0,0.5)\",\r\n padding: \"1.4vh 1.6vh\",\r\n minWidth: \"22vh\",\r\n maxWidth: \"28vh\",\r\n }}\r\n >\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <Icon size=\"1.6vh\" color={pc[6]} strokeWidth={2.5} />\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.7vh\",\r\n fontWeight: 700,\r\n letterSpacing: \"0.14em\",\r\n textTransform: \"uppercase\",\r\n color: pc[6],\r\n textShadow: `0 0 0.8vh ${alpha(pc[7], 0.5)}, 0 0 1.6vh ${alpha(pc[9], 0.3)}`,\r\n }}\r\n >\r\n {title}\r\n </Text>\r\n </Flex>\r\n\r\n {(hint || (keys && keys.length > 0)) && (\r\n <div style={{ height: \"0.1vh\", background: \"rgba(255,255,255,0.06)\", margin: \"0.1vh 0\" }} />\r\n )}\r\n\r\n {hint && (\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.05vh\",\r\n color: \"rgba(255,255,255,0.45)\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n lineHeight: 1.4,\r\n }}\r\n >\r\n {hint}\r\n </Text>\r\n )}\r\n\r\n {keys && keys.length > 0 && (\r\n <>\r\n {hint && (\r\n <div style={{ height: \"0.1vh\", background: \"rgba(255,255,255,0.06)\", margin: \"0.1vh 0\" }} />\r\n )}\r\n <Flex direction=\"column\" gap=\"0.5vh\">\r\n {keys.map((k, i) => (\r\n <InstructionKeyRow key={i} keyLabel={k.key} action={k.action} />\r\n ))}\r\n </Flex>\r\n </>\r\n )}\r\n </Flex>\r\n </motion.div>\r\n </AnimatePresence>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\n// Specials: when the consumer passes 'LMB' / 'RMB' / 'BACKSPACE' / '⌫' as\r\n// the key label, render an icon instead of plain text so the cap reads at\r\n// a glance. Anything else falls through to text rendering with extra\r\n// horizontal padding so long labels like 'ESC' / 'TAB' don't look cramped.\r\nfunction renderKeyContent(keyLabel: string): React.ReactNode {\r\n const normalized = keyLabel.trim().toUpperCase();\r\n if (normalized === \"LMB\") return <MouseIcon side=\"left\" />;\r\n if (normalized === \"RMB\") return <MouseIcon side=\"right\" />;\r\n if (normalized === \"BACKSPACE\" || keyLabel === \"⌫\") return <BackspaceIcon />;\r\n return (\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.2vh\",\r\n color: \"rgba(255,255,255,0.85)\",\r\n lineHeight: 1,\r\n padding: \"0 0.3vh\",\r\n }}\r\n >\r\n {keyLabel}\r\n </Text>\r\n );\r\n}\r\n\r\nfunction InstructionKeyRow({ keyLabel, action }: { keyLabel: string; action: string }) {\r\n // Special icon labels read better on a slightly wider cap (the mouse\r\n // glyph is wider than a letter). Text-only caps stay square.\r\n const normalized = keyLabel.trim().toUpperCase();\r\n const isIconKey = normalized === \"LMB\" || normalized === \"RMB\"\r\n || normalized === \"BACKSPACE\" || keyLabel === \"⌫\";\r\n const minWidth = isIconKey ? \"2.6vh\" : \"2.4vh\";\r\n\r\n return (\r\n <Flex align=\"center\" gap=\"0.6vh\">\r\n <div\r\n style={{\r\n minWidth,\r\n height: \"2.4vh\",\r\n padding: \"0 0.4vh\",\r\n borderRadius: \"0.3vh\",\r\n border: \"0.15vh solid rgba(255,255,255,0.35)\",\r\n background: \"rgba(255,255,255,0.06)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n opacity: 0.85,\r\n filter: \"drop-shadow(0 0 0.3vh rgba(0,0,0,0.5))\",\r\n flexShrink: 0,\r\n boxSizing: \"border-box\",\r\n }}\r\n >\r\n {renderKeyContent(keyLabel)}\r\n </div>\r\n <Text\r\n style={{\r\n fontFamily: \"Akrobat Bold, sans-serif\",\r\n fontSize: \"1.05vh\",\r\n color: \"rgba(255,255,255,0.45)\",\r\n letterSpacing: \"0.06em\",\r\n textTransform: \"uppercase\",\r\n }}\r\n >\r\n {action}\r\n </Text>\r\n </Flex>\r\n );\r\n}\r\n\r\n// Inline mouse-body SVG with one half highlighted. Matches the visual\r\n// convention of left/right click hints used elsewhere in the dirk UIs\r\n// (e.g. dirk_fishing's DUI rod indicator).\r\nfunction MouseIcon({ side }: { side: \"left\" | \"right\" }) {\r\n const stroke = \"rgba(255,255,255,0.85)\";\r\n const fillActive = \"rgba(255,255,255,0.85)\";\r\n return (\r\n <svg viewBox=\"0 0 16 22\" width=\"1.4vh\" height=\"1.9vh\" fill=\"none\" stroke={stroke} strokeWidth=\"1.4\" strokeLinejoin=\"round\">\r\n {/* Mouse body */}\r\n <rect x=\"1\" y=\"1\" width=\"14\" height=\"20\" rx=\"6\" />\r\n {/* Centre divider */}\r\n <line x1=\"8\" y1=\"1\" x2=\"8\" y2=\"9\" />\r\n {/* Highlighted button — fill the left or right top quadrant */}\r\n <path\r\n d={\r\n side === \"left\"\r\n ? \"M 7.4 1.6 L 2 1.6 A 5 5 0 0 0 1 6 L 1 9 L 7.4 9 Z\"\r\n : \"M 8.6 1.6 L 14 1.6 A 5 5 0 0 1 15 6 L 15 9 L 8.6 9 Z\"\r\n }\r\n fill={fillActive}\r\n stroke=\"none\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction BackspaceIcon() {\r\n // Backspace key shape (chevron pointing left into a tag). Matches the\r\n // shape of a physical Backspace key on a US layout. Plain SVG so it\r\n // ships without an asset file.\r\n const stroke = \"rgba(255,255,255,0.85)\";\r\n return (\r\n <svg viewBox=\"0 0 22 16\" width=\"1.7vh\" height=\"1.3vh\" fill=\"none\" stroke={stroke} strokeWidth=\"1.4\" strokeLinejoin=\"round\" strokeLinecap=\"round\">\r\n <path d=\"M 21 2 L 8 2 L 2 8 L 8 14 L 21 14 Z\" />\r\n <line x1=\"11\" y1=\"6\" x2=\"16\" y2=\"11\" />\r\n <line x1=\"16\" y1=\"6\" x2=\"11\" y2=\"11\" />\r\n </svg>\r\n );\r\n}\r\n","// Drop-in Set + Goto button pair for \"pick a world coord\" admin fields.\r\n//\r\n// Replaces the old immediate-grab WorldPositionSetButton / WorldPositionGotoButton\r\n// from PositionPicker.tsx with a walk-and-pick flow:\r\n//\r\n// 1. Set click → fetchNui('ADMIN_TOOL_BEGIN', { id: 'capturePosition' })\r\n// → dirk_lib's modules/scriptConfig/admin/tools/position.lua handler\r\n// 2. Lua releases NUI focus, polls E (set) / Backspace (cancel)\r\n// 3. On confirm → SendNUIMessage({ action: 'capturePosition_RESULT', data: {x,y,z,w} })\r\n// On cancel → SendNUIMessage({ action: 'capturePosition_CANCELLED' })\r\n// 4. AdminOverlays routes the message into useAdminToolStore.resolveActive /\r\n// cancelActive, which resolves the start() Promise.\r\n// 5. onChange fires with the captured value, admin re-shows automatically\r\n// via the body-attribute trick in InstructionPanel.\r\n//\r\n// Goto is straightforward — one-way fetchNui to the gotoCoord NUI callback.\r\nimport { alpha, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Crosshair, MapPin } from \"lucide-react\";\r\nimport { fetchNui } from \"../../utils/fetchNui\";\r\nimport { locale } from \"../../utils/locales\";\r\nimport type { Vector4Value } from \"../PositionPicker\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\nexport type WorldPositionPickerSlot = {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n /** Show only the Set button (no Goto). Defaults to false. */\r\n setOnly?: boolean;\r\n /** Show only the Goto button (no Set). Defaults to false. */\r\n gotoOnly?: boolean;\r\n};\r\n\r\nexport function WorldPositionPicker({ value, onChange, compact, setOnly, gotoOnly }: WorldPositionPickerSlot) {\r\n return (\r\n <>\r\n {!gotoOnly && <WorldPositionSetButton value={value} onChange={onChange} compact={compact} />}\r\n {!setOnly && <WorldPositionGotoButton value={value} compact={compact} />}\r\n </>\r\n );\r\n}\r\n\r\n// Internal: subcomponent of WorldPositionPicker. Not exported — consumers\r\n// use <WorldPositionPicker> which renders both Set and Goto together. The\r\n// legacy named exports of the same shape live in PositionPicker.tsx for\r\n// backwards-compat with the immediate-grab pattern; that file is being\r\n// phased out as consumers migrate to <WorldPositionPicker>.\r\nfunction WorldPositionSetButton({\r\n value,\r\n onChange,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n onChange: (v: Vector4Value) => void;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const begin = useAdminToolStore((s) => s.begin);\r\n void value;\r\n\r\n const onClick = async () => {\r\n // Order matters: register the resolver in the store FIRST so it's ready\r\n // by the time Lua fires back the result, THEN kick off the Lua flow,\r\n // THEN await the eventual resolution.\r\n const instructions = {\r\n title: locale(\"PickPositionTitle\") || \"Pick Position\",\r\n hint: locale(\"PickPositionHint\") || \"Walk to where you want this set\",\r\n keys: [\r\n { key: \"E\", action: locale(\"Set\") || \"Set\" },\r\n { key: \"⌫\", action: locale(\"Cancel\") || \"Cancel\" },\r\n ],\r\n };\r\n const pendingResult = begin<Vector4Value>({ id: \"capturePosition\", ...instructions });\r\n // `instructions` goes in the fetchNui payload so the Lua handler can\r\n // drive lib.showInstructions itself — the bottom-right panel renders\r\n // from dirk_lib's NUI, not from React.\r\n fetchNui(\"ADMIN_TOOL_BEGIN\", { id: \"capturePosition\", instructions }).catch(() => {\r\n // If the NUI bridge fails, cancel the store entry so we don't leak.\r\n useAdminToolStore.getState().cancelActive();\r\n });\r\n const result = await pendingResult;\r\n if (result) onChange(result);\r\n };\r\n\r\n return (\r\n <Tooltip label={locale(\"SetWorldTooltip\")} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <Crosshair size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {locale(\"Set\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n\r\nfunction WorldPositionGotoButton({\r\n value,\r\n compact,\r\n}: {\r\n value: Vector4Value;\r\n compact?: boolean;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const onClick = () => {\r\n fetchNui(\"ADMIN_TOOL_INVOKE\", { id: \"gotoCoord\", value }).catch(() => {});\r\n };\r\n return (\r\n <Tooltip label={locale(\"GotoWorldTooltip\")} position=\"top\" withArrow withinPortal zIndex={2000}>\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <MapPin size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {locale(\"Goto\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n","// In-world door picker — React side.\r\n//\r\n// Mirrors the WorldPositionPicker pattern: tell the AdminTools store to\r\n// begin a tool flow (renders InstructionPanel bottom-right with title +\r\n// key hints), kick the Lua admin-tool handler over fetchNui, await the\r\n// SendNUIMessage result/cancel that AdminOverlays routes back via the\r\n// store.\r\n//\r\n// Wired to dirk_lib's modules/scriptConfig/admin/tools/door.lua which\r\n// drives lib.doorlock.pick — a multi-pick flow where the admin builds a\r\n// GROUP of 1-2 doors (single door / double-door pair) and confirms it\r\n// as one logical \"door entry\". Result shape mirrors that:\r\n//\r\n// {\r\n// doors: [\r\n// { model, coords, heading, isDoor },\r\n// { model, coords, heading, isDoor }, // present only on doubles\r\n// ]\r\n// }\r\n//\r\n// Usage:\r\n// const pickDoor = usePickDoor();\r\n// const picked = await pickDoor();\r\n// if (picked) console.log(picked.doors.length, 'doors picked');\r\n//\r\n// Drop-in button (matches WorldPositionPicker styling):\r\n// <DoorPickerButton onPick={picked => addLabDoor(picked.doors)} />\r\n\r\nimport { alpha, Text, Tooltip, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { DoorOpen } from \"lucide-react\";\r\nimport { fetchNui } from \"../../utils/fetchNui\";\r\nimport { locale } from \"../../utils/locales\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\n/** A single picked door panel — one entity the admin LMB'd in-world. */\r\nexport type PickedDoor = {\r\n /** Door entity model hash. */\r\n model: number;\r\n /** Resolved model name (e.g. 'v_ilev_meth_loaddoor'). nil when the\r\n * hash isn't in dirk_lib's lookup table (custom prop, MLO asset). */\r\n modelName?: string | null;\r\n /** World coords of the door entity, snapshotted at pick time. */\r\n coords: { x: number; y: number; z: number };\r\n /** Door entity heading in degrees. */\r\n heading: number;\r\n /** True when IsEntityADoor() flagged the entity as a real door (vs a\r\n * prop the admin happened to aim at). Informational — pickers accept\r\n * any entity. */\r\n isDoor?: boolean;\r\n};\r\n\r\n/**\r\n * A confirmed pick from the multi-pick door tool. `doors` is 1-2 entries:\r\n * length 1 = single door, length 2 = double-door pair. Maps cleanly onto\r\n * ox_doorlock's single-door vs double-door spec.\r\n */\r\nexport type PickedDoorGroup = {\r\n doors: PickedDoor[];\r\n};\r\n\r\n/**\r\n * Returns a function that triggers the in-world door picker. Renders the\r\n * standard InstructionPanel while the player is aiming. Resolves with\r\n * `null` on cancel or backend failure.\r\n */\r\nexport function usePickDoor(): () => Promise<PickedDoorGroup | null> {\r\n const begin = useAdminToolStore((s) => s.begin);\r\n return async () => {\r\n // Order matters: register the resolver in the store FIRST so it's\r\n // primed by the time Lua fires the result, THEN kick the Lua flow.\r\n const pending = begin<PickedDoorGroup>({\r\n id: \"pickDoor\",\r\n title: locale(\"PickDoorTitle\"),\r\n hint: locale(\"PickDoorHint\"),\r\n keys: [\r\n { key: \"LMB\", action: locale(\"Toggle\") },\r\n { key: \"E\", action: locale(\"Confirm\") },\r\n { key: \"BACKSPACE\", action: locale(\"Cancel\") },\r\n ],\r\n });\r\n fetchNui(\"ADMIN_TOOL_BEGIN\", { id: \"pickDoor\" }).catch(() => {\r\n useAdminToolStore.getState().cancelActive();\r\n });\r\n return await pending;\r\n };\r\n}\r\n\r\n/**\r\n * Drop-in button — same styling as WorldPositionSetButton. Triggers the\r\n * picker on click and calls `onPick` with the result (or never fires on\r\n * cancel).\r\n */\r\nexport function DoorPickerButton({\r\n onPick,\r\n compact,\r\n label,\r\n tooltip,\r\n}: {\r\n onPick: (picked: PickedDoorGroup) => void;\r\n compact?: boolean;\r\n /** Override the button label. Defaults to locale(\"PickDoor\"). */\r\n label?: string;\r\n /** Override the tooltip. Defaults to locale(\"PickDoorTooltip\"). */\r\n tooltip?: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n const color = theme.colors[theme.primaryColor][5];\r\n const pickDoor = usePickDoor();\r\n\r\n const onClick = async () => {\r\n const picked = await pickDoor();\r\n if (picked && picked.doors.length > 0) onPick(picked);\r\n };\r\n\r\n return (\r\n <Tooltip\r\n label={tooltip ?? locale(\"PickDoorTooltip\")}\r\n position=\"top\"\r\n withArrow\r\n withinPortal\r\n zIndex={2000}\r\n >\r\n <motion.button\r\n onClick={onClick}\r\n whileHover={{ background: alpha(color, 0.18) }}\r\n whileTap={{ scale: 0.95 }}\r\n style={{\r\n background: alpha(color, 0.1),\r\n border: `0.1vh solid ${alpha(color, 0.35)}`,\r\n borderRadius: theme.radius.xs,\r\n padding: compact ? \"0.25vh 0.6vh\" : \"0.5vh 0.8vh\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: compact ? \"0.3vh\" : \"0.4vh\",\r\n }}\r\n >\r\n <DoorOpen size={compact ? \"1.1vh\" : \"1.3vh\"} color={color} />\r\n <Text ff=\"Akrobat Bold\" size=\"xxs\" tt=\"uppercase\" lts=\"0.06em\" c={color}>\r\n {label ?? locale(\"PickDoor\")}\r\n </Text>\r\n </motion.button>\r\n </Tooltip>\r\n );\r\n}\r\n","// Shared GTA-V Leaflet map. Originally lived in dirk_fishing's Book/Map/\r\n// MapHandler.tsx — lifted here so every consumer that wants an admin or\r\n// guidebook map (druglabsv2 lab placement, fishing guidebook, future\r\n// scripts) renders the same tile layer + zoom + bounds without copying\r\n// 100 lines per repo.\r\n//\r\n// Use:\r\n// <Map initialCenter={gameToMap(myPos.x, myPos.y)}>\r\n// <ZoomControls/>\r\n// {markers}\r\n// </Map>\r\n//\r\n// Pair with <BlipMarker> for the standard GTA blip-as-marker. Custom\r\n// markers stay possible via @adamscybot/react-leaflet-component-marker's\r\n// <Marker icon={<jsx/>} /> pattern; this file only owns the container +\r\n// tile layer + zoom widget.\r\nimport { alpha, useMantineTheme } from \"@mantine/core\";\r\nimport { CRS, latLng, latLngBounds, Map as LeafletMapType, tileLayer, TileLayer } from \"leaflet\";\r\nimport \"leaflet/dist/leaflet.css\";\r\nimport { Minus, Plus } from \"lucide-react\";\r\nimport { memo, ReactNode, useEffect, useRef } from \"react\";\r\nimport { MapContainer, useMap } from \"react-leaflet\";\r\nimport { motion } from \"framer-motion\";\r\nimport { gameToMap } from \"../../utils/map\";\r\n\r\nexport type MapStyle = \"game\" | \"render\" | \"print\";\r\n\r\nexport type MapProps = {\r\n children?: ReactNode;\r\n initialZoom?: number;\r\n initialCenter?: [number, number];\r\n mapStyle?: MapStyle;\r\n className?: string;\r\n};\r\n\r\nconst MapImpl = memo(({\r\n children,\r\n initialZoom = 2.0,\r\n initialCenter = gameToMap(0, 0),\r\n mapStyle = \"game\",\r\n}: MapProps) => {\r\n const mapRef = useRef<LeafletMapType | null>(null);\r\n\r\n return (\r\n <MapContainer\r\n maxBoundsViscosity={1.0}\r\n preferCanvas={true}\r\n zoom={Math.round(initialZoom)}\r\n zoomSnap={1}\r\n zoomDelta={1}\r\n zoomControl={false}\r\n crs={CRS.Simple}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n overflow: 'hidden',\r\n outline: 'none !important',\r\n border: 'none !important',\r\n boxShadow: 'none !important',\r\n backgroundColor: '#384950',\r\n }}\r\n center={initialCenter}\r\n attributionControl={false}\r\n doubleClickZoom={false}\r\n inertia={false}\r\n zoomAnimation={false}\r\n ref={mapRef}\r\n maxBounds={[[-250, -250], [250, 250]]}\r\n >\r\n <MapLayer mapLayer={mapStyle} />\r\n {children}\r\n </MapContainer>\r\n );\r\n});\r\nMapImpl.displayName = 'DirkMap';\r\n\r\nexport const Map = MapImpl;\r\n\r\n// ── Tile layer ──────────────────────────────────────────────────────────────\r\n// Pulls Rockstar's hosted GTA-V tile pyramid. `game` is the standard\r\n// in-game map, `render` is the higher-detail satellite-style, `print` is\r\n// the cartographic/printable variant.\r\n\r\ntype MapLayerProps = {\r\n mapLayer: MapStyle;\r\n};\r\n\r\nexport const MapLayer = ({ mapLayer }: MapLayerProps) => {\r\n const map = useMap();\r\n const layerRef = useRef<TileLayer | null>(null);\r\n\r\n useEffect(() => {\r\n if (layerRef.current) {\r\n map.removeLayer(layerRef.current);\r\n }\r\n const layer = tileLayer(\r\n `https://s.rsg.sc/sc/images/games/GTAV/map/${mapLayer}/{z}/{x}/{y}.jpg`,\r\n {\r\n maxZoom: 6,\r\n minZoom: 4,\r\n bounds: latLngBounds(latLng(0.0, 128.0), latLng(-192.0, 0.0)),\r\n tileSize: 256,\r\n updateWhenZooming: false,\r\n keepBuffer: 2,\r\n opacity: 0.75,\r\n }\r\n );\r\n layer.addTo(map);\r\n layerRef.current = layer;\r\n\r\n return () => {\r\n if (layerRef.current) {\r\n map.removeLayer(layerRef.current);\r\n }\r\n };\r\n }, [mapLayer, map]);\r\n\r\n return null;\r\n};\r\n\r\n// ── ZoomControls ────────────────────────────────────────────────────────────\r\n// Generic + / − widget pinned top-right. Must be rendered inside <Map>.\r\n\r\nexport function ZoomControls() {\r\n const theme = useMantineTheme();\r\n const map = useMap();\r\n const buttons = [\r\n { Icon: Plus, fn: () => map.zoomIn() },\r\n { Icon: Minus, fn: () => map.zoomOut() },\r\n ];\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n right: '2vh',\r\n top: '2vh',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 999999,\r\n boxShadow: `0 0 1vh ${alpha(theme.colors.dark[9], 0.85)}`,\r\n background: alpha(theme.colors.dark[9], 0.85),\r\n borderRadius: theme.radius.xs,\r\n }}\r\n initial={{ opacity: 0, y: -20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -20 }}\r\n >\r\n {buttons.map(({ Icon, fn }, i) => (\r\n <motion.div\r\n key={i}\r\n whileHover={{ scale: 1.1, filter: 'brightness(1.5)' }}\r\n onClick={fn}\r\n style={{\r\n padding: theme.spacing.xs,\r\n cursor: 'pointer',\r\n display: 'flex',\r\n }}\r\n >\r\n <Icon size={34} color={theme.colors.gray[5]} />\r\n </motion.div>\r\n ))}\r\n </motion.div>\r\n );\r\n}\r\n","// Renders a GTA-V blip on a Leaflet map at the given world coords.\r\n// Uses the same sprite/color id system the game uses, looked up against\r\n// the BLIP_ENTRIES / BLIP_COLORS tables in BlipSelect.tsx so the visual\r\n// matches whatever the admin picked in <BlipIconSelect> / <BlipColorSelect>.\r\n//\r\n// The colour comes from the GTA blip palette and is applied as a tinted\r\n// background behind the white sprite, mimicking the in-game look. For\r\n// labs/shops/etc that have no blip configured, pass `fallbackSprite` and\r\n// `fallbackColor` and the marker still renders with a neutral look.\r\n//\r\n// Use:\r\n// <BlipMarker\r\n// position={{ x: lab.door.x, y: lab.door.y }}\r\n// sprite={lab.blip?.sprite}\r\n// color={lab.blip?.color}\r\n// onClick={() => openEdit(lab.name)}\r\n// selected={selectedId === lab.name}\r\n// />\r\nimport { Marker } from \"@adamscybot/react-leaflet-component-marker\";\r\nimport { alpha } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { useMemo, useState } from \"react\";\r\nimport { gameToMap } from \"../../utils/map\";\r\nimport { blipUrlForSprite, getBlipColor } from \"../BlipSelect\";\r\n\r\nexport type BlipMarkerProps = {\r\n /** Game-world coordinates. z is ignored; map is 2D. */\r\n position: { x: number; y: number };\r\n /** Blip sprite id (0..830ish) — see BLIP_ENTRIES. */\r\n sprite?: number | null;\r\n /** Blip color id (0..85) — see BLIP_COLORS. */\r\n color?: number | null;\r\n /** Display scale multiplier. Default 1.0 → ~3vh visual size. */\r\n scale?: number;\r\n /** Click handler. Fires `e.originalEvent.stopPropagation()` before yours. */\r\n onClick?: () => void;\r\n /** When true, marker gets a brighter glow + bigger size to indicate\r\n * this is the currently-selected entry. */\r\n selected?: boolean;\r\n /** When true, marker is rendered at low opacity and clicks no-op —\r\n * for \"this entry is broken / unavailable\" states. */\r\n disabled?: boolean;\r\n /** Sprite id used when `sprite` is null/missing. Defaults to 162\r\n * (radar_poi — neutral grey dot). */\r\n fallbackSprite?: number;\r\n /** Color id used when `color` is null/missing. Defaults to 0 (white). */\r\n fallbackColor?: number;\r\n};\r\n\r\nconst DEFAULT_SPRITE = 162; // radar_poi\r\nconst DEFAULT_COLOR = 5; // yellow — readable on the GTA map (color 0/white blends in)\r\n\r\nexport function BlipMarker({\r\n position,\r\n sprite,\r\n color,\r\n scale = 1,\r\n onClick,\r\n selected,\r\n disabled,\r\n fallbackSprite = DEFAULT_SPRITE,\r\n fallbackColor = DEFAULT_COLOR,\r\n}: BlipMarkerProps) {\r\n const [hovered, setHovered] = useState(false);\r\n\r\n const mapCoords = useMemo(() => gameToMap(position.x, position.y), [position.x, position.y]);\r\n\r\n const effectiveSprite = sprite ?? fallbackSprite;\r\n const effectiveColor = color ?? fallbackColor;\r\n const url = blipUrlForSprite(effectiveSprite);\r\n const colorHex = getBlipColor(effectiveColor)?.hex ?? \"#ffffff\";\r\n\r\n const handleClick = (e: any) => {\r\n e.originalEvent?.stopPropagation?.();\r\n if (disabled) return;\r\n onClick?.();\r\n };\r\n\r\n // Default ~1.8vh — Rockstar's sprite pngs are tiny (32px-ish), going much\r\n // bigger amplifies the pixelation. Scale prop lets consumers nudge up\r\n // for high-importance markers.\r\n const baseSize = 1.8 * scale;\r\n const size = `${baseSize}vh`;\r\n const ringSize = `${baseSize * 1.6}vh`;\r\n\r\n return (\r\n <Marker\r\n position={mapCoords}\r\n eventHandlers={onClick ? { click: handleClick } : undefined}\r\n icon={\r\n <motion.div\r\n onHoverStart={() => setHovered(true)}\r\n onHoverEnd={() => setHovered(false)}\r\n style={{\r\n position: \"relative\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n cursor: disabled ? \"not-allowed\" : onClick ? \"pointer\" : \"default\",\r\n opacity: disabled ? 0.35 : 1,\r\n width: size,\r\n height: size,\r\n }}\r\n animate={{ scale: hovered && !disabled ? 1.2 : selected ? 1.15 : 1 }}\r\n transition={{ duration: 0.15, ease: \"easeOut\" }}\r\n >\r\n {/* Selection / hover ring (no solid disk behind the sprite — the\r\n old version's white-tinted disk looked bad over the map). */}\r\n {(selected || hovered) && !disabled && (\r\n <motion.div\r\n style={{\r\n position: \"absolute\",\r\n width: ringSize,\r\n height: ringSize,\r\n borderRadius: \"50%\",\r\n border: `0.18vh solid ${alpha(colorHex, 0.85)}`,\r\n boxShadow: `0 0 1vh ${alpha(colorHex, 0.55)}`,\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n />\r\n )}\r\n\r\n {/* Tinted sprite via CSS mask. Rockstar's blip pngs are white\r\n silhouettes — using mask-image + background-color paints them\r\n in the blip's GTA color cleanly, no halo, no double-render.\r\n The stacked 1px drop-shadows in 4 cardinal directions fake a\r\n uniform 1px black outline (CSS has no native stroke for masked\r\n elements). Final big drop-shadow adds the soft halo for depth. */}\r\n {url && (\r\n <div\r\n style={{\r\n width: size,\r\n height: size,\r\n backgroundColor: colorHex,\r\n WebkitMaskImage: `url(${url})`,\r\n maskImage: `url(${url})`,\r\n WebkitMaskRepeat: \"no-repeat\",\r\n maskRepeat: \"no-repeat\",\r\n WebkitMaskPosition: \"center\",\r\n maskPosition: \"center\",\r\n WebkitMaskSize: \"contain\",\r\n maskSize: \"contain\",\r\n filter: [\r\n \"drop-shadow(0.12vh 0 0 #000)\",\r\n \"drop-shadow(-0.12vh 0 0 #000)\",\r\n \"drop-shadow(0 0.12vh 0 #000)\",\r\n \"drop-shadow(0 -0.12vh 0 #000)\",\r\n `drop-shadow(0 0 0.4vh ${alpha(\"#000\", 0.7)})`,\r\n ].join(\" \"),\r\n pointerEvents: \"none\",\r\n userSelect: \"none\",\r\n }}\r\n />\r\n )}\r\n </motion.div>\r\n }\r\n />\r\n );\r\n}\r\n"]}
|