{"version":3,"file":"index.cjs","sources":["../src/lib/paramCaseObject.ts","../src/lib/parseArParam.ts","../src/constants.ts","../src/resolvers/resolveFixed.ts","../src/buildFixedImageData.ts","../src/resolvers/resolveFluid.ts","../src/buildFluidImageData.ts","../src/lib/generateGatsbyImageDataSource.ts","../src/getGatsbyImageData.ts","../src/ImgixGatsbyImage.tsx"],"sourcesContent":["import { paramCase } from \"param-case\";\nimport { KebabCase as ParamCase } from \"type-fest\";\n\ntype ParamCaseObject<T extends Record<string, unknown>> = {\n\t[P in keyof T as ParamCase<P>]: T[P];\n};\n\nexport const paramCaseObject = <T extends Record<string, unknown>>(\n\tobj: T,\n): ParamCaseObject<T> => {\n\tconst result = {} as ParamCaseObject<T>;\n\n\tfor (const key in obj) {\n\t\tconst paramKey = paramCase(key) as keyof typeof result;\n\n\t\tresult[paramKey] = obj[key as keyof typeof obj];\n\t}\n\n\treturn result;\n};\n","export const parseArParam = (ar: string): number => {\n\tconst [antecedent, consequent] = ar.split(\":\");\n\n\treturn Number.parseFloat(antecedent) / Number.parseFloat(consequent);\n};\n","import { ImgixParams } from \"./types\";\n\n/**\n * The default width for fixed images.\n */\nexport const DEFAULT_FIXED_WIDTH = 400;\n\n/**\n * The default max width for fluid images.\n */\nexport const DEFAULT_FLUID_MAX_WIDTH = 800;\n\n/**\n * A set of factors used to compute a default setSetBreakpoint argument for fluid images.\n */\nexport const DEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS = [0.25, 0.5, 1.5, 2];\n\n/**\n * Default Imgix parameters applied to all images.\n */\nexport const DEFAULT_IMGIX_PARAMS: ImgixParams = {\n\tfit: \"crop\",\n};\n\n/**\n * Default Imgix parameters applied to all placeholder images.\n */\nexport const DEFAULT_PLACEHOLDER_IMGIX_PARAMS: ImgixParams = {\n\tw: 20,\n\th: undefined,\n\tblur: 15,\n\tq: 20,\n};\n\n/**\n * GraphQL type names used for GraphQL type and field builders.\n */\nexport enum GraphQLTypeName {\n\t/**\n\t * Gatsby Image placeholder kinds.\n\t */\n\tGatsbyImageDataPlaceholderEnum = \"GatsbyImageDataPlaceholder\",\n\n\t/**\n\t * Imgix parameters used in Imgix's URL API.\n\t */\n\tImgixParamsInputObject = \"ImgixParams\",\n\n\t/**\n\t * `gatsby-plugin-image` gatsbyImageData objects.\n\t */\n\tGatsbyImageDataObject = \"GatsbyImageData\",\n\n\t/**\n\t * `gatsby-image` fixed objects.\n\t */\n\tFixedObject = \"Fixed\",\n\n\t/**\n\t * `gatsby-image` fluid objects.\n\t */\n\tFluidObject = \"Fluid\",\n}\n\n/**\n * Gatsby Image placeholder kinds.\n *\n * @see Gatsby Image plugin documentation: {@link https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image/#placeholder}\n */\nexport enum GatsbyImageDataPlaceholderKind {\n\tBlurred = \"blurred\",\n\tDominantColor = \"dominantColor\",\n\tNone = \"none\",\n}\n\n/**\n * Gatsby Image layout kinds.\n *\n * @see Gatsby Image plugin documentation: {@link https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image/#layout}\n */\nexport enum GatsbyImageDataLayoutKind {\n\tConstrained = \"constrained\",\n\tFixed = \"fixed\",\n\tFullWidth = \"fullWidth\",\n}\n","import type { FixedObject } from \"gatsby-image\";\nimport ImgixClient from \"@imgix/js-core\";\n\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\nimport { parseArParam } from \"../lib/parseArParam\";\n\nimport { ImageSource, ImgixParams, ImgixClientConfig } from \"../types\";\nimport {\n\tDEFAULT_FIXED_WIDTH,\n\tDEFAULT_IMGIX_PARAMS,\n\tDEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n} from \"../constants\";\n\nexport type FixedArgs = {\n\twidth?: number;\n\theight?: number | null;\n\timgixParams?: ImgixParams;\n\tplaceholderImgixParams?: ImgixParams;\n};\n\nexport type ResolveFluidConfig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const resolveFixed = (\n\tsource: ImageSource,\n\toptions: FixedArgs = {},\n\tconfig: ResolveFluidConfig = {},\n): FixedObject => {\n\tconst url = new URL(source.url);\n\tconst filename = decodeURIComponent(url.pathname);\n\tconst client = new ImgixClient({\n\t\tdomain: url.hostname,\n\t\t...config.imgixClientConfig,\n\t});\n\n\tlet aspectRatio = source.width / source.height;\n\tif (typeof options.imgixParams?.ar === \"string\") {\n\t\tconst parsedAr = parseArParam(options.imgixParams.ar);\n\n\t\tif (!Number.isNaN(parsedAr)) {\n\t\t\taspectRatio = parsedAr;\n\t\t}\n\t}\n\n\tlet width = DEFAULT_FIXED_WIDTH;\n\tlet height = Math.round(width / aspectRatio);\n\tif (options.width != null) {\n\t\twidth = options.width;\n\t\tif (options.height != null) {\n\t\t\theight = options.height;\n\t\t} else {\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t} else if (options.height != null) {\n\t\theight = options.height;\n\t\tif (options.width != null) {\n\t\t\twidth = options.width;\n\t\t} else {\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t}\n\n\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\tw: width,\n\t\th: height,\n\t});\n\n\tconst imgixParamsWebp: ImgixParams = {\n\t\t...imgixParams,\n\t\tfm: \"webp\",\n\t};\n\n\tconst placeholderImgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\t...DEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n\t\t...options.placeholderImgixParams,\n\t});\n\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tbase64: client.buildURL(filename, placeholderImgixParams),\n\t\tsrc: client.buildURL(filename, imgixParams),\n\t\tsrcWebp: client.buildURL(filename, imgixParamsWebp),\n\t\tsrcSet: client.buildSrcSet(filename, imgixParams),\n\t\tsrcSetWebp: client.buildSrcSet(filename, imgixParamsWebp),\n\t};\n};\n","import { FixedObject } from \"gatsby-image\";\n\nimport { ImgixParams } from \"./types\";\nimport { resolveFixed } from \"./resolvers/resolveFixed\";\n\nexport type BuildFixedObjectTypeConfig = {\n\tincludeLibraryParam?: boolean;\n};\n\n/**\n * @deprecated `gatsby-image` is deprecated (\"fixed\" and \"fluid\" images). Use\n *   `gatsby-plugin-image` instead. You can use the `getGatsbyImageData`\n *   function to build an object like `buildFixedObjectType`.\n * @see {@link https://www.gatsbyjs.com/docs/reference/release-notes/image-migration-guide/ | Migrating from gatsby-image to gatsby-plugin-image}\n */\nexport const buildFixedImageData = (\n\tsrc: string,\n\timgixParams: ImgixParams & { w: number; h: number },\n\toptions: BuildFixedObjectTypeConfig = {},\n): FixedObject => {\n\treturn resolveFixed(\n\t\t{\n\t\t\turl: src,\n\t\t\twidth: imgixParams.w,\n\t\t\theight: imgixParams.h,\n\t\t},\n\t\t{\n\t\t\twidth: imgixParams.w,\n\t\t\theight: imgixParams.h,\n\t\t\timgixParams,\n\t\t},\n\t\t{\n\t\t\timgixClientConfig: {\n\t\t\t\tincludeLibraryParam: options.includeLibraryParam,\n\t\t\t},\n\t\t},\n\t);\n};\n","import type { FluidObject } from \"gatsby-image\";\nimport ImgixClient, { SrcSetOptions } from \"@imgix/js-core\";\n\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\nimport { parseArParam } from \"../lib/parseArParam\";\n\nimport { ImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport {\n\tDEFAULT_FLUID_MAX_WIDTH,\n\tDEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS,\n\tDEFAULT_IMGIX_PARAMS,\n\tDEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n} from \"../constants\";\n\nexport type FluidArgs = {\n\tmaxWidth?: number;\n\tmaxHeight?: number | null;\n\tsrcSetBreakpoints?: number[];\n\timgixParams?: ImgixParams;\n\tplaceholderImgixParams?: ImgixParams;\n};\n\ntype ResolveFluidConfig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const resolveFluid = (\n\tsource: ImageSource,\n\toptions: FluidArgs = {},\n\tconfig: ResolveFluidConfig = {},\n): FluidObject => {\n\tconst url = new URL(source.url);\n\tconst filename = decodeURIComponent(url.pathname);\n\tconst client = new ImgixClient({\n\t\tdomain: url.hostname,\n\t\t...config.imgixClientConfig,\n\t});\n\n\tlet aspectRatio = source.width / source.height;\n\tif (typeof options.imgixParams?.ar === \"string\") {\n\t\tconst parsedAr = parseArParam(options.imgixParams.ar);\n\n\t\tif (!Number.isNaN(parsedAr)) {\n\t\t\taspectRatio = parsedAr;\n\t\t}\n\t} else if (options.maxWidth != null && options.maxHeight != null) {\n\t\taspectRatio = options.maxWidth / options.maxHeight;\n\t}\n\n\tlet maxWidth = DEFAULT_FLUID_MAX_WIDTH;\n\tif (options.maxWidth != null) {\n\t\tmaxWidth = options.maxWidth;\n\t} else if (options.maxHeight != null) {\n\t\tmaxWidth = Math.round(options.maxHeight * aspectRatio);\n\t}\n\n\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\tw: maxWidth,\n\t\tar: `${aspectRatio}:1`,\n\t});\n\n\tconst imgixParamsWebp = {\n\t\t...imgixParams,\n\t\tfm: \"webp\",\n\t};\n\n\tconst placeholderImgixParams: ImgixParams = paramCaseObject({\n\t\t...imgixParams,\n\t\t...DEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n\t\t...options.placeholderImgixParams,\n\t});\n\n\tconst srcSetOptions: SrcSetOptions = {\n\t\tmaxWidth,\n\t\twidths:\n\t\t\toptions.srcSetBreakpoints ||\n\t\t\tDEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS.map(\n\t\t\t\t(factor) => (options.maxWidth ?? DEFAULT_FLUID_MAX_WIDTH) * factor,\n\t\t\t),\n\t};\n\n\treturn {\n\t\taspectRatio,\n\t\tbase64: client.buildURL(filename, placeholderImgixParams),\n\t\tsrc: client.buildURL(filename, imgixParams),\n\t\tsrcWebp: client.buildURL(filename, imgixParamsWebp),\n\t\tsrcSet: client.buildSrcSet(filename, imgixParams, srcSetOptions),\n\t\tsrcSetWebp: client.buildSrcSet(filename, imgixParamsWebp, srcSetOptions),\n\t\tsizes: \"(min-width: 8192px) 8192px 100vw\",\n\t};\n};\n","import { FluidObject } from \"gatsby-image\";\n\nimport { parseArParam } from \"./lib/parseArParam\";\n\nimport { ImgixParams } from \"./types\";\nimport { resolveFluid } from \"./resolvers/resolveFluid\";\n\nexport type BuildFluidObjectTypeConfig = {\n\tincludeLibraryParam?: boolean;\n\tsizes?: string;\n};\n\n/**\n * @deprecated `gatsby-image` is deprecated (\"fixed\" and \"fluid\" images). Use\n *   `gatsby-plugin-image` instead. You can use the `getGatsbyImageData`\n *   function to build an object like `buildFluidObjectType`.\n * @see {@link https://www.gatsbyjs.com/docs/reference/release-notes/image-migration-guide/ | Migrating from gatsby-image to gatsby-plugin-image}\n */\nexport const buildFluidImageData = (\n\tsrc: string,\n\timgixParams: ImgixParams & { ar: string },\n\toptions: BuildFluidObjectTypeConfig = {},\n): FluidObject => {\n\tconst aspectRatio = parseArParam(imgixParams.ar);\n\n\tconst fluid = resolveFluid(\n\t\t{\n\t\t\turl: src,\n\t\t\twidth: aspectRatio,\n\t\t\theight: 1,\n\t\t},\n\t\t{\n\t\t\timgixParams,\n\t\t},\n\t\t{\n\t\t\timgixClientConfig: {\n\t\t\t\tincludeLibraryParam: options.includeLibraryParam,\n\t\t\t},\n\t\t},\n\t);\n\tfluid.sizes = options.sizes ?? fluid.sizes;\n\n\treturn fluid;\n};\n","import type { IGatsbyImageHelperArgs } from \"gatsby-plugin-image\";\nimport ImgixClient from \"@imgix/js-core\";\n\nimport { DEFAULT_IMGIX_PARAMS } from \"../constants\";\nimport type { ImgixClientConfig, ImgixParams } from \"../types\";\n\n// NOTE: This *server* file can only be imported for types!\nimport type { GatsbyImageDataArgs } from \"../resolvers/resolveGatsbyImageData.server\";\n\nimport { paramCaseObject } from \"./paramCaseObject\";\n\ntype GenerateGatsbyImageDataSourceConig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const generateGatsbyImageDataSource = (\n\tconfig: GenerateGatsbyImageDataSourceConig,\n): IGatsbyImageHelperArgs[\"generateImageSource\"] => {\n\treturn (\n\t\tsourceUrl,\n\t\twidth,\n\t\theight,\n\t\tformat,\n\t\t_fit,\n\t\toptions?: GatsbyImageDataArgs,\n\t) => {\n\t\tconst url = new URL(sourceUrl);\n\t\tconst filename = decodeURIComponent(url.pathname);\n\t\tconst client = new ImgixClient({\n\t\t\tdomain: url.hostname,\n\t\t\t...config.imgixClientConfig,\n\t\t});\n\n\t\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t\t...options?.imgixParams,\n\t\t\tw: width,\n\t\t\th: height,\n\t\t});\n\n\t\tif (format && format !== \"auto\") {\n\t\t\timgixParams.fm = format;\n\t\t}\n\n\t\treturn {\n\t\t\tsrc: client.buildURL(filename, imgixParams),\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t};\n\t};\n};\n","import {\n\tIGatsbyImageData,\n\tIGetImageDataArgs,\n\tgetImageData,\n} from \"gatsby-plugin-image\";\n\nimport { name as packageName } from \"../package.json\";\n\nimport { generateGatsbyImageDataSource } from \"./lib/generateGatsbyImageDataSource\";\n\nimport { ImgixParams } from \"./types\";\n\nexport type GetGatsbyImageDataConfig = Omit<\n\tIGetImageDataArgs<never>,\n\t| \"baseUrl\"\n\t| \"urlBuilder\"\n\t| \"sourceWidth\"\n\t| \"sourceHeight\"\n\t| \"width\"\n\t| \"aspectRatio\"\n\t| \"pluginName\"\n\t| \"options\"\n> & {\n\tsrc: string;\n\timgixParams?: ImgixParams;\n} & (\n\t\t| {\n\t\t\t\tsourceWidth: number;\n\t\t\t\tsourceHeight: number;\n\t\t  }\n\t\t| {\n\t\t\t\twidth: number;\n\t\t\t\taspectRatio: number;\n\t\t  }\n\t);\n\nexport const getGatsbyImageData = (\n\tconfig: GetGatsbyImageDataConfig,\n): IGatsbyImageData => {\n\tlet sourceWidth: number;\n\tlet sourceHeight: number;\n\tif (\"sourceWidth\" in config && \"sourceHeight\" in config) {\n\t\tsourceWidth = config.sourceWidth;\n\t\tsourceHeight = config.sourceHeight;\n\t} else {\n\t\tsourceWidth = config.width;\n\t\tsourceHeight = config.width / config.aspectRatio;\n\t}\n\n\treturn getImageData({\n\t\t...config,\n\t\tbaseUrl: config.src,\n\t\turlBuilder: (args) => {\n\t\t\tconst gatsbyImageDataSource = generateGatsbyImageDataSource({\n\t\t\t\t// The client cannot be configured in browser-only settings.\n\t\t\t\timgixClientConfig: undefined,\n\t\t\t})(\n\t\t\t\targs.baseUrl,\n\t\t\t\targs.width,\n\t\t\t\targs.height,\n\t\t\t\targs.format,\n\t\t\t\tundefined,\n\t\t\t\targs.options,\n\t\t\t);\n\n\t\t\treturn gatsbyImageDataSource.src;\n\t\t},\n\t\tsourceWidth,\n\t\tsourceHeight,\n\t\tpluginName: packageName,\n\t\toptions: {\n\t\t\timgixParams: config.imgixParams,\n\t\t},\n\t});\n};\n","import * as React from \"react\";\nimport { GatsbyImage, GatsbyImageProps } from \"gatsby-plugin-image\";\n\nimport {\n\tgetGatsbyImageData,\n\tGetGatsbyImageDataConfig,\n} from \"./getGatsbyImageData\";\n\nexport type ImgixGatsbyImageProps = GetGatsbyImageDataConfig &\n\tOmit<GatsbyImageProps, \"image\">;\n\nexport const ImgixGatsbyImage = (props: ImgixGatsbyImageProps): JSX.Element => {\n\tconst data = getGatsbyImageData(props);\n\n\treturn <GatsbyImage image={data} {...props} />;\n};\n"],"names":["paramCase","ImgixClient","getImageData","packageName","GatsbyImage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAOa,kBAAkB,CAC9B,QACwB;AACxB,QAAM,SAAS;AAEf,aAAW,OAAO,KAAK;AACtB,UAAM,WAAWA,oBAAU;AAE3B,WAAO,YAAY,IAAI;AAAA;AAGxB,SAAO;AAAA;;MClBK,eAAe,CAAC,OAAuB;AACnD,QAAM,CAAC,YAAY,cAAc,GAAG,MAAM;AAE1C,SAAO,OAAO,WAAW,cAAc,OAAO,WAAW;AAAA;;MCE7C,sBAAsB;MAKtB,0BAA0B;MAK1B,2CAA2C,CAAC,MAAM,KAAK,KAAK;MAK5D,uBAAoC;AAAA,EAChD,KAAK;AAAA;MAMO,mCAAgD;AAAA,EAC5D,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AAAA,EACN,GAAG;AAAA;IAMQ;AAAL,UAAK,kBAAL;AAIN,uDAAiC;AAKjC,+CAAyB;AAKzB,8CAAwB;AAKxB,oCAAc;AAKd,oCAAc;AAAA,GAxBH;IAgCA;AAAL,UAAK,iCAAL;AACN,+CAAU;AACV,qDAAgB;AAChB,4CAAO;AAAA,GAHI;IAWA;AAAL,UAAK,4BAAL;AACN,8CAAc;AACd,wCAAQ;AACR,4CAAY;AAAA,GAHD;;MCxDC,eAAe,CAC3B,QACA,UAAqB,IACrB,SAA6B,OACZ;AA5BlB;AA6BC,QAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAM,WAAW,mBAAmB,IAAI;AACxC,QAAM,SAAS,IAAIC,gCAAY;AAAA,IAC9B,QAAQ,IAAI;AAAA,OACT,OAAO;AAAA;AAGX,MAAI,cAAc,OAAO,QAAQ,OAAO;AACxC,MAAI,sBAAe,gBAAR,mBAAqB,QAAO,UAAU;AAChD,UAAM,WAAW,aAAa,QAAQ,YAAY;AAElD,QAAI,CAAC,OAAO,MAAM,WAAW;AAC5B,oBAAc;AAAA;AAAA;AAIhB,MAAI,QAAQ;AACZ,MAAI,SAAS,KAAK,MAAM,QAAQ;AAChC,MAAI,QAAQ,SAAS,MAAM;AAC1B,YAAQ,QAAQ;AAChB,QAAI,QAAQ,UAAU,MAAM;AAC3B,eAAS,QAAQ;AAAA,WACX;AACN,eAAS,KAAK,MAAM,QAAQ;AAAA;AAAA,aAEnB,QAAQ,UAAU,MAAM;AAClC,aAAS,QAAQ;AACjB,QAAI,QAAQ,SAAS,MAAM;AAC1B,cAAQ,QAAQ;AAAA,WACV;AACN,cAAQ,KAAK,MAAM,SAAS;AAAA;AAAA;AAI9B,QAAM,cAA2B,gBAAgB;AAAA,OAC7C;AAAA,OACA,QAAQ;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA;AAGJ,QAAM,kBAA+B;AAAA,OACjC;AAAA,IACH,IAAI;AAAA;AAGL,QAAM,yBAAsC,gBAAgB;AAAA,OACxD;AAAA,OACA,QAAQ;AAAA,OACR;AAAA,OACA,QAAQ;AAAA;AAGZ,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,SAAS,UAAU;AAAA,IAClC,KAAK,OAAO,SAAS,UAAU;AAAA,IAC/B,SAAS,OAAO,SAAS,UAAU;AAAA,IACnC,QAAQ,OAAO,YAAY,UAAU;AAAA,IACrC,YAAY,OAAO,YAAY,UAAU;AAAA;AAAA;;MC1E9B,sBAAsB,CAClC,KACA,aACA,UAAsC,OACrB;AACjB,SAAO,aACN;AAAA,IACC,KAAK;AAAA,IACL,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,KAErB;AAAA,IACC,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,IACpB;AAAA,KAED;AAAA,IACC,mBAAmB;AAAA,MAClB,qBAAqB,QAAQ;AAAA;AAAA;AAAA;;MCPpB,eAAe,CAC3B,QACA,UAAqB,IACrB,SAA6B,OACZ;AA9BlB;AA+BC,QAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAM,WAAW,mBAAmB,IAAI;AACxC,QAAM,SAAS,IAAIA,gCAAY;AAAA,IAC9B,QAAQ,IAAI;AAAA,OACT,OAAO;AAAA;AAGX,MAAI,cAAc,OAAO,QAAQ,OAAO;AACxC,MAAI,sBAAe,gBAAR,mBAAqB,QAAO,UAAU;AAChD,UAAM,WAAW,aAAa,QAAQ,YAAY;AAElD,QAAI,CAAC,OAAO,MAAM,WAAW;AAC5B,oBAAc;AAAA;AAAA,aAEL,QAAQ,YAAY,QAAQ,QAAQ,aAAa,MAAM;AACjE,kBAAc,QAAQ,WAAW,QAAQ;AAAA;AAG1C,MAAI,WAAW;AACf,MAAI,QAAQ,YAAY,MAAM;AAC7B,eAAW,QAAQ;AAAA,aACT,QAAQ,aAAa,MAAM;AACrC,eAAW,KAAK,MAAM,QAAQ,YAAY;AAAA;AAG3C,QAAM,cAA2B,gBAAgB;AAAA,OAC7C;AAAA,OACA,QAAQ;AAAA,IACX,GAAG;AAAA,IACH,IAAI,GAAG;AAAA;AAGR,QAAM,kBAAkB;AAAA,OACpB;AAAA,IACH,IAAI;AAAA;AAGL,QAAM,yBAAsC,gBAAgB;AAAA,OACxD;AAAA,OACA;AAAA,OACA,QAAQ;AAAA;AAGZ,QAAM,gBAA+B;AAAA,IACpC;AAAA,IACA,QACC,QAAQ,qBACR,yCAAyC,IACxC,CAAC,WAAQ;AA/Eb;AA+EiB,6BAAQ,aAAR,aAAoB,2BAA2B;AAAA;AAAA;AAI/D,SAAO;AAAA,IACN;AAAA,IACA,QAAQ,OAAO,SAAS,UAAU;AAAA,IAClC,KAAK,OAAO,SAAS,UAAU;AAAA,IAC/B,SAAS,OAAO,SAAS,UAAU;AAAA,IACnC,QAAQ,OAAO,YAAY,UAAU,aAAa;AAAA,IAClD,YAAY,OAAO,YAAY,UAAU,iBAAiB;AAAA,IAC1D,OAAO;AAAA;AAAA;;MCxEI,sBAAsB,CAClC,KACA,aACA,UAAsC,OACrB;AAtBlB;AAuBC,QAAM,cAAc,aAAa,YAAY;AAE7C,QAAM,QAAQ,aACb;AAAA,IACC,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,KAET;AAAA,IACC;AAAA,KAED;AAAA,IACC,mBAAmB;AAAA,MAClB,qBAAqB,QAAQ;AAAA;AAAA;AAIhC,QAAM,QAAQ,cAAQ,UAAR,YAAiB,MAAM;AAErC,SAAO;AAAA;;;;MC3BK,gCAAgC,CAC5C,WACmD;AACnD,SAAO,CACN,WACA,OACA,QACA,QACA,MACA,YACI;AACJ,UAAM,MAAM,IAAI,IAAI;AACpB,UAAM,WAAW,mBAAmB,IAAI;AACxC,UAAM,SAAS,IAAIA,gCAAY;AAAA,MAC9B,QAAQ,IAAI;AAAA,SACT,OAAO;AAAA;AAGX,UAAM,cAA2B,gBAAgB;AAAA,SAC7C;AAAA,SACA,mCAAS;AAAA,MACZ,GAAG;AAAA,MACH,GAAG;AAAA;AAGJ,QAAI,UAAU,WAAW,QAAQ;AAChC,kBAAY,KAAK;AAAA;AAGlB,WAAO;AAAA,MACN,KAAK,OAAO,SAAS,UAAU;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;MCZU,qBAAqB,CACjC,WACsB;AACtB,MAAI;AACJ,MAAI;AACJ,MAAI,iBAAiB,UAAU,kBAAkB,QAAQ;AACxD,kBAAc,OAAO;AACrB,mBAAe,OAAO;AAAA,SAChB;AACN,kBAAc,OAAO;AACrB,mBAAe,OAAO,QAAQ,OAAO;AAAA;AAGtC,SAAOC,+BAAa;AAAA,OAChB;AAAA,IACH,SAAS,OAAO;AAAA,IAChB,YAAY,CAAC,SAAS;AACrB,YAAM,wBAAwB,8BAA8B;AAAA,QAE3D,mBAAmB;AAAA,SAEnB,KAAK,SACL,KAAK,OACL,KAAK,QACL,KAAK,QACL,QACA,KAAK;AAGN,aAAO,sBAAsB;AAAA;AAAA,IAE9B;AAAA,IACA;AAAA,IACA,YAAYC;AAAA,IACZ,SAAS;AAAA,MACR,aAAa,OAAO;AAAA;AAAA;AAAA;;MC5DV,mBAAmB,CAAC,UAA8C;AAC9E,QAAM,OAAO,mBAAmB;AAEhC,wDAAQC,+BAAD;AAAA,IAAa,OAAO;AAAA,OAAU;AAAA;AAAA;;;;;;;"}