{"version":3,"file":"spritespin.js","sources":["../src/core/api.ts","../src/utils/jquery.ts","../src/utils/cursor.ts","../src/utils/detectSubsampling.ts","../src/utils/layout.ts","../src/utils/naturalSize.ts","../src/utils/measure.ts","../src/utils/preload.ts","../src/utils/sourceArray.ts","../src/core/constants.ts","../src/utils/utils.ts","../src/core/layout.ts","../src/core/state.ts","../src/core/playback.ts","../src/core/plugins.ts","../src/core/boot.ts","../src/core/input.ts","../src/core/jquery.ts","../src/api/common.ts","../src/api/fullscreen.ts","../src/plugins/input-click.ts","../src/plugins/input-drag.ts","../src/plugins/input-hold.ts","../src/plugins/input-swipe.ts","../src/plugins/input-wheel.ts","../src/plugins/progress.ts","../src/plugins/render-360.ts","../src/plugins/render-blur.ts","../src/plugins/render-ease.ts","../src/plugins/render-gallery.ts","../src/plugins/render-panorama.ts","../src/plugins/render-zoom.ts","../src/index.ts"],"sourcesContent":["// tslint:disable ban-types\nimport { Data } from './models'\n\n/**\n * @internal\n */\nexport class Api {\n constructor(public data: Data) { }\n}\n\n/**\n * Adds methods to the SpriteSpin api\n *\n * @public\n */\nexport function extendApi(methods: { [key: string]: Function }) {\n const api = Api.prototype\n for (const key in methods) {\n if (methods.hasOwnProperty(key)) {\n if (api[key]) {\n throw new Error('API method is already defined: ' + key)\n } else {\n api[key] = methods[key]\n }\n }\n }\n return api\n}\n","export const $: JQueryStatic = (window as any).jQuery || (window as any).$\n","export function getCursorPosition(event) {\n let touches = event.touches\n let source = event\n\n // jQuery Event normalization does not preserve the 'event.touches'\n // try to grab touches from the original event\n if (event.touches === undefined && event.originalEvent !== undefined) {\n touches = event.originalEvent.touches\n }\n // get current touch or mouse position\n if (touches !== undefined && touches.length > 0) {\n source = touches[0]\n }\n return {\n x: source.clientX || 0,\n y: source.clientY || 0\n }\n}\n","let canvas\nlet context\n\nfunction detectionContext() {\n if (context) {\n return context\n }\n\n if (!canvas) {\n canvas = document.createElement('canvas')\n }\n if (!canvas || !canvas.getContext) {\n return null\n }\n\n context = canvas.getContext('2d')\n return context\n}\n\n/**\n * Idea taken from https://github.com/stomita/ios-imagefile-megapixel\n * Detects whether the image has been sub sampled by the browser and does not have its original dimensions.\n * This method unfortunately does not work for images that have transparent background.\n */\nexport function detectSubsampling(img: HTMLImageElement, width: number, height: number) {\n\n if (!detectionContext()) {\n return false\n }\n\n // sub sampling happens on images above 1 megapixel\n if (width * height <= 1024 * 1024) {\n return false\n }\n\n // set canvas to 1x1 pixel size and fill it with magenta color\n canvas.width = canvas.height = 1\n context.fillStyle = '#FF00FF'\n context.fillRect(0, 0, 1, 1)\n // render the image with a negative offset to the left so that it would\n // fill the canvas pixel with the top right pixel of the image.\n context.drawImage(img, -width + 1, 0)\n\n // check color value to confirm image is covering edge pixel or not.\n // if color still magenta, the image is assumed to be sub sampled.\n try {\n const dat = context.getImageData(0, 0, 1, 1).data\n return (dat[0] === 255) && (dat[1] === 0) && (dat[2] === 255)\n } catch (err) {\n // avoids cross origin exception for chrome when code runs without a server\n return false\n }\n}\n","import { SizeMode } from '../core/models'\n\nexport interface Layoutable {\n width?: number\n height?: number\n frameWidth?: number\n frameHeight?: number\n target: any\n sizeMode?: SizeMode\n}\n\nexport interface Layout {\n [key: string]: any\n width: string | number\n height: string | number\n top: number\n left: number\n bottom: number\n right: number\n position: 'absolute'\n overflow: 'hidden'\n}\n\nexport interface SizeWithAspect {\n width: number\n height: number\n aspect: number\n}\n\n/**\n *\n */\nexport function getOuterSize(data: Layoutable): SizeWithAspect {\n const width = Math.floor(data.width || data.frameWidth || data.target.innerWidth())\n const height = Math.floor(data.height || data.frameHeight || data.target.innerHeight())\n return {\n aspect: width / height,\n height,\n width\n }\n}\n\nexport function getComputedSize(data: Layoutable): SizeWithAspect {\n const size = getOuterSize(data)\n if (typeof window.getComputedStyle !== 'function') { return size }\n\n const style = window.getComputedStyle(data.target[0])\n if (!style.width) { return size }\n\n size.width = Math.floor(Number(style.width.replace('px', '')))\n size.height = Math.floor(size.width / size.aspect)\n return size\n}\n\n/**\n *\n */\nexport function getInnerSize(data: Layoutable): SizeWithAspect {\n const width = Math.floor(data.frameWidth || data.width || data.target.innerWidth())\n const height = Math.floor(data.frameHeight || data.height || data.target.innerHeight())\n return {\n aspect: width / height,\n height,\n width\n }\n}\n\n/**\n *\n */\nexport function getInnerLayout(mode: SizeMode, inner: SizeWithAspect, outer: SizeWithAspect): Layout {\n\n // get mode\n const isFit = mode === 'fit'\n const isFill = mode === 'fill'\n const isMatch = mode === 'stretch'\n\n // resulting layout\n const layout: Layout = {\n width : '100%',\n height : '100%',\n top : 0,\n left : 0,\n bottom : 0,\n right : 0,\n position : 'absolute',\n overflow : 'hidden'\n }\n\n // no calculation here\n if (!mode || isMatch) {\n return layout\n }\n\n // get size and aspect\n const aspectIsGreater = inner.aspect >= outer.aspect\n\n // mode == original\n let width = inner.width\n let height = inner.height\n\n // keep aspect ratio but fit/fill into container\n if (isFit && aspectIsGreater || isFill && !aspectIsGreater) {\n width = outer.width\n height = outer.width / inner.aspect\n }\n if (isFill && aspectIsGreater || isFit && !aspectIsGreater) {\n height = outer.height\n width = outer.height * inner.aspect\n }\n\n // floor the numbers\n width = Math.floor(width)\n height = Math.floor(height)\n\n // position in center\n layout.width = width\n layout.height = height\n layout.top = Math.floor((outer.height - height) / 2)\n layout.left = Math.floor((outer.width - width) / 2)\n layout.right = layout.left\n layout.bottom = layout.top\n\n return layout\n}\n","let img: HTMLImageElement\n\n/**\n * gets the original width and height of an image element\n */\nexport function naturalSize(image: HTMLImageElement) {\n // for browsers that support naturalWidth and naturalHeight properties\n if (image.naturalWidth) {\n return {\n height: image.naturalHeight,\n width: image.naturalWidth\n }\n }\n\n // browsers that do not support naturalWidth and naturalHeight properties have to fall back to the width and\n // height properties. However, the image might have a css style applied so width and height would return the\n // css size. To avoid thet create a new Image object that is free of css rules and grab width and height\n // properties\n //\n // assume that the src has already been downloaded, so no onload callback is needed.\n img = img || new Image()\n img.src = image.src\n return {\n height: img.height,\n width: img.width\n }\n}\n","import { detectSubsampling } from './detectSubsampling'\nimport { naturalSize } from './naturalSize'\n/**\n *\n */\nexport interface MeasureSheetOptions {\n frames: number\n framesX?: number\n framesY?: number\n detectSubsampling?: boolean\n}\n\n/**\n *\n */\nexport interface SheetSpec {\n id: number\n width: number\n height: number\n sprites: SpriteSpec[]\n\n sampledWidth?: number\n sampledHeight?: number\n isSubsampled?: boolean\n}\n\n/**\n *\n */\nexport interface SpriteSpec {\n id: number\n x: number\n y: number\n width: number\n height: number\n\n sampledX?: number\n sampledY?: number\n sampledWidth?: number\n sampledHeight?: number\n}\n\n/**\n * Measures the image frames that are used in the given data object\n */\nexport function measure(images: HTMLImageElement[], options: MeasureSheetOptions): SheetSpec[] {\n if (images.length === 1) {\n return [measureSheet(images[0], options)]\n } else if (options.framesX && options.framesY) {\n return measureMutipleSheets(images, options)\n } else {\n return measureFrames(images, options)\n }\n}\n\nfunction measureSheet(image: HTMLImageElement, options: MeasureSheetOptions): SheetSpec {\n const result: SheetSpec = { id: 0, sprites: [] } as any\n measureImage(image, options, result)\n const frames = options.frames\n const framesX = Number(options.framesX) || frames\n const framesY = Math.ceil(frames / framesX)\n const frameWidth = Math.floor(result.width / framesX)\n const frameHeight = Math.floor(result.height / framesY)\n const divisor = result.isSubsampled ? 2 : 1\n for (let i = 0; i < frames; i++) {\n const x = (i % framesX) * frameWidth\n const y = Math.floor(i / framesX) * frameHeight\n result.sprites.push({\n id: i,\n x: x, y: y,\n width: frameWidth,\n height: frameHeight,\n sampledX: x / divisor,\n sampledY: y / divisor,\n sampledWidth: frameWidth / divisor,\n sampledHeight: frameHeight / divisor\n })\n }\n return result\n}\n\nfunction measureFrames(images: HTMLImageElement[], options: MeasureSheetOptions): SheetSpec[] {\n const result: SheetSpec[] = []\n for (let id = 0; id < images.length; id++) {\n // TODO: optimize\n // dont measure images with same size twice\n const sheet = measureSheet(images[id], { frames: 1, framesX: 1, detectSubsampling: options.detectSubsampling })\n sheet.id = id\n result.push(sheet)\n }\n return result\n}\n\nfunction measureMutipleSheets(images: HTMLImageElement[], options: MeasureSheetOptions): SheetSpec[] {\n const result: SheetSpec[] = []\n for (let id = 0; id < images.length; id++) {\n // TODO: optimize\n // dont measure images with same size twice\n const sheet = measureSheet(images[id], {\n frames: undefined,\n framesX: options.framesX,\n framesY: options.framesY,\n detectSubsampling: options.detectSubsampling\n })\n sheet.id = id\n result.push(sheet)\n }\n return result\n}\n\nfunction measureImage(image: HTMLImageElement, options: MeasureSheetOptions, result: SheetSpec): SheetSpec {\n const size = naturalSize(image)\n result.isSubsampled = options.detectSubsampling && detectSubsampling(image, size.width, size.height)\n result.width = size.width\n result.height = size.height\n result.sampledWidth = size.width / (result.isSubsampled ? 2 : 1)\n result.sampledHeight = size.height / (result.isSubsampled ? 2 : 1)\n return result\n}\n\nexport function findSpecs(metrics: SheetSpec[], frames: number, frame: number, lane: number) {\n let spriteId = lane * frames + frame\n let sheetId = 0\n let sprite: SpriteSpec = null\n let sheet: SheetSpec = null\n\n while (true) {\n sheet = metrics[sheetId]\n if (!sheet) { break }\n\n if (spriteId >= sheet.sprites.length) {\n spriteId -= sheet.sprites.length\n sheetId++\n continue\n }\n\n sprite = sheet.sprites[spriteId]\n break\n }\n return { sprite, sheet }\n}\n","function indexOf(element: any, arr: any[]) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === element) {\n return i\n }\n }\n}\n\nfunction noop() {\n //\n}\n\nexport interface PreloadOptions {\n source: string | string[]\n preloadCount?: number\n initiated?: (images: HTMLImageElement[]) => void\n progress?: (p: PreloadProgress) => void\n complete?: (images: HTMLImageElement[]) => void\n}\n\nexport interface PreloadProgress {\n // The image index that currently has been loaded\n index: number\n // The number of images that have been loaded so far\n loaded: number\n // The total number of images to load\n total: number\n // Percentage value\n percent: number\n}\n\nexport function preload(opts: PreloadOptions) {\n let src: string[]\n const input = opts.source\n src = typeof input === 'string' ? [input] : input\n // const src: string[] = ? [opts.source] : opts.source\n\n const images = []\n const targetCount = (opts.preloadCount || src.length)\n const onInitiated = opts.initiated || noop\n const onProgress = opts.progress || noop\n const onComplete = opts.complete || noop\n\n let count = 0\n let completed = false\n let firstLoaded = false\n\n const tick = function () { // tslint:disable-line\n count += 1\n\n onProgress({\n index: indexOf(this, images),\n loaded: count,\n total: src.length,\n percent: Math.round((count / src.length) * 100)\n })\n\n firstLoaded = firstLoaded || (this === images[0])\n\n if (firstLoaded && !completed && (count >= targetCount)) {\n completed = true\n onComplete(images)\n }\n }\n\n for (const url of src) {\n const img = new Image()\n // push result\n images.push(img)\n // bind logic, dont care about abort/errors\n img.onload = img.onabort = img.onerror = tick\n // begin load\n img.src = url\n }\n\n onInitiated(images)\n}\n","function padNumber(num: number, length: number, pad: string): string {\n let result = String(num)\n while (result.length < length) {\n result = String(pad) + result\n }\n return result\n}\n\n/**\n * Options for {@link sourceArray} function\n */\nexport interface SourceArrayOptions {\n /**\n * Minimum number of digits\n */\n digits?: number\n /**\n * Start and end frame numbers\n */\n frame?: number[]\n /**\n * Start and end lane numbers\n */\n lane?: number[]\n /**\n * Variable to be replaced by a frame number e.g. '{frame}'\n */\n framePlacer?: string\n /**\n * Variable to be replaced by a lane number e.g. '{lane}'\n */\n lanePlacer?: string\n}\n\n/**\n * Generates an array of source strings\n *\n * @remarks\n * Takes a template string and generates an array of strings by interpolating {lane} and {frame} placeholders.\n *\n * ```\n * sourceArray('http://example.com/image_{frame}.jpg, { frame: [1, 3], digits: 2 })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n *\n * sourceArray('http://example.com/image_FRAME.jpg, { frame: [1, 3], digits: 2, framePlacer: 'FRAME' })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n * ```\n *\n * @param template - The template string\n * @param opts - Interpolation options\n *\n * @public\n */\nexport function sourceArray(template: string, opts: SourceArrayOptions) {\n const digits = opts.digits || 2\n const lPlacer = opts.lanePlacer || '{lane}'\n const fPlacer = opts.framePlacer || '{frame}'\n\n let fStart = 0\n let fEnd = 0\n if (opts.frame) {\n fStart = opts.frame[0]\n fEnd = opts.frame[1]\n }\n let lStart = 0\n let lEnd = 0\n if (opts.lane) {\n lStart = opts.lane[0]\n lEnd = opts.lane[1]\n }\n const result = []\n for (let lane = lStart; lane <= lEnd; lane += 1) {\n for (let frame = fStart; frame <= fEnd; frame += 1) {\n result.push(template\n .replace(lPlacer, padNumber(lane, digits, '0'))\n .replace(fPlacer, padNumber(frame, digits, '0'))\n )\n }\n }\n return result\n}\n","import { Options } from './models'\n\n/**\n * The namespace that is used to bind functions to DOM events and store the data object\n */\nexport const namespace = 'spritespin'\n\n/**\n * Event names that are recognized by SpriteSpin. A module can implement any of these and they will be bound\n * to the target element on which the plugin is called.\n */\nexport const eventNames = [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseenter',\n 'mouseover',\n 'mouseleave',\n 'mousewheel',\n 'wheel',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'selectstart',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n]\n\n/**\n *\n */\nexport const callbackNames = [\n 'onInit',\n 'onProgress',\n 'onLoad',\n 'onFrameChanged',\n 'onFrame',\n 'onDraw',\n 'onComplete',\n 'onDestroy'\n]\n\n/**\n * Names of events for that the default behavior should be prevented.\n */\nexport const eventsToPrevent = [\n 'dragstart'\n]\n\n/**\n * Default set of SpriteSpin options. This also represents the majority of data attributes that are used during the\n * lifetime of a SpriteSpin instance. The data is stored inside the target DOM element on which the plugin is called.\n */\nexport const defaults: Options = {\n source : undefined, // Stitched source image or array of files\n width : undefined, // actual display width\n height : undefined, // actual display height\n frames : undefined, // Total number of frames\n framesX : undefined, // Number of frames in one row of sprite sheet (if source is a spritesheet)\n lanes : 1, // Number of 360 sequences. Used for 3D like effect.\n sizeMode : undefined, //\n\n renderer : 'canvas', // The rendering mode to use\n\n lane : 0, // The initial sequence number to play\n frame : 0, // Initial (and current) frame number\n frameTime : 40, // Time in ms between updates. 40 is exactly 25 FPS\n animate : true, // If true starts the animation on load\n retainAnimate : false, // If true, retains the animation after user interaction\n reverse : false, // If true animation is played backward\n loop : true, // If true loops the animation\n stopFrame : 0, // Stops the animation at this frame if loop is disabled\n\n wrap : true, // If true wraps around the frame index on user interaction\n wrapLane : false, // If true wraps around the lane index on user interaction\n sense : 1, // Interaction sensitivity used by behavior implementations\n senseLane : undefined, // Interaction sensitivity used by behavior implementations\n orientation : 'horizontal', // Preferred axis for user interaction\n detectSubsampling : true, // Tries to detect whether the images are downsampled by the browser.\n preloadCount : undefined, // Number of frames to preload. If nothing is set, all frames are preloaded.\n\n touchScrollTimer : [200, 1500], // Time range in ms when touch scroll will be disabled during interaction with SpriteSpin\n responsive : undefined,\n plugins : undefined\n}\n","import { namespace } from '../core/constants'\n\nexport function noop() {\n // noop\n}\n\nfunction wrapConsole(type: string): (message?: any, ...optionalParams: any[]) => void {\n return console && console[type] ? (...args: any[]) => console.log.apply(console, args) : noop\n}\n\nexport const log = wrapConsole('log')\nexport const warn = wrapConsole('warn')\nexport const error = wrapConsole('error')\n\nexport function toArray(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value]\n}\n\n/**\n * clamps the given value by the given min and max values\n */\nexport function clamp(value, min, max) {\n return (value > max ? max : (value < min ? min : value))\n}\n\n/**\n *\n */\nexport function wrap(value, min, max, size) {\n while (value > max) { value -= size }\n while (value < min) { value += size }\n return value\n}\n\n/**\n * prevents default action on the given event\n */\nexport function prevent(e) {\n e.preventDefault()\n return false\n}\n\n/**\n * Binds on the given target and event the given function.\n * The SpriteSpin namespace is attached to the event name\n */\nexport function bind(target, event, func) {\n if (func) {\n target.bind(event + '.' + namespace, (e) => {\n func.apply(target, [e, target.spritespin('data')])\n })\n }\n}\n\n/**\n * Unbinds all SpriteSpin events from given target element\n */\nexport function unbind(target: any): void {\n target.unbind('.' + namespace)\n}\n\n/**\n * Checks if given object is a function\n */\nexport function isFunction(fn: any): boolean {\n return typeof fn === 'function'\n}\n\nexport function pixelRatio(context) {\n const devicePixelRatio = window.devicePixelRatio || 1\n const backingStoreRatio =\n context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1\n return devicePixelRatio / backingStoreRatio\n}\n","import * as Utils from '../utils'\nimport { Data } from './models'\n\n/**\n * Applies css attributes to layout the SpriteSpin containers.\n *\n * @internal\n */\nexport function applyLayout(data: Data) {\n // disable selection\n data.target\n .attr('unselectable', 'on')\n .css({\n width: '',\n height: '',\n '-ms-user-select': 'none',\n '-moz-user-select': 'none',\n '-khtml-user-select': 'none',\n '-webkit-user-select': 'none',\n 'user-select': 'none'\n })\n\n const size = data.responsive ? Utils.getComputedSize(data) : Utils.getOuterSize(data)\n const layout = Utils.getInnerLayout(data.sizeMode, Utils.getInnerSize(data), size)\n\n // apply layout on target\n data.target.css({\n width : size.width,\n height : size.height,\n position : 'relative',\n overflow : 'hidden'\n })\n\n // apply layout on stage\n data.stage\n .css(layout)\n .hide()\n\n if (!data.canvas) { return }\n // apply layout on canvas\n data.canvas.css(layout).hide()\n // apply pixel ratio on canvas\n data.canvasRatio = data.canvasRatio || Utils.pixelRatio(data.context)\n if (typeof layout.width === 'number' && typeof layout.height === 'number') {\n data.canvas[0].width = ((layout.width as number) * data.canvasRatio) || size.width\n data.canvas[0].height = ((layout.height as number) * data.canvasRatio) || size.height\n } else {\n data.canvas[0].width = (size.width * data.canvasRatio)\n data.canvas[0].height = (size.height * data.canvasRatio)\n }\n // width and height must be set before calling scale\n data.context.scale(data.canvasRatio, data.canvasRatio)\n}\n","import { Data } from './models'\n\n/**\n * Gets a state object by name.\n * @internal\n * @param data - The SpriteSpin instance data\n * @param name - The name of the state object\n */\nexport function getState(data: Data, name: string): T {\n data.state = data.state || {}\n data.state[name] = data.state[name] || {}\n return data.state[name]\n}\n\n/**\n * Gets a plugin state object by name.\n *\n * @remarks\n * Plugins should use this method to get or create a state object where they can\n * store any instance variables.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param name - The name of the plugin\n */\nexport function getPluginState(data: Data, name: string): T {\n const state = getState(data, 'plugin')\n state[name] = state[name] || {}\n return state[name]\n}\n\n/**\n * Checks whether a flag is set. See {@link flag}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n */\nexport function is(data: Data, key: string): boolean {\n return !!getState(data, 'flags')[key]\n}\n\n/**\n * Sets a flag value. See {@link is}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n * @param value - The value to set\n */\nexport function flag(data: Data, key: string, value: boolean) {\n getState(data, 'flags')[key] = !!value\n}\n","import { clamp, wrap } from '../utils'\nimport { namespace } from './constants'\nimport { Data } from './models'\nimport { getState } from './state'\n/**\n * Gets the playback state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nexport function getPlaybackState(data: Data): PlaybackState {\n return getState(data, 'playback')\n}\n\n/**\n * The playback state\n *\n * @public\n */\nexport interface PlaybackState {\n frameTime: number\n lastFrame: number\n lastLane: number\n handler: number\n}\n\nfunction updateLane(data: Data, lane: number) {\n data.lane = data.wrapLane\n ? wrap(lane, 0, data.lanes - 1, data.lanes)\n : clamp(lane, 0, data.lanes - 1)\n}\n\nfunction updateAnimationFrame(data: Data) {\n data.frame += (data.reverse ? -1 : 1)\n // wrap the frame value to fit in range [0, data.frames)\n data.frame = wrap(data.frame, 0, data.frames - 1, data.frames)\n // stop animation if loop is disabled and the stopFrame is reached\n if (!data.loop && (data.frame === data.stopFrame)) {\n stopAnimation(data)\n }\n}\n\nfunction updateInputFrame(data: Data, frame: number) {\n data.frame = Number(frame)\n data.frame = data.wrap\n ? wrap(data.frame, 0, data.frames - 1, data.frames)\n : clamp(data.frame, 0, data.frames - 1)\n}\n\nfunction updateAnimation(data: Data) {\n const state = getPlaybackState(data)\n if (state.handler) {\n updateBefore(data)\n updateAnimationFrame(data)\n updateAfter(data)\n }\n}\n\nfunction updateBefore(data: Data) {\n const state = getPlaybackState(data)\n state.lastFrame = data.frame\n state.lastLane = data.lane\n}\n\nfunction updateAfter(data: Data) {\n const state = getPlaybackState(data)\n if (state.lastFrame !== data.frame || state.lastLane !== data.lane) {\n data.target.trigger('onFrameChanged.' + namespace, data)\n }\n data.target.trigger('onFrame.' + namespace, data)\n data.target.trigger('onDraw.' + namespace, data)\n}\n\n/**\n * Updates the frame or lane number of the SpriteSpin data.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param frame - The frame number to set\n * @param lane - The lane number to set\n */\nexport function updateFrame(data: Data, frame?: number, lane?: number) {\n updateBefore(data)\n if (frame != null) {\n updateInputFrame(data, frame)\n }\n if (lane != null) {\n updateLane(data, lane)\n }\n updateAfter(data)\n}\n\n/**\n * Stops the running animation.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nexport function stopAnimation(data: Data) {\n data.animate = false\n const state = getPlaybackState(data)\n if (state.handler != null) {\n window.clearInterval(state.handler)\n state.handler = null\n }\n}\n\n/**\n * Starts animation playback if needed.\n *\n * @remarks\n * Starts animation playback if `animate` property is `true` and the animation is not yet running.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nexport function applyAnimation(data: Data) {\n const state = getPlaybackState(data)\n if (state.handler && (!data.animate || state.frameTime !== data.frameTime)) {\n stopAnimation(data)\n }\n if (data.animate && !state.handler) {\n state.frameTime = data.frameTime\n state.handler = window.setInterval(() => updateAnimation(data), state.frameTime)\n }\n}\n\n/**\n * Starts the animation playback\n *\n * @remarks\n * Starts the animation playback and also sets the `animate` property to `true`\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nexport function startAnimation(data: Data) {\n data.animate = true\n applyAnimation(data)\n}\n","import { error, warn } from '../utils'\nimport { Callback, CallbackOptions, Data } from './models'\n\n/**\n * Describes a SpriteSpin plugin\n *\n * @public\n */\nexport interface SpriteSpinPlugin extends CallbackOptions {\n [key: string]: Callback | string\n name?: string\n}\n\nconst plugins: { [key: string]: SpriteSpinPlugin } = {}\n\n/**\n * Registers a plugin.\n *\n * @remarks\n * Use this to add custom Rendering or Updating modules that can be addressed with the 'module' option.\n *\n * @public\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\nexport function registerPlugin(name: string, plugin: SpriteSpinPlugin) {\n if (plugins[name]) {\n error(`Plugin name \"${name}\" is already taken`)\n return\n }\n plugin = plugin || {}\n plugins[name] = plugin\n return plugin\n}\n\n/**\n * Registers a plugin.\n *\n * @public\n * @deprecated Use {@link registerPlugin} instead\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\nexport function registerModule(name: string, plugin: SpriteSpinPlugin) {\n warn('\"registerModule\" is deprecated, use \"registerPlugin\" instead')\n registerPlugin(name, plugin)\n}\n\n/**\n * Gets an active plugin by name\n *\n * @internal\n * @param name - The name of the plugin\n */\nexport function getPlugin(name) {\n return plugins[name]\n}\n\n/**\n * Replaces module names on given SpriteSpin data and replaces them with actual implementations.\n * @internal\n */\nexport function applyPlugins(data: Data) {\n fixPlugins(data)\n for (let i = 0; i < data.plugins.length; i += 1) {\n const name = data.plugins[i]\n if (typeof name !== 'string') {\n continue\n }\n const plugin = getPlugin(name)\n if (!plugin) {\n error('No plugin found with name ' + name)\n continue\n }\n data.plugins[i] = plugin\n }\n}\n\nfunction fixPlugins(data: Data) {\n // tslint:disable no-string-literal\n\n if (data['mods']) {\n warn('\"mods\" option is deprecated, use \"plugins\" instead')\n data.plugins = data['mods']\n delete data['mods']\n }\n\n if (data['behavior']) {\n warn('\"behavior\" option is deprecated, use \"plugins\" instead')\n data.plugins.push(data['behavior'])\n delete data['behavior']\n }\n\n if (data['module']) {\n warn('\"module\" option is deprecated, use \"plugins\" instead')\n data.plugins.push(data['module'])\n delete data['module']\n }\n}\n","import * as Utils from '../utils'\nimport { Api } from './api'\nimport { callbackNames, defaults, eventNames, eventsToPrevent, namespace } from './constants'\nimport { applyLayout } from './layout'\nimport { Data, Options } from './models'\nimport { applyAnimation, stopAnimation } from './playback'\nimport { applyPlugins } from './plugins'\n\nconst $ = Utils.$\n\nlet counter = 0\n/**\n * Collection of all SpriteSpin instances\n */\nexport const instances: {[key: string]: Data} = {}\n\nfunction pushInstance(data: Data) {\n counter += 1\n data.id = String(counter)\n instances[data.id] = data\n}\n\nfunction popInstance(data: Data) {\n delete instances[data.id]\n}\n\nfunction eachInstance(cb) {\n for (const id in instances) {\n if (instances.hasOwnProperty(id)) {\n cb(instances[id])\n }\n }\n}\n\nlet lazyinit = () => {\n // replace function with a noop\n // this logic must run only once\n lazyinit = () => { /* noop */ }\n\n function onEvent(eventName, e) {\n eachInstance((data: Data) => {\n for (const module of data.plugins) {\n if (typeof module[eventName] === 'function') {\n module[eventName].apply(data.target, [e, data])\n }\n }\n })\n }\n\n function onResize() {\n eachInstance((data: Data) => {\n if (data.responsive) {\n boot(data)\n }\n })\n }\n\n for (const eventName of eventNames) {\n $(window.document).bind(eventName + '.' + namespace, (e) => {\n onEvent('document' + eventName, e)\n })\n }\n\n let resizeTimeout = null\n $(window).on('resize', () => {\n window.clearTimeout(resizeTimeout)\n resizeTimeout = window.setTimeout(onResize, 100)\n })\n}\n\n/**\n * (re)binds all spritespin events on the target element\n *\n * @internal\n */\nexport function applyEvents(data: Data) {\n const target = data.target\n\n // Clear all SpriteSpin events on the target element\n Utils.unbind(target)\n\n // disable all default browser behavior on the following events\n // mainly prevents image drag operation\n for (const eName of eventsToPrevent) {\n Utils.bind(target, eName, Utils.prevent)\n }\n\n // Bind module functions to SpriteSpin events\n for (const plugin of data.plugins) {\n for (const eName of eventNames) {\n Utils.bind(target, eName, plugin[eName])\n }\n for (const eName of callbackNames) {\n Utils.bind(target, eName, plugin[eName])\n }\n }\n\n // bind auto start function to load event.\n Utils.bind(target, 'onLoad', (e, d) => {\n applyAnimation(d)\n })\n\n // bind all user events that have been passed on initialization\n for (const eName of callbackNames) {\n Utils.bind(target, eName, data[eName])\n }\n}\n\nfunction applyMetrics(data: Data) {\n if (!data.images) {\n data.metrics = []\n }\n data.metrics = Utils.measure(data.images, data)\n const spec = Utils.findSpecs(data.metrics, data.frames, 0, 0)\n if (spec.sprite) {\n // TODO: try to remove frameWidth/frameHeight\n data.frameWidth = spec.sprite.width\n data.frameHeight = spec.sprite.height\n }\n}\n\n/**\n * Runs the boot process.\n *\n * @remarks\n * (re)initializes plugins, (re)initializes the layout, (re)binds events and loads source images.\n *\n * @internal\n */\nexport function boot(data: Data) {\n applyPlugins(data)\n applyEvents(data)\n applyLayout(data)\n\n data.source = Utils.toArray(data.source)\n data.loading = true\n data.target\n .addClass('loading')\n .trigger('onInit.' + namespace, data)\n Utils.preload({\n source: data.source,\n preloadCount: data.preloadCount,\n progress: (progress) => {\n data.progress = progress\n data.target.trigger('onProgress.' + namespace, data)\n },\n complete: (images) => {\n data.images = images\n data.loading = false\n data.frames = data.frames || images.length\n\n applyMetrics(data)\n applyLayout(data)\n data.stage.show()\n data.target\n .removeClass('loading')\n .trigger('onLoad.' + namespace, data)\n .trigger('onFrame.' + namespace, data)\n .trigger('onDraw.' + namespace, data)\n .trigger('onComplete.' + namespace, data)\n }\n })\n}\n\n/**\n * Creates a new SpriteSpin instance\n *\n * @public\n */\nexport function create(options: Options): Data {\n const target = options.target\n\n // SpriteSpin is not initialized\n // Create default settings object and extend with given options\n const data = $.extend(true, {}, defaults, options) as Data\n\n // ensure source is set\n data.source = data.source || []\n // ensure plugins are set\n data.plugins = data.plugins || [\n '360',\n 'drag'\n ]\n\n // if image tags are contained inside this DOM element\n // use these images as the source files\n target.find('img').each(() => {\n if (!Array.isArray(data.source)) {\n data.source = []\n }\n data.source.push($(this).attr('src'))\n })\n\n // build inner html\n //
\n //
\n // \n //
\n target\n .empty()\n .addClass('spritespin-instance')\n .append(\"
\")\n\n // add the canvas element if canvas rendering is enabled and supported\n if (data.renderer === 'canvas') {\n const canvas = document.createElement('canvas')\n if (!!(canvas.getContext && canvas.getContext('2d'))) {\n data.canvas = $(canvas).addClass('spritespin-canvas') as any\n data.context = canvas.getContext('2d')\n target.append(data.canvas)\n target.addClass('with-canvas')\n } else {\n // fallback to image rendering mode\n data.renderer = 'image'\n }\n }\n\n // setup references to DOM elements\n data.target = target\n data.stage = target.find('.spritespin-stage')\n\n // store the data\n target.data(namespace, data)\n pushInstance(data)\n\n return data\n}\n\n/**\n * Creates a new SpriteSpin instance, or updates an existing one\n *\n * @public\n */\nexport function createOrUpdate(options: Options): Data {\n lazyinit()\n\n let data = options.target.data(namespace) as Data\n if (!data) {\n data = create(options)\n } else {\n $.extend(data, options)\n }\n boot(data)\n\n return data\n}\n\n/**\n * Destroys the SpriteSpin instance\n *\n * @remarks\n * - stops running animation\n * - unbinds all events\n * - deletes the data on the target element\n *\n * @public\n */\nexport function destroy(data: Data) {\n popInstance(data)\n stopAnimation(data)\n data.target\n .trigger('onDestroy', data)\n .html(null)\n .attr('style', null)\n .attr('unselectable', null)\n .removeClass(['spritespin-instance', 'with-canvas'])\n Utils.unbind(data.target)\n data.target.removeData(namespace)\n}\n","import { getCursorPosition } from '../utils'\nimport { Data } from './models'\nimport { getState } from './state'\n\n/**\n * Describes a SpriteSpin input state\n *\n * @public\n */\nexport interface InputState {\n oldX: number\n oldY: number\n currentX: number\n currentY: number\n startX: number\n startY: number\n clickframe: number\n clicklane: number\n dX: number\n dY: number\n ddX: number\n ddY: number\n ndX: number\n ndY: number\n nddX: number\n nddY: number\n}\n\n/**\n * Gets the current input state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nexport function getInputState(data: Data): InputState {\n return getState(data, 'input')\n}\n\n/**\n * Updates the input state using a mous or touch event.\n *\n * @public\n * @param e - The input event\n * @param data - The SpriteSpin instance data\n */\nexport function updateInput(e, data: Data) {\n const cursor = getCursorPosition(e)\n const state = getInputState(data)\n\n // cache positions from previous frame\n state.oldX = state.currentX\n state.oldY = state.currentY\n\n state.currentX = cursor.x\n state.currentY = cursor.y\n\n // Fix old position.\n if (state.oldX === undefined || state.oldY === undefined) {\n state.oldX = state.currentX\n state.oldY = state.currentY\n }\n\n // Cache the initial click/touch position and store the frame number at which the click happened.\n // Useful for different behavior implementations. This must be restored when the click/touch is released.\n if (state.startX === undefined || state.startY === undefined) {\n state.startX = state.currentX\n state.startY = state.currentY\n state.clickframe = data.frame\n state.clicklane = data.lane\n }\n\n // Calculate the vector from start position to current pointer position.\n state.dX = state.currentX - state.startX\n state.dY = state.currentY - state.startY\n\n // Calculate the vector from last frame position to current pointer position.\n state.ddX = state.currentX - state.oldX\n state.ddY = state.currentY - state.oldY\n\n // Normalize vectors to range [-1:+1]\n state.ndX = state.dX / data.target.innerWidth()\n state.ndY = state.dY / data.target.innerHeight()\n\n state.nddX = state.ddX / data.target.innerWidth()\n state.nddY = state.ddY / data.target.innerHeight()\n}\n\n/**\n * Resets the input state.\n *\n * @public\n */\nexport function resetInput(data: Data) {\n const input = getInputState(data)\n input.startX = input.startY = undefined\n input.currentX = input.currentY = undefined\n input.oldX = input.oldY = undefined\n input.dX = input.dY = 0\n input.ddX = input.ddY = 0\n input.ndX = input.ndY = 0\n input.nddX = input.nddY = 0\n}\n","import { $ } from '../utils'\nimport { Api } from './api'\nimport { createOrUpdate, destroy } from './boot'\nimport { namespace } from './constants'\n\nfunction extension(option: string | any, value: any) {\n const $target = $(this)\n if (option === 'data') {\n return $target.data(namespace)\n }\n if (option === 'api') {\n const data = $target.data(namespace)\n data.api = data.api || new Api(data)\n return data.api\n }\n if (option === 'destroy') {\n return $target.each(() => {\n const data = $target.data(namespace)\n if (data) {\n destroy(data)\n }\n })\n }\n if (arguments.length === 2 && typeof option === 'string') {\n option = { [option]: value }\n }\n if (typeof option === 'object') {\n return createOrUpdate($.extend(true, { target: $target }, option)).target\n }\n\n throw new Error('Invalid call to spritespin')\n}\n\n$.fn[namespace] = extension\n","import * as SpriteSpin from '../core'\n\n// tslint:disable:object-literal-shorthand\n// tslint:disable:only-arrow-functions\n\nSpriteSpin.extendApi({\n // Gets a value indicating whether the animation is currently running.\n isPlaying: function() {\n return SpriteSpin.getPlaybackState(this.data).handler != null\n },\n\n // Gets a value indicating whether the animation looping is enabled.\n isLooping: function() {\n return this.data.loop\n },\n\n // Starts/Stops the animation playback\n toggleAnimation: function() {\n if (this.isPlaying()) {\n this.stopAnimation()\n } else {\n this.startAnimation()\n }\n },\n\n // Stops animation playback\n stopAnimation: function() {\n this.data.animate = false\n SpriteSpin.stopAnimation(this.data)\n },\n\n // Starts animation playback\n startAnimation: function() {\n this.data.animate = true\n SpriteSpin.applyAnimation(this.data)\n },\n\n // Sets a value indicating whether the animation should be looped or not.\n // This might start the animation (if the 'animate' data attribute is set to true)\n loop: function(value) {\n this.data.loop = value\n SpriteSpin.applyAnimation(this.data)\n return this\n },\n\n // Gets the current frame number\n currentFrame: function() {\n return this.data.frame\n },\n\n // Updates SpriteSpin to the specified frame.\n updateFrame: function(frame) {\n SpriteSpin.updateFrame(this.data, frame)\n return this\n },\n\n // Skips the given number of frames\n skipFrames: function(step) {\n const data = this.data\n SpriteSpin.updateFrame(data, data.frame + (data.reverse ? - step : + step))\n return this\n },\n\n // Updates SpriteSpin so that the next frame is shown\n nextFrame: function() {\n return this.skipFrames(1)\n },\n\n // Updates SpriteSpin so that the previous frame is shown\n prevFrame: function() {\n return this.skipFrames(-1)\n },\n\n // Starts the animations that will play until the given frame number is reached\n // options:\n // force [boolean] starts the animation, even if current frame is the target frame\n // nearest [boolean] animates to the direction with minimum distance to the target frame\n playTo: function(frame, options) {\n const data = this.data\n options = options || {}\n if (!options.force && data.frame === frame) {\n return\n }\n if (options.nearest) {\n // distance to the target frame\n const a = frame - data.frame\n // distance to last frame and the to target frame\n const b = frame > data.frame ? a - data.frames : a + data.frames\n // minimum distance\n const c = Math.abs(a) < Math.abs(b) ? a : b\n data.reverse = c < 0\n }\n data.animate = true\n data.loop = false\n data.stopFrame = frame\n SpriteSpin.applyAnimation(data)\n return this\n }\n})\n","import { boot, Data, extendApi, namespace, SizeMode } from '../core'\nimport { $ } from '../utils'\n\nexport interface Options {\n source?: string | string[],\n sizeMode?: SizeMode\n}\n\nfunction pick(target, names: string[]): string {\n for (const name of names) {\n if (target[name] || name in target) {\n return name\n }\n }\n return names[0]\n}\n\nconst browser = {\n requestFullscreen: pick(document.documentElement, [\n 'requestFullscreen',\n 'webkitRequestFullScreen',\n 'mozRequestFullScreen',\n 'msRequestFullscreen']),\n exitFullscreen: pick(document, [\n 'exitFullscreen',\n 'webkitExitFullscreen',\n 'webkitCancelFullScreen',\n 'mozCancelFullScreen',\n 'msExitFullscreen']),\n fullscreenElement: pick(document, [\n 'fullscreenElement',\n 'webkitFullscreenElement',\n 'webkitCurrentFullScreenElement',\n 'mozFullScreenElement',\n 'msFullscreenElement']),\n fullscreenEnabled: pick(document, [\n 'fullscreenEnabled',\n 'webkitFullscreenEnabled',\n 'mozFullScreenEnabled',\n 'msFullscreenEnabled']),\n fullscreenchange: pick(document, [\n 'onfullscreenchange',\n 'onwebkitfullscreenchange',\n 'onmozfullscreenchange',\n 'onMSFullscreenChange']).replace(/^on/, ''),\n fullscreenerror: pick(document, [\n 'onfullscreenerror',\n 'onwebkitfullscreenerror',\n 'onmozfullscreenerror',\n 'onMSFullscreenError']).replace(/^on/, '')\n}\n\nconst changeEvent = browser.fullscreenchange + '.' + namespace + '-fullscreen'\nfunction unbindChangeEvent() {\n $(document).unbind(changeEvent)\n}\n\nfunction bindChangeEvent(callback) {\n unbindChangeEvent()\n $(document).bind(changeEvent, callback)\n}\n\nconst orientationEvent = 'orientationchange.' + namespace + '-fullscreen'\nfunction unbindOrientationEvent() {\n $(window).unbind(orientationEvent)\n}\nfunction bindOrientationEvent(callback) {\n unbindOrientationEvent()\n $(window).bind(orientationEvent, callback)\n}\n\nfunction requestFullscreenNative(e) {\n e = e || document.documentElement\n e[browser.requestFullscreen]()\n}\n\nexport function exitFullscreen() {\n return document[browser.exitFullscreen]()\n}\n\nexport function fullscreenEnabled() {\n return document[browser.fullscreenEnabled]\n}\n\nexport function fullscreenElement() {\n return document[browser.fullscreenElement]\n}\n\nexport function isFullscreen() {\n return !!fullscreenElement()\n}\n\nexport function toggleFullscreen(data: Data, opts: Options) {\n if (isFullscreen()) {\n this.apiRequestFullscreen(opts)\n } else {\n this.exitFullscreen()\n }\n}\n\nexport function requestFullscreen(data: Data, opts: Options) {\n opts = opts || {}\n const oWidth = data.width\n const oHeight = data.height\n const oSource = data.source\n const oSize = data.sizeMode\n const oResponsive = data.responsive\n const enter = () => {\n data.width = window.screen.width\n data.height = window.screen.height\n data.source = (opts.source || oSource) as string[]\n data.sizeMode = opts.sizeMode || 'fit'\n data.responsive = false\n boot(data)\n }\n const exit = () => {\n data.width = oWidth\n data.height = oHeight\n data.source = oSource\n data.sizeMode = oSize\n data.responsive = oResponsive\n boot(data)\n }\n\n bindChangeEvent(() => {\n if (isFullscreen()) {\n enter()\n bindOrientationEvent(enter)\n } else {\n unbindChangeEvent()\n unbindOrientationEvent()\n exit()\n }\n })\n requestFullscreenNative(data.target[0])\n}\n\nextendApi({\n fullscreenEnabled,\n fullscreenElement,\n exitFullscreen,\n toggleFullscreen: function(opts: Options) {\n toggleFullscreen(this.data, opts)\n },\n requestFullscreen: function(opts: Options) {\n requestFullscreen(this.data, opts)\n }\n})\n","import * as SpriteSpin from '../core'\n\n(() => {\n\nconst NAME = 'click'\nfunction click(e, data: SpriteSpin.Data) {\n if (data.loading || !data.stage.is(':visible')) {\n return\n }\n SpriteSpin.updateInput(e, data)\n const input = SpriteSpin.getInputState(data)\n\n let half, pos\n const target = data.target, offset = target.offset()\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2\n pos = input.currentX - offset.left\n } else {\n half = target.innerHeight() / 2\n pos = input.currentY - offset.top\n }\n SpriteSpin.updateFrame(data, data.frame + (pos > half ? 1 : -1))\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n mouseup: click,\n touchend: click\n})\n\n})()\n","import * as SpriteSpin from '../core'\n\n(() => {\n\nconst NAME = 'drag'\n\ninterface DragState {\n startAt?: number\n endAt?: number\n frame?: number\n lane?: number\n wasPlaying?: boolean\n minTime: number\n maxTime: number\n}\n\nfunction getState(data: SpriteSpin.Data) {\n return SpriteSpin.getPluginState(data, NAME) as DragState\n}\n\nfunction getAxis(data: SpriteSpin.Data) {\n if (typeof data.orientation === 'number') {\n return data.orientation * Math.PI / 180\n }\n if (data.orientation === 'horizontal') {\n return 0\n }\n return Math.PI / 2\n}\n\nfunction onInit(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const d = [200, 1500]\n const t = data.touchScrollTimer || d\n state.minTime = t[0] || d[0]\n state.maxTime = t[1] || d[1]\n}\n\nfunction dragStart(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (data.loading || SpriteSpin.is(data, 'dragging') || data['zoomPinFrame'] && !data.stage.is(':visible')) {\n return\n }\n\n // Touch scroll can only be disabled by cancelling the 'touchstart' event.\n // If we would try to cancel the 'touchmove' event during a scroll\n // chrome browser raises an error\n //\n // When a user interacts with sprite spin, we dont know whether the intention\n // is to scroll the page or to roll the spin.\n //\n // On first interaction with SpriteSpin the scroll is not disabled\n // On double tap within 200ms the scroll is not disabled\n // Scroll is only disabled if there was an interaction with SpriteSpin in the past 1500ms\n\n const now = new Date().getTime()\n if (state.endAt && (now - state.endAt > state.maxTime)) {\n // reset timer if the user has no interaction with spritespin within 1500ms\n state.startAt = null\n state.endAt = null\n }\n if (state.startAt && (now - state.startAt > state.minTime)) {\n // disable scroll only if there was already an interaction with spritespin\n // however, allow scrolling on double tab within 200ms\n e.preventDefault()\n }\n\n state.startAt = now\n state.wasPlaying = !!SpriteSpin.getPlaybackState(data).handler\n\n state.frame = data.frame || 0\n state.lane = data.lane || 0\n SpriteSpin.flag(data, 'dragging', true)\n SpriteSpin.updateInput(e, data)\n}\n\nfunction dragEnd(e, data: SpriteSpin.Data) {\n if (SpriteSpin.is(data, 'dragging')) {\n getState(data).endAt = new Date().getTime()\n SpriteSpin.flag(data, 'dragging', false)\n SpriteSpin.resetInput(data)\n if (data.retainAnimate && getState(data).wasPlaying) {\n SpriteSpin.startAnimation(data)\n }\n }\n}\n\nfunction drag(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const input = SpriteSpin.getInputState(data)\n if (!SpriteSpin.is(data, 'dragging')) { return }\n SpriteSpin.updateInput(e, data)\n\n const rad = getAxis(data)\n const sn = Math.sin(rad)\n const cs = Math.cos(rad)\n const x = ((input.nddX * cs - input.nddY * sn) * data.sense) || 0\n const y = ((input.nddX * sn + input.nddY * cs) * (data.senseLane || data.sense)) || 0\n\n // accumulate\n state.frame += data.frames * x\n state.lane += data.lanes * y\n\n // update spritespin\n const oldFrame = data.frame\n const oldLane = data.lane\n SpriteSpin.updateFrame(data, Math.floor(state.frame), Math.floor(state.lane))\n SpriteSpin.stopAnimation(data)\n}\n\nfunction mousemove(e, data) {\n dragStart(e, data)\n drag(e, data)\n}\n\nSpriteSpin.registerPlugin('drag', {\n name: 'drag',\n onInit: onInit,\n\n mousedown: dragStart,\n mousemove: drag,\n mouseup: dragEnd,\n\n documentmousemove: drag,\n documentmouseup: dragEnd,\n\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n})\n\nSpriteSpin.registerPlugin('move', {\n name: 'move',\n onInit: onInit,\n\n mousemove: mousemove,\n mouseleave: dragEnd,\n\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n})\n\n})()\n","import * as SpriteSpin from '../core'\n\n(() => {\n\nconst NAME = 'hold'\n\ninterface HoldState {\n frameTime: number\n animate: boolean\n reverse: boolean\n}\n\nfunction getState(data: SpriteSpin.Data) {\n return SpriteSpin.getPluginState(data, NAME) as HoldState\n}\n\nfunction rememberOptions(data: SpriteSpin.Data) {\n const state = getState(data)\n state.frameTime = data.frameTime\n state.animate = data.animate\n state.reverse = data.reverse\n}\n\nfunction restoreOptions(data: SpriteSpin.Data) {\n const state = getState(data)\n data.frameTime = state.frameTime\n data.animate = state.animate\n data.reverse = state.reverse\n}\n\nfunction start(e, data: SpriteSpin.Data) {\n if (SpriteSpin.is(data, 'loading') || SpriteSpin.is(data, 'dragging') || !data.stage.is(':visible')) {\n return\n }\n rememberOptions(data)\n SpriteSpin.updateInput(e, data)\n SpriteSpin.flag(data, 'dragging', true)\n data.animate = true\n SpriteSpin.applyAnimation(data)\n}\n\nfunction stop(e, data: SpriteSpin.Data) {\n SpriteSpin.flag(data, 'dragging', false)\n SpriteSpin.resetInput(data)\n SpriteSpin.stopAnimation(data)\n restoreOptions(data)\n SpriteSpin.applyAnimation(data)\n}\n\nfunction update(e, data: SpriteSpin.Data) {\n if (!SpriteSpin.is(data, 'dragging')) {\n return\n }\n SpriteSpin.updateInput(e, data)\n const input = SpriteSpin.getInputState(data)\n\n let half, delta\n const target = data.target, offset = target.offset()\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2\n delta = (input.currentX - offset.left - half) / half\n } else {\n half = (data.height / 2)\n delta = (input.currentY - offset.top - half) / half\n }\n data.reverse = delta < 0\n delta = delta < 0 ? -delta : delta\n data.frameTime = 80 * (1 - delta) + 20\n\n if (((data.orientation === 'horizontal') && (input.dX < input.dY)) ||\n ((data.orientation === 'vertical') && (input.dX < input.dY))) {\n e.preventDefault()\n }\n}\n\nfunction onFrame(e, data: SpriteSpin.Data) {\n data.animate = true\n SpriteSpin.applyAnimation(data)\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n\n mousedown: start,\n mousemove: update,\n mouseup: stop,\n mouseleave: stop,\n\n touchstart: start,\n touchmove: update,\n touchend: stop,\n touchcancel: stop,\n\n onFrame: onFrame\n})\n\n})()\n","import * as SpriteSpin from '../core'\n\n(() => {\n\nconst NAME = 'swipe'\n\ninterface SwipeState {\n fling: number\n snap: number\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as SwipeState\n}\nfunction getOption(data, name, fallback) {\n return data[name] || fallback\n}\n\nfunction init(e, data) {\n const state = getState(data)\n state.fling = getOption(data, 'swipeFling', 10)\n state.snap = getOption(data, 'swipeSnap', 0.50)\n}\n\nfunction start(e, data: SpriteSpin.Data) {\n if (!data.loading && !SpriteSpin.is(data, 'dragging')) {\n SpriteSpin.updateInput(e, data)\n SpriteSpin.flag(data, 'dragging', true)\n }\n}\n\nfunction update(e, data: SpriteSpin.Data) {\n if (!SpriteSpin.is(data, 'dragging')) {\n return\n }\n SpriteSpin.updateInput(e, data)\n const frame = data.frame\n const lane = data.lane\n SpriteSpin.updateFrame(data, frame, lane)\n}\n\nfunction end(e, data: SpriteSpin.Data) {\n if (!SpriteSpin.is(data, 'dragging')) {\n return\n }\n SpriteSpin.flag(data, 'dragging', false)\n\n const state = getState(data)\n const input = SpriteSpin.getInputState(data)\n\n let frame = data.frame\n const lane = data.lane\n const snap = state.snap\n const fling = state.fling\n let dS, dF\n if (data.orientation === 'horizontal') {\n dS = input.ndX\n dF = input.ddX\n } else {\n dS = input.ndY\n dF = input.ddY\n }\n\n if (dS >= snap || dF >= fling) {\n frame = data.frame - 1\n } else if (dS <= -snap || dF <= -fling) {\n frame = data.frame + 1\n }\n\n SpriteSpin.resetInput(data)\n SpriteSpin.updateFrame(data, frame, lane)\n SpriteSpin.stopAnimation(data)\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n mousedown: start,\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n\n touchstart: start,\n touchmove: update,\n touchend: end,\n touchcancel: end\n})\n\n})()\n","import * as SpriteSpin from '../core'\n\n(() => {\n\nconst NAME = 'wheel'\nfunction wheel(e: JQueryMouseEventObject, data: SpriteSpin.Data) {\n if (!data.loading && data.stage.is(':visible')) {\n e.preventDefault()\n\n const we = e.originalEvent as WheelEvent\n const signX = we.deltaX === 0 ? 0 : we.deltaX > 0 ? 1 : -1\n const signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1\n\n SpriteSpin.updateFrame(data, data.frame + signY, data.lane + signX)\n }\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n wheel: wheel\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\ninterface State {\n stage: JQuery\n}\n\nconst template = `\n
\n
\n
\n
\n`\n\nfunction getState(data: SpriteSpin.Data) {\n return SpriteSpin.getPluginState(data, NAME)\n}\n\nconst NAME = 'progress'\nfunction onInit(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (!state.stage) {\n state.stage = Utils.$(template)\n state.stage.appendTo(data.target)\n }\n\n state.stage.find('.spritespin-progress-label')\n .text(`0%`)\n .css({ 'text-align': 'center' })\n state.stage.find('.spritespin-progress-bar').css({\n width: `0%`\n })\n\n state.stage.hide().fadeIn()\n}\nfunction onProgress(e, data: SpriteSpin.Data) {\n const state = getState(data)\n state.stage.find('.spritespin-progress-label')\n .text(`${data.progress.percent}%`)\n .css({ 'text-align': 'center' })\n state.stage.find('.spritespin-progress-bar').css({\n width: `${data.progress.percent}%`\n })\n}\n\nfunction onLoad(e, data: SpriteSpin.Data) {\n Utils.$(getState(data).stage).fadeOut()\n}\n\nfunction onDestroy(e, data: SpriteSpin.Data) {\n Utils.$(getState(data).stage).remove()\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n onInit: onInit,\n onProgress: onProgress,\n onLoad: onLoad,\n onDestroy: onDestroy\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst floor = Math.floor\n\nconst NAME = '360'\n\nfunction onLoad(e, data: SpriteSpin.Data) {\n data.stage.find('.spritespin-frames').detach()\n if (data.renderer === 'image') {\n $(data.images).addClass('spritespin-frames').appendTo(data.stage)\n }\n}\n\nfunction onDraw(e, data: SpriteSpin.Data) {\n const specs = Utils.findSpecs(data.metrics, data.frames, data.frame, data.lane)\n const sheet = specs.sheet\n const sprite = specs.sprite\n\n if (!sheet || !sprite) { return }\n const src = data.source[sheet.id]\n const image = data.images[sheet.id]\n\n if (data.renderer === 'canvas') {\n data.canvas.show()\n const w = data.canvas[0].width / data.canvasRatio\n const h = data.canvas[0].height / data.canvasRatio\n data.context.clearRect(0, 0, w, h)\n data.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h)\n return\n }\n\n const scaleX = data.stage.innerWidth() / sprite.sampledWidth\n const scaleY = data.stage.innerHeight() / sprite.sampledHeight\n const top = Math.floor(-sprite.sampledY * scaleY)\n const left = Math.floor(-sprite.sampledX * scaleX)\n const width = Math.floor(sheet.sampledWidth * scaleX)\n const height = Math.floor(sheet.sampledHeight * scaleY)\n if (data.renderer === 'background') {\n data.stage.css({\n 'background-image' : `url('${src}')`,\n 'background-position' : `${left}px ${top}px`,\n 'background-repeat' : 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size' : `${width}px ${height}px`, /* Safari 3-4 Chrome 1-3 */\n '-moz-background-size' : `${width}px ${height}px`, /* Firefox 3.6 */\n '-o-background-size' : `${width}px ${height}px`, /* Opera 9.5 */\n 'background-size' : `${width}px ${height}px` /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n })\n return\n }\n\n $(data.images).hide()\n $(image).show().css({\n position: 'absolute',\n top: top,\n left: left,\n 'max-width' : 'initial',\n width: width,\n height: height\n })\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n onLoad,\n onDraw\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst NAME = 'blur'\n\ninterface BlurStep {\n frame: number\n lane: number\n live: number\n step: number\n d: number\n alpha: number\n}\ninterface BlurState {\n canvas: any\n context: CanvasRenderingContext2D\n steps: BlurStep[]\n fadeTime: number\n frameTime: number\n trackTime: number\n cssBlur: boolean\n\n timeout: number\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as BlurState\n}\nfunction getOption(data, name, fallback) {\n return data[name] || fallback\n}\n\nfunction init(e, data: SpriteSpin.Data) {\n const state = getState(data)\n\n state.canvas = state.canvas || Utils.$(\"\")\n state.context = state.context || state.canvas[0].getContext('2d')\n state.steps = state.steps || []\n state.fadeTime = Math.max(getOption(data, 'blurFadeTime', 200), 1)\n state.frameTime = Math.max(getOption(data, 'blurFrameTime', data.frameTime), 16)\n state.trackTime = null\n state.cssBlur = !!getOption(data, 'blurCss', false)\n\n const inner = Utils.getInnerSize(data)\n const outer = data.responsive ? Utils.getComputedSize(data) : Utils.getOuterSize(data)\n const css = Utils.getInnerLayout(data.sizeMode, inner, outer)\n\n state.canvas[0].width = data.width * data.canvasRatio\n state.canvas[0].height = data.height * data.canvasRatio\n state.canvas.css(css).show()\n state.context.scale(data.canvasRatio, data.canvasRatio)\n data.target.append(state.canvas)\n}\n\nfunction onFrame(e, data) {\n const state = getState(data)\n trackFrame(data)\n if (state.timeout == null) {\n loop(data)\n }\n}\n\nfunction trackFrame(data: SpriteSpin.Data) {\n const state = getState(data)\n const ani = SpriteSpin.getPlaybackState(data)\n\n // distance between frames\n let d = Math.abs(data.frame - ani.lastFrame)\n // shortest distance\n d = d >= data.frames / 2 ? data.frames - d : d\n\n state.steps.unshift({\n frame: data.frame,\n lane: data.lane,\n live: 1,\n step: state.frameTime / state.fadeTime,\n d: d,\n alpha: 0\n })\n}\n\nconst toRemove = []\nfunction removeOldFrames(frames) {\n toRemove.length = 0\n for (let i = 0; i < frames.length; i += 1) {\n if (frames[i].alpha <= 0) {\n toRemove.push(i)\n }\n }\n for (const item of toRemove) {\n frames.splice(item, 1)\n }\n}\n\nfunction loop(data: SpriteSpin.Data) {\n const state = getState(data)\n state.timeout = window.setTimeout(() => { tick(data) }, state.frameTime)\n}\n\nfunction killLoop(data: SpriteSpin.Data) {\n const state = getState(data)\n window.clearTimeout(state.timeout)\n state.timeout = null\n}\n\nfunction applyCssBlur(canvas, d) {\n const amount = Math.min(Math.max((d / 2) - 4, 0), 2.5)\n const blur = `blur(${amount}px)`\n canvas.css({\n '-webkit-filter': blur,\n filter: blur\n })\n}\n\nfunction clearFrame(data: SpriteSpin.Data, state: BlurState) {\n state.canvas.show()\n const w = state.canvas[0].width / data.canvasRatio\n const h = state.canvas[0].height / data.canvasRatio\n // state.context.clearRect(0, 0, w, h)\n}\n\nfunction drawFrame(data: SpriteSpin.Data, state: BlurState, step: BlurStep) {\n if (step.alpha <= 0) { return }\n\n const specs = Utils.findSpecs(data.metrics, data.frames, step.frame, step.lane)\n const sheet = specs.sheet\n const sprite = specs.sprite\n if (!sheet || !sprite) { return }\n\n const src = data.source[sheet.id]\n const image = data.images[sheet.id]\n if (image.complete === false) { return }\n\n state.canvas.show()\n const w = state.canvas[0].width / data.canvasRatio\n const h = state.canvas[0].height / data.canvasRatio\n state.context.globalAlpha = step.alpha\n state.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h)\n}\n\nfunction tick(data: SpriteSpin.Data) {\n const state = getState(data)\n killLoop(data)\n if (!state.context) {\n return\n }\n\n let d = 0\n clearFrame(data, state)\n state.context.clearRect(0, 0, data.width, data.height)\n for (const step of state.steps) {\n step.live = Math.max(step.live - step.step, 0)\n step.alpha = Math.max(step.live - 0.25, 0)\n drawFrame(data, state, step)\n d += step.alpha + step.d\n }\n if (state.cssBlur) {\n applyCssBlur(state.canvas, d)\n }\n removeOldFrames(state.steps)\n if (state.steps.length) {\n loop(data)\n }\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n\n onLoad: init,\n onFrameChanged: onFrame\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst max = Math.max\nconst min = Math.min\n\nconst NAME = 'ease'\n\ninterface EaseSample {\n time: number\n frame: number\n lane: number\n}\n\ninterface EaseState {\n damping: number\n maxSamples: number\n updateTime: number\n abortTime: number\n samples: EaseSample[]\n steps: number[]\n handler: number\n\n lane: number\n lanes: number\n laneStep: number\n\n frame: number\n frames: number\n frameStep: number\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as EaseState\n}\n\nfunction getOption(data, name, fallback) {\n return data[name] || fallback\n}\n\nfunction init(e, data: SpriteSpin.Data) {\n const state = getState(data)\n state.maxSamples = max(getOption(data, 'easeMaxSamples', 5), 0)\n state.damping = max(min(getOption(data, 'easeDamping', 0.9), 0.999), 0)\n state.abortTime = max(getOption(data, 'easeAbortTime', 250), 16)\n state.updateTime = max(getOption(data, 'easeUpdateTime', data.frameTime), 16)\n state.samples = []\n state.steps = []\n}\n\nfunction update(e, data: SpriteSpin.Data) {\n if (SpriteSpin.is(data, 'dragging')) {\n killLoop(data)\n sampleInput(data)\n }\n}\n\nfunction end(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const samples = state.samples\n\n let last\n let lanes = 0\n let frames = 0\n let time = 0\n for (const sample of samples) {\n if (!last) {\n last = sample\n continue\n }\n\n const dt = sample.time - last.time\n if (dt > state.abortTime) {\n lanes = frames = time = 0\n return killLoop(data)\n }\n\n frames += sample.frame - last.frame\n lanes += sample.lane - last.lane\n time += dt\n last = sample\n }\n samples.length = 0\n if (!time) {\n return\n }\n\n state.lane = data.lane\n state.lanes = 0\n state.laneStep = lanes / time * state.updateTime\n\n state.frame = data.frame\n state.frames = 0\n state.frameStep = frames / time * state.updateTime\n\n loop(data)\n}\n\nfunction sampleInput(data: SpriteSpin.Data) {\n const state = getState(data)\n // add a new sample\n state.samples.push({\n time: new Date().getTime(),\n frame: data.frame,\n lane: data.lane\n })\n // drop old samples\n while (state.samples.length > state.maxSamples) {\n state.samples.shift()\n }\n}\n\nfunction killLoop(data: SpriteSpin.Data) {\n const state = getState(data)\n if (state.handler != null) {\n window.clearTimeout(state.handler)\n state.handler = null\n }\n}\n\nfunction loop(data: SpriteSpin.Data) {\n const state = getState(data)\n state.handler = window.setTimeout(() => { tick(data) }, state.updateTime)\n}\n\nfunction tick(data: SpriteSpin.Data) {\n const state = getState(data)\n state.lanes += state.laneStep\n state.frames += state.frameStep\n state.laneStep *= state.damping\n state.frameStep *= state.damping\n const frame = Math.floor(state.frame + state.frames)\n const lane = Math.floor(state.lane + state.lanes)\n\n SpriteSpin.updateFrame(data, frame, lane)\n\n if (SpriteSpin.is(data, 'dragging')) {\n killLoop(data)\n } else if (Math.abs(state.frameStep) > 0.005 || Math.abs(state.laneStep) > 0.005) {\n loop(data)\n } else {\n killLoop(data)\n }\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n\n onLoad: init,\n\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n\n touchmove: update,\n touchend: end,\n touchcancel: end\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst NAME = 'gallery'\n\ninterface GalleryState {\n images: any[]\n offsets: any[]\n speed: number\n opacity: number\n frame: number\n stage: any\n dX: number\n ddX: number\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as GalleryState\n}\n\nfunction getOption(data, name, fallback) {\n return data[name] || fallback\n}\n\nfunction load(e, data: SpriteSpin.Data) {\n const state = getState(data)\n\n state.images = []\n state.offsets = []\n state.frame = data.frame\n state.speed = getOption(data, 'gallerySpeed', 500)\n state.opacity = getOption(data, 'galleryOpacity', 0.25)\n state.stage = getOption(data, 'galleryStage', Utils.$('
'))\n\n state.stage.empty().addClass('gallery-stage').prependTo(data.stage)\n\n let size = 0\n for (const image of data.images) {\n const naturalSize = Utils.naturalSize(image)\n const scale = data.height / naturalSize.height\n\n const img = Utils.$(image)\n state.stage.append(img)\n state.images.push(img)\n state.offsets.push(-size + (data.width - image.width * scale) / 2)\n size += data.width\n img.css({\n 'max-width' : 'initial',\n opacity : state.opacity,\n width: data.width,\n height: data.height\n })\n }\n const innerSize = Utils.getInnerSize(data)\n const outerSize = data.responsive ? Utils.getComputedSize(data) : Utils.getOuterSize(data)\n const layout = Utils.getInnerLayout(data.sizeMode, innerSize, outerSize)\n state.stage.css(layout).css({ width: size, left: state.offsets[state.frame] })\n state.images[state.frame].animate({ opacity : 1 }, { duration: state.speed })\n}\n\nfunction draw(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const input = SpriteSpin.getInputState(data)\n const isDragging = SpriteSpin.is(data, 'dragging')\n if (state.frame !== data.frame && !isDragging) {\n state.stage.stop(true, false).animate({ left : state.offsets[data.frame] }, { duration: state.speed })\n\n state.images[state.frame].animate({ opacity : state.opacity }, { duration: state.speed })\n state.frame = data.frame\n state.images[state.frame].animate({ opacity : 1 }, { duration: state.speed })\n state.stage.animate({ left : state.offsets[state.frame] })\n } else if (isDragging || state.dX !== input.dX) {\n state.dX = input.dX\n state.ddX = input.ddX\n state.stage.stop(true, true).css({ left : state.offsets[state.frame] + state.dX })\n }\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n onLoad: load,\n onDraw: draw\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst NAME = 'panorama'\n\ninterface PanoramaState {\n scale: number\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as PanoramaState\n}\n\nfunction onLoad(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const sprite = data.metrics[0]\n if (!sprite) {\n return\n }\n\n if (data.orientation === 'horizontal') {\n state.scale = data.target.innerHeight() / sprite.sampledHeight\n data.frames = sprite.sampledWidth\n } else {\n state.scale = data.target.innerWidth() / sprite.sampledWidth\n data.frames = sprite.sampledHeight\n }\n const width = Math.floor(sprite.sampledWidth * state.scale)\n const height = Math.floor(sprite.sampledHeight * state.scale)\n data.stage.css({\n 'background-image' : `url(${data.source[sprite.id]})`,\n 'background-repeat' : 'repeat-both',\n // set custom background size to enable responsive rendering\n '-webkit-background-size' : `${width}px ${height}px`, /* Safari 3-4 Chrome 1-3 */\n '-moz-background-size' : `${width}px ${height}px`, /* Firefox 3.6 */\n '-o-background-size' : `${width}px ${height}px`, /* Opera 9.5 */\n 'background-size' : `${width}px ${height}px` /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n })\n}\n\nfunction onDraw(e, data: SpriteSpin.Data) {\n const state = getState(data)\n const px = data.orientation === 'horizontal' ? 1 : 0\n const py = px ? 0 : 1\n\n const offset = data.frame % data.frames\n const left = Math.round(px * offset * state.scale)\n const top = Math.round(py * offset * state.scale)\n data.stage.css({ 'background-position' : `${left}px ${top}px` })\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n onLoad: onLoad,\n onDraw: onDraw\n})\n\n})()\n","import * as SpriteSpin from '../core'\nimport * as Utils from '../utils'\n\n(() => {\n\nconst NAME = 'zoom'\n\ninterface ZoomState {\n source: string[]\n stage: any\n\n oldX: number\n oldY: number\n currentX: number\n currentY: number\n\n clickTime: number\n doubleClickTime: number\n useWheel: boolean | number\n useClick: number\n pinFrame: boolean\n}\n\nfunction getState(data) {\n return SpriteSpin.getPluginState(data, NAME) as ZoomState\n}\nfunction getOption(data, name, fallback) {\n return name in data ? data[name] : fallback\n}\n\nfunction onInit(e, data: SpriteSpin.Data) {\n const state = getState(data)\n state.source = getOption(data, 'zoomSource', data.source)\n state.useWheel = getOption(data, 'zoomUseWheel', false)\n state.useClick = getOption(data, 'zoomUseClick', true)\n state.pinFrame = getOption(data, 'zoomPinFrame', true)\n state.doubleClickTime = getOption(data, 'zoomDoubleClickTime', 500)\n state.stage = state.stage || Utils.$(\"
\")\n state.stage.css({\n width : '100%',\n height : '100%',\n top : 0,\n left : 0,\n bottom : 0,\n right : 0,\n position : 'absolute'\n })\n .appendTo(data.target)\n .hide()\n}\n\nfunction onDestroy(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (state.stage) {\n state.stage.remove()\n delete state.stage\n }\n}\n\nfunction updateInput(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (!state.stage.is(':visible')) {\n return\n }\n\n e.preventDefault()\n\n if (state.pinFrame) {\n // hack into drag/move module and disable dragging\n // prevents frame change during zoom mode\n SpriteSpin.flag(data, 'dragging', false)\n }\n\n // grab touch/cursor position\n const cursor = Utils.getCursorPosition(e)\n // normalize cursor position into [0:1] range\n const x = cursor.x / data.width\n const y = cursor.y / data.height\n\n if (state.oldX == null) {\n state.oldX = x\n state.oldY = y\n }\n if (state.currentX == null) {\n state.currentX = x\n state.currentY = y\n }\n\n // calculate move delta since last frame and remember current position\n let dx = x - state.oldX\n let dy = y - state.oldY\n state.oldX = x\n state.oldY = y\n\n // invert drag direction for touch events to enable 'natural' scrolling\n if (e.type.match(/touch/)) {\n dx = -dx\n dy = -dy\n }\n\n // accumulate display coordinates\n state.currentX = Utils.clamp(state.currentX + dx, 0, 1)\n state.currentY = Utils.clamp(state.currentY + dy, 0, 1)\n\n SpriteSpin.updateFrame(data, data.frame, data.lane)\n}\n\nfunction onClick(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (!state.useClick) {\n return\n }\n\n e.preventDefault()\n // simulate double click\n\n const clickTime = new Date().getTime()\n if (!state.clickTime) {\n // on first click\n state.clickTime = clickTime\n return\n }\n\n // on second click\n const timeDelta = clickTime - state.clickTime\n if (timeDelta > state.doubleClickTime) {\n // took too long, back to first click\n state.clickTime = clickTime\n return\n }\n\n // on valid double click\n state.clickTime = undefined\n if (toggleZoom(data)) {\n updateInput(e, data)\n }\n}\n\nfunction onMove(e, data: SpriteSpin.Data) {\n const state = getState(data)\n if (state.stage.is(':visible')) {\n updateInput(e, data)\n }\n}\n\nfunction onDraw(e, data: SpriteSpin.Data) {\n const state = getState(data)\n\n // calculate the frame index\n const index = data.lane * data.frames + data.frame\n // get the zoom image. Use original frames as fallback. This won't work for spritesheets\n const source = state.source[index]\n const spec = Utils.findSpecs(data.metrics, data.frames, data.frame, data.lane)\n\n // get display position\n let x = state.currentX\n let y = state.currentY\n // fallback to centered position\n if (x == null) {\n x = state.currentX = 0.5\n y = state.currentY = 0.5\n }\n\n if (source) {\n // scale up from [0:1] to [0:100] range\n x = Math.floor(x * 100)\n y = Math.floor(y * 100)\n\n // update background image and position\n state.stage.css({\n 'background-repeat' : 'no-repeat',\n 'background-image' : `url('${source}')`,\n 'background-position' : `${x}% ${y}%`\n })\n } else if (spec.sheet && spec.sprite) {\n const sprite = spec.sprite\n const sheet = spec.sheet\n const src = data.source[sheet.id]\n const left = -Math.floor(sprite.sampledX + x * (sprite.sampledWidth - data.width))\n const top = -Math.floor(sprite.sampledY + y * (sprite.sampledHeight - data.height))\n const width = sheet.sampledWidth\n const height = sheet.sampledHeight\n state.stage.css({\n 'background-image' : `url('${src}')`,\n 'background-position' : `${left}px ${top}px`,\n 'background-repeat' : 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size' : `${width}px ${height}px`, /* Safari 3-4 Chrome 1-3 */\n '-moz-background-size' : `${width}px ${height}px`, /* Firefox 3.6 */\n '-o-background-size' : `${width}px ${height}px`, /* Opera 9.5 */\n 'background-size' : `${width}px ${height}px` /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n })\n }\n}\n\nfunction toggleZoom(data) {\n const state = getState(data)\n if (!state.stage) {\n throw new Error('zoom module is not initialized or is not available.')\n }\n if (state.stage.is(':visible')) {\n showZoom(data)\n } else {\n hideZoom(data)\n return true\n }\n return false\n}\n\nfunction showZoom(data) {\n const state = getState(data)\n state.stage.fadeOut()\n data.stage.fadeIn()\n}\n\nfunction hideZoom(data) {\n const state = getState(data)\n state.stage.fadeIn()\n data.stage.fadeOut()\n}\n\nfunction wheel(e: JQueryMouseEventObject, data: SpriteSpin.Data) {\n const state = getState(data)\n if (!data.loading && state.useWheel) {\n\n const we = e.originalEvent as WheelEvent\n\n let signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1\n if (typeof state.useWheel === 'number') {\n signY *= state.useWheel\n }\n\n if (state.stage.is(':visible') && signY > 0) {\n e.preventDefault()\n showZoom(data)\n }\n if (!state.stage.is(':visible') && signY < 0) {\n e.preventDefault()\n hideZoom(data)\n }\n }\n}\n\nSpriteSpin.registerPlugin(NAME, {\n name: NAME,\n\n mousedown: onClick,\n touchstart: onClick,\n mousemove: onMove,\n touchmove: onMove,\n wheel: wheel,\n\n onInit: onInit,\n onDestroy: onDestroy,\n onDraw: onDraw\n})\n\nSpriteSpin.extendApi({\n toggleZoom: function() { toggleZoom(this.data) } // tslint:disable-line\n})\n\n})()\n","export * from './core'\nexport { sourceArray } from './utils'\n\nimport * as _Utils from './utils'\nexport const Utils = _Utils\n\nimport './api'\nimport './plugins'\n"],"names":["$","noop","Utils.getComputedSize","Utils.getOuterSize","Utils.getInnerLayout","Utils.getInnerSize","Utils.pixelRatio","Utils.$","Utils.unbind","Utils.bind","Utils.prevent","Utils.measure","Utils.findSpecs","Utils.toArray","Utils.preload","SpriteSpin.extendApi","SpriteSpin.getPlaybackState","SpriteSpin.stopAnimation","SpriteSpin.applyAnimation","SpriteSpin.updateFrame","SpriteSpin.updateInput","SpriteSpin.getInputState","SpriteSpin.registerPlugin","SpriteSpin.getPluginState","getState","SpriteSpin.is","SpriteSpin.flag","SpriteSpin.resetInput","SpriteSpin.startAnimation","naturalSize","Utils.naturalSize","Utils.getCursorPosition","Utils.clamp","updateInput"],"mappings":";;;;;;AAGA;;;AAGA;IACE,aAAmB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;KAAK;IACpC,UAAC;CAAA,IAAA;AAED;;;;;AAKA,mBAA0B,OAAoC;IAC5D,IAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAA;IACzB,KAAK,IAAM,GAAG,IAAI,OAAO,EAAE;QACzB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,GAAG,CAAC,CAAA;aACzD;iBAAM;gBACL,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;aACxB;SACF;KACF;IACD,OAAO,GAAG,CAAA;CACX;;AC3BM,IAAMA,GAAC,GAA+B,MAAc,CAAC,MAAM,IAAK,MAAc,CAAC,CAAC,CAAA;;2BCArD,KAAK;IACrC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAA;;;IAIlB,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;QACpE,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAA;KACtC;;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/C,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;KACpB;IACD,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;QACtB,CAAC,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;KACvB,CAAA;CACF;;ACjBD,IAAI,MAAM,CAAA;AACV,IAAI,OAAO,CAAA;AAEX;IACE,IAAI,OAAO,EAAE;QACX,OAAO,OAAO,CAAA;KACf;IAED,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;KAC1C;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QACjC,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,OAAO,CAAA;CACf;;;;;;AAOD,2BAAkC,GAAqB,EAAE,KAAa,EAAE,MAAc;IAEpF,IAAI,CAAC,gBAAgB,EAAE,EAAE;QACvB,OAAO,KAAK,CAAA;KACb;;IAGD,IAAI,KAAK,GAAG,MAAM,IAAI,IAAI,GAAG,IAAI,EAAE;QACjC,OAAO,KAAK,CAAA;KACb;;IAGD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IAChC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAA;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;;;IAG5B,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;;;IAIrC,IAAI;QACF,IAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;KAC9D;IAAC,OAAO,GAAG,EAAE;;QAEZ,OAAO,KAAK,CAAA;KACb;CACF;;ACvBD;;;AAGA,sBAA6B,IAAgB;IAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACnF,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IACvF,OAAO;QACL,MAAM,EAAE,KAAK,GAAG,MAAM;QACtB,MAAM,QAAA;QACN,KAAK,OAAA;KACN,CAAA;CACF;AAED,yBAAgC,IAAgB;IAC9C,IAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAElE,IAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAEjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAClD,OAAO,IAAI,CAAA;CACZ;;;;AAKD,sBAA6B,IAAgB;IAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACnF,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IACvF,OAAO;QACL,MAAM,EAAE,KAAK,GAAG,MAAM;QACtB,MAAM,QAAA;QACN,KAAK,OAAA;KACN,CAAA;CACF;;;;AAKD,wBAA+B,IAAc,EAAE,KAAqB,EAAE,KAAqB;;IAGzF,IAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAA;IAC5B,IAAM,MAAM,GAAG,IAAI,KAAK,MAAM,CAAA;IAC9B,IAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAA;;IAGlC,IAAM,MAAM,GAAW;QACrB,KAAK,EAAM,MAAM;QACjB,MAAM,EAAK,MAAM;QACjB,GAAG,EAAQ,CAAC;QACZ,IAAI,EAAO,CAAC;QACZ,MAAM,EAAK,CAAC;QACZ,KAAK,EAAM,CAAC;QACZ,QAAQ,EAAG,UAAU;QACrB,QAAQ,EAAG,QAAQ;KACpB,CAAA;;IAGD,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;QACpB,OAAO,MAAM,CAAA;KACd;;IAGD,IAAM,eAAe,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAA;;IAGpD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACvB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;;IAGzB,IAAI,KAAK,IAAI,eAAe,IAAI,MAAM,IAAI,CAAC,eAAe,EAAE;QAC1D,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACnB,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;KACpC;IACD,IAAI,MAAM,IAAI,eAAe,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;QAC1D,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QACrB,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;KACpC;;IAGD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;;IAG3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAA;IACpD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;IAC1B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;IAE1B,OAAO,MAAM,CAAA;CACd;;AC5HD,IAAI,GAAqB,CAAA;;;;AAKzB,qBAA4B,KAAuB;;IAEjD,IAAI,KAAK,CAAC,YAAY,EAAE;QACtB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,aAAa;YAC3B,KAAK,EAAE,KAAK,CAAC,YAAY;SAC1B,CAAA;KACF;;;;;;;IAQD,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;IACxB,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;IACnB,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAA;CACF;;ACgBD;;;AAGA,iBAAwB,MAA0B,EAAE,OAA4B;IAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;KAC1C;SAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;QAC7C,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC7C;SAAM;QACL,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACtC;CACF;AAED,sBAAsB,KAAuB,EAAE,OAA4B;IACzE,IAAM,MAAM,GAAc,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAS,CAAA;IACvD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACpC,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAA;IACjD,IAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IAC3C,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;IACrD,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IACvD,IAAM,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,CAAA;QACpC,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,WAAW,CAAA;QAC/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,EAAE,EAAE,CAAC;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,CAAC,GAAG,OAAO;YACrB,QAAQ,EAAE,CAAC,GAAG,OAAO;YACrB,YAAY,EAAE,UAAU,GAAG,OAAO;YAClC,aAAa,EAAE,WAAW,GAAG,OAAO;SACrC,CAAC,CAAA;KACH;IACD,OAAO,MAAM,CAAA;CACd;AAED,uBAAuB,MAA0B,EAAE,OAA4B;IAC7E,IAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;;;QAGzC,IAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAC/G,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;QACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACnB;IACD,OAAO,MAAM,CAAA;CACd;AAED,8BAA8B,MAA0B,EAAE,OAA4B;IACpF,IAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;;;QAGzC,IAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACrC,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;QACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACnB;IACD,OAAO,MAAM,CAAA;CACd;AAED,sBAAsB,KAAuB,EAAE,OAA4B,EAAE,MAAiB;IAC5F,IAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACpG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAChE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,OAAO,MAAM,CAAA;CACd;AAED,mBAA0B,OAAoB,EAAE,MAAc,EAAE,KAAa,EAAE,IAAY;IACzF,IAAI,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAA;IACpC,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,MAAM,GAAe,IAAI,CAAA;IAC7B,IAAI,KAAK,GAAc,IAAI,CAAA;IAE3B,OAAO,IAAI,EAAE;QACX,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,EAAE;YAAE,MAAK;SAAE;QAErB,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YACpC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;YAChC,OAAO,EAAE,CAAA;YACT,SAAQ;SACT;QAED,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAK;KACN;IACD,OAAO,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,CAAA;CACzB;;AC5ID,iBAAiB,OAAY,EAAE,GAAU;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;YACtB,OAAO,CAAC,CAAA;SACT;KACF;CACF;AAED;;CAEC;AAqBD,iBAAwB,IAAoB;IAC1C,IAAI,GAAa,CAAA;IACjB,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;IACzB,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;;IAGjD,IAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAM,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IACrD,IAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;IAC1C,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAA;IACxC,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAA;IAExC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,IAAM,IAAI,GAAG;QACX,KAAK,IAAI,CAAC,CAAA;QAEV,UAAU,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,GAAG,CAAC,MAAM;YACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;SAChD,CAAC,CAAA;QAEF,WAAW,GAAG,WAAW,KAAK,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAEjD,IAAI,WAAW,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,WAAW,CAAC,EAAE;YACvD,SAAS,GAAG,IAAI,CAAA;YAChB,UAAU,CAAC,MAAM,CAAC,CAAA;SACnB;KACF,CAAA;IAED,KAAkB,UAAG,EAAH,WAAG,EAAH,iBAAG,EAAH,IAAG;QAAhB,IAAM,GAAG,YAAA;QACZ,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;;QAEvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;QAEhB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;;QAE7C,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;KACd;IAED,WAAW,CAAC,MAAM,CAAC,CAAA;CACpB;;AC5ED,mBAAmB,GAAW,EAAE,MAAc,EAAE,GAAW;IACzD,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE;QAC7B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;KAC9B;IACD,OAAO,MAAM,CAAA;CACd;;;;;;;;;;;;;;;;;;;;;;AAiDD,qBAA4B,QAAgB,EAAE,IAAwB;IACpE,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;IAC/B,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAA;IAC3C,IAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,SAAS,CAAA;IAE7C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrB;IACD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACpB;IACD,IAAM,MAAM,GAAG,EAAE,CAAA;IACjB,KAAK,IAAI,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE;QAC/C,KAAK,IAAI,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;YAClD,MAAM,CAAC,IAAI,CAAC,QAAQ;iBACjB,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;iBAC9C,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CACjD,CAAA;SACF;KACF;IACD,OAAO,MAAM,CAAA;CACd;;AChFD;;;AAGA,IAAa,SAAS,GAAG,YAAY,CAAA;;;;;AAMrC,IAAa,UAAU,GAAG;IACxB,WAAW;IACX,WAAW;IACX,SAAS;IACT,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,OAAO;IACP,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,aAAa;IACb,aAAa;IACb,cAAc;IACd,eAAe;IACf,YAAY;CACb,CAAA;;;;AAKD,IAAa,aAAa,GAAG;IAC3B,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,gBAAgB;IAChB,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,WAAW;CACZ,CAAA;;;;AAKD,IAAa,eAAe,GAAG;IAC7B,WAAW;CACZ,CAAA;;;;;AAMD,IAAa,QAAQ,GAAY;IAC/B,MAAM,EAAc,SAAS;IAC7B,KAAK,EAAe,SAAS;IAC7B,MAAM,EAAc,SAAS;IAC7B,MAAM,EAAc,SAAS;IAC7B,OAAO,EAAa,SAAS;IAC7B,KAAK,EAAe,CAAC;IACrB,QAAQ,EAAY,SAAS;IAE7B,QAAQ,EAAY,QAAQ;IAE5B,IAAI,EAAgB,CAAC;IACrB,KAAK,EAAe,CAAC;IACrB,SAAS,EAAW,EAAE;IACtB,OAAO,EAAa,IAAI;IACxB,aAAa,EAAO,KAAK;IACzB,OAAO,EAAa,KAAK;IACzB,IAAI,EAAgB,IAAI;IACxB,SAAS,EAAW,CAAC;IAErB,IAAI,EAAgB,IAAI;IACxB,QAAQ,EAAY,KAAK;IACzB,KAAK,EAAe,CAAC;IACrB,SAAS,EAAW,SAAS;IAC7B,WAAW,EAAS,YAAY;IAChC,iBAAiB,EAAG,IAAI;IACxB,YAAY,EAAQ,SAAS;IAE7B,gBAAgB,EAAI,CAAC,GAAG,EAAE,IAAI,CAAC;IAC/B,UAAU,EAAU,SAAS;IAC7B,OAAO,EAAa,SAAS;CAC9B;;;;CCpFA;AAED,qBAAqB,IAAY;IAC/B,OAAO,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG;QAAC,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAAK,OAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;KAAA,GAAGC,MAAI,CAAA;CAC9F;AAED,AAAO,IAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AACrC,AAAO,IAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;AACvC,AAAO,IAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzC,iBAA2B,KAAc;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;CAC9C;;;;AAKD,eAAsB,KAAK,EAAE,GAAG,EAAE,GAAG;IACnC,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,EAAC;CACzD;;;;AAKD,cAAqB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;IACxC,OAAO,KAAK,GAAG,GAAG,EAAE;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE;IACrC,OAAO,KAAK,GAAG,GAAG,EAAE;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE;IACrC,OAAO,KAAK,CAAA;CACb;;;;AAKD,iBAAwB,CAAC;IACvB,CAAC,CAAC,cAAc,EAAE,CAAA;IAClB,OAAO,KAAK,CAAA;CACb;;;;;AAMD,cAAqB,MAAM,EAAE,KAAK,EAAE,IAAI;IACtC,IAAI,IAAI,EAAE;QACR,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,SAAS,EAAE,UAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;SACnD,CAAC,CAAA;KACH;CACF;;;;AAKD,gBAAuB,MAAW;IAChC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;CAC/B;;;;AAKD,oBAA2B,EAAO;IAChC,OAAO,OAAO,EAAE,KAAK,UAAU,CAAA;CAChC;AAED,oBAA2B,OAAO;IAChC,IAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAA;IACrD,IAAM,iBAAiB,GACrB,OAAO,CAAC,4BAA4B;QACpC,OAAO,CAAC,yBAAyB;QACjC,OAAO,CAAC,wBAAwB;QAChC,OAAO,CAAC,uBAAuB;QAC/B,OAAO,CAAC,sBAAsB,IAAI,CAAC,CAAA;IACrC,OAAO,gBAAgB,GAAG,iBAAiB,CAAA;CAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1ED;;;;;AAKA,qBAA4B,IAAU;;IAEpC,IAAI,CAAC,MAAM;SACR,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;SAC1B,GAAG,CAAC;QACH,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,iBAAiB,EAAE,MAAM;QACzB,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,MAAM;QAC5B,qBAAqB,EAAE,MAAM;QAC7B,aAAa,EAAE,MAAM;KACtB,CAAC,CAAA;IAEJ,IAAM,IAAI,GAAG,IAAI,CAAC,UAAU,GAAGC,eAAqB,CAAC,IAAI,CAAC,GAAGC,YAAkB,CAAC,IAAI,CAAC,CAAA;IACrF,IAAM,MAAM,GAAGC,cAAoB,CAAC,IAAI,CAAC,QAAQ,EAAEC,YAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;;IAGlF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACd,KAAK,EAAM,IAAI,CAAC,KAAK;QACrB,MAAM,EAAK,IAAI,CAAC,MAAM;QACtB,QAAQ,EAAG,UAAU;QACrB,QAAQ,EAAG,QAAQ;KACpB,CAAC,CAAA;;IAGF,IAAI,CAAC,KAAK;SACP,GAAG,CAAC,MAAM,CAAC;SACX,IAAI,EAAE,CAAA;IAET,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAM;KAAE;;IAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;;IAE9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAIC,UAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QACzE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAE,MAAM,CAAC,KAAgB,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAA;QAClF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAE,MAAM,CAAC,MAAiB,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,CAAA;KACtF;SAAM;QACL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;KACzD;;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;CACvD;;AClDD;;;;;;AAMA,kBAAkC,IAAU,EAAE,IAAY;IACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;CACxB;;;;;;;;;;;;AAaD,wBAAwC,IAAU,EAAE,IAAY;IAC9D,IAAM,KAAK,GAAG,QAAQ,CAAI,IAAI,EAAE,QAAQ,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAA;CACnB;;;;;;;;AASD,YAAmB,IAAU,EAAE,GAAW;IACxC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;CACtC;;;;;;;;;AAUD,cAAqB,IAAU,EAAE,GAAW,EAAE,KAAc;IAC1D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;CACvC;;AChDD;;;;;;AAMA,0BAAiC,IAAU;IACzC,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;CAClC;AAcD,oBAAoB,IAAU,EAAE,IAAY;IAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;UACrB,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;UACzC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;CACnC;AAED,8BAA8B,IAAU;IACtC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;;IAErC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;;IAE9D,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;QACjD,aAAa,CAAC,IAAI,CAAC,CAAA;KACpB;CACF;AAED,0BAA0B,IAAU,EAAE,KAAa;IACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;UAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;UACjD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;CAC1C;AAED,yBAAyB,IAAU;IACjC,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAC1B,WAAW,CAAC,IAAI,CAAC,CAAA;KAClB;CACF;AAED,sBAAsB,IAAU;IAC9B,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;IAC5B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;CAC3B;AAED,qBAAqB,IAAU;IAC7B,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;KACzD;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;CACjD;;;;;;;;;AAUD,qBAA4B,IAAU,EAAE,KAAc,EAAE,IAAa;IACnE,YAAY,CAAC,IAAI,CAAC,CAAA;IAClB,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KAC9B;IACD,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACvB;IACD,WAAW,CAAC,IAAI,CAAC,CAAA;CAClB;;;;;;;AAQD,uBAA8B,IAAU;IACtC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACpB,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;QACzB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;KACrB;CACF;;;;;;;;;;AAWD,wBAA+B,IAAU;IACvC,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1E,aAAa,CAAC,IAAI,CAAC,CAAA;KACpB;IACD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QAClC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,cAAM,OAAA,eAAe,CAAC,IAAI,CAAC,GAAA,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KACjF;CACF;;;;;;;;;;AAWD,wBAA+B,IAAU;IACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACnB,cAAc,CAAC,IAAI,CAAC,CAAA;CACrB;;AC9HD,IAAM,OAAO,GAAwC,EAAE,CAAA;;;;;;;;;;;AAYvD,wBAA+B,IAAY,EAAE,MAAwB;IACnE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;QACjB,KAAK,CAAC,mBAAgB,IAAI,wBAAoB,CAAC,CAAA;QAC/C,OAAM;KACP;IACD,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IACrB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;IACtB,OAAO,MAAM,CAAA;CACd;;;;;;;;;AAUD,wBAA+B,IAAY,EAAE,MAAwB;IACnE,IAAI,CAAC,8DAA8D,CAAC,CAAA;IACpE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;CAC7B;;;;;;;AAQD,mBAA0B,IAAI;IAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB;;;;;AAMD,sBAA6B,IAAU;IACrC,UAAU,CAAC,IAAI,CAAC,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/C,IAAM,MAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,OAAO,MAAI,KAAK,QAAQ,EAAE;YAC5B,SAAQ;SACT;QACD,IAAM,MAAM,GAAG,SAAS,CAAC,MAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,KAAK,CAAC,4BAA4B,GAAG,MAAI,CAAC,CAAA;YAC1C,SAAQ;SACT;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;KACzB;CACF;AAED,oBAAoB,IAAU;;IAG5B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;QAChB,IAAI,CAAC,oDAAoD,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;KACpB;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;QACpB,IAAI,CAAC,wDAAwD,CAAC,CAAA;QAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;KACxB;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClB,IAAI,CAAC,sDAAsD,CAAC,CAAA;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAA;KACtB;CACF;;AC1FD,IAAMN,GAAC,GAAGO,GAAO,CAAA;AAEjB,IAAI,OAAO,GAAG,CAAC,CAAA;;;;AAIf,IAAa,SAAS,GAA0B,EAAE,CAAA;AAElD,sBAAsB,IAAU;IAC9B,OAAO,IAAI,CAAC,CAAA;IACZ,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAC1B;AAED,qBAAqB,IAAU;IAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;CAC1B;AAED,sBAAsB,EAAE;IACtB,KAAK,IAAM,EAAE,IAAI,SAAS,EAAE;QAC1B,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YAChC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;SAClB;KACF;CACF;AAED,IAAI,QAAQ,GAAG;;;IAGb,QAAQ,GAAG,eAAoB,CAAA;IAE/B,iBAAiB,SAAS,EAAE,CAAC;QAC3B,YAAY,CAAC,UAAC,IAAU;YACtB,KAAqB,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY;gBAA5B,IAAM,QAAM,SAAA;gBACf,IAAI,OAAO,QAAM,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE;oBAC3C,QAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;iBAChD;aACF;SACF,CAAC,CAAA;KACH;IAED;QACE,YAAY,CAAC,UAAC,IAAU;YACtB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,CAAA;aACX;SACF,CAAC,CAAA;KACH;4BAEU,SAAS;QAClBP,GAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,EAAE,UAAC,CAAC;YACrD,OAAO,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,CAAA;SACnC,CAAC,CAAA;KACH;IAJD,KAAwB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU;QAA7B,IAAM,SAAS,mBAAA;gBAAT,SAAS;KAInB;IAED,IAAI,aAAa,GAAG,IAAI,CAAA;IACxBA,GAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE;QACrB,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;QAClC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;KACjD,CAAC,CAAA;CACH,CAAA;;;;;;AAOD,qBAA4B,IAAU;IACpC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;;IAG1BQ,MAAY,CAAC,MAAM,CAAC,CAAA;;;IAIpB,KAAoB,UAAe,EAAf,mCAAe,EAAf,6BAAe,EAAf,IAAe;QAA9B,IAAM,KAAK,wBAAA;QACdC,IAAU,CAAC,MAAM,EAAE,KAAK,EAAEC,OAAa,CAAC,CAAA;KACzC;;IAGD,KAAqB,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY;QAA5B,IAAM,MAAM,SAAA;QACf,KAAoB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU;YAAzB,IAAM,KAAK,mBAAA;YACdD,IAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;SACzC;QACD,KAAoB,UAAa,EAAb,+BAAa,EAAb,2BAAa,EAAb,IAAa;YAA5B,IAAM,KAAK,sBAAA;YACdA,IAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;SACzC;KACF;;IAGDA,IAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAC,CAAC,EAAE,CAAC;QAChC,cAAc,CAAC,CAAC,CAAC,CAAA;KAClB,CAAC,CAAA;;IAGF,KAAoB,UAAa,EAAb,+BAAa,EAAb,2BAAa,EAAb,IAAa;QAA5B,IAAM,KAAK,sBAAA;QACdA,IAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KACvC;CACF;AAED,sBAAsB,IAAU;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;KAClB;IACD,IAAI,CAAC,OAAO,GAAGE,OAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC/C,IAAM,IAAI,GAAGC,SAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,IAAI,IAAI,CAAC,MAAM,EAAE;;QAEf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;KACtC;CACF;;;;;;;;;AAUD,cAAqB,IAAU;IAC7B,YAAY,CAAC,IAAI,CAAC,CAAA;IAClB,WAAW,CAAC,IAAI,CAAC,CAAA;IACjB,WAAW,CAAC,IAAI,CAAC,CAAA;IAEjB,IAAI,CAAC,MAAM,GAAGC,OAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,MAAM;SACR,QAAQ,CAAC,SAAS,CAAC;SACnB,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;IACvCC,OAAa,CAAC;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,UAAC,QAAQ;YACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;SACrD;QACD,QAAQ,EAAE,UAAC,MAAM;YACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YAE1C,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,WAAW,CAAC,IAAI,CAAC,CAAA;YACjB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YACjB,IAAI,CAAC,MAAM;iBACR,WAAW,CAAC,SAAS,CAAC;iBACtB,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC;iBACpC,OAAO,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC;iBACrC,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC;iBACpC,OAAO,CAAC,aAAa,GAAG,SAAS,EAAE,IAAI,CAAC,CAAA;SAC5C;KACF,CAAC,CAAA;CACH;;;;;;AAOD,gBAAuB,OAAgB;IAAvC,iBAyDC;IAxDC,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;;;IAI7B,IAAM,IAAI,GAAGd,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAS,CAAA;;IAG1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;;IAE/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI;QAC7B,KAAK;QACL,MAAM;KACP,CAAA;;;IAID,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;SACjB;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA,GAAC,CAAC,KAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KACtC,CAAC,CAAA;;;;;;IAOF,MAAM;SACH,KAAK,EAAE;SACP,QAAQ,CAAC,qBAAqB,CAAC;SAC/B,MAAM,CAAC,sCAAsC,CAAC,CAAA;;IAGjD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;QAC9B,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE;YACpD,IAAI,CAAC,MAAM,GAAGA,GAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAQ,CAAA;YAC5D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC1B,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;SAC/B;aAAM;;YAEL,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;SACxB;KACF;;IAGD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACpB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;;IAG7C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC5B,YAAY,CAAC,IAAI,CAAC,CAAA;IAElB,OAAO,IAAI,CAAA;CACZ;;;;;;AAOD,wBAA+B,OAAgB;IAC7C,QAAQ,EAAE,CAAA;IAEV,IAAI,IAAI,GAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAS,CAAA;IAClD,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;KACvB;SAAM;QACLA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KACxB;IACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEV,OAAO,IAAI,CAAA;CACZ;;;;;;;;;;;AAYD,iBAAwB,IAAU;IAChC,WAAW,CAAC,IAAI,CAAC,CAAA;IACjB,aAAa,CAAC,IAAI,CAAC,CAAA;IACnB,IAAI,CAAC,MAAM;SACR,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;SACnB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;SAC1B,WAAW,CAAC,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC,CAAA;IACtDQ,MAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;CAClC;;AChPD;;;;;;AAMA,uBAA8B,IAAU;IACtC,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;CAC/B;;;;;;;;AASD,qBAA4B,CAAC,EAAE,IAAU;IACvC,IAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;IACnC,IAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;;IAGjC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;IAC3B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;IAE3B,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAA;IACzB,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAA;;IAGzB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;QACxD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC3B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;KAC5B;;;IAID,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;QAC5D,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC7B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC7B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAA;KAC5B;;IAGD,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;IACxC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;;IAGxC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAA;IACvC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAA;;IAGvC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IAC/C,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;IAEhD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IACjD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;CACnD;;;;;;AAOD,oBAA2B,IAAU;IACnC,IAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACjC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;IACvC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC3C,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,CAAA;IACnC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;IACvB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IACzB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IACzB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;CAC5B;;AChGD,mBAAmB,MAAoB,EAAE,KAAU;IACjD,IAAM,OAAO,GAAGR,GAAC,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KAC/B;IACD,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,OAAO,IAAI,CAAC,GAAG,CAAA;KAChB;IACD,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACpC,IAAI,IAAI,EAAE;gBACR,OAAO,CAAC,IAAI,CAAC,CAAA;aACd;SACF,CAAC,CAAA;KACH;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACxD,MAAM,aAAK,GAAC,MAAM,IAAG,KAAK,KAAE,CAAA;KAC7B;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,cAAc,CAACA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;KAC1E;IAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;;CAC9C;AAEDA,GAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;;AC/B3B;;AAGAe,SAAoB,CAAC;;IAEnB,SAAS,EAAE;QACT,OAAOC,gBAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAA;KAC9D;;IAGD,SAAS,EAAE;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;KACtB;;IAGD,eAAe,EAAE;QACf,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;aAAM;YACL,IAAI,CAAC,cAAc,EAAE,CAAA;SACtB;KACF;;IAGD,aAAa,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACzBC,aAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACpC;;IAGD,cAAc,EAAE;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACxBC,cAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACrC;;;IAID,IAAI,EAAE,UAAS,KAAK;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;QACtBA,cAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;KACZ;;IAGD,YAAY,EAAE;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;KACvB;;IAGD,WAAW,EAAE,UAAS,KAAK;QACzBC,WAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,IAAI,CAAA;KACZ;;IAGD,UAAU,EAAE,UAAS,IAAI;QACvB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtBA,WAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,CAAE,IAAI,GAAG,CAAE,IAAI,CAAC,CAAC,CAAA;QAC3E,OAAO,IAAI,CAAA;KACZ;;IAGD,SAAS,EAAE;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;KAC1B;;IAGD,SAAS,EAAE;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;KAC3B;;;;;IAMD,MAAM,EAAE,UAAS,KAAK,EAAE,OAAO;QAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YAC1C,OAAM;SACP;QACD,IAAI,OAAO,CAAC,OAAO,EAAE;;YAEnB,IAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;;YAE5B,IAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;;YAEhE,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;SACrB;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtBD,cAAyB,CAAC,IAAI,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAA;KACZ;CACF,CAAC,CAAA;;AC1FF,cAAc,MAAM,EAAE,KAAe;IACnC,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;QAAnB,IAAM,MAAI,cAAA;QACb,IAAI,MAAM,CAAC,MAAI,CAAC,IAAI,MAAI,IAAI,MAAM,EAAE;YAClC,OAAO,MAAI,CAAA;SACZ;KACF;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;CAChB;AAED,IAAM,OAAO,GAAG;IACd,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;QAChD,mBAAmB;QACnB,yBAAyB;QACrB,sBAAsB;QACtB,qBAAqB;KAAC,CAAC;IAC7B,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC7B,gBAAgB;QAChB,sBAAsB;QACtB,wBAAwB;QACpB,qBAAqB;QACrB,kBAAkB;KAAC,CAAC;IAC1B,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE;QAChC,mBAAmB;QACnB,yBAAyB;QACzB,gCAAgC;QAC5B,sBAAsB;QACtB,qBAAqB;KAAC,CAAC;IAC7B,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE;QAChC,mBAAmB;QACnB,yBAAyB;QACrB,sBAAsB;QACtB,qBAAqB;KAAC,CAAC;IAC7B,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC/B,oBAAoB;QACpB,0BAA0B;QACtB,uBAAuB;QACvB,sBAAsB;KAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACjD,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC9B,mBAAmB;QACnB,yBAAyB;QACrB,sBAAsB;QACtB,qBAAqB;KAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;CACjD,CAAA;AAED,IAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,GAAG,GAAG,SAAS,GAAG,aAAa,CAAA;AAC9E;IACElB,GAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;CAChC;AAED,yBAAyB,QAAQ;IAC/B,iBAAiB,EAAE,CAAA;IACnBA,GAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;CACxC;AAED,IAAM,gBAAgB,GAAG,oBAAoB,GAAG,SAAS,GAAG,aAAa,CAAA;AACzE;IACEA,GAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;CACnC;AACD,8BAA8B,QAAQ;IACpC,sBAAsB,EAAE,CAAA;IACxBA,GAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;CAC3C;AAED,iCAAiC,CAAC;IAChC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAA;IACjC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAA;CAC/B;AAED;IACE,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAA;CAC1C;AAED;IACE,OAAO,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC3C;AAED;IACE,OAAO,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC3C;AAED;IACE,OAAO,CAAC,CAAC,iBAAiB,EAAE,CAAA;CAC7B;AAED,0BAAiC,IAAU,EAAE,IAAa;IACxD,IAAI,YAAY,EAAE,EAAE;QAClB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;KAChC;SAAM;QACL,IAAI,CAAC,cAAc,EAAE,CAAA;KACtB;CACF;AAED,2BAAkC,IAAU,EAAE,IAAa;IACzD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;IACjB,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC3B,IAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAA;IACnC,IAAM,KAAK,GAAG;QACZ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;QAClC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAa,CAAA;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAA;QACtC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,CAAA;KACX,CAAA;IACD,IAAM,IAAI,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;QACnB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,CAAA;KACX,CAAA;IAED,eAAe,CAAC;QACd,IAAI,YAAY,EAAE,EAAE;YAClB,KAAK,EAAE,CAAA;YACP,oBAAoB,CAAC,KAAK,CAAC,CAAA;SAC5B;aAAM;YACL,iBAAiB,EAAE,CAAA;YACnB,sBAAsB,EAAE,CAAA;YACxB,IAAI,EAAE,CAAA;SACP;KACF,CAAC,CAAA;IACF,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;CACxC;AAED,SAAS,CAAC;IACR,iBAAiB,mBAAA;IACjB,iBAAiB,mBAAA;IACjB,cAAc,gBAAA;IACd,gBAAgB,EAAE,UAAS,IAAa;QACtC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAClC;IACD,iBAAiB,EAAE,UAAS,IAAa;QACvC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACnC;CACF,CAAC,CAAA;;ACjJF,CAAC;IAED,IAAM,IAAI,GAAG,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,IAAqB;QACrC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC9C,OAAM;SACP;QACDoB,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC/B,IAAM,KAAK,GAAGC,aAAwB,CAAC,IAAI,CAAC,CAAA;QAE5C,IAAI,IAAI,EAAE,GAAG,CAAA;QACb,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QACpD,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAC9B,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;SACnC;aAAM;YACL,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YAC/B,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;SAClC;QACDF,WAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;KACjE;IAEDG,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;CAED,GAAG,CAAA;;AC5BJ,CAAC;IAED,IAAM,IAAI,GAAG,MAAM,CAAA;IAYnB,qBAAkB,IAAqB;QACrC,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAc,CAAA;KAC1D;IAED,iBAAiB,IAAqB;QACpC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;YACxC,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA;SACxC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,OAAO,CAAC,CAAA;SACT;QACD,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;KACnB;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrB,IAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA;QACpC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5B,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC7B;IAED,mBAAmB,CAAC,EAAE,IAAqB;QACzC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,IAAIC,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YACzG,OAAM;SACP;;;;;;;;;;;QAaD,IAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE;;YAEtD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;YACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;SACnB;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE;;;YAG1D,CAAC,CAAC,cAAc,EAAE,CAAA;SACnB;QAED,KAAK,CAAC,OAAO,GAAG,GAAG,CAAA;QACnB,KAAK,CAAC,UAAU,GAAG,CAAC,CAACT,gBAA2B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;QAE9D,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;QAC7B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QAC3BU,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACvCN,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;KAChC;IAED,iBAAiB,CAAC,EAAE,IAAqB;QACvC,IAAIK,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACnCD,WAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;YAC3CE,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;YACxCC,UAAqB,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,IAAI,CAAC,aAAa,IAAIH,WAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;gBACnDI,cAAyB,CAAC,IAAI,CAAC,CAAA;aAChC;SACF;KACF;IAED,cAAc,CAAC,EAAE,IAAqB;QACpC,IAAM,KAAK,GAAGJ,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,KAAK,GAAGH,aAAwB,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAACI,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YAAE,OAAM;SAAE;QAChDL,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAE/B,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACzB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;QACjE,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;;QAGrF,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAC9B,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;;QAG5B,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAA;QAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;QACzBD,WAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7EF,aAAwB,CAAC,IAAI,CAAC,CAAA;KAC/B;IAED,mBAAmB,CAAC,EAAE,IAAI;QACxB,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;KACd;IAEDK,cAAyB,CAAC,MAAM,EAAE;QAChC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QAEd,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,OAAO;QAEhB,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,OAAO;QAExB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,OAAO;KACrB,CAAC,CAAA;IAEFA,cAAyB,CAAC,MAAM,EAAE;QAChC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QAEd,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,OAAO;QAEnB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,OAAO;KACrB,CAAC,CAAA;CAED,GAAG,CAAA;;AC/IJ,CAAC;IAED,IAAM,IAAI,GAAG,MAAM,CAAA;IAQnB,qBAAkB,IAAqB;QACrC,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAc,CAAA;KAC1D;IAED,yBAAyB,IAAqB;QAC5C,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;KAC7B;IAED,wBAAwB,IAAqB;QAC3C,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;KAC7B;IAED,eAAe,CAAC,EAAE,IAAqB;QACrC,IAAIC,EAAa,CAAC,IAAI,EAAE,SAAS,CAAC,IAAIA,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YACnG,OAAM;SACP;QACD,eAAe,CAAC,IAAI,CAAC,CAAA;QACrBL,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC/BM,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnBR,cAAyB,CAAC,IAAI,CAAC,CAAA;KAChC;IAED,cAAc,CAAC,EAAE,IAAqB;QACpCQ,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QACxCC,UAAqB,CAAC,IAAI,CAAC,CAAA;QAC3BV,aAAwB,CAAC,IAAI,CAAC,CAAA;QAC9B,cAAc,CAAC,IAAI,CAAC,CAAA;QACpBC,cAAyB,CAAC,IAAI,CAAC,CAAA;KAChC;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAI,CAACO,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACpC,OAAM;SACP;QACDL,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC/B,IAAM,KAAK,GAAGC,aAAwB,CAAC,IAAI,CAAC,CAAA;QAE5C,IAAI,IAAI,EAAE,KAAK,CAAA;QACf,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QACpD,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAC9B,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAA;SACrD;aAAM;YACL,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACxB,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,CAAA;SACpD;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAA;QACxB,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;QAClC,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;QAEtC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,YAAY,MAAM,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC,IAAI,CAAC,WAAW,KAAK,UAAU,MAAM,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;YAC9D,CAAC,CAAC,cAAc,EAAE,CAAA;SACnB;KACF;IAED,iBAAiB,CAAC,EAAE,IAAqB;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnBH,cAAyB,CAAC,IAAI,CAAC,CAAA;KAChC;IAEDI,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QAEV,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI;QAEhB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QAEjB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;CAED,GAAG,CAAA;;AC9FJ,CAAC;IAED,IAAM,IAAI,GAAG,OAAO,CAAA;IAOpB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAe,CAAA;KAC3D;IACD,mBAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAA;KAC9B;IAED,cAAc,CAAC,EAAE,IAAI;QACnB,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;QAC/C,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;KAChD;IAED,eAAe,CAAC,EAAE,IAAqB;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAACC,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACrDL,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YAC/BM,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;SACxC;KACF;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAI,CAACD,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACpC,OAAM;SACP;QACDL,WAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtBD,WAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;KAC1C;IAED,aAAa,CAAC,EAAE,IAAqB;QACnC,IAAI,CAACM,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACpC,OAAM;SACP;QACDC,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QAExC,IAAM,KAAK,GAAGF,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,KAAK,GAAGH,aAAwB,CAAC,IAAI,CAAC,CAAA;QAE5C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACtB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAI,EAAE,EAAE,EAAE,CAAA;QACV,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;YACd,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;SACf;aAAM;YACL,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;YACd,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;SACf;QAED,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE;YAC7B,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;SACvB;aAAM,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;YACtC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;SACvB;QAEDM,UAAqB,CAAC,IAAI,CAAC,CAAA;QAC3BR,WAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACzCF,aAAwB,CAAC,IAAI,CAAC,CAAA;KAC/B;IAEDK,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,GAAG;QAEf,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,GAAG;KACjB,CAAC,CAAA;CAED,GAAG,CAAA;;ACtFJ,CAAC;IAED,IAAM,IAAI,GAAG,OAAO,CAAA;IACpB,eAAe,CAAyB,EAAE,IAAqB;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC9C,CAAC,CAAC,cAAc,EAAE,CAAA;YAElB,IAAM,EAAE,GAAG,CAAC,CAAC,aAA2B,CAAA;YACxC,IAAM,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC1D,IAAM,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAE1DH,WAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAA;SACpE;KACF;IAEDG,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;CAED,GAAG,CAAA;;ACnBJ,CAAC;IAMD,IAAM,QAAQ,GAAG,+IAKhB,CAAA;IAED,qBAAkB,IAAqB;QACrC,OAAOC,cAAyB,CAAQ,IAAI,EAAE,IAAI,CAAC,CAAA;KACpD;IAED,IAAM,IAAI,GAAG,UAAU,CAAA;IACvB,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAChB,KAAK,CAAC,KAAK,GAAGjB,GAAO,CAAC,QAAQ,CAAC,CAAA;YAC/B,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SAClC;QAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;aAC3C,IAAI,CAAC,IAAI,CAAC;aACV,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC;YAC/C,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;KAC5B;IACD,oBAAoB,CAAC,EAAE,IAAqB;QAC1C,IAAM,KAAK,GAAGiB,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;aAC3C,IAAI,CAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,MAAG,CAAC;aACjC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC;YAC/C,KAAK,EAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,MAAG;SACnC,CAAC,CAAA;KACH;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtCjB,GAAO,CAACiB,WAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;KACxC;IAED,mBAAmB,CAAC,EAAE,IAAqB;QACzCjB,GAAO,CAACiB,WAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAA;KACvC;IAEDF,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,SAAS;KACrB,CAAC,CAAA;CAED,GAAG,CAAA;;AC5DJ,CAAC;IAID,IAAM,IAAI,GAAG,KAAK,CAAA;IAElB,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAClE;KACF;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGV,SAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAE3B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YAAE,OAAM;SAAE;QACjC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAEnC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YAClB,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA;YACjD,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;YAClD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACtH,OAAM;SACP;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,CAAA;QAC5D,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,aAAa,CAAA;QAC9D,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;QACjD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAA;QACrD,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAAA;QACvD,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACb,kBAAkB,EAAM,UAAQ,GAAG,OAAI;gBACvC,qBAAqB,EAAM,IAAI,WAAM,GAAG,OAAI;gBAC5C,mBAAmB,EAAK,WAAW;;gBAEnC,yBAAyB,EAAM,KAAK,WAAM,MAAM,OAAI;gBACpD,sBAAsB,EAAS,KAAK,WAAM,MAAM,OAAI;gBACpD,oBAAoB,EAAW,KAAK,WAAM,MAAM,OAAI;gBACpD,iBAAiB,EAAc,KAAK,WAAM,MAAM,OAAI;aACrD,CAAC,CAAA;YACF,OAAM;SACP;QAED,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACrB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;YAClB,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAI;YACV,WAAW,EAAG,SAAS;YACvB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CAAA;KACH;IAEDU,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,QAAA;QACN,MAAM,QAAA;KACP,CAAC,CAAA;CAED,GAAG,CAAA;;ACpEJ,CAAC;IAED,IAAM,IAAI,GAAG,MAAM,CAAA;IAsBnB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAc,CAAA;KAC1D;IACD,mBAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAA;KAC9B;IAED,cAAc,CAAC,EAAE,IAAqB;QACpC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAE5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAIjB,GAAO,CAAC,sCAAsC,CAAC,CAAA;QAC9E,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACjE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAA;QAC/B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAClE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAChF,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;QACtB,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QAEnD,IAAM,KAAK,GAAGF,YAAkB,CAAC,IAAI,CAAC,CAAA;QACtC,IAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAGH,eAAqB,CAAC,IAAI,CAAC,GAAGC,YAAkB,CAAC,IAAI,CAAC,CAAA;QACtF,IAAM,GAAG,GAAGC,cAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAE7D,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA;QACrD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QACvD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KACjC;IAED,iBAAiB,CAAC,EAAE,IAAI;QACtB,IAAM,KAAK,GAAGoB,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,CAAA;SACX;KACF;IAED,oBAAoB,IAAqB;QACvC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,GAAG,GAAGR,gBAA2B,CAAC,IAAI,CAAC,CAAA;;QAG7C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;;QAE5C,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;QAE9C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ;YACtC,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,CAAC;SACT,CAAC,CAAA;KACH;IAED,IAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,yBAAyB,MAAM;QAC7B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;gBACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aACjB;SACF;QACD,KAAmB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ;YAAtB,IAAM,IAAI,iBAAA;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;SACvB;KACF;IAED,cAAc,IAAqB;QACjC,IAAM,KAAK,GAAGQ,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,cAAQ,IAAI,CAAC,IAAI,CAAC,CAAA,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KACzE;IAED,kBAAkB,IAAqB;QACrC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;KACrB;IAED,sBAAsB,MAAM,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACtD,IAAM,IAAI,GAAG,UAAQ,MAAM,QAAK,CAAA;QAChC,MAAM,CAAC,GAAG,CAAC;YACT,gBAAgB,EAAE,IAAI;YACtB,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;KACH;IAED,oBAAoB,IAAqB,EAAE,KAAgB;QACzD,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA;QAClD,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;;KAEpD;IAED,mBAAmB,IAAqB,EAAE,KAAgB,EAAE,IAAc;QACxE,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YAAE,OAAM;SAAE;QAE/B,IAAM,KAAK,GAAGZ,SAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YAAE,OAAM;SAAE;QAEjC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE;YAAE,OAAM;SAAE;QAExC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA;QAClD,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QACnD,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;QACtC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KACxH;IAED,cAAc,IAAqB;QACjC,IAAM,KAAK,GAAGY,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAClB,OAAM;SACP;QAED,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACvB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACtD,KAAmB,UAAW,EAAX,KAAA,KAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW;YAAzB,IAAM,IAAI,SAAA;YACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1C,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YAC5B,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;SACzB;QACD,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;SAC9B;QACD,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,CAAA;SACX;KACF;IAEDF,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QAEV,MAAM,EAAE,IAAI;QACZ,cAAc,EAAE,OAAO;KACxB,CAAC,CAAA;CAED,GAAG,CAAA;;AC3KJ,CAAC;IAED,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;IACpB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;IAEpB,IAAM,IAAI,GAAG,MAAM,CAAA;IA0BnB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAc,CAAA;KAC1D;IAED,mBAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAA;KAC9B;IAED,cAAc,CAAC,EAAE,IAAqB;QACpC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/D,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACvE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QAChE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAC7E,KAAK,CAAC,OAAO,GAAG,EAAE,CAAA;QAClB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAA;KACjB;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAIC,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACnC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,WAAW,CAAC,IAAI,CAAC,CAAA;SAClB;KACF;IAED,aAAa,CAAC,EAAE,IAAqB;QACnC,IAAM,KAAK,GAAGD,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QAE7B,IAAI,IAAI,CAAA;QACR,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAqB,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO;YAAvB,IAAM,MAAM,gBAAA;YACf,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,MAAM,CAAA;gBACb,SAAQ;aACT;YAED,IAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YAClC,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;gBACxB,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,CAAA;gBACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;aACtB;YAED,MAAM,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACnC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YAChC,IAAI,IAAI,EAAE,CAAA;YACV,IAAI,GAAG,MAAM,CAAA;SACd;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,IAAI,EAAE;YACT,OAAM;SACP;QAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;QACf,KAAK,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;QAEhD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChB,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;QAElD,IAAI,CAAC,IAAI,CAAC,CAAA;KACX;IAED,qBAAqB,IAAqB;QACxC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;;QAE5B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAA;;QAEF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE;YAC9C,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;SACtB;KACF;IAED,kBAAkB,IAAqB;QACrC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAClC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;SACrB;KACF;IAED,cAAc,IAAqB;QACjC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,cAAQ,IAAI,CAAC,IAAI,CAAC,CAAA,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;KAC1E;IAED,cAAc,IAAqB;QACjC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;QAC7B,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAA;QAC/B,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAA;QAC/B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAA;QAChC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACpD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAEjDL,WAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEzC,IAAIM,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YACnC,QAAQ,CAAC,IAAI,CAAC,CAAA;SACf;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE;YAChF,IAAI,CAAC,IAAI,CAAC,CAAA;SACX;aAAM;YACL,QAAQ,CAAC,IAAI,CAAC,CAAA;SACf;KACF;IAEDH,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QAEV,MAAM,EAAE,IAAI;QAEZ,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,GAAG;QAEf,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,GAAG;KACjB,CAAC,CAAA;CAED,GAAG,CAAA;;AC9JJ,CAAC;IAED,IAAM,IAAI,GAAG,SAAS,CAAA;IAatB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAiB,CAAA;KAC7D;IAED,mBAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAA;KAC9B;IAED,cAAc,CAAC,EAAE,IAAqB;QACpC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAE5B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;QACjB,KAAK,CAAC,OAAO,GAAG,EAAE,CAAA;QAClB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAA;QAClD,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAA;QACvD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAEjB,GAAO,CAAC,aAAa,CAAC,CAAC,CAAA;QAErE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEnE,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAoB,UAAW,EAAX,KAAA,IAAI,CAAC,MAAM,EAAX,cAAW,EAAX,IAAW;YAA1B,IAAM,KAAK,SAAA;YACd,IAAMsB,cAAW,GAAGC,WAAiB,CAAC,KAAK,CAAC,CAAA;YAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAGD,cAAW,CAAC,MAAM,CAAA;YAE9C,IAAM,GAAG,GAAGtB,GAAO,CAAC,KAAK,CAAC,CAAA;YAC1B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAA;YAClE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAA;YAClB,GAAG,CAAC,GAAG,CAAC;gBACN,WAAW,EAAG,SAAS;gBACvB,OAAO,EAAG,KAAK,CAAC,OAAO;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAA;SACH;QACD,IAAM,SAAS,GAAGF,YAAkB,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAGH,eAAqB,CAAC,IAAI,CAAC,GAAGC,YAAkB,CAAC,IAAI,CAAC,CAAA;QAC1F,IAAM,MAAM,GAAGC,cAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QACxE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9E,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;KAC9E;IAED,cAAc,CAAC,EAAE,IAAqB;QACpC,IAAM,KAAK,GAAGoB,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,KAAK,GAAGH,aAAwB,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAM,UAAU,GAAGI,EAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAClD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;YAC7C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;YAEtG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;YACzF,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACxB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;YAC7E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;SAC3D;aAAM,IAAI,UAAU,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;YAC9C,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;YACnB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;YACrB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;SACnF;KACF;IAEDH,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb,CAAC,CAAA;CAED,GAAG,CAAA;;ACnFJ,CAAC;IAED,IAAM,IAAI,GAAG,UAAU,CAAA;IAMvB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAkB,CAAA;KAC9D;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,aAAa,CAAA;YAC9D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;SAClC;aAAM;YACL,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,CAAA;YAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAA;SACnC;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAC3D,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACb,kBAAkB,EAAU,SAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAG;YAC5D,mBAAmB,EAAS,aAAa;;YAEzC,yBAAyB,EAAM,KAAK,WAAM,MAAM,OAAI;YACpD,sBAAsB,EAAS,KAAK,WAAM,MAAM,OAAI;YACpD,oBAAoB,EAAW,KAAK,WAAM,MAAM,OAAI;YACpD,iBAAiB,EAAc,KAAK,WAAM,MAAM,OAAI;SACrD,CAAC,CAAA;KACH;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAM,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,CAAA;QACpD,IAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAErB,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACvC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAClD,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,qBAAqB,EAAM,IAAI,WAAM,GAAG,OAAI,EAAE,CAAC,CAAA;KACjE;IAEDF,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;CAED,GAAG,CAAA;;ACxDJ,CAAC;IAED,IAAM,IAAI,GAAG,MAAM,CAAA;IAkBnB,qBAAkB,IAAI;QACpB,OAAOC,cAAyB,CAAC,IAAI,EAAE,IAAI,CAAc,CAAA;KAC1D;IACD,mBAAmB,IAAI,EAAE,IAAI,EAAE,QAAQ;QACrC,OAAO,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA;KAC5C;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGC,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACzD,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;QACvD,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QACtD,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QACtD,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAA;QACnE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAIjB,GAAO,CAAC,gCAAgC,CAAC,CAAA;QACtE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YACd,KAAK,EAAM,MAAM;YACjB,MAAM,EAAK,MAAM;YACjB,GAAG,EAAQ,CAAC;YACZ,IAAI,EAAO,CAAC;YACZ,MAAM,EAAK,CAAC;YACZ,KAAK,EAAM,CAAC;YACZ,QAAQ,EAAG,UAAU;SACtB,CAAC;aACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;aACrB,IAAI,EAAE,CAAA;KACR;IAED,mBAAmB,CAAC,EAAE,IAAqB;QACzC,IAAM,KAAK,GAAGiB,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACpB,OAAO,KAAK,CAAC,KAAK,CAAA;SACnB;KACF;IAED,wBAAqB,CAAC,EAAE,IAAqB;QAC3C,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC/B,OAAM;SACP;QAED,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,IAAI,KAAK,CAAC,QAAQ,EAAE;;;YAGlBE,IAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;SACzC;;QAGD,IAAM,MAAM,GAAGK,iBAAuB,CAAC,CAAC,CAAC,CAAA;;QAEzC,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAC/B,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QAEhC,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;YACtB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;YACd,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;SACf;QACD,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;YAC1B,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAA;YAClB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAA;SACnB;;QAGD,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;;QAGd,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACzB,EAAE,GAAG,CAAC,EAAE,CAAA;YACR,EAAE,GAAG,CAAC,EAAE,CAAA;SACT;;QAGD,KAAK,CAAC,QAAQ,GAAGC,KAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACvD,KAAK,CAAC,QAAQ,GAAGA,KAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEvDb,WAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;KACpD;IAED,iBAAiB,CAAC,EAAE,IAAqB;QACvC,IAAM,KAAK,GAAGK,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACnB,OAAM;SACP;QAED,CAAC,CAAC,cAAc,EAAE,CAAA;;QAGlB,IAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACtC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;;YAEpB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;YAC3B,OAAM;SACP;;QAGD,IAAM,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAC7C,IAAI,SAAS,GAAG,KAAK,CAAC,eAAe,EAAE;;YAErC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;YAC3B,OAAM;SACP;;QAGD,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;QAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;YACpBS,cAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;SACrB;KACF;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGT,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC9BS,cAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;SACrB;KACF;IAED,gBAAgB,CAAC,EAAE,IAAqB;QACtC,IAAM,KAAK,GAAGT,WAAQ,CAAC,IAAI,CAAC,CAAA;;QAG5B,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;;QAElD,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClC,IAAM,IAAI,GAAGZ,SAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;;QAG9E,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAA;QACtB,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAA;;QAEtB,IAAI,CAAC,IAAI,IAAI,EAAE;YACb,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAA;YACxB,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAA;SACzB;QAED,IAAI,MAAM,EAAE;;YAEV,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YACvB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;;YAGvB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBACd,mBAAmB,EAAK,WAAW;gBACnC,kBAAkB,EAAM,UAAQ,MAAM,OAAI;gBAC1C,qBAAqB,EAAM,CAAC,UAAK,CAAC,MAAG;aACtC,CAAC,CAAA;SACH;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YACpC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACxB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjC,IAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAClF,IAAM,KAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YACnF,IAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAA;YAChC,IAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAA;YAClC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBACd,kBAAkB,EAAM,UAAQ,GAAG,OAAI;gBACvC,qBAAqB,EAAM,IAAI,WAAM,KAAG,OAAI;gBAC5C,mBAAmB,EAAK,WAAW;;gBAEnC,yBAAyB,EAAM,KAAK,WAAM,MAAM,OAAI;gBACpD,sBAAsB,EAAS,KAAK,WAAM,MAAM,OAAI;gBACpD,oBAAoB,EAAW,KAAK,WAAM,MAAM,OAAI;gBACpD,iBAAiB,EAAc,KAAK,WAAM,MAAM,OAAI;aACrD,CAAC,CAAA;SACH;KACF;IAED,oBAAoB,IAAI;QACtB,IAAM,KAAK,GAAGY,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;SACvE;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,CAAA;SACf;aAAM;YACL,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,OAAO,IAAI,CAAA;SACZ;QACD,OAAO,KAAK,CAAA;KACb;IAED,kBAAkB,IAAI;QACpB,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;KACpB;IAED,kBAAkB,IAAI;QACpB,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;KACrB;IAED,eAAe,CAAyB,EAAE,IAAqB;QAC7D,IAAM,KAAK,GAAGA,WAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YAEnC,IAAM,EAAE,GAAG,CAAC,CAAC,aAA2B,CAAA;YAExC,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACxD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACtC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACxB;YAED,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;gBAC3C,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;aACf;YACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;gBAC5C,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;aACf;SACF;KACF;IAEDF,cAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI;QAEV,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;QAEZ,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;IAEFP,SAAoB,CAAC;QACnB,UAAU,EAAE,cAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAE;KACjD,CAAC,CAAA;CAED,GAAG,CAAA;;ICjQS,KAAK,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}