{"version":3,"file":"alpine-formvalidation.js","sources":["../../../node_modules/@kingshott/iodine/src/iodine.js","../../../node_modules/lodash/isObject.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/now.js","../../../node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/lodash/_baseTrim.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/toNumber.js","../../../node_modules/lodash/debounce.js","../../../fe-src/js/alpine-components/alpine-formvalidation.js"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Iodine - JavaScript Library\n|--------------------------------------------------------------------------\n|\n| This library contains a collection of useful validation rules that can\n| be used to quickly verify whether items meet certain conditions.\n|\n*/\nexport class Iodine {\n /**\n * Constructor.\n *\n */\n constructor() {\n this.locale = undefined;\n\n this.messages = this._defaultMessages();\n\n this.defaultFieldName = 'Value';\n }\n\n /**\n * @internal.\n *\n */\n _dateCompare(first, second, type, equals = false) {\n if (!this.isDate(first)) return false;\n\n if (!this.isDate(second) && !this.isInteger(second)) return false;\n\n second = typeof second === 'number' ? second : second.getTime();\n\n if (type === 'less' && equals) return first.getTime() <= second;\n if (type === 'less' && !equals) return first.getTime() < second;\n if (type === 'more' && equals) return first.getTime() >= second;\n if (type === 'more' && !equals) return first.getTime() > second;\n }\n\n /**\n * @internal.\n *\n */\n _defaultMessages() {\n return {\n after : `The date must be after: '[PARAM]'`,\n afterOrEqual : `The date must be after or equal to: '[PARAM]'`,\n array : `[FIELD] must be an array`,\n before : `The date must be before: '[PARAM]'`,\n beforeOrEqual : `The date must be before or equal to: '[PARAM]'`,\n boolean : `[FIELD] must be true or false`,\n date : `[FIELD] must be a date`,\n different : `[FIELD] must be different to '[PARAM]'`,\n endingWith : `[FIELD] must end with '[PARAM]'`,\n email : `[FIELD] must be a valid email address`,\n falsy : `[FIELD] must be a falsy value (false, 'false', 0 or '0')`,\n in : `[FIELD] must be one of the following options: [PARAM]`,\n integer : `[FIELD] must be an integer`,\n json : `[FIELD] must be a parsable JSON object string`,\n max : `[FIELD] must be less than or equal to [PARAM]`,\n min : `[FIELD] must be greater than or equal to [PARAM]`,\n maxLength : `[FIELD] must not be greater than '[PARAM]' in character length`,\n minLength : `[FIELD] must not be less than '[PARAM]' character length`,\n notIn : `[FIELD] must not be one of the following options: [PARAM]`,\n numeric : `[FIELD] must be numeric`,\n optional : `[FIELD] is optional`,\n regexMatch : `[FIELD] must satisify the regular expression: [PARAM]`,\n required : `[FIELD] must be present`,\n same : `[FIELD] must be '[PARAM]'`,\n startingWith : `[FIELD] must start with '[PARAM]'`,\n string : `[FIELD] must be a string`,\n truthy : `[FIELD] must be a truthy value (true, 'true', 1 or '1')`,\n url : `[FIELD] must be a valid url`,\n uuid : `[FIELD] must be a valid UUID`,\n };\n }\n\n /**\n * @internal.\n *\n */\n _prepare(value, rules = []) {\n if (!rules.length) return [];\n\n if (rules[0] === 'optional' && this.isOptional(value)) return [];\n\n return rules.filter(rule => rule !== 'optional')\n .map(rule => [rule, this._titleCase(rule.split(':').shift()), rule.split(':').slice(1)]);\n }\n\n /**\n * @internal.\n *\n */\n _titleCase(value) {\n return `${value[0].toUpperCase()}${value.slice(1)}`;\n }\n\n /**\n * Attach a custom validation rule to the library.\n *\n */\n addRule(name, closure) {\n Iodine.prototype[`is${this._titleCase(name)}`] = closure;\n }\n\n /**\n * Determine whether the given value meets the given synchronous or asynchronous rules.\n *\n */\n async asyncIs(value, rules = []) {\n for (let index in rules = this._prepare(value, rules)) {\n if (!await this[`is${rules[index][1]}`].apply(this, [value, rules[index][2].join(':')])) {\n return await rules[index][0];\n }\n }\n\n return true;\n }\n\n /**\n * Determine whether the given value meets the given rules.\n *\n */\n async asyncIsValid(value, rules = []) {\n return await this.asyncIs(value, rules) === true;\n }\n\n /**\n * Retrieve an error message for the given rule.\n *\n */\n getErrorMessage(rule, args = undefined) {\n let { param, field } = typeof args === 'object' ? args : { param: args, field: undefined };\n\n const chunks = rule.split(':');\n\n let key = chunks.shift();\n\n param = param || chunks.join(':');\n\n if (['after', 'afterOrEqual', 'before', 'beforeOrEqual'].includes(key)) {\n param = new Date(parseInt(param)).toLocaleTimeString(this.locale, {\n year : 'numeric',\n month : 'short',\n day : 'numeric',\n hour : '2-digit',\n minute : 'numeric',\n hour12 : false,\n });\n }\n\n let message = [null, undefined, ''].includes(param)\n ? this.messages[key]\n : this.messages[key].replace('[PARAM]', param);\n\n return [null, undefined, ''].includes(field)\n ? message.replace('[FIELD]', this.defaultFieldName)\n : message.replace('[FIELD]', field);\n }\n\n /**\n * Determine if the given date is after another given date.\n *\n */\n isAfter(value, after) {\n return this._dateCompare(value, after, 'more', false);\n }\n\n /**\n * Determine if the given date is after or equal to another given date.\n *\n */\n isAfterOrEqual(value, after) {\n return this._dateCompare(value, after, 'more', true);\n }\n\n /**\n * Determine if the given value is an array.\n *\n */\n isArray(value) {\n return Array.isArray(value);\n }\n\n /**\n * Determine if the given date is before another given date.\n *\n */\n isBefore(value, before) {\n return this._dateCompare(value, before, 'less', false);\n }\n\n /**\n * Determine if the given date is before or equal to another given date.\n *\n */\n isBeforeOrEqual(value, before) {\n return this._dateCompare(value, before, 'less', true);\n }\n\n /**\n * Determine if the given value is a boolean.\n *\n */\n isBoolean(value) {\n return [true, false].includes(value);\n }\n\n /**\n * Determine if the given value is a date object.\n *\n */\n isDate(value) {\n return (value && Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value));\n }\n\n /**\n * Determine if the given value is different to another given value.\n *\n */\n isDifferent(value, different) {\n return value != different;\n }\n\n /**\n * Determine if the given value ends with another given value.\n *\n */\n isEndingWith(value, sub) {\n return this.isString(value) && value.endsWith(sub);\n }\n\n /**\n * Determine if the given value is a valid email address.\n *\n */\n isEmail(value) {\n return new RegExp(\"^\\\\S+@\\\\S+[\\\\.][0-9a-z]+$\").test(String(value).toLowerCase());\n }\n\n /**\n * Determine if the given value is falsy.\n *\n */\n isFalsy(value) {\n return [0, '0', false, 'false'].includes(value);\n }\n\n /**\n * Determine if the given value is within the given array of options.\n *\n */\n isIn(value, options) {\n return (typeof options === 'string' ? options.split(',') : options).includes(value);\n }\n\n /**\n * Determine if the given value is an integer.\n *\n */\n isInteger(value) {\n return Number.isInteger(value) && parseInt(value).toString() === value.toString();\n }\n\n /**\n * Determine if the given value is a JSON string.\n *\n */\n isJson(value) {\n try {\n return typeof JSON.parse(value) === 'object';\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Determine if the given number is less than or equal to the maximum limit.\n *\n */\n isMax(value, limit) {\n return parseFloat(value) <= limit;\n }\n\n /**\n * Determine if the given number is greater than or equal to the minimum limit.\n *\n */\n isMin(value, limit) {\n return parseFloat(value) >= limit;\n }\n\n /**\n * Determine if the given value string length is less than or equal to the maximum limit.\n *\n */\n isMaxLength(value, limit) {\n return typeof value === 'string' ? value.length <= limit : false;\n }\n\n /**\n * Determine if the given value string length is greater than or equal to the minimum limit.\n *\n */\n isMinLength(value, limit) {\n return typeof value === 'string' ? value.length >= limit : false;\n }\n\n /**\n * Determine if the given value is not within the given array of options.\n *\n */\n isNotIn(value, options) {\n return !this.isIn(value, options);\n }\n\n /**\n * Determine if the given value is numeric (an integer or a float).\n *\n */\n isNumeric(value) {\n return !isNaN(parseFloat(value)) && isFinite(value);\n }\n\n /**\n * Determine if the given value is optional.\n *\n */\n isOptional(value) {\n return [null, undefined, ''].includes(value);\n }\n\n /**\n * Determine if the given value satisifies the given regular expression.\n *\n */\n isRegexMatch(value, expression) {\n return new RegExp(expression).test(String(value));\n }\n\n /**\n * Determine if the given value is present.\n *\n */\n isRequired(value) {\n return !this.isOptional(value);\n }\n\n /**\n * Determine if the given value is the same as another given value.\n *\n */\n isSame(value, same) {\n return value == same;\n }\n\n /**\n * Determine if the given value starts with another given value.\n *\n */\n isStartingWith(value, sub) {\n return this.isString(value) && value.startsWith(sub);\n }\n\n /**\n * Determine if the given value is a string.\n *\n */\n isString(value) {\n return typeof value === 'string';\n }\n\n /**\n * Determine if the given value is truthy.\n *\n */\n isTruthy(value) {\n return [1, '1', true, 'true'].includes(value);\n }\n\n /**\n * Determine if the given value is a valid URL.\n *\n */\n isUrl(value) {\n let regex = \"^(https?:\\\\/\\\\/)?((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*(\\\\?[;&a-z\\\\d%_.~+=-]*)?(\\\\#[-a-z\\\\d_]*)?$\";\n\n return new RegExp(regex).test(String(value).toLowerCase());\n }\n\n /**\n * Determine if the given value is a valid UUID.\n *\n */\n isUuid(value) {\n let regex = \"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$\";\n\n return new RegExp(regex).test(String(value).toLowerCase());\n }\n\n /**\n * Determine whether the given value meets the given rules.\n *\n */\n is(value, rules = []) {\n for (let index in rules = this._prepare(value, rules)) {\n if (!this[`is${rules[index][1]}`].apply(this, [value, rules[index][2].join(':')])) {\n return rules[index][0];\n }\n }\n\n return true;\n }\n\n /**\n * Determine whether the given value meets the given rules.\n *\n */\n isValid(value, rules = []) {\n return this.is(value, rules) === true;\n }\n\n /**\n * Determine whether the given dictionary of values meets the given schema.\n *\n */\n isValidSchema(values = {}, schema = {}) {\n const keys = Object.keys(schema);\n\n if(keys.length === 0) return true;\n\n for(let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n if(!values.hasOwnProperty(key)) return false;\n\n const value = values[key];\n const rules = schema[key];\n\n if (!this.isValid(value, rules)) return false;\n }\n\n return true;\n }\n\n /**\n * Replace the default error messages with a new set.\n *\n */\n setErrorMessages(messages) {\n this.messages = messages;\n }\n\n /**\n * Add or replace an error message.\n *\n */\n setErrorMessage(key, message) {\n this.messages[key] = message;\n }\n\n /**\n * Replace the default locale with a new value.\n *\n */\n setLocale(locale) {\n this.locale = locale;\n }\n\n /**\n * Replace the default field name with a new value.\n *\n */\n setDefaultFieldName(fieldName) {\n this.defaultFieldName = fieldName;\n }\n}\n\n/**\n * Create an instance of the library.\n *\n */\nif(typeof window !== 'undefined') {\n window.Iodine = new Iodine();\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { Iodine } from \"@kingshott/iodine/src/iodine.js\";\r\n// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport debounce from \"lodash/debounce\";\r\n\r\n// const axios = require('axios');\r\n\r\nimport axios from \"axios\";\r\n\r\nexport function formValidation(config, Alpine) {\r\n return {\r\n config: config,\r\n formData: {},\r\n allFormElements: null,\r\n formIsValid: false,\r\n iodine: null,\r\n checkboxDropMobile: false,\r\n dataApiLink: \"\",\r\n token: \"\",\r\n siteurl: window.location.href,\r\n fieldFocused: false,\r\n formSubmitResponse: false,\r\n postState: {\r\n isPosting: false,\r\n response: {\r\n success: false,\r\n message: \"\",\r\n title: \"\",\r\n data: {}\r\n }\r\n },\r\n recaptchaSiteKey: \"\",\r\n postMessage: {\r\n message: {},\r\n data: {}\r\n },\r\n _resetForm() {\r\n const vm = this;\r\n window.grecaptcha.reset();\r\n\r\n Object.keys(vm.formData).forEach((key) => {\r\n const item = vm.formData[key];\r\n item.value = null;\r\n item.isValid = false;\r\n });\r\n },\r\n _bindFocus() {\r\n const vm = this;\r\n const $inputFields = vm.$el.querySelectorAll(\"input,select,textarea\");\r\n $inputFields.forEach((el) => {\r\n el.addEventListener(\"focus\", (e) => {\r\n if (!vm.fieldFocused) {\r\n // console.log('focused');\r\n vm.fieldFocused = true;\r\n // this._addRecaptcha();\r\n }\r\n });\r\n });\r\n },\r\n _adduid() {\r\n const vm = this;\r\n // console.log(vm.siteurl);\r\n const url = new URL(this.siteurl);\r\n const uid = url.searchParams.get(\"uid\");\r\n if (url.search) {\r\n vm.formData.uid = {\r\n name: \"uid\",\r\n isValid: true,\r\n errorMessage: \"\",\r\n fieldName: \"uid\",\r\n value: uid\r\n };\r\n }\r\n },\r\n _addRecaptcha() {\r\n const vm = this;\r\n\r\n vm.formData.recaptcha = {\r\n name: \"recaptcha\",\r\n isValid: false,\r\n errorMessage: \"\",\r\n fieldName: \"Robot validation\",\r\n rules: [\"required\"]\r\n };\r\n\r\n vm.$nextTick(() => {\r\n const scriptTag = vm.$refs.recaptchaScript;\r\n // add recpatcha in form Data\r\n\r\n const verifyCallback = function (response) {\r\n vm.formData.recaptcha.isValid = true;\r\n vm.formData.recaptcha.value = response;\r\n vm.formData.recaptcha.errorMessage = \"\";\r\n };\r\n\r\n window.onRepactchaLoad = () => {\r\n // eslint-disable-next-line no-undef\r\n // console.log(this.recaptchaSiteKey);\r\n this.recaptchaSiteKey = this.config.recaptchaSiteKey;\r\n window.grecaptcha.render(vm.$refs.recaptchaContainer, {\r\n sitekey: this.recaptchaSiteKey,\r\n callback: verifyCallback\r\n });\r\n };\r\n\r\n // scriptTag.setAttribute(\r\n // 'src',\r\n // 'https://www.google.com/recaptcha/api.js?onload=onRepactchaLoad&render=explicit'\r\n // );\r\n const script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = \"https://www.google.com/recaptcha/api.js?onload=onRepactchaLoad&render=explicit\";\r\n scriptTag.appendChild(script);\r\n });\r\n },\r\n _setupValidation() {\r\n const vm = this;\r\n // disable browser based validation\r\n vm.$el.setAttribute(\"novalidate\", false);\r\n\r\n // enable Iodine\r\n const iodine = new Iodine();\r\n iodine.addRule(\"equals\", (value, param) => String(value.length) === param);\r\n iodine.setErrorMessage(\"required\", \"[FIELD] is required.\"); // English\r\n iodine.setErrorMessage(\"email\", \"[FIELD] must be valid.\"); // English\r\n iodine.setErrorMessage(\"numeric\", \"[FIELD] accepts only numeric value.\"); // English\r\n iodine.setErrorMessage(\"equals\", \"[FIELD] must be [PARAM] digits.\"); // English\r\n iodine.setErrorMessage(\"maxLength\", \"[FIELD] must be less than or equal to [PARAM] char.\"); // English\r\n\r\n vm.iodine = iodine;\r\n window.iodine = iodine;\r\n\r\n Object.keys(vm.formData).forEach((key) => {\r\n const item = vm.formData[key];\r\n vm.$watch(`formData.${key}.value`, (newValue) => {\r\n if (item.rules && item.value !== null) {\r\n let error = \"\";\r\n if (vm.iodine.isArray(item.value)) {\r\n error = vm.iodine.is(item.value.join(\",\"), item.rules); // true\r\n } else {\r\n error = vm.iodine.is(item.value, item.rules); // true\r\n }\r\n if (error !== true) {\r\n item.isValid = false;\r\n item.errorMessage = iodine.getErrorMessage(error, {\r\n field: item.fieldName,\r\n param: \"\"\r\n }); // string\r\n } else {\r\n item.isValid = true;\r\n item.errorMessage = \"\";\r\n }\r\n }\r\n });\r\n });\r\n },\r\n _setupForm() {\r\n const vm = this;\r\n\r\n vm.allFormElements.forEach((item) => {\r\n const fieldName = item.getAttribute(\"data-validation-name\");\r\n vm.formData[fieldName] = {\r\n name: fieldName,\r\n isValid: (() => {\r\n if (item.dataset.rules) {\r\n const validationRules = item.dataset.rules;\r\n if (validationRules.includes(\"optional\")) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n })(),\r\n errorMessage: \"\",\r\n fieldName: item.getAttribute(\"data-rules-fieldName\"),\r\n rules: (() => {\r\n if (item.dataset.rules) {\r\n return JSON.parse(item.dataset.rules);\r\n }\r\n return [];\r\n })()\r\n };\r\n /**\r\n * Update existing Value\r\n */\r\n\r\n if (item.type) {\r\n if (item.type === \"text\" || item.type === \"email\" || item.type === \"tel\" || item.tagName === \"TEXTAREA\") {\r\n if (item.value) {\r\n vm.formData[fieldName].value = item.value;\r\n vm.formData[fieldName].isValid = true;\r\n }\r\n }\r\n\r\n if (item.type === \"radio\") {\r\n const checkedValue = document.querySelector(`input[name=${fieldName}]:checked`);\r\n if (checkedValue) {\r\n vm.formData[fieldName].isValid = true;\r\n vm.formData[fieldName].value = checkedValue.value;\r\n }\r\n }\r\n\r\n if (item.type === \"checkbox\") {\r\n if (item.dataset.isBoolean === \"true\") {\r\n // eslint-disable-next-line no-param-reassign\r\n vm.formData[fieldName].value = false;\r\n const checkedItems = document.querySelector(`input[name=${fieldName}]:checked`);\r\n\r\n if (checkedItems) {\r\n vm.formData[fieldName].value = true;\r\n } else {\r\n vm.formData[fieldName].value = false;\r\n }\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n vm.formData[fieldName].value = [];\r\n const checkedItems = document.querySelectorAll(`input[name=${fieldName}]:checked`);\r\n\r\n if (checkedItems.length) {\r\n vm.formData[fieldName].isValid = true;\r\n checkedItems.forEach((checkedItem) => {\r\n vm.formData[fieldName].value.push(checkedItem.value);\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (item.tagName === \"SELECT\") {\r\n const selectedOption = document.querySelector(`select[name=${fieldName}] option:checked`);\r\n if (selectedOption.value) {\r\n vm.formData[fieldName].isValid = true;\r\n vm.formData[fieldName].value = selectedOption.value;\r\n }\r\n }\r\n }\r\n\r\n if (this.config.token) {\r\n vm.formData.token = {\r\n name: \"token\",\r\n isValid: true,\r\n errorMessage: \"\",\r\n fieldName: \"token\",\r\n value: this.config.token\r\n };\r\n }\r\n\r\n if (this.config.audienceId) {\r\n vm.formData.audienceid = {\r\n name: \"audienceid\",\r\n isValid: true,\r\n errorMessage: \"\",\r\n fieldName: \"audienceid\",\r\n value: this.config.audienceId\r\n };\r\n }\r\n });\r\n /**\r\n * Save state for reset\r\n */\r\n },\r\n validateForm() {\r\n const vm = this;\r\n Object.keys(vm.formData).forEach((key) => {\r\n const item = vm.formData[key];\r\n if (item.rules) {\r\n let error = \"\";\r\n if (vm.iodine.isArray(item.value)) {\r\n error = vm.iodine.is(item.value.join(\",\"), item.rules); // true\r\n } else {\r\n error = vm.iodine.is(item.value, item.rules); // true\r\n }\r\n\r\n if (error !== true) {\r\n vm.formData[item.name].errorMessage = vm.iodine.getErrorMessage(error, {\r\n field: item.fieldName,\r\n param: \"\"\r\n }); // string\r\n }\r\n }\r\n });\r\n },\r\n checkFormValid() {\r\n const vm = this;\r\n let validity = [];\r\n let isValid = false;\r\n Object.keys(vm.formData).forEach((key) => {\r\n validity.push(vm.formData[key].isValid);\r\n });\r\n validity = [...new Set(validity)];\r\n\r\n if (validity.length > 1) {\r\n isValid = false;\r\n }\r\n\r\n if (validity.length === 1) {\r\n if (validity[0]) {\r\n isValid = true;\r\n }\r\n }\r\n\r\n return isValid;\r\n },\r\n postForm() {\r\n const vm = this;\r\n const data = {};\r\n\r\n Object.keys(vm.formData).forEach((key) => {\r\n if (vm.formData[key].value === false) {\r\n data[key] = false;\r\n } else {\r\n data[key] = vm.formData[key].value || \"\";\r\n }\r\n });\r\n vm.postState.isPosting = true;\r\n\r\n this.dataApiLink = this.config.dataApiLink;\r\n\r\n axios\r\n .post(this.dataApiLink, data)\r\n .then((response) => {\r\n vm.postState.response.success = response.data.success;\r\n vm.formSubmitResponse = true;\r\n\r\n vm.postState.response.message = response.data.message;\r\n\r\n if (response.data.title) {\r\n vm.postState.response.title = response.data.title;\r\n }\r\n\r\n vm.postState.response.data = JSON.stringify(response.data.data);\r\n vm.postState.isPosting = false;\r\n if (response.data.success === true) {\r\n vm._resetForm();\r\n }\r\n })\r\n .catch((error) => {\r\n // handle error\r\n vm.postState.isPosting = false;\r\n });\r\n },\r\n submitForm(e) {\r\n const vm = this;\r\n e.preventDefault();\r\n if (vm.postState.isPosting !== true) {\r\n if (!vm.checkFormValid()) {\r\n this.validateForm();\r\n } else {\r\n vm.postForm();\r\n }\r\n }\r\n // vm.postForm();\r\n },\r\n hideDropForInterestOnDesktop() {\r\n const vm = this;\r\n const windowSize = window.innerWidth;\r\n if (windowSize >= 768) {\r\n vm.checkboxDropMobile = true;\r\n } else {\r\n vm.checkboxDropMobile = false;\r\n }\r\n },\r\n init() {\r\n const vm = this;\r\n const allFormElements = vm.$el.querySelectorAll(\"[x-input]\");\r\n vm.allFormElements = allFormElements;\r\n vm._setupForm();\r\n vm._setupValidation();\r\n vm._bindFocus();\r\n vm.hideDropForInterestOnDesktop();\r\n window.addEventListener(\"resize\", debounce(this.hideDropForInterestOnDesktop, 200));\r\n }\r\n };\r\n}\r\n"],"names":["Iodine","first","second","type","equals","value","rules","rule","name","closure","index","args","param","field","chunks","key","message","after","before","different","sub","options","limit","expression","same","regex","values","schema","keys","i","messages","locale","fieldName","isObject","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","string","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","debounce_1","formValidation","config","Alpine","vm","item","el","e","url","uid","scriptTag","verifyCallback","response","script","iodine","newValue","error","checkedValue","checkedItems","checkedItem","selectedOption","validity","isValid","data","axios","allFormElements"],"mappings":"gFASO,MAAMA,CAAO,CAKlB,aAAc,CACZ,KAAK,OAAS,OAEd,KAAK,SAAW,KAAK,mBAErB,KAAK,iBAAmB,OACzB,CAMD,aAAaC,EAAOC,EAAQC,EAAMC,EAAS,GAAO,CAGhD,GAFI,CAAC,KAAK,OAAOH,CAAK,GAElB,CAAC,KAAK,OAAOC,CAAM,GAAK,CAAC,KAAK,UAAUA,CAAM,EAAG,MAAO,GAI5D,GAFAA,EAAS,OAAOA,GAAW,SAAWA,EAASA,EAAO,UAElDC,IAAS,QAAUC,EAAQ,OAAOH,EAAM,QAAS,GAAIC,EACzD,GAAIC,IAAS,QAAU,CAACC,EAAQ,OAAOH,EAAM,QAAS,EAAGC,EACzD,GAAIC,IAAS,QAAUC,EAAQ,OAAOH,EAAM,QAAS,GAAIC,EACzD,GAAIC,IAAS,QAAU,CAACC,EAAQ,OAAOH,EAAM,QAAS,EAAGC,CAC1D,CAMD,kBAAmB,CACjB,MAAO,CACL,MAAgB,oCAChB,aAAgB,gDAChB,MAAgB,2BAChB,OAAgB,qCAChB,cAAgB,iDAChB,QAAgB,gCAChB,KAAgB,yBAChB,UAAgB,yCAChB,WAAgB,kCAChB,MAAgB,wCAChB,MAAgB,2DAChB,GAAgB,wDAChB,QAAgB,6BAChB,KAAgB,gDAChB,IAAgB,gDAChB,IAAgB,mDAChB,UAAgB,iEAChB,UAAgB,2DAChB,MAAgB,4DAChB,QAAgB,0BAChB,SAAgB,sBAChB,WAAgB,wDAChB,SAAgB,0BAChB,KAAgB,4BAChB,aAAgB,oCAChB,OAAgB,2BAChB,OAAgB,0DAChB,IAAgB,8BAChB,KAAgB,8BACtB,CACG,CAMD,SAASG,EAAOC,EAAQ,GAAI,CAC1B,OAAKA,EAAM,OAEPA,EAAM,CAAC,IAAM,YAAc,KAAK,WAAWD,CAAK,EAAU,GAEvDC,EAAM,OAAOC,GAAQA,IAAS,UAAU,EAClC,IAAIA,GAAQ,CAACA,EAAM,KAAK,WAAWA,EAAK,MAAM,GAAG,EAAE,OAAO,EAAGA,EAAK,MAAM,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EALzE,EAM3B,CAMD,WAAWF,EAAO,CAChB,MAAO,GAAGA,EAAM,CAAC,EAAE,YAAW,CAAE,GAAGA,EAAM,MAAM,CAAC,CAAC,EAClD,CAMD,QAAQG,EAAMC,EAAS,CACrBT,EAAO,UAAU,KAAK,KAAK,WAAWQ,CAAI,CAAC,EAAE,EAAIC,CAClD,CAMD,MAAM,QAAQJ,EAAOC,EAAQ,GAAI,CAC/B,QAASI,KAASJ,EAAQ,KAAK,SAASD,EAAOC,CAAK,EAClD,GAAI,CAAC,MAAM,KAAK,KAAKA,EAAMI,CAAK,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAM,CAACL,EAAOC,EAAMI,CAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EACpF,OAAO,MAAMJ,EAAMI,CAAK,EAAE,CAAC,EAI/B,MAAO,EACR,CAMD,MAAM,aAAaL,EAAOC,EAAQ,GAAI,CACpC,OAAO,MAAM,KAAK,QAAQD,EAAOC,CAAK,IAAM,EAC7C,CAMD,gBAAgBC,EAAMI,EAAO,OAAW,CACtC,GAAI,CAAE,MAAAC,EAAO,MAAAC,CAAO,EAAG,OAAOF,GAAS,SAAWA,EAAO,CAAE,MAAOA,EAAM,MAAO,MAAS,EAExF,MAAMG,EAASP,EAAK,MAAM,GAAG,EAE7B,IAAIQ,EAAMD,EAAO,QAEjBF,EAAQA,GAASE,EAAO,KAAK,GAAG,EAE5B,CAAC,QAAS,eAAgB,SAAU,eAAe,EAAE,SAASC,CAAG,IACnEH,EAAQ,IAAI,KAAK,SAASA,CAAK,CAAC,EAAE,mBAAmB,KAAK,OAAQ,CAChE,KAAS,UACT,MAAS,QACT,IAAS,UACT,KAAS,UACT,OAAS,UACT,OAAS,EACjB,CAAO,GAGH,IAAII,EAAU,CAAC,KAAM,OAAW,EAAE,EAAE,SAASJ,CAAK,EAC9C,KAAK,SAASG,CAAG,EACjB,KAAK,SAASA,CAAG,EAAE,QAAQ,UAAWH,CAAK,EAE/C,MAAO,CAAC,KAAM,OAAW,EAAE,EAAE,SAASC,CAAK,EACvCG,EAAQ,QAAQ,UAAW,KAAK,gBAAgB,EAChDA,EAAQ,QAAQ,UAAWH,CAAK,CACrC,CAMD,QAAQR,EAAOY,EAAO,CACpB,OAAO,KAAK,aAAaZ,EAAOY,EAAO,OAAQ,EAAK,CACrD,CAMD,eAAeZ,EAAOY,EAAO,CAC3B,OAAO,KAAK,aAAaZ,EAAOY,EAAO,OAAQ,EAAI,CACpD,CAMD,QAAQZ,EAAO,CACb,OAAO,MAAM,QAAQA,CAAK,CAC3B,CAMD,SAASA,EAAOa,EAAQ,CACtB,OAAO,KAAK,aAAab,EAAOa,EAAQ,OAAQ,EAAK,CACtD,CAMD,gBAAgBb,EAAOa,EAAQ,CAC7B,OAAO,KAAK,aAAab,EAAOa,EAAQ,OAAQ,EAAI,CACrD,CAMD,UAAUb,EAAO,CACf,MAAO,CAAC,GAAM,EAAK,EAAE,SAASA,CAAK,CACpC,CAMD,OAAOA,EAAO,CACZ,OAAQA,GAAS,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBAAmB,CAAC,MAAMA,CAAK,CAC3F,CAMD,YAAYA,EAAOc,EAAW,CAC5B,OAAOd,GAASc,CACjB,CAMD,aAAad,EAAOe,EAAK,CACvB,OAAO,KAAK,SAASf,CAAK,GAAKA,EAAM,SAASe,CAAG,CAClD,CAMD,QAAQf,EAAO,CACb,OAAO,IAAI,OAAO,2BAA2B,EAAE,KAAK,OAAOA,CAAK,EAAE,YAAW,CAAE,CAChF,CAMD,QAAQA,EAAO,CACb,MAAO,CAAC,EAAG,IAAK,GAAO,OAAO,EAAE,SAASA,CAAK,CAC/C,CAMD,KAAKA,EAAOgB,EAAS,CACnB,OAAQ,OAAOA,GAAY,SAAWA,EAAQ,MAAM,GAAG,EAAIA,GAAS,SAAShB,CAAK,CACnF,CAMD,UAAUA,EAAO,CACf,OAAO,OAAO,UAAUA,CAAK,GAAK,SAASA,CAAK,EAAE,SAAU,IAAKA,EAAM,UACxE,CAMD,OAAOA,EAAO,CACZ,GAAI,CACF,OAAO,OAAO,KAAK,MAAMA,CAAK,GAAM,QACrC,MAAW,CACV,MAAO,EACR,CACF,CAMD,MAAMA,EAAOiB,EAAO,CAClB,OAAO,WAAWjB,CAAK,GAAKiB,CAC7B,CAMD,MAAMjB,EAAOiB,EAAO,CAClB,OAAO,WAAWjB,CAAK,GAAKiB,CAC7B,CAMD,YAAYjB,EAAOiB,EAAO,CACxB,OAAO,OAAOjB,GAAU,SAAWA,EAAM,QAAUiB,EAAQ,EAC5D,CAMD,YAAYjB,EAAOiB,EAAO,CACxB,OAAO,OAAOjB,GAAU,SAAWA,EAAM,QAAUiB,EAAQ,EAC5D,CAMD,QAAQjB,EAAOgB,EAAS,CACtB,MAAO,CAAC,KAAK,KAAKhB,EAAOgB,CAAO,CACjC,CAMD,UAAUhB,EAAO,CACf,MAAO,CAAC,MAAM,WAAWA,CAAK,CAAC,GAAK,SAASA,CAAK,CACnD,CAMD,WAAWA,EAAO,CAChB,MAAO,CAAC,KAAM,OAAW,EAAE,EAAE,SAASA,CAAK,CAC5C,CAMD,aAAaA,EAAOkB,EAAY,CAC9B,OAAO,IAAI,OAAOA,CAAU,EAAE,KAAK,OAAOlB,CAAK,CAAC,CACjD,CAMD,WAAWA,EAAO,CAChB,MAAO,CAAC,KAAK,WAAWA,CAAK,CAC9B,CAMD,OAAOA,EAAOmB,EAAM,CAClB,OAAOnB,GAASmB,CACjB,CAMD,eAAenB,EAAOe,EAAK,CACzB,OAAO,KAAK,SAASf,CAAK,GAAKA,EAAM,WAAWe,CAAG,CACpD,CAMD,SAASf,EAAO,CACd,OAAO,OAAOA,GAAU,QACzB,CAMD,SAASA,EAAO,CACd,MAAO,CAAC,EAAG,IAAK,GAAM,MAAM,EAAE,SAASA,CAAK,CAC7C,CAMD,MAAMA,EAAO,CACX,IAAIoB,EAAQ,wKAEZ,OAAO,IAAI,OAAOA,CAAK,EAAE,KAAK,OAAOpB,CAAK,EAAE,YAAW,CAAE,CAC1D,CAMD,OAAOA,EAAO,CACZ,IAAIoB,EAAQ,4EAEZ,OAAO,IAAI,OAAOA,CAAK,EAAE,KAAK,OAAOpB,CAAK,EAAE,YAAW,CAAE,CAC1D,CAMD,GAAGA,EAAOC,EAAQ,GAAI,CACpB,QAASI,KAASJ,EAAQ,KAAK,SAASD,EAAOC,CAAK,EAClD,GAAI,CAAC,KAAK,KAAKA,EAAMI,CAAK,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAM,CAACL,EAAOC,EAAMI,CAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAC9E,OAAOJ,EAAMI,CAAK,EAAE,CAAC,EAIzB,MAAO,EACR,CAMD,QAAQL,EAAOC,EAAQ,GAAI,CACzB,OAAO,KAAK,GAAGD,EAAOC,CAAK,IAAM,EAClC,CAMD,cAAcoB,EAAS,GAAIC,EAAS,CAAA,EAAI,CACtC,MAAMC,EAAO,OAAO,KAAKD,CAAM,EAE/B,GAAGC,EAAK,SAAW,EAAG,MAAO,GAE7B,QAAQC,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAAK,CACjC,MAAMd,EAAMa,EAAKC,CAAC,EAElB,GAAG,CAACH,EAAO,eAAeX,CAAG,EAAG,MAAO,GAEvC,MAAMV,EAAQqB,EAAOX,CAAG,EAClBT,EAAQqB,EAAOZ,CAAG,EAExB,GAAI,CAAC,KAAK,QAAQV,EAAOC,CAAK,EAAG,MAAO,EAC3C,CAED,MAAO,EACR,CAMD,iBAAiBwB,EAAU,CACzB,KAAK,SAAWA,CACjB,CAMD,gBAAgBf,EAAKC,EAAS,CAC5B,KAAK,SAASD,CAAG,EAAIC,CACtB,CAMD,UAAUe,EAAQ,CAChB,KAAK,OAASA,CACf,CAMD,oBAAoBC,EAAW,CAC7B,KAAK,iBAAmBA,CACzB,CACH,CAMG,OAAO,OAAW,MACnB,OAAO,OAAS,IAAIhC,GC3ctB,SAASiC,EAAS5B,EAAO,CACvB,IAAIF,EAAO,OAAOE,EAClB,OAAOA,GAAS,OAASF,GAAQ,UAAYA,GAAQ,WACvD,CAEA,IAAA+B,EAAiBD,EC7BbE,EAAa,OAAOC,GAAU,UAAYA,GAAUA,EAAO,SAAW,QAAUA,EAEpFC,EAAiBF,ECHbA,EAAaG,EAGbC,EAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,EAAOL,GAAcI,GAAY,SAAS,aAAa,EAAC,EAE5DE,EAAiBD,ECRbA,EAAOF,EAkBPI,EAAM,UAAW,CACnB,OAAOF,EAAK,KAAK,KACnB,EAEAG,EAAiBD,ECrBbE,EAAe,KAUnB,SAASC,EAAgBC,EAAQ,CAG/B,QAFIpC,EAAQoC,EAAO,OAEZpC,KAAWkC,EAAa,KAAKE,EAAO,OAAOpC,CAAK,CAAC,GAAG,CAC3D,OAAOA,CACT,CAEA,IAAAqC,EAAiBF,EClBbA,GAAkBP,EAGlBU,GAAc,OASlB,SAASC,GAASH,EAAQ,CACxB,OAAOA,GACHA,EAAO,MAAM,EAAGD,GAAgBC,CAAM,EAAI,CAAC,EAAE,QAAQE,GAAa,EAAE,CAE1E,CAEA,IAAAE,GAAiBD,GClBbT,GAAOF,EAGPa,GAASX,GAAK,OAElBY,EAAiBD,GCLbA,EAASb,EAGTe,EAAc,OAAO,UAGrBC,GAAiBD,EAAY,eAO7BE,GAAuBF,EAAY,SAGnCG,EAAiBL,EAASA,EAAO,YAAc,OASnD,SAASM,GAAUpD,EAAO,CACxB,IAAIqD,EAAQJ,GAAe,KAAKjD,EAAOmD,CAAc,EACjDG,EAAMtD,EAAMmD,CAAc,EAE9B,GAAI,CACFnD,EAAMmD,CAAc,EAAI,OACxB,IAAII,EAAW,EACnB,MAAc,CAAE,CAEd,IAAIC,EAASN,GAAqB,KAAKlD,CAAK,EAC5C,OAAIuD,IACEF,EACFrD,EAAMmD,CAAc,EAAIG,EAExB,OAAOtD,EAAMmD,CAAc,GAGxBK,CACT,CAEA,IAAAC,GAAiBL,GC5CbJ,GAAc,OAAO,UAOrBE,GAAuBF,GAAY,SASvC,SAASU,GAAe1D,EAAO,CAC7B,OAAOkD,GAAqB,KAAKlD,CAAK,CACxC,CAEA,IAAA2D,GAAiBD,GCrBbZ,EAASb,EACTmB,GAAYQ,GACZF,GAAiBG,GAGjBC,GAAU,gBACVC,GAAe,qBAGfZ,EAAiBL,EAASA,EAAO,YAAc,OASnD,SAASkB,GAAWhE,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAY+D,GAAeD,GAEtCX,GAAkBA,KAAkB,OAAOnD,CAAK,EACpDoD,GAAUpD,CAAK,EACf0D,GAAe1D,CAAK,CAC1B,CAEA,IAAAiE,GAAiBD,GCHjB,SAASE,GAAalE,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QAC1C,CAEA,IAAAmE,GAAiBD,GC5BbF,GAAa/B,GACbiC,GAAeN,GAGfQ,GAAY,kBAmBhB,SAASC,GAASrE,EAAO,CACvB,OAAO,OAAOA,GAAS,UACpBkE,GAAalE,CAAK,GAAKgE,GAAWhE,CAAK,GAAKoE,EACjD,CAEA,IAAAE,GAAiBD,GC5BbzB,GAAWX,GACXL,EAAWgC,EACXS,GAAWR,GAGXU,EAAM,EAAI,EAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAY,cAGZC,GAAe,SAyBnB,SAASC,GAAS5E,EAAO,CACvB,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAET,GAAIqE,GAASrE,CAAK,EAChB,OAAOuE,EAET,GAAI3C,EAAS5B,CAAK,EAAG,CACnB,IAAI6E,EAAQ,OAAO7E,EAAM,SAAW,WAAaA,EAAM,QAAS,EAAGA,EACnEA,EAAQ4B,EAASiD,CAAK,EAAKA,EAAQ,GAAMA,CAC1C,CACD,GAAI,OAAO7E,GAAS,SAClB,OAAOA,IAAU,EAAIA,EAAQ,CAACA,EAEhCA,EAAQ4C,GAAS5C,CAAK,EACtB,IAAI8E,EAAWL,GAAW,KAAKzE,CAAK,EACpC,OAAQ8E,GAAYJ,GAAU,KAAK1E,CAAK,EACpC2E,GAAa3E,EAAM,MAAM,CAAC,EAAG8E,EAAW,EAAI,CAAC,EAC5CN,GAAW,KAAKxE,CAAK,EAAIuE,EAAM,CAACvE,CACvC,CAEA,IAAA+E,GAAiBH,GC/DbhD,GAAWK,EACXI,EAAMuB,EACNgB,EAAWf,GAGXmB,GAAkB,sBAGlBC,GAAY,KAAK,IACjBC,GAAY,KAAK,IAwDrB,SAASC,GAASC,EAAMC,EAAMrE,EAAS,CACrC,IAAIsE,EACAC,EACAC,EACAhC,EACAiC,EACAC,EACAC,EAAiB,EACjBC,EAAU,GACVC,EAAS,GACTC,EAAW,GAEf,GAAI,OAAOV,GAAQ,WACjB,MAAM,IAAI,UAAUJ,EAAe,EAErCK,EAAOT,EAASS,CAAI,GAAK,EACrBzD,GAASZ,CAAO,IAClB4E,EAAU,CAAC,CAAC5E,EAAQ,QACpB6E,EAAS,YAAa7E,EACtBwE,EAAUK,EAASZ,GAAUL,EAAS5D,EAAQ,OAAO,GAAK,EAAGqE,CAAI,EAAIG,EACrEM,EAAW,aAAc9E,EAAU,CAAC,CAACA,EAAQ,SAAW8E,GAG1D,SAASC,EAAWC,EAAM,CACxB,IAAI1F,EAAOgF,EACPW,EAAUV,EAEd,OAAAD,EAAWC,EAAW,OACtBI,EAAiBK,EACjBxC,EAAS4B,EAAK,MAAMa,EAAS3F,CAAI,EAC1BkD,CACR,CAED,SAAS0C,EAAYF,EAAM,CAEzB,OAAAL,EAAiBK,EAEjBP,EAAU,WAAWU,EAAcd,CAAI,EAEhCO,EAAUG,EAAWC,CAAI,EAAIxC,CACrC,CAED,SAAS4C,EAAcJ,EAAM,CAC3B,IAAIK,EAAoBL,EAAON,EAC3BY,EAAsBN,EAAOL,EAC7BY,EAAclB,EAAOgB,EAEzB,OAAOR,EACHX,GAAUqB,EAAaf,EAAUc,CAAmB,EACpDC,CACL,CAED,SAASC,EAAaR,EAAM,CAC1B,IAAIK,EAAoBL,EAAON,EAC3BY,EAAsBN,EAAOL,EAKjC,OAAQD,IAAiB,QAAcW,GAAqBhB,GACzDgB,EAAoB,GAAOR,GAAUS,GAAuBd,CAChE,CAED,SAASW,GAAe,CACtB,IAAIH,EAAO3D,IACX,GAAImE,EAAaR,CAAI,EACnB,OAAOS,EAAaT,CAAI,EAG1BP,EAAU,WAAWU,EAAcC,EAAcJ,CAAI,CAAC,CACvD,CAED,SAASS,EAAaT,EAAM,CAK1B,OAJAP,EAAU,OAINK,GAAYR,EACPS,EAAWC,CAAI,GAExBV,EAAWC,EAAW,OACf/B,EACR,CAED,SAASkD,GAAS,CACZjB,IAAY,QACd,aAAaA,CAAO,EAEtBE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,EAAU,MAChD,CAED,SAASkB,GAAQ,CACf,OAAOlB,IAAY,OAAYjC,EAASiD,EAAapE,EAAK,CAAA,CAC3D,CAED,SAASuE,GAAY,CACnB,IAAIZ,EAAO3D,EAAK,EACZwE,EAAaL,EAAaR,CAAI,EAMlC,GAJAV,EAAW,UACXC,EAAW,KACXG,EAAeM,EAEXa,EAAY,CACd,GAAIpB,IAAY,OACd,OAAOS,EAAYR,CAAY,EAEjC,GAAIG,EAEF,oBAAaJ,CAAO,EACpBA,EAAU,WAAWU,EAAcd,CAAI,EAChCU,EAAWL,CAAY,CAEjC,CACD,OAAID,IAAY,SACdA,EAAU,WAAWU,EAAcd,CAAI,GAElC7B,CACR,CACD,OAAAoD,EAAU,OAASF,EACnBE,EAAU,MAAQD,EACXC,CACT,CAEA,IAAAE,GAAiB3B,kBCtLV,SAAS4B,GAAeC,EAAQC,EAAQ,CAC7C,MAAO,CACL,OAAQD,EACR,SAAU,CAAE,EACZ,gBAAiB,KACjB,YAAa,GACb,OAAQ,KACR,mBAAoB,GACpB,YAAa,GACb,MAAO,GACP,QAAS,OAAO,SAAS,KACzB,aAAc,GACd,mBAAoB,GACpB,UAAW,CACT,UAAW,GACX,SAAU,CACR,QAAS,GACT,QAAS,GACT,MAAO,GACP,KAAM,CAAE,CACT,CACF,EACD,iBAAkB,GAClB,YAAa,CACX,QAAS,CAAE,EACX,KAAM,CAAE,CACT,EACD,YAAa,CACX,MAAME,EAAK,KACX,OAAO,WAAW,QAElB,OAAO,KAAKA,EAAG,QAAQ,EAAE,QAASxG,GAAQ,CACxC,MAAMyG,EAAOD,EAAG,SAASxG,CAAG,EAC5ByG,EAAK,MAAQ,KACbA,EAAK,QAAU,EACvB,CAAO,CACF,EACD,YAAa,CACX,MAAMD,EAAK,KACUA,EAAG,IAAI,iBAAiB,uBAAuB,EACvD,QAASE,GAAO,CAC3BA,EAAG,iBAAiB,QAAUC,GAAM,CAC7BH,EAAG,eAENA,EAAG,aAAe,GAG9B,CAAS,CACT,CAAO,CACF,EACD,SAAU,CACR,MAAMA,EAAK,KAELI,EAAM,IAAI,IAAI,KAAK,OAAO,EAC1BC,EAAMD,EAAI,aAAa,IAAI,KAAK,EAClCA,EAAI,SACNJ,EAAG,SAAS,IAAM,CAChB,KAAM,MACN,QAAS,GACT,aAAc,GACd,UAAW,MACX,MAAOK,CACjB,EAEK,EACD,eAAgB,CACd,MAAML,EAAK,KAEXA,EAAG,SAAS,UAAY,CACtB,KAAM,YACN,QAAS,GACT,aAAc,GACd,UAAW,mBACX,MAAO,CAAC,UAAU,CAC1B,EAEMA,EAAG,UAAU,IAAM,CACjB,MAAMM,EAAYN,EAAG,MAAM,gBAGrBO,EAAiB,SAAUC,EAAU,CACzCR,EAAG,SAAS,UAAU,QAAU,GAChCA,EAAG,SAAS,UAAU,MAAQQ,EAC9BR,EAAG,SAAS,UAAU,aAAe,EAC/C,EAEQ,OAAO,gBAAkB,IAAM,CAG7B,KAAK,iBAAmB,KAAK,OAAO,iBACpC,OAAO,WAAW,OAAOA,EAAG,MAAM,mBAAoB,CACpD,QAAS,KAAK,iBACd,SAAUO,CACtB,CAAW,CACX,EAMQ,MAAME,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,iFACbH,EAAU,YAAYG,CAAM,CACpC,CAAO,CACF,EACD,kBAAmB,CACjB,MAAMT,EAAK,KAEXA,EAAG,IAAI,aAAa,aAAc,EAAK,EAGvC,MAAMU,EAAS,IAAIjI,EACnBiI,EAAO,QAAQ,SAAU,CAAC5H,EAAOO,IAAU,OAAOP,EAAM,MAAM,IAAMO,CAAK,EACzEqH,EAAO,gBAAgB,WAAY,sBAAsB,EACzDA,EAAO,gBAAgB,QAAS,wBAAwB,EACxDA,EAAO,gBAAgB,UAAW,qCAAqC,EACvEA,EAAO,gBAAgB,SAAU,iCAAiC,EAClEA,EAAO,gBAAgB,YAAa,qDAAqD,EAEzFV,EAAG,OAASU,EACZ,OAAO,OAASA,EAEhB,OAAO,KAAKV,EAAG,QAAQ,EAAE,QAASxG,GAAQ,CACxC,MAAMyG,EAAOD,EAAG,SAASxG,CAAG,EAC5BwG,EAAG,OAAO,YAAYxG,CAAG,SAAWmH,GAAa,CAC/C,GAAIV,EAAK,OAASA,EAAK,QAAU,KAAM,CACrC,IAAIW,EAAQ,GACRZ,EAAG,OAAO,QAAQC,EAAK,KAAK,EAC9BW,EAAQZ,EAAG,OAAO,GAAGC,EAAK,MAAM,KAAK,GAAG,EAAGA,EAAK,KAAK,EAErDW,EAAQZ,EAAG,OAAO,GAAGC,EAAK,MAAOA,EAAK,KAAK,EAEzCW,IAAU,IACZX,EAAK,QAAU,GACfA,EAAK,aAAeS,EAAO,gBAAgBE,EAAO,CAChD,MAAOX,EAAK,UACZ,MAAO,EACvB,CAAe,IAEDA,EAAK,QAAU,GACfA,EAAK,aAAe,GAEvB,CACX,CAAS,CACT,CAAO,CACF,EACD,YAAa,CACX,MAAMD,EAAK,KAEXA,EAAG,gBAAgB,QAASC,GAAS,CACnC,MAAMxF,EAAYwF,EAAK,aAAa,sBAAsB,EA0B1D,GAzBAD,EAAG,SAASvF,CAAS,EAAI,CACvB,KAAMA,EACN,SAAU,IACJwF,EAAK,QAAQ,MAEX,EADoBA,EAAK,QAAQ,MACjB,SAAS,UAAU,EAKlC,IACL,EACJ,aAAc,GACd,UAAWA,EAAK,aAAa,sBAAsB,EACnD,OAAQ,IACFA,EAAK,QAAQ,MACR,KAAK,MAAMA,EAAK,QAAQ,KAAK,EAE/B,IACL,CACd,EAKYA,EAAK,KAAM,CAQb,IAPIA,EAAK,OAAS,QAAUA,EAAK,OAAS,SAAWA,EAAK,OAAS,OAASA,EAAK,UAAY,aACvFA,EAAK,QACPD,EAAG,SAASvF,CAAS,EAAE,MAAQwF,EAAK,MACpCD,EAAG,SAASvF,CAAS,EAAE,QAAU,IAIjCwF,EAAK,OAAS,QAAS,CACzB,MAAMY,EAAe,SAAS,cAAc,cAAcpG,CAAS,WAAW,EAC1EoG,IACFb,EAAG,SAASvF,CAAS,EAAE,QAAU,GACjCuF,EAAG,SAASvF,CAAS,EAAE,MAAQoG,EAAa,MAE/C,CAED,GAAIZ,EAAK,OAAS,WAChB,GAAIA,EAAK,QAAQ,YAAc,OAE7BD,EAAG,SAASvF,CAAS,EAAE,MAAQ,GACV,SAAS,cAAc,cAAcA,CAAS,WAAW,EAG5EuF,EAAG,SAASvF,CAAS,EAAE,MAAQ,GAE/BuF,EAAG,SAASvF,CAAS,EAAE,MAAQ,OAE5B,CAELuF,EAAG,SAASvF,CAAS,EAAE,MAAQ,CAAA,EAC/B,MAAMqG,EAAe,SAAS,iBAAiB,cAAcrG,CAAS,WAAW,EAE7EqG,EAAa,SACfd,EAAG,SAASvF,CAAS,EAAE,QAAU,GACjCqG,EAAa,QAASC,GAAgB,CACpCf,EAAG,SAASvF,CAAS,EAAE,MAAM,KAAKsG,EAAY,KAAK,CACrE,CAAiB,EAEJ,CAGH,GAAId,EAAK,UAAY,SAAU,CAC7B,MAAMe,EAAiB,SAAS,cAAc,eAAevG,CAAS,kBAAkB,EACpFuG,EAAe,QACjBhB,EAAG,SAASvF,CAAS,EAAE,QAAU,GACjCuF,EAAG,SAASvF,CAAS,EAAE,MAAQuG,EAAe,MAEjD,CACF,CAEG,KAAK,OAAO,QACdhB,EAAG,SAAS,MAAQ,CAClB,KAAM,QACN,QAAS,GACT,aAAc,GACd,UAAW,QACX,MAAO,KAAK,OAAO,KAC/B,GAGY,KAAK,OAAO,aACdA,EAAG,SAAS,WAAa,CACvB,KAAM,aACN,QAAS,GACT,aAAc,GACd,UAAW,aACX,MAAO,KAAK,OAAO,UAC/B,EAEA,CAAO,CAIF,EACD,cAAe,CACb,MAAMA,EAAK,KACX,OAAO,KAAKA,EAAG,QAAQ,EAAE,QAASxG,GAAQ,CACxC,MAAMyG,EAAOD,EAAG,SAASxG,CAAG,EAC5B,GAAIyG,EAAK,MAAO,CACd,IAAIW,EAAQ,GACRZ,EAAG,OAAO,QAAQC,EAAK,KAAK,EAC9BW,EAAQZ,EAAG,OAAO,GAAGC,EAAK,MAAM,KAAK,GAAG,EAAGA,EAAK,KAAK,EAErDW,EAAQZ,EAAG,OAAO,GAAGC,EAAK,MAAOA,EAAK,KAAK,EAGzCW,IAAU,KACZZ,EAAG,SAASC,EAAK,IAAI,EAAE,aAAeD,EAAG,OAAO,gBAAgBY,EAAO,CACrE,MAAOX,EAAK,UACZ,MAAO,EACrB,CAAa,EAEJ,CACT,CAAO,CACF,EACD,gBAAiB,CACf,MAAMD,EAAK,KACX,IAAIiB,EAAW,CAAA,EACXC,EAAU,GACd,cAAO,KAAKlB,EAAG,QAAQ,EAAE,QAASxG,GAAQ,CACxCyH,EAAS,KAAKjB,EAAG,SAASxG,CAAG,EAAE,OAAO,CAC9C,CAAO,EACDyH,EAAW,CAAC,GAAG,IAAI,IAAIA,CAAQ,CAAC,EAE5BA,EAAS,OAAS,IACpBC,EAAU,IAGRD,EAAS,SAAW,GAClBA,EAAS,CAAC,IACZC,EAAU,IAIPA,CACR,EACD,UAAW,CACT,MAAMlB,EAAK,KACLmB,EAAO,CAAA,EAEb,OAAO,KAAKnB,EAAG,QAAQ,EAAE,QAASxG,GAAQ,CACpCwG,EAAG,SAASxG,CAAG,EAAE,QAAU,GAC7B2H,EAAK3H,CAAG,EAAI,GAEZ2H,EAAK3H,CAAG,EAAIwG,EAAG,SAASxG,CAAG,EAAE,OAAS,EAEhD,CAAO,EACDwG,EAAG,UAAU,UAAY,GAEzB,KAAK,YAAc,KAAK,OAAO,YAE/BoB,EACG,KAAK,KAAK,YAAaD,CAAI,EAC3B,KAAMX,GAAa,CAClBR,EAAG,UAAU,SAAS,QAAUQ,EAAS,KAAK,QAC9CR,EAAG,mBAAqB,GAExBA,EAAG,UAAU,SAAS,QAAUQ,EAAS,KAAK,QAE1CA,EAAS,KAAK,QAChBR,EAAG,UAAU,SAAS,MAAQQ,EAAS,KAAK,OAG9CR,EAAG,UAAU,SAAS,KAAO,KAAK,UAAUQ,EAAS,KAAK,IAAI,EAC9DR,EAAG,UAAU,UAAY,GACrBQ,EAAS,KAAK,UAAY,IAC5BR,EAAG,WAAU,CAEzB,CAAS,EACA,MAAOY,GAAU,CAEhBZ,EAAG,UAAU,UAAY,EACnC,CAAS,CACJ,EACD,WAAW,EAAG,CACZ,MAAMA,EAAK,KACX,EAAE,eAAc,EACZA,EAAG,UAAU,YAAc,KACxBA,EAAG,iBAGNA,EAAG,SAAQ,EAFX,KAAK,aAAY,EAMtB,EACD,8BAA+B,CAC7B,MAAMA,EAAK,KACQ,OAAO,YACR,IAChBA,EAAG,mBAAqB,GAExBA,EAAG,mBAAqB,EAE3B,EACD,MAAO,CACL,MAAMA,EAAK,KACLqB,EAAkBrB,EAAG,IAAI,iBAAiB,WAAW,EAC3DA,EAAG,gBAAkBqB,EACrBrB,EAAG,WAAU,EACbA,EAAG,iBAAgB,EACnBA,EAAG,WAAU,EACbA,EAAG,6BAA4B,EAC/B,OAAO,iBAAiB,SAAU/B,GAAS,KAAK,6BAA8B,GAAG,CAAC,CACnF,CACL,CACA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}