{"version":3,"file":"ColorizedImage.js","names":["defaultConfig","fromColour","toColour","colorizeThemes","from","to","filtersSvgContainerId","getFilterId","colorsPart","replace","toLowerCase","SVG_NS","RGB_INDICES","LUMINANCE_COEFFS","parseHexColor","str","start","len","length","Error","step","maxValue","map","i","parseInt","slice","getColorizeMatrix","matrix","range","push","lc","createColorizeFilterElement","elementId","fromStr","toStr","matrixValues","x","toPrecision","join","colorMatrixElement","document","createElementNS","setAttribute","filterElement","appendChild","getColorizeFilter","filterId","getElementById","svgElement","body","ColorizedImage","target","config","querySelector","console","error","HTMLElement","_","defaults","_fromColour","dataset","colorizeFrom","_toColour","colorizeTo","_theme","colorizeTheme","theme","key","first","shuffle","keys","init","originalFilterStyle","style","filter","indexOf","srcMap","Map","applyToElements","selector","a","$","each","ColorizedBackgroundImage","isCanvasSupported","$target","eq","_canvas","createElement","_ctx","getContext","_img","_width","width","_height","height","data","src","css","srcMetaKey","trim","has","set","Promise","resolve","reject","on","then","onImgReady","bind","get","onPixelsReady","drawImage","worker","Parallel","getImageData","evalPath","env","origin","location","protocol","host","spawn","pixels","importScripts","global","e","window","l","p","scale","chroma","rgb","imageData","putImageData","toDataURL","elem"],"sources":["components/ColorizedImage.js"],"sourcesContent":["import $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport Parallel from 'parallel';\r\n\r\n\r\nconst defaultConfig = {\r\n fromColour: \"#000\",\r\n toColour: \"#fff\"\r\n};\r\n\r\nconst colorizeThemes = {\r\n 'article-artemis-blue': {\r\n from: '#7AA9D4',\r\n to: '#fdfaef'\r\n },\r\n 'article-oxford-blue': {\r\n from: '#00112e',\r\n to: '#fdfaef'\r\n },\r\n 'article-bronze': {\r\n from: '#a27f5c',\r\n to: '#fdfaef'\r\n },\r\n 'article-bronze-patina': {\r\n from: '#9CC3C5',\r\n to:'#fdfaef'\r\n },\r\n 'article-forest': {\r\n from: '#687646',\r\n to: '#fdfaef'\r\n },\r\n 'article-rust': {\r\n from: '#d67c40',\r\n to: '#fdfaef'\r\n },\r\n 'article-violet': {\r\n from: '#756286',\r\n to:'#fdfaef'\r\n },\r\n 'article-cream': {\r\n from: '#fdfaef',\r\n to: '#ffffff'\r\n },\r\n 'article-powder-grey': {\r\n from: '#f2f2f2',\r\n to: '#ffffff'\r\n },\r\n};\r\n\r\nconst filtersSvgContainerId = 'colorizeFilters';\r\n\r\nconst getFilterId = (from, to) => {\r\n const colorsPart = `${from}_${to}`.replace(/#/g, '').toLowerCase();\r\n return `${filtersSvgContainerId}_${colorsPart}`;\r\n}\r\n\r\nconst SVG_NS = 'http://www.w3.org/2000/svg';\r\n\r\nconst RGB_INDICES = [0, 1, 2];\r\nconst LUMINANCE_COEFFS = [0.299, 0.587, 0.114];\r\n\r\nfunction parseHexColor(str) {\r\n const start = str[0] === '#' ? 1 : 0;\r\n const len = str.length - start;\r\n if (len !== 3 && len !== 6) throw new Error(`Color ${str} has invalid length`);\r\n const step = len / 3;\r\n const maxValue = ((1 << 4 * step) - 1);\r\n return RGB_INDICES.map((i) => parseInt(str.slice(i * step + start, (i + 1) * step + start), 16) / maxValue);\r\n}\r\n\r\nfunction getColorizeMatrix(from, to) {\r\n const matrix = [];\r\n // RGB out = Interpolate between `from` and `to` using luminance as distance [0, 1]\r\n for (const i in RGB_INDICES) {\r\n const range = to[i] - from[i];\r\n matrix.push(...LUMINANCE_COEFFS.map((lc) => lc * range), /* Alpha in */ 0, /* Offset */ from[i]);\r\n }\r\n // Alpha out = Alpha in\r\n matrix.push(0, 0, 0, 1, 0); \r\n return matrix;\r\n}\r\n\r\nfunction createColorizeFilterElement(elementId, fromStr, toStr) {\r\n const from = parseHexColor(fromStr);\r\n const to = parseHexColor(toStr);\r\n const matrixValues = getColorizeMatrix(from, to).map(x => x.toPrecision(3)).join(' ');\r\n const colorMatrixElement = document.createElementNS(SVG_NS, 'feColorMatrix');\r\n colorMatrixElement.setAttribute('in', 'SourceGraphic');\r\n colorMatrixElement.setAttribute('type', 'matrix');\r\n colorMatrixElement.setAttribute('values', matrixValues);\r\n colorMatrixElement.setAttribute('color-interpolation-filters', 'sRGB');\r\n const filterElement = document.createElementNS(SVG_NS, 'filter');\r\n filterElement.setAttribute('id', elementId);\r\n filterElement.appendChild(colorMatrixElement);\r\n return filterElement;\r\n}\r\n\r\nfunction getColorizeFilter(from, to) {\r\n const filterId = getFilterId(from, to);\r\n \r\n if (!document.getElementById(filterId)) {\r\n let svgElement = document.getElementById(filtersSvgContainerId);\r\n if (!svgElement) {\r\n svgElement = document.createElementNS(SVG_NS, 'svg');\r\n svgElement.setAttribute('id', filtersSvgContainerId);\r\n svgElement.setAttribute('width', '0');\r\n svgElement.setAttribute('height', '0');\r\n document.body.appendChild(svgElement);\r\n }\r\n svgElement.appendChild(createColorizeFilterElement(filterId, from, to));\r\n }\r\n\r\n return filterId;\r\n}\r\n\r\nexport class ColorizedImage {\r\n\r\n constructor(target, config = {}) {\r\n\r\n /**\r\n *\r\n * @type {string | HTMLElement}\r\n */\r\n if (typeof target === 'string') {\r\n this.target = document.querySelector(target);\r\n if (!this.target) {\r\n console.error(`ColorizedImage: target not found`, target);\r\n return; \r\n }\r\n } else {\r\n this.target = target;\r\n if (!(this.target instanceof HTMLElement)) {\r\n console.error(`ColorizedImage: target is not a HTMLElement`, target);\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * @type {Object}\r\n */\r\n this.config = _.defaults(config, defaultConfig);\r\n\r\n /**\r\n * @type {string}\r\n */\r\n this._fromColour = this.target.dataset.colorizeFrom || this.config.fromColour;\r\n\r\n /**\r\n * @type {string}\r\n */\r\n this._toColour = this.target.dataset.colorizeTo || this.config.toColour;\r\n\r\n this._theme = this.target.dataset.colorizeTheme || this.config.theme;\r\n if(this._theme){\r\n if(colorizeThemes[this._theme]){\r\n this._fromColour = colorizeThemes[this._theme].from;\r\n this._toColour = colorizeThemes[this._theme].to;\r\n } else {\r\n //Theme specified, but not found, so lets pick one at random\r\n let key = _.first(_.shuffle(_.keys(colorizeThemes)))\r\n this._fromColour = colorizeThemes[key].from;\r\n this._toColour = colorizeThemes[key].to;\r\n }\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n /**\r\n *\r\n */\r\n init() {\r\n const filterId = getColorizeFilter(this._fromColour, this._toColour);\r\n const originalFilterStyle = this.target.style.filter;\r\n \r\n if (originalFilterStyle.indexOf(filterId) === -1) {\r\n this.target.style.filter = `${originalFilterStyle} url(#${filterId})`;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @type {Map}\r\n */\r\nColorizedImage.srcMap = new Map();\r\n\r\n/**\r\n *\r\n * @param selector\r\n * @returns {ColorizedImage[]}\r\n */\r\nColorizedImage.applyToElements = function(selector, config){\r\n var a = [];\r\n $(selector).each(function(){\r\n a.push(new ColorizedImage(this, config));\r\n });\r\n\r\n return a;\r\n};\r\n\r\n\r\n/*\r\n |--------------------------------------------------------------------------\r\n | Background image\r\n |--------------------------------------------------------------------------\r\n |\r\n */\r\nexport class ColorizedBackgroundImage {\r\n\r\n constructor(target, config = {}) {\r\n\r\n if(!this.isCanvasSupported()){\r\n return;\r\n }\r\n\r\n /**\r\n *\r\n * @type {jQuery}\r\n */\r\n this.$target = $(target).eq(0); //Ensure only one element\r\n\r\n /**\r\n * @type {Object}\r\n */\r\n this.config = _.defaults(config, defaultConfig);\r\n\r\n /**\r\n *\r\n * @type {Element}\r\n * @private\r\n */\r\n this._canvas = document.createElement('canvas');\r\n\r\n /**\r\n *\r\n * @type {*|CanvasRenderingContext2D}\r\n * @private\r\n */\r\n this._ctx = this._canvas.getContext('2d');\r\n\r\n /**\r\n *\r\n * @type {Element}\r\n * @private\r\n */\r\n this._img = document.createElement('img');\r\n\r\n /**\r\n * @type {number}\r\n */\r\n this._width = this.$target.width();\r\n\r\n /**\r\n * @type {number}\r\n */\r\n this._height = this.$target.height();\r\n\r\n /**\r\n * @type {string}\r\n */\r\n this._fromColour = (this.$target.data('colorize-from') || this.config.fromColour);\r\n\r\n /**\r\n * @type {string}\r\n */\r\n this._toColour = (this.$target.data('colorize-to') || this.config.toColour);\r\n\r\n this._theme = (this.$target.data('colorize-theme') || this.config.theme);\r\n if(this._theme){\r\n if(colorizeThemes[this._theme]){\r\n this._fromColour = colorizeThemes[this._theme].from;\r\n this._toColour = colorizeThemes[this._theme].to;\r\n } else {\r\n //Theme specified, but not found, so lets pick one at random\r\n let key = _.first(_.shuffle(_.keys(colorizeThemes)));\r\n this._fromColour = colorizeThemes[key].from;\r\n this._toColour = colorizeThemes[key].to;\r\n }\r\n }\r\n\r\n\r\n this.init();\r\n }\r\n\r\n /**\r\n *\r\n */\r\n init() {\r\n var src = this.$target.css('background-image').replace(/^url\\([\"']?/, '').replace(/[\"']?\\)$/, '');\r\n var srcMetaKey = src + this._width + this._height + this._fromColour.trim() + this._toColour.trim();\r\n\r\n // Is another element already colorizing this image? If so it will store a promise in the meta element. If\r\n // it doesnt exist, kick off a colorise process and create the promise.\r\n if (!ColorizedImage.srcMap.has(srcMetaKey)) {\r\n ColorizedImage.srcMap.set(srcMetaKey, new Promise((resolve, reject) => {\r\n $(this._img).on('load', resolve);\r\n }).then(this.onImgReady.bind(this)));\r\n\r\n this._img.src = src;\r\n }\r\n\r\n ColorizedImage.srcMap.get(srcMetaKey).then(this.onPixelsReady.bind(this));\r\n\r\n this.$target.css('background-image', 'none');\r\n }\r\n\r\n /**\r\n *\r\n * @returns {Promise}\r\n */\r\n onImgReady() {\r\n this._canvas.width = this._img.width;\r\n this._canvas.height = this._img.height;\r\n\r\n this._ctx.drawImage(this._img, 0, 0, this._canvas.width, this._canvas.height);\r\n\r\n var worker = new Parallel(this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height), {\r\n evalPath: '/Assets/built/libs/paralleljs/lib/eval.js',\r\n env: {\r\n origin: location.origin || (location.protocol + \"//\" + location.host ),\r\n from: this._fromColour,\r\n to: this._toColour\r\n }\r\n });\r\n return new Promise((resolve, reject) => {\r\n //IE9 needs this since web workers arent supported, hence no global object.\r\n var env = {\r\n origin: location.origin || (location.protocol + \"//\" + location.host ),\r\n from: this._fromColour,\r\n to: this._toColour\r\n };\r\n\r\n worker.spawn(function (pixels) {\r\n\r\n //Import the chroma.js when in a worker\r\n try{\r\n // When import scripts from inside a worker created as an inline script (like here using Parallel.js)\r\n // you must use a FULL URL path since this worker is created on the fly using the blob: protocol\r\n // and relative URLs will be relative to the blob: path.\r\n // See here for more info: http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers\r\n importScripts(global.env.origin + '/Assets/built/libs/chroma-js/chroma.min.js');\r\n } catch(e) {\r\n //Fallback to non web worker, hence the chroma.js is already loaded\r\n window.global = {\r\n env: env\r\n }\r\n }\r\n\r\n var l, p, scale = chroma.scale([global.env.from, global.env.to]);\r\n\r\n for (var i = 0; i < pixels.data.length; i += 4) {\r\n l = 0.299 * pixels.data[i] + 0.587 * pixels.data[i + 1] + 0.114 * pixels.data[i + 2];\r\n p = scale(l / 255).rgb();\r\n pixels.data[i] = p[0];\r\n pixels.data[i + 1] = p[1];\r\n pixels.data[i + 2] = p[2];\r\n pixels.data[i + 3] = pixels.data[i+3];\r\n }\r\n return pixels;\r\n }).then(resolve);\r\n })\r\n }\r\n\r\n /**\r\n *\r\n * @param imageData\r\n */\r\n onPixelsReady(imageData) {\r\n //Redundant in many cases, but when processing the same image in multiple elements on a page, the\r\n // promise flow above means that the canvas image size will not be set yet.\r\n this._canvas.width = imageData.width;\r\n this._canvas.height = imageData.height;\r\n this._ctx.putImageData(imageData, 0, 0);\r\n this.$target.css('background-image', `url(${this._canvas.toDataURL()})`);\r\n }\r\n\r\n /**\r\n *\r\n * @returns {boolean}\r\n */\r\n isCanvasSupported(){\r\n var elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('2d'));\r\n }\r\n\r\n}\r\n\r\n/**\r\n *\r\n * @type {Map}\r\n */\r\nColorizedBackgroundImage.srcMap = new Map();\r\n\r\n/**\r\n *\r\n * @param selector\r\n * @param config\r\n * @returns {ColorizedBackgroundImage[]}\r\n */\r\nColorizedBackgroundImage.applyToElements = function(selector, config){\r\n var a = [];\r\n $(selector).each(function(){\r\n a.push(new ColorizedBackgroundImage(this, config));\r\n });\r\n\r\n return a;\r\n};\r\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGhC,IAAMA,aAAa,GAAG;EAClBC,UAAU,EAAE,MAAM;EAClBC,QAAQ,EAAE;AACd,CAAC;AAED,IAAMC,cAAc,GAAG;EACnB,sBAAsB,EAAE;IACpBC,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,qBAAqB,EAAE;IACnBD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,gBAAgB,EAAE;IACdD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,uBAAuB,EAAE;IACrBD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAC;EACP,CAAC;EACD,gBAAgB,EAAE;IACdD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,cAAc,EAAE;IACZD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,gBAAgB,EAAE;IACdD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAC;EACP,CAAC;EACD,eAAe,EAAE;IACbD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR,CAAC;EACD,qBAAqB,EAAE;IACnBD,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE;EACR;AACJ,CAAC;AAED,IAAMC,qBAAqB,GAAG,iBAAiB;AAE/C,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIH,IAAI,EAAEC,EAAE,EAAK;EAC9B,IAAMG,UAAU,GAAG,UAAGJ,IAAI,cAAIC,EAAE,EAAGI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAACC,WAAW,EAAE;EAClE,iBAAUJ,qBAAqB,cAAIE,UAAU;AACjD,CAAC;AAED,IAAMG,MAAM,GAAG,4BAA4B;AAE3C,IAAMC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,IAAMC,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAE9C,SAASC,aAAa,CAACC,GAAG,EAAE;EACxB,IAAMC,KAAK,GAAGD,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;EACpC,IAAME,GAAG,GAAGF,GAAG,CAACG,MAAM,GAAGF,KAAK;EAC9B,IAAIC,GAAG,KAAK,CAAC,IAAIA,GAAG,KAAK,CAAC,EAAE,MAAM,IAAIE,KAAK,iBAAUJ,GAAG,yBAAsB;EAC9E,IAAMK,IAAI,GAAGH,GAAG,GAAG,CAAC;EACpB,IAAMI,QAAQ,GAAI,CAAC,CAAC,IAAI,CAAC,GAAGD,IAAI,IAAI,CAAE;EACtC,OAAOR,WAAW,CAACU,GAAG,CAAC,UAACC,CAAC;IAAA,OAAKC,QAAQ,CAACT,GAAG,CAACU,KAAK,CAACF,CAAC,GAAGH,IAAI,GAAGJ,KAAK,EAAE,CAACO,CAAC,GAAG,CAAC,IAAIH,IAAI,GAAGJ,KAAK,CAAC,EAAE,EAAE,CAAC,GAAGK,QAAQ;EAAA,EAAC;AAC/G;AAEA,SAASK,iBAAiB,CAACtB,IAAI,EAAEC,EAAE,EAAE;EACjC,IAAMsB,MAAM,GAAG,EAAE;EACjB;EAAA,6BAC6B;IACzB,IAAMC,KAAK,GAAGvB,EAAE,CAACkB,CAAC,CAAC,GAAGnB,IAAI,CAACmB,CAAC,CAAC;IAC7BI,MAAM,CAACE,IAAI,OAAXF,MAAM,qBAASd,gBAAgB,CAACS,GAAG,CAAC,UAACQ,EAAE;MAAA,OAAKA,EAAE,GAAGF,KAAK;IAAA,EAAC,UAAE,cAAe,CAAC,EAAE,YAAaxB,IAAI,CAACmB,CAAC,CAAC,GAAC;EACpG,CAAC;EAHD,KAAK,IAAMA,CAAC,IAAIX,WAAW;IAAA;EAAA;EAI3B;EACAe,MAAM,CAACE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC1B,OAAOF,MAAM;AACjB;AAEA,SAASI,2BAA2B,CAACC,SAAS,EAAEC,OAAO,EAAEC,KAAK,EAAE;EAC5D,IAAM9B,IAAI,GAAGU,aAAa,CAACmB,OAAO,CAAC;EACnC,IAAM5B,EAAE,GAAGS,aAAa,CAACoB,KAAK,CAAC;EAC/B,IAAMC,YAAY,GAAGT,iBAAiB,CAACtB,IAAI,EAAEC,EAAE,CAAC,CAACiB,GAAG,CAAC,UAAAc,CAAC;IAAA,OAAIA,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;EAAA,EAAC,CAACC,IAAI,CAAC,GAAG,CAAC;EACrF,IAAMC,kBAAkB,GAAGC,QAAQ,CAACC,eAAe,CAAC9B,MAAM,EAAE,eAAe,CAAC;EAC5E4B,kBAAkB,CAACG,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC;EACtDH,kBAAkB,CAACG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;EACjDH,kBAAkB,CAACG,YAAY,CAAC,QAAQ,EAAEP,YAAY,CAAC;EACvDI,kBAAkB,CAACG,YAAY,CAAC,6BAA6B,EAAE,MAAM,CAAC;EACtE,IAAMC,aAAa,GAAGH,QAAQ,CAACC,eAAe,CAAC9B,MAAM,EAAE,QAAQ,CAAC;EAChEgC,aAAa,CAACD,YAAY,CAAC,IAAI,EAAEV,SAAS,CAAC;EAC3CW,aAAa,CAACC,WAAW,CAACL,kBAAkB,CAAC;EAC7C,OAAOI,aAAa;AACxB;AAEA,SAASE,iBAAiB,CAACzC,IAAI,EAAEC,EAAE,EAAE;EACjC,IAAMyC,QAAQ,GAAGvC,WAAW,CAACH,IAAI,EAAEC,EAAE,CAAC;EAEtC,IAAI,CAACmC,QAAQ,CAACO,cAAc,CAACD,QAAQ,CAAC,EAAE;IACpC,IAAIE,UAAU,GAAGR,QAAQ,CAACO,cAAc,CAACzC,qBAAqB,CAAC;IAC/D,IAAI,CAAC0C,UAAU,EAAE;MACbA,UAAU,GAAGR,QAAQ,CAACC,eAAe,CAAC9B,MAAM,EAAE,KAAK,CAAC;MACpDqC,UAAU,CAACN,YAAY,CAAC,IAAI,EAAEpC,qBAAqB,CAAC;MACpD0C,UAAU,CAACN,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;MACrCM,UAAU,CAACN,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;MACtCF,QAAQ,CAACS,IAAI,CAACL,WAAW,CAACI,UAAU,CAAC;IACzC;IACAA,UAAU,CAACJ,WAAW,CAACb,2BAA2B,CAACe,QAAQ,EAAE1C,IAAI,EAAEC,EAAE,CAAC,CAAC;EAC3E;EAEA,OAAOyC,QAAQ;AACnB;AAAC,IAEYI,cAAc;EAEvB,wBAAYC,MAAM,EAAe;IAAA,IAAbC,MAAM,uEAAG,CAAC,CAAC;IAAA;IAE3B;AACR;AACA;AACA;IACQ,IAAI,OAAOD,MAAM,KAAK,QAAQ,EAAE;MAC5B,IAAI,CAACA,MAAM,GAAGX,QAAQ,CAACa,aAAa,CAACF,MAAM,CAAC;MAC5C,IAAI,CAAC,IAAI,CAACA,MAAM,EAAE;QACdG,OAAO,CAACC,KAAK,qCAAqCJ,MAAM,CAAC;QACzD;MACJ;IACJ,CAAC,MAAM;MACH,IAAI,CAACA,MAAM,GAAGA,MAAM;MACpB,IAAI,EAAE,IAAI,CAACA,MAAM,YAAYK,WAAW,CAAC,EAAE;QACvCF,OAAO,CAACC,KAAK,gDAAgDJ,MAAM,CAAC;QACpE;MACJ;IACJ;;IAEA;AACR;AACA;IACQ,IAAI,CAACC,MAAM,GAAGK,kBAAC,CAACC,QAAQ,CAACN,MAAM,EAAEpD,aAAa,CAAC;;IAE/C;AACR;AACA;IACQ,IAAI,CAAC2D,WAAW,GAAG,IAAI,CAACR,MAAM,CAACS,OAAO,CAACC,YAAY,IAAI,IAAI,CAACT,MAAM,CAACnD,UAAU;;IAE7E;AACR;AACA;IACQ,IAAI,CAAC6D,SAAS,GAAG,IAAI,CAACX,MAAM,CAACS,OAAO,CAACG,UAAU,IAAI,IAAI,CAACX,MAAM,CAAClD,QAAQ;IAEvE,IAAI,CAAC8D,MAAM,GAAG,IAAI,CAACb,MAAM,CAACS,OAAO,CAACK,aAAa,IAAI,IAAI,CAACb,MAAM,CAACc,KAAK;IACpE,IAAG,IAAI,CAACF,MAAM,EAAC;MACb,IAAG7D,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,EAAC;QAC7B,IAAI,CAACL,WAAW,GAAGxD,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,CAAC5D,IAAI;QACnD,IAAI,CAAC0D,SAAS,GAAG3D,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,CAAC3D,EAAE;MACjD,CAAC,MAAM;QACL;QACA,IAAI8D,GAAG,GAAGV,kBAAC,CAACW,KAAK,CAACX,kBAAC,CAACY,OAAO,CAACZ,kBAAC,CAACa,IAAI,CAACnE,cAAc,CAAC,CAAC,CAAC;QACpD,IAAI,CAACwD,WAAW,GAAGxD,cAAc,CAACgE,GAAG,CAAC,CAAC/D,IAAI;QAC3C,IAAI,CAAC0D,SAAS,GAAG3D,cAAc,CAACgE,GAAG,CAAC,CAAC9D,EAAE;MACzC;IACF;IAEA,IAAI,CAACkE,IAAI,EAAE;EACf;;EAEA;AACJ;AACA;EAFI;IAAA;IAAA,OAGA,gBAAO;MACH,IAAMzB,QAAQ,GAAGD,iBAAiB,CAAC,IAAI,CAACc,WAAW,EAAE,IAAI,CAACG,SAAS,CAAC;MACpE,IAAMU,mBAAmB,GAAG,IAAI,CAACrB,MAAM,CAACsB,KAAK,CAACC,MAAM;MAEpD,IAAIF,mBAAmB,CAACG,OAAO,CAAC7B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;QAC9C,IAAI,CAACK,MAAM,CAACsB,KAAK,CAACC,MAAM,aAAMF,mBAAmB,mBAAS1B,QAAQ,MAAG;MACzE;IACJ;EAAC;EAAA;AAAA;AAGL;AACA;AACA;AACA;AAHA;AAIAI,cAAc,CAAC0B,MAAM,GAAG,IAAIC,GAAG,EAAE;;AAEjC;AACA;AACA;AACA;AACA;AACA3B,cAAc,CAAC4B,eAAe,GAAG,UAASC,QAAQ,EAAE3B,MAAM,EAAC;EACvD,IAAI4B,CAAC,GAAG,EAAE;EACV,IAAAC,kBAAC,EAACF,QAAQ,CAAC,CAACG,IAAI,CAAC,YAAU;IACvBF,CAAC,CAACnD,IAAI,CAAC,IAAIqB,cAAc,CAAC,IAAI,EAAEE,MAAM,CAAC,CAAC;EAC5C,CAAC,CAAC;EAEF,OAAO4B,CAAC;AACZ,CAAC;;AAGD;AACA;AACA;AACA;AACA;AACA;AALA,IAMaG,wBAAwB;EAEjC,kCAAYhC,MAAM,EAAe;IAAA,IAAbC,MAAM,uEAAG,CAAC,CAAC;IAAA;IAE3B,IAAG,CAAC,IAAI,CAACgC,iBAAiB,EAAE,EAAC;MACzB;IACJ;;IAEA;AACR;AACA;AACA;IACQ,IAAI,CAACC,OAAO,GAAG,IAAAJ,kBAAC,EAAC9B,MAAM,CAAC,CAACmC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;IAEhC;AACR;AACA;IACQ,IAAI,CAAClC,MAAM,GAAGK,kBAAC,CAACC,QAAQ,CAACN,MAAM,EAAEpD,aAAa,CAAC;;IAE/C;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACuF,OAAO,GAAG/C,QAAQ,CAACgD,aAAa,CAAC,QAAQ,CAAC;;IAE/C;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,IAAI,GAAG,IAAI,CAACF,OAAO,CAACG,UAAU,CAAC,IAAI,CAAC;;IAEzC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,IAAI,GAAGnD,QAAQ,CAACgD,aAAa,CAAC,KAAK,CAAC;;IAEzC;AACR;AACA;IACQ,IAAI,CAACI,MAAM,GAAG,IAAI,CAACP,OAAO,CAACQ,KAAK,EAAE;;IAElC;AACR;AACA;IACQ,IAAI,CAACC,OAAO,GAAG,IAAI,CAACT,OAAO,CAACU,MAAM,EAAE;;IAEpC;AACR;AACA;IACQ,IAAI,CAACpC,WAAW,GAAI,IAAI,CAAC0B,OAAO,CAACW,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC5C,MAAM,CAACnD,UAAW;;IAEjF;AACR;AACA;IACQ,IAAI,CAAC6D,SAAS,GAAI,IAAI,CAACuB,OAAO,CAACW,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC5C,MAAM,CAAClD,QAAS;IAE3E,IAAI,CAAC8D,MAAM,GAAK,IAAI,CAACqB,OAAO,CAACW,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC5C,MAAM,CAACc,KAAM;IACzE,IAAG,IAAI,CAACF,MAAM,EAAC;MACb,IAAG7D,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,EAAC;QAC7B,IAAI,CAACL,WAAW,GAAGxD,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,CAAC5D,IAAI;QACnD,IAAI,CAAC0D,SAAS,GAAG3D,cAAc,CAAC,IAAI,CAAC6D,MAAM,CAAC,CAAC3D,EAAE;MACjD,CAAC,MAAM;QACL;QACA,IAAI8D,GAAG,GAAGV,kBAAC,CAACW,KAAK,CAACX,kBAAC,CAACY,OAAO,CAACZ,kBAAC,CAACa,IAAI,CAACnE,cAAc,CAAC,CAAC,CAAC;QACpD,IAAI,CAACwD,WAAW,GAAGxD,cAAc,CAACgE,GAAG,CAAC,CAAC/D,IAAI;QAC3C,IAAI,CAAC0D,SAAS,GAAG3D,cAAc,CAACgE,GAAG,CAAC,CAAC9D,EAAE;MACzC;IACF;IAGA,IAAI,CAACkE,IAAI,EAAE;EACf;;EAEA;AACJ;AACA;EAFI;IAAA;IAAA,OAGA,gBAAO;MAAA;MACH,IAAI0B,GAAG,GAAG,IAAI,CAACZ,OAAO,CAACa,GAAG,CAAC,kBAAkB,CAAC,CAACzF,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;MACjG,IAAI0F,UAAU,GAAGF,GAAG,GAAG,IAAI,CAACL,MAAM,GAAG,IAAI,CAACE,OAAO,GAAG,IAAI,CAACnC,WAAW,CAACyC,IAAI,EAAE,GAAG,IAAI,CAACtC,SAAS,CAACsC,IAAI,EAAE;;MAEnG;MACA;MACA,IAAI,CAAClD,cAAc,CAAC0B,MAAM,CAACyB,GAAG,CAACF,UAAU,CAAC,EAAE;QACxCjD,cAAc,CAAC0B,MAAM,CAAC0B,GAAG,CAACH,UAAU,EAAE,IAAII,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;UACnE,IAAAxB,kBAAC,EAAC,KAAI,CAACU,IAAI,CAAC,CAACe,EAAE,CAAC,MAAM,EAAEF,OAAO,CAAC;QACpC,CAAC,CAAC,CAACG,IAAI,CAAC,IAAI,CAACC,UAAU,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAClB,IAAI,CAACM,GAAG,GAAGA,GAAG;MACvB;MAEA/C,cAAc,CAAC0B,MAAM,CAACkC,GAAG,CAACX,UAAU,CAAC,CAACQ,IAAI,CAAC,IAAI,CAACI,aAAa,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;MAEzE,IAAI,CAACxB,OAAO,CAACa,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAChD;;IAEA;AACJ;AACA;AACA;EAHI;IAAA;IAAA,OAIA,sBAAa;MAAA;MACT,IAAI,CAACX,OAAO,CAACM,KAAK,GAAG,IAAI,CAACF,IAAI,CAACE,KAAK;MACpC,IAAI,CAACN,OAAO,CAACQ,MAAM,GAAG,IAAI,CAACJ,IAAI,CAACI,MAAM;MAEtC,IAAI,CAACN,IAAI,CAACuB,SAAS,CAAC,IAAI,CAACrB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAACJ,OAAO,CAACM,KAAK,EAAE,IAAI,CAACN,OAAO,CAACQ,MAAM,CAAC;MAE7E,IAAIkB,MAAM,GAAG,IAAIC,oBAAQ,CAAC,IAAI,CAACzB,IAAI,CAAC0B,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC5B,OAAO,CAACM,KAAK,EAAE,IAAI,CAACN,OAAO,CAACQ,MAAM,CAAC,EAAE;QAC7FqB,QAAQ,EAAE,2CAA2C;QACrDC,GAAG,EAAE;UACDC,MAAM,EAAEC,QAAQ,CAACD,MAAM,IAAKC,QAAQ,CAACC,QAAQ,GAAG,IAAI,GAAGD,QAAQ,CAACE,IAAO;UACvErH,IAAI,EAAE,IAAI,CAACuD,WAAW;UACtBtD,EAAE,EAAE,IAAI,CAACyD;QACb;MACJ,CAAC,CAAC;MACF,OAAO,IAAIyC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;QACpC;QACA,IAAIY,GAAG,GAAG;UACNC,MAAM,EAAEC,QAAQ,CAACD,MAAM,IAAKC,QAAQ,CAACC,QAAQ,GAAG,IAAI,GAAGD,QAAQ,CAACE,IAAO;UACvErH,IAAI,EAAE,MAAI,CAACuD,WAAW;UACtBtD,EAAE,EAAE,MAAI,CAACyD;QACb,CAAC;QAEDmD,MAAM,CAACS,KAAK,CAAC,UAAUC,MAAM,EAAE;UAE3B;UACA,IAAG;YACC;YACA;YACA;YACA;YACAC,aAAa,CAACC,MAAM,CAACR,GAAG,CAACC,MAAM,GAAG,4CAA4C,CAAC;UACnF,CAAC,CAAC,OAAMQ,CAAC,EAAE;YACP;YACAC,MAAM,CAACF,MAAM,GAAG;cACZR,GAAG,EAAEA;YACT,CAAC;UACL;UAEA,IAAIW,CAAC;YAAEC,CAAC;YAAEC,KAAK,GAAGC,MAAM,CAACD,KAAK,CAAC,CAACL,MAAM,CAACR,GAAG,CAACjH,IAAI,EAAEyH,MAAM,CAACR,GAAG,CAAChH,EAAE,CAAC,CAAC;UAEhE,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoG,MAAM,CAAC3B,IAAI,CAAC9E,MAAM,EAAEK,CAAC,IAAI,CAAC,EAAE;YAC5CyG,CAAC,GAAG,KAAK,GAAGL,MAAM,CAAC3B,IAAI,CAACzE,CAAC,CAAC,GAAG,KAAK,GAAGoG,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAGoG,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAG,CAAC,CAAC;YACpF0G,CAAC,GAAGC,KAAK,CAACF,CAAC,GAAG,GAAG,CAAC,CAACI,GAAG,EAAE;YACxBT,MAAM,CAAC3B,IAAI,CAACzE,CAAC,CAAC,GAAG0G,CAAC,CAAC,CAAC,CAAC;YACrBN,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAG,CAAC,CAAC,GAAG0G,CAAC,CAAC,CAAC,CAAC;YACzBN,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAG,CAAC,CAAC,GAAG0G,CAAC,CAAC,CAAC,CAAC;YACzBN,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAG,CAAC,CAAC,GAAGoG,MAAM,CAAC3B,IAAI,CAACzE,CAAC,GAAC,CAAC,CAAC;UACzC;UACA,OAAOoG,MAAM;QACjB,CAAC,CAAC,CAAChB,IAAI,CAACH,OAAO,CAAC;MACpB,CAAC,CAAC;IACN;;IAEA;AACJ;AACA;AACA;EAHI;IAAA;IAAA,OAIA,uBAAc6B,SAAS,EAAE;MACrB;MACA;MACA,IAAI,CAAC9C,OAAO,CAACM,KAAK,GAAGwC,SAAS,CAACxC,KAAK;MACpC,IAAI,CAACN,OAAO,CAACQ,MAAM,GAAGsC,SAAS,CAACtC,MAAM;MACtC,IAAI,CAACN,IAAI,CAAC6C,YAAY,CAACD,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;MACvC,IAAI,CAAChD,OAAO,CAACa,GAAG,CAAC,kBAAkB,gBAAS,IAAI,CAACX,OAAO,CAACgD,SAAS,EAAE,OAAI;IAC5E;;IAEA;AACJ;AACA;AACA;EAHI;IAAA;IAAA,OAIA,6BAAmB;MACf,IAAIC,IAAI,GAAGhG,QAAQ,CAACgD,aAAa,CAAC,QAAQ,CAAC;MAC3C,OAAO,CAAC,EAAEgD,IAAI,CAAC9C,UAAU,IAAI8C,IAAI,CAAC9C,UAAU,CAAC,IAAI,CAAC,CAAC;IACvD;EAAC;EAAA;AAAA;AAIL;AACA;AACA;AACA;AAHA;AAIAP,wBAAwB,CAACP,MAAM,GAAG,IAAIC,GAAG,EAAE;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACAM,wBAAwB,CAACL,eAAe,GAAG,UAASC,QAAQ,EAAE3B,MAAM,EAAC;EACjE,IAAI4B,CAAC,GAAG,EAAE;EACV,IAAAC,kBAAC,EAACF,QAAQ,CAAC,CAACG,IAAI,CAAC,YAAU;IACvBF,CAAC,CAACnD,IAAI,CAAC,IAAIsD,wBAAwB,CAAC,IAAI,EAAE/B,MAAM,CAAC,CAAC;EACtD,CAAC,CAAC;EAEF,OAAO4B,CAAC;AACZ,CAAC"}