{"version":3,"file":"ml-pls.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/dc/nipals.js","../src/util/utils.js","../src/PLS.js","../src/KOPLS.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-cross-validation/src/getFolds.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-roc-multiclass/lib-esm/getAuc.js","../node_modules/ml-roc-multiclass/lib-esm/utilities/getClasses.js","../node_modules/ml-roc-multiclass/lib-esm/utilities/getClassesPairs.js","../node_modules/ml-roc-multiclass/lib-esm/utilities/getNumericalTargets.js","../node_modules/ml-roc-multiclass/lib-esm/utilities/getSelectedResults.js","../node_modules/ml-roc-multiclass/lib-esm/utilities/getThresholds.js","../node_modules/ml-roc-multiclass/lib-esm/getRocCurve.js","../src/oplsNipals.js","../src/util/tss.js","../src/OPLS.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          iter = iter + 1;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (Array.isArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n","import { Matrix } from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n  return Math.sqrt(X.clone().apply(pow2array).sum());\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n  this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n  let means = dataset.mean('column');\n  let std = dataset.standardDeviation('column', {\n    mean: means,\n    unbiased: true,\n  });\n  let result = Matrix.checkMatrix(dataset).subRowVector(means);\n  return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n  if (isMatrix) {\n    for (let i = 0; i < array.length; ++i) {\n      for (let j = 0; j < array[i].length; ++j) {\n        let elem = array[i][j];\n        array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n      }\n    }\n  } else {\n    for (let i = 0; i < array.length; ++i) {\n      array[i] = new Matrix(array[i]);\n    }\n  }\n\n  return array;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport * as Utils from './util/utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n  /**\n   * Constructor for Partial Least Squares (PLS)\n   * @param {object} options\n   * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n   * @param {number} [options.tolerance=1e-5]\n   * @param {boolean} [options.scale=true] - rescale dataset using mean.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.meanX = model.meanX;\n      this.stdDevX = model.stdDevX;\n      this.meanY = model.meanY;\n      this.stdDevY = model.stdDevY;\n      this.PBQ = Matrix.checkMatrix(model.PBQ);\n      this.R2X = model.R2X;\n      this.scale = model.scale;\n      this.scaleMethod = model.scaleMethod;\n      this.tolerance = model.tolerance;\n    } else {\n      let { tolerance = 1e-5, scale = true } = options;\n      this.tolerance = tolerance;\n      this.scale = scale;\n      this.latentVectors = options.latentVectors;\n    }\n  }\n\n  /**\n   * Fits the model with the given data and predictions, in this function is calculated the\n   * following outputs:\n   *\n   * T - Score matrix of X\n   * P - Loading matrix of X\n   * U - Score matrix of Y\n   * Q - Loading matrix of Y\n   * B - Matrix of regression coefficient\n   * W - Weight matrix of X\n   *\n   * @param {Matrix|Array} trainingSet\n   * @param {Matrix|Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n    trainingValues = Matrix.checkMatrix(trainingValues);\n\n    if (trainingSet.length !== trainingValues.length) {\n      throw new RangeError(\n        'The number of X rows must be equal to the number of Y rows',\n      );\n    }\n\n    this.meanX = trainingSet.mean('column');\n    this.stdDevX = trainingSet.standardDeviation('column', {\n      mean: this.meanX,\n      unbiased: true,\n    });\n    this.meanY = trainingValues.mean('column');\n    this.stdDevY = trainingValues.standardDeviation('column', {\n      mean: this.meanY,\n      unbiased: true,\n    });\n\n    if (this.scale) {\n      trainingSet = trainingSet\n        .clone()\n        .subRowVector(this.meanX)\n        .divRowVector(this.stdDevX);\n      trainingValues = trainingValues\n        .clone()\n        .subRowVector(this.meanY)\n        .divRowVector(this.stdDevY);\n    }\n\n    if (this.latentVectors === undefined) {\n      this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n    }\n\n    let rx = trainingSet.rows;\n    let cx = trainingSet.columns;\n    let ry = trainingValues.rows;\n    let cy = trainingValues.columns;\n\n    let ssqXcal = trainingSet.clone().mul(trainingSet).sum(); // for the r²\n    let sumOfSquaresY = trainingValues.clone().mul(trainingValues).sum();\n\n    let tolerance = this.tolerance;\n    let n = this.latentVectors;\n    let T = Matrix.zeros(rx, n);\n    let P = Matrix.zeros(cx, n);\n    let U = Matrix.zeros(ry, n);\n    let Q = Matrix.zeros(cy, n);\n    let B = Matrix.zeros(n, n);\n    let W = P.clone();\n    let k = 0;\n    let t;\n    let w;\n    let q;\n    let p;\n\n    while (Utils.norm(trainingValues) > tolerance && k < n) {\n      let transposeX = trainingSet.transpose();\n      let transposeY = trainingValues.transpose();\n\n      let tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n      let uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n      let t1 = trainingSet.getColumnVector(tIndex);\n      let u = trainingValues.getColumnVector(uIndex);\n      t = Matrix.zeros(rx, 1);\n\n      while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n        w = transposeX.mmul(u);\n        w.div(Utils.norm(w));\n        t = t1;\n        t1 = trainingSet.mmul(w);\n        q = transposeY.mmul(t1);\n        q.div(Utils.norm(q));\n        u = trainingValues.mmul(q);\n      }\n\n      t = t1;\n      let num = transposeX.mmul(t);\n      let den = t.transpose().mmul(t).get(0, 0);\n      p = num.div(den);\n      let pnorm = Utils.norm(p);\n      p.div(pnorm);\n      t.mul(pnorm);\n      w.mul(pnorm);\n\n      num = u.transpose().mmul(t);\n      den = t.transpose().mmul(t).get(0, 0);\n      let b = num.div(den).get(0, 0);\n      trainingSet.sub(t.mmul(p.transpose()));\n      trainingValues.sub(t.clone().mul(b).mmul(q.transpose()));\n\n      T.setColumn(k, t);\n      P.setColumn(k, p);\n      U.setColumn(k, u);\n      Q.setColumn(k, q);\n      W.setColumn(k, w);\n\n      B.set(k, k, b);\n      k++;\n    }\n\n    k--;\n    T = T.subMatrix(0, T.rows - 1, 0, k);\n    P = P.subMatrix(0, P.rows - 1, 0, k);\n    U = U.subMatrix(0, U.rows - 1, 0, k);\n    Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n    W = W.subMatrix(0, W.rows - 1, 0, k);\n    B = B.subMatrix(0, k, 0, k);\n\n    this.ssqYcal = sumOfSquaresY;\n    this.E = trainingSet;\n    this.F = trainingValues;\n    this.T = T;\n    this.P = P;\n    this.U = U;\n    this.Q = Q;\n    this.W = W;\n    this.B = B;\n    this.PBQ = P.mmul(B).mmul(Q.transpose());\n    this.R2X = t\n      .transpose()\n      .mmul(t)\n      .mmul(p.transpose().mmul(p))\n      .div(ssqXcal)\n      .get(0, 0);\n  }\n\n  /**\n   * Predicts the behavior of the given dataset.\n   * @param {Matrix|Array} dataset - data to be predicted.\n   * @return {Matrix} - predictions of each element of the dataset.\n   */\n  predict(dataset) {\n    let X = Matrix.checkMatrix(dataset);\n    if (this.scale) {\n      X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n    }\n    let Y = X.mmul(this.PBQ);\n    Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n    return Y;\n  }\n\n  /**\n   * Returns the explained variance on training of the PLS model\n   * @return {number}\n   */\n  getExplainedVariance() {\n    return this.R2X;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      name: 'PLS',\n      R2X: this.R2X,\n      meanX: this.meanX,\n      stdDevX: this.stdDevX,\n      meanY: this.meanY,\n      stdDevY: this.stdDevY,\n      PBQ: this.PBQ,\n      tolerance: this.tolerance,\n      scale: this.scale,\n    };\n  }\n\n  /**\n   * Load a PLS model from a JSON Object\n   * @param {object} model\n   * @return {PLS} - PLS object from the given model\n   */\n  static load(model) {\n    if (model.name !== 'PLS') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n    return new PLS(true, model);\n  }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n  return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './util/utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n  /**\n   * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n   * @param {object} options\n   * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n   * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n   * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.trainingSet = new Matrix(model.trainingSet);\n      this.YLoadingMat = new Matrix(model.YLoadingMat);\n      this.SigmaPow = new Matrix(model.SigmaPow);\n      this.YScoreMat = new Matrix(model.YScoreMat);\n      this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n      this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n      this.YOrthEigen = model.YOrthEigen;\n      this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n      this.toNorm = initializeMatrices(model.toNorm, false);\n      this.TURegressionCoeff = initializeMatrices(\n        model.TURegressionCoeff,\n        false,\n      );\n      this.kernelX = initializeMatrices(model.kernelX, true);\n      this.kernel = model.kernel;\n      this.orthogonalComp = model.orthogonalComp;\n      this.predictiveComp = model.predictiveComp;\n    } else {\n      if (options.predictiveComponents === undefined) {\n        throw new RangeError('no predictive components found!');\n      }\n      if (options.orthogonalComponents === undefined) {\n        throw new RangeError('no orthogonal components found!');\n      }\n      if (options.kernel === undefined) {\n        throw new RangeError('no kernel found!');\n      }\n\n      this.orthogonalComp = options.orthogonalComponents;\n      this.predictiveComp = options.predictiveComponents;\n      this.kernel = options.kernel;\n    }\n  }\n\n  /**\n   * Train the K-OPLS model with the given training set and labels.\n   * @param {Matrix|Array} trainingSet\n   * @param {Matrix|Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n    trainingValues = Matrix.checkMatrix(trainingValues);\n\n    // to save and compute kernel with the prediction dataset.\n    this.trainingSet = trainingSet.clone();\n\n    let kernelX = this.kernel.compute(trainingSet);\n\n    let Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n    let temp = kernelX;\n    kernelX = new Array(this.orthogonalComp + 1);\n    for (let i = 0; i < this.orthogonalComp + 1; i++) {\n      kernelX[i] = new Array(this.orthogonalComp + 1);\n    }\n    kernelX[0][0] = temp;\n\n    let result = new SingularValueDecomposition(\n      trainingValues.transpose().mmul(kernelX[0][0]).mmul(trainingValues),\n      {\n        computeLeftSingularVectors: true,\n        computeRightSingularVectors: false,\n      },\n    );\n    let YLoadingMat = result.leftSingularVectors;\n    let Sigma = result.diagonalMatrix;\n\n    YLoadingMat = YLoadingMat.subMatrix(\n      0,\n      YLoadingMat.rows - 1,\n      0,\n      this.predictiveComp - 1,\n    );\n    Sigma = Sigma.subMatrix(\n      0,\n      this.predictiveComp - 1,\n      0,\n      this.predictiveComp - 1,\n    );\n\n    let YScoreMat = trainingValues.mmul(YLoadingMat);\n\n    let predScoreMat = new Array(this.orthogonalComp + 1);\n    let TURegressionCoeff = new Array(this.orthogonalComp + 1);\n    let YOrthScoreMat = new Array(this.orthogonalComp);\n    let YOrthLoadingVec = new Array(this.orthogonalComp);\n    let YOrthEigen = new Array(this.orthogonalComp);\n    let YOrthScoreNorm = new Array(this.orthogonalComp);\n\n    let SigmaPow = Matrix.pow(Sigma, -0.5);\n    // to avoid errors, check infinity\n\n    function removeInfinity(i, j) {\n      if (this.get(i, j) === Infinity) {\n        this.set(i, j, 0);\n      }\n    }\n\n    SigmaPow.apply(removeInfinity);\n\n    for (let i = 0; i < this.orthogonalComp; ++i) {\n      predScoreMat[i] = kernelX[0][i]\n        .transpose()\n        .mmul(YScoreMat)\n        .mmul(SigmaPow);\n\n      let TpiPrime = predScoreMat[i].transpose();\n      TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i]))\n        .mmul(TpiPrime)\n        .mmul(YScoreMat);\n\n      result = new SingularValueDecomposition(\n        TpiPrime.mmul(\n          Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)),\n        ).mmul(predScoreMat[i]),\n        {\n          computeLeftSingularVectors: true,\n          computeRightSingularVectors: false,\n        },\n      );\n      let CoTemp = result.leftSingularVectors;\n      let SoTemp = result.diagonalMatrix;\n\n      YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n      YOrthEigen[i] = SoTemp.get(0, 0);\n\n      YOrthScoreMat[i] = Matrix.sub(\n        kernelX[i][i],\n        predScoreMat[i].mmul(TpiPrime),\n      )\n        .mmul(predScoreMat[i])\n        .mmul(YOrthLoadingVec[i])\n        .mul(Math.pow(YOrthEigen[i], -0.5));\n\n      let toiPrime = YOrthScoreMat[i].transpose();\n      YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n      YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n      let ITo = Matrix.sub(\n        Identity,\n        YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()),\n      );\n\n      kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n      kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n    }\n\n    let lastScoreMat = (predScoreMat[this.orthogonalComp] = kernelX[0][\n      this.orthogonalComp\n    ]\n      .transpose()\n      .mmul(YScoreMat)\n      .mmul(SigmaPow));\n\n    let lastTpPrime = lastScoreMat.transpose();\n    TURegressionCoeff[this.orthogonalComp] = inverse(\n      lastTpPrime.mmul(lastScoreMat),\n    )\n      .mmul(lastTpPrime)\n      .mmul(YScoreMat);\n\n    this.YLoadingMat = YLoadingMat;\n    this.SigmaPow = SigmaPow;\n    this.YScoreMat = YScoreMat;\n    this.predScoreMat = predScoreMat;\n    this.YOrthLoadingVec = YOrthLoadingVec;\n    this.YOrthEigen = YOrthEigen;\n    this.YOrthScoreMat = YOrthScoreMat;\n    this.toNorm = YOrthScoreNorm;\n    this.TURegressionCoeff = TURegressionCoeff;\n    this.kernelX = kernelX;\n  }\n\n  /**\n   * Predicts the output given the matrix to predict.\n   * @param {Matrix|Array} toPredict\n   * @return {{y: Matrix, predScoreMat: Array<Matrix>, predYOrthVectors: Array<Matrix>}} predictions\n   */\n  predict(toPredict) {\n    let KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n    let temp = KTestTrain;\n    KTestTrain = new Array(this.orthogonalComp + 1);\n    for (let i = 0; i < this.orthogonalComp + 1; i++) {\n      KTestTrain[i] = new Array(this.orthogonalComp + 1);\n    }\n    KTestTrain[0][0] = temp;\n\n    let YOrthScoreVector = new Array(this.orthogonalComp);\n    let predScoreMat = new Array(this.orthogonalComp);\n\n    let i;\n    for (i = 0; i < this.orthogonalComp; ++i) {\n      predScoreMat[i] = KTestTrain[i][0]\n        .mmul(this.YScoreMat)\n        .mmul(this.SigmaPow);\n\n      YOrthScoreVector[i] = Matrix.sub(\n        KTestTrain[i][i],\n        predScoreMat[i].mmul(this.predScoreMat[i].transpose()),\n      )\n        .mmul(this.predScoreMat[i])\n        .mmul(this.YOrthLoadingVec[i])\n        .mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n      YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n      let scoreMatPrime = this.YOrthScoreMat[i].transpose();\n      KTestTrain[i + 1][0] = Matrix.sub(\n        KTestTrain[i][0],\n        YOrthScoreVector[i]\n          .mmul(scoreMatPrime)\n          .mmul(this.kernelX[0][i].transpose()),\n      );\n\n      let p1 = Matrix.sub(\n        KTestTrain[i][0],\n        KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime),\n      );\n      let p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n      let p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n      KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n    }\n\n    predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n    let prediction = predScoreMat[i]\n      .mmul(this.TURegressionCoeff[i])\n      .mmul(this.YLoadingMat.transpose());\n\n    return {\n      prediction: prediction,\n      predScoreMat: predScoreMat,\n      predYOrthVectors: YOrthScoreVector,\n    };\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      name: 'K-OPLS',\n      YLoadingMat: this.YLoadingMat,\n      SigmaPow: this.SigmaPow,\n      YScoreMat: this.YScoreMat,\n      predScoreMat: this.predScoreMat,\n      YOrthLoadingVec: this.YOrthLoadingVec,\n      YOrthEigen: this.YOrthEigen,\n      YOrthScoreMat: this.YOrthScoreMat,\n      toNorm: this.toNorm,\n      TURegressionCoeff: this.TURegressionCoeff,\n      kernelX: this.kernelX,\n      trainingSet: this.trainingSet,\n      orthogonalComp: this.orthogonalComp,\n      predictiveComp: this.predictiveComp,\n    };\n  }\n\n  /**\n   * Load a K-OPLS with the given model.\n   * @param {object} model\n   * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n   * @return {KOPLS}\n   */\n  static load(model, kernel) {\n    if (model.name !== 'K-OPLS') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n\n    if (!kernel) {\n      throw new RangeError('You must provide a kernel for the model!');\n    }\n\n    model.kernel = kernel;\n    return new KOPLS(true, model);\n  }\n}\n","/**\n *  Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array<Array<number>>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n *     the predicted label.\n * @param {Array<any>} labels - Labels of the confusion matrix, a 1D Array\n */\nexport default class ConfusionMatrix {\n  constructor(matrix, labels) {\n    if (matrix.length !== matrix[0].length) {\n      throw new Error('Confusion matrix must be square');\n    }\n    if (labels.length !== matrix.length) {\n      throw new Error(\n        'Confusion matrix and labels should have the same length',\n      );\n    }\n    this.labels = labels;\n    this.matrix = matrix;\n  }\n\n  /**\n   * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n   * the correct order!\n   * @param {Array<any>} actual  - The predicted labels of the classification\n   * @param {Array<any>} predicted     - The actual labels of the classification. Has to be of same length as\n   *     predicted.\n   * @param {object} [options] - Additional options\n   * @param {Array<any>} [options.labels] - The list of labels that should be used. If not provided the distinct set\n   *     of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n   *     '==='\n   * @return {ConfusionMatrix} - Confusion matrix\n   */\n  static fromLabels(actual, predicted, options = {}) {\n    if (predicted.length !== actual.length) {\n      throw new Error('predicted and actual must have the same length');\n    }\n    let distinctLabels;\n    if (options.labels) {\n      distinctLabels = new Set(options.labels);\n    } else {\n      distinctLabels = new Set([...actual, ...predicted]);\n    }\n    distinctLabels = Array.from(distinctLabels);\n    if (options.sort) {\n      distinctLabels.sort(options.sort);\n    }\n\n    // Create confusion matrix and fill with 0's\n    const matrix = Array.from({ length: distinctLabels.length });\n    for (let i = 0; i < matrix.length; i++) {\n      matrix[i] = new Array(matrix.length);\n      matrix[i].fill(0);\n    }\n\n    for (let i = 0; i < predicted.length; i++) {\n      const actualIdx = distinctLabels.indexOf(actual[i]);\n      const predictedIdx = distinctLabels.indexOf(predicted[i]);\n      if (actualIdx >= 0 && predictedIdx >= 0) {\n        matrix[actualIdx][predictedIdx]++;\n      }\n    }\n\n    return new ConfusionMatrix(matrix, distinctLabels);\n  }\n\n  /**\n   * Get the confusion matrix\n   * @return {Array<Array<number> >}\n   */\n  getMatrix() {\n    return this.matrix;\n  }\n\n  getLabels() {\n    return this.labels;\n  }\n\n  /**\n   * Get the total number of samples\n   * @return {number}\n   */\n  getTotalCount() {\n    let predicted = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        predicted += this.matrix[i][j];\n      }\n    }\n    return predicted;\n  }\n\n  /**\n   * Get the total number of true predictions\n   * @return {number}\n   */\n  getTrueCount() {\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      count += this.matrix[i][i];\n    }\n    return count;\n  }\n\n  /**\n   * Get the total number of false predictions.\n   * @return {number}\n   */\n  getFalseCount() {\n    return this.getTotalCount() - this.getTrueCount();\n  }\n\n  /**\n   * Get the number of true positive predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTruePositiveCount(label) {\n    const index = this.getIndex(label);\n    return this.matrix[index][index];\n  }\n\n  /**\n   * Get the number of true negative predictions\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTrueNegativeCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        if (i !== index && j !== index) {\n          count += this.matrix[i][j];\n        }\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of false positive predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalsePositiveCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      if (i !== index) {\n        count += this.matrix[i][index];\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of false negative predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseNegativeCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      if (i !== index) {\n        count += this.matrix[index][i];\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of real positive samples.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getPositiveCount(label) {\n    return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n  }\n\n  /**\n   * Get the number of real negative samples.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getNegativeCount(label) {\n    return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n  }\n\n  /**\n   * Get the index in the confusion matrix that corresponds to the given label\n   * @param {any} label - The label to search for\n   * @throws if the label is not found\n   * @return {number}\n   */\n  getIndex(label) {\n    const index = this.labels.indexOf(label);\n    if (index === -1) throw new Error('The label does not exist');\n    return index;\n  }\n\n  /**\n   * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n   * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number} - The true positive rate [0-1]\n   */\n  getTruePositiveRate(label) {\n    return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n  }\n\n  /**\n   * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n   * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTrueNegativeRate(label) {\n    return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n  }\n\n  /**\n   * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n   * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getPositivePredictiveValue(label) {\n    const TP = this.getTruePositiveCount(label);\n    return TP / (TP + this.getFalsePositiveCount(label));\n  }\n\n  /**\n   * Negative predictive value\n   * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getNegativePredictiveValue(label) {\n    const TN = this.getTrueNegativeCount(label);\n    return TN / (TN + this.getFalseNegativeCount(label));\n  }\n\n  /**\n   * False negative rate a.k.a. miss rate.\n   * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseNegativeRate(label) {\n    return 1 - this.getTruePositiveRate(label);\n  }\n\n  /**\n   * False positive rate a.k.a. fall-out rate.\n   * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalsePositiveRate(label) {\n    return 1 - this.getTrueNegativeRate(label);\n  }\n\n  /**\n   * False discovery rate (FDR)\n   * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseDiscoveryRate(label) {\n    const FP = this.getFalsePositiveCount(label);\n    return FP / (FP + this.getTruePositiveCount(label));\n  }\n\n  /**\n   * False omission rate (FOR)\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseOmissionRate(label) {\n    const FN = this.getFalseNegativeCount(label);\n    return FN / (FN + this.getTruePositiveCount(label));\n  }\n\n  /**\n   * F1 score\n   * {@link https://en.wikipedia.org/wiki/F1_score}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getF1Score(label) {\n    const TP = this.getTruePositiveCount(label);\n    return (\n      (2 * TP) /\n      (2 * TP +\n        this.getFalsePositiveCount(label) +\n        this.getFalseNegativeCount(label))\n    );\n  }\n\n  /**\n   * Matthews correlation coefficient (MCC)\n   * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getMatthewsCorrelationCoefficient(label) {\n    const TP = this.getTruePositiveCount(label);\n    const TN = this.getTrueNegativeCount(label);\n    const FP = this.getFalsePositiveCount(label);\n    const FN = this.getFalseNegativeCount(label);\n    return (\n      (TP * TN - FP * FN) /\n      Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))\n    );\n  }\n\n  /**\n   * Informedness\n   * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getInformedness(label) {\n    return (\n      this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1\n    );\n  }\n\n  /**\n   * Markedness\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getMarkedness(label) {\n    return (\n      this.getPositivePredictiveValue(label) +\n      this.getNegativePredictiveValue(label) -\n      1\n    );\n  }\n\n  /**\n   * Get the confusion table.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {Array<Array<number> >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n   */\n  getConfusionTable(label) {\n    return [\n      [this.getTruePositiveCount(label), this.getFalseNegativeCount(label)],\n      [this.getFalsePositiveCount(label), this.getTrueNegativeCount(label)],\n    ];\n  }\n\n  /**\n   * Get total accuracy.\n   * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n   */\n  getAccuracy() {\n    let correct = 0;\n    let incorrect = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        if (i === j) correct += this.matrix[i][j];\n        else incorrect += this.matrix[i][j];\n      }\n    }\n    return correct / (correct + incorrect);\n  }\n\n  /**\n   * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n   * @param {any} actual - The true label\n   * @param {any} predicted - The predicted label\n   * @return {number} - The element in the confusion matrix\n   */\n  getCount(actual, predicted) {\n    const actualIndex = this.getIndex(actual);\n    const predictedIndex = this.getIndex(predicted);\n    return this.matrix[actualIndex][predictedIndex];\n  }\n\n  /**\n   * Compute the general prediction accuracy\n   * @deprecated Use getAccuracy\n   * @return {number} - The prediction accuracy ([0-1]\n   */\n  get accuracy() {\n    return this.getAccuracy();\n  }\n\n  /**\n   * Compute the number of predicted observations\n   * @deprecated Use getTotalCount\n   * @return {number}\n   */\n  get total() {\n    return this.getTotalCount();\n  }\n}\n","/**\n * get folds indexes\n * @param {Array} features\n * @param {Number} k - number of folds, a\n */\nexport function getFolds(features, k = 5) {\n  let N = features.length;\n  let allIdx = new Array(N);\n  for (let i = 0; i < N; i++) {\n    allIdx[i] = i;\n  }\n\n  let l = Math.floor(N / k);\n  // create random k-folds\n  let current = [];\n  let folds = [];\n  while (allIdx.length) {\n    let randi = Math.floor(Math.random() * allIdx.length);\n    current.push(allIdx[randi]);\n    allIdx.splice(randi, 1);\n    if (current.length === l) {\n      folds.push(current);\n      current = [];\n    }\n  }\n  // we push the remaining to the last fold so that the total length is\n  // preserved. Otherwise the Q2 will fail.\n  if (current.length) current.forEach((e) => folds[k - 1].push(e));\n  folds = folds.slice(0, k);\n\n  let foldsIndex = folds.map((x, idx) => ({\n    testIndex: x,\n    trainIndex: [].concat(...folds.filter((el, idx2) => idx2 !== idx)),\n  }));\n  return foldsIndex;\n}\n","import isArray from 'is-any-array';\n\nfunction sum(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","import sum from 'ml-array-sum';\n\nfunction mean(input) {\n  return sum(input) / input.length;\n}\n\nexport default mean;\n","import mean from 'ml-array-mean';\n/**\n * Returns the Area under the curve.\n * @param curves Object containing the true positivie and false positive rate vectors.\n * @return Area under the curve.\n */\nexport function getAuc(curves) {\n    const auc = [];\n    for (const curve of curves) {\n        let area = 0;\n        const x = curve.specificities;\n        const y = curve.sensitivities;\n        for (let i = 1; i < x.length; i++) {\n            area += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n        }\n        area = area > 0.5 ? area : 1 - area;\n        auc.push(area);\n    }\n    return mean(auc);\n}\n//# sourceMappingURL=getAuc.js.map","/**\n * @param array Array containing category metadata\n * @return Class object.\n */\nexport function getClasses(array) {\n    let nbClasses = 0;\n    const classes = [{ name: array[0], value: 0, ids: [] }];\n    for (const element of array) {\n        const currentClass = classes.some((item) => item.name === element);\n        if (!currentClass) {\n            nbClasses++;\n            classes.push({ name: element, value: nbClasses, ids: [] });\n        }\n    }\n    for (const category of classes) {\n        const label = category.name;\n        const indexes = [];\n        for (let j = 0; j < array.length; j++) {\n            if (array[j] === label)\n                indexes.push(j);\n        }\n        category.ids = indexes;\n    }\n    return classes;\n}\n//# sourceMappingURL=getClasses.js.map","/**\n * Returns an array of pairs of classes.\n * @param list Array containing a list of classes.\n * @return Array with pairs of classes.\n */\nexport function getClassesPairs(list) {\n    const pairs = [];\n    for (let i = 0; i < list.length - 1; i++) {\n        for (let j = i + 1; j < list.length; j++) {\n            pairs.push([list[i], list[j]]);\n        }\n    }\n    return pairs;\n}\n//# sourceMappingURL=getClassesPairs.js.map","import max from 'ml-array-max';\nimport min from 'ml-array-min';\n/**\n * Returns the array of metadata numerically categorized.\n * @param targets Array containing the categories.\n * @param tests Array containing the result of prediction.\n * @param pair Object with information about two classes.\n * @param [options={}]\n * @return Array containing the categories assinged as numbers.\n */\nexport function getNumericalTargets(targets, tests, pair, options = {}) {\n    const { dx = 0.001 } = options;\n    const boundaries = [min(tests) - dx, max(tests) + dx];\n    const results = [];\n    for (let i = 0; i < targets.length; i++) {\n        for (let j = 0; j < pair.length; j++) {\n            if (targets[i] === pair[j].name) {\n                results[i] = boundaries[j];\n                break;\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getNumericalTargets.js.map","/**\n * Returns the array of metadata numerically categorized.\n * @param array Array containing the categories.\n * @param pair Object containing information about the two classes to deal with.\n * @return Array containing the prediction values arranged for the corresponding classes.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getSelectedResults(array, pair) {\n    const results = [];\n    for (const item of pair) {\n        for (const id of item.ids) {\n            const result = array[id];\n            results.push(result);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getSelectedResults.js.map","/**\n * Returns an array of thresholds to build the curve.\n * @param predictions Array of predictions.\n * @return An array of thresholds.\n */\nexport function getThresholds(predictions) {\n    const uniques = [...new Set(predictions)].sort((a, b) => a - b);\n    const thresholds = [uniques[0]];\n    for (let i = 0; i < uniques.length - 1; i++) {\n        const half = (uniques[i + 1] - uniques[i]) / 2;\n        thresholds.push(uniques[i] + half);\n    }\n    thresholds.push(uniques[uniques.length - 1] + 0.001);\n    return thresholds;\n}\n//# sourceMappingURL=getThresholds.js.map","import { getClasses } from './utilities/getClasses';\nimport { getClassesPairs } from './utilities/getClassesPairs';\nimport { getNumericalTargets } from './utilities/getNumericalTargets';\nimport { getSelectedResults } from './utilities/getSelectedResults';\nimport { getThresholds } from './utilities/getThresholds';\n/**\n * Returns a ROC (Receiver Operating Characteristic) curve for a given response and prediction vectors.\n * @param responses Array containing category metadata.\n * @param predictions Array containing the results of regression.\n * @return sensitivities and specificities as a object.\n */\nexport function getRocCurve(responses, predictions) {\n    const classes = getClasses(responses);\n    const pairsOfClasses = getClassesPairs(classes);\n    const curves = [];\n    for (const pairs of pairsOfClasses) {\n        const tests = getSelectedResults(predictions, pairs);\n        const targets = getSelectedResults(responses, pairs);\n        const numericalTargets = getNumericalTargets(targets, tests, pairs);\n        const curve = { sensitivities: [], specificities: [] };\n        const limits = getThresholds(tests);\n        for (const limit of limits) {\n            let truePositives = 0;\n            let falsePositives = 0;\n            let trueNegatives = 0;\n            let falseNegatives = 0;\n            for (let j = 0; j < numericalTargets.length; j++) {\n                if (tests[j] > limit && numericalTargets[j] > limit)\n                    truePositives++;\n                if (tests[j] >= limit && numericalTargets[j] <= limit)\n                    falsePositives++;\n                if (tests[j] < limit && numericalTargets[j] < limit)\n                    trueNegatives++;\n                if (tests[j] <= limit && numericalTargets[j] >= limit)\n                    falseNegatives++;\n            }\n            curve.sensitivities.push(truePositives / (truePositives + falseNegatives));\n            curve.specificities.push(trueNegatives / (falsePositives + trueNegatives));\n        }\n        curves.push(curve);\n    }\n    return curves;\n}\n//# sourceMappingURL=getRocCurve.js.map","import { Matrix, NIPALS } from 'ml-matrix';\n\nimport { norm } from './util/utils.js';\n\n/**\n * OPLS loop\n * @param {Array|Matrix} data matrix with features\n * @param {Array|Matrix} labels an array of labels (dependent variable)\n * @param {Object} [options={}] an object with options\n * @return {Object} an object with model (filteredX: err,\n    loadingsXOrtho: pOrtho,\n    scoresXOrtho: tOrtho,\n    weightsXOrtho: wOrtho,\n    weightsPred: w,\n    loadingsXpred: p,\n    scoresXpred: t,\n    loadingsY:)\n */\nexport function oplsNipals(data, labels, options = {}) {\n  const { numberOSC = 100, limit = 10e-10 } = options;\n\n  data = Matrix.checkMatrix(data);\n  labels = Matrix.checkMatrix(labels);\n  let tW = [];\n  if (labels.columns > 1) {\n    const wh = getWh(data, labels);\n    const ssWh = wh.norm() ** 2;\n    let ssT = ssWh;\n    let pcaW;\n    let count = 0;\n    do {\n      if (count === 0) {\n        pcaW = new NIPALS(wh);\n        tW.push(pcaW.t);\n      } else {\n        let data = pcaW.xResidual;\n        pcaW = new NIPALS(data);\n        tW.push(pcaW.t);\n      }\n      ssT = wh.norm() ** 2;\n      count++;\n    } while (ssT / ssWh > limit);\n  }\n\n  let u = labels.getColumnVector(0);\n  let diff = 1;\n  let t, c, w, uNew;\n  for (let i = 0; i < numberOSC && diff > limit; i++) {\n    w = u.transpose().mmul(data).div(u.transpose().mmul(u).get(0, 0));\n    w = w.transpose().div(norm(w));\n\n    t = data.mmul(w).div(w.transpose().mmul(w).get(0, 0)); // t_h paso 3\n\n    // calc loading\n    c = t.transpose().mmul(labels).div(t.transpose().mmul(t).get(0, 0));\n\n    // calc new u and compare with one in previus iteration (stop criterion)\n    uNew = labels.mmul(c.transpose());\n    uNew = uNew.div(c.transpose().mmul(c).get(0, 0));\n\n    if (i > 0) {\n      diff = uNew.clone().sub(u).pow(2).sum() / uNew.clone().pow(2).sum();\n    }\n    u = uNew.clone();\n  }\n\n  // calc loadings\n  let wOrtho;\n  let p = t.transpose().mmul(data).div(t.transpose().mmul(t).get(0, 0));\n  if (labels.columns > 1) {\n    for (let i = 0; i < tW.length; i++) {\n      let tw = tW[i].transpose();\n      p = p.sub(\n        tw.mmul(p.transpose()).mmul(tw), // .div(tw.mmul(tw.transpose()).get(0, 0))\n      );\n    }\n    wOrtho = p.clone();\n  } else {\n    wOrtho = p\n      .clone()\n      .sub(\n        w\n          .transpose()\n          .mmul(p.transpose())\n          .div(w.transpose().mmul(w).get(0, 0))\n          .mmul(w.transpose()),\n      );\n  }\n\n  wOrtho.div(norm(wOrtho));\n\n  let tOrtho = data\n    .mmul(wOrtho.transpose())\n    .div(wOrtho.mmul(wOrtho.transpose()).get(0, 0));\n\n  // orthogonal loadings\n  let pOrtho = tOrtho\n    .transpose()\n    .mmul(data)\n    .div(tOrtho.transpose().mmul(tOrtho).get(0, 0));\n\n  // filtered data\n  let err = data.clone().sub(tOrtho.mmul(pOrtho));\n  return {\n    filteredX: err,\n    weightsXOrtho: wOrtho,\n    loadingsXOrtho: pOrtho,\n    scoresXOrtho: tOrtho,\n    weightsXPred: w,\n    loadingsXpred: p,\n    scoresXpred: t,\n    loadingsY: c,\n  };\n}\n\nfunction getWh(xValue, yValue) {\n  let result = new Matrix(xValue.columns, yValue.columns);\n  for (let i = 0; i < yValue.columns; i++) {\n    let yN = yValue.getColumnVector(i).transpose();\n    let component = yN.mmul(xValue).div(yN.mmul(yN.transpose()).get(0, 0));\n    result.setColumn(i, component.getRow(0));\n  }\n  return result;\n}\n","import { Matrix } from 'ml-matrix';\n\n/**\n * Get total sum of square\n * @param {Array} x an array\n * @return {Number} - the sum of the squares\n */\nexport function tss(x) {\n  return Matrix.mul(x, x).sum();\n}\n","import ConfusionMatrix from 'ml-confusion-matrix';\nimport { getFolds } from 'ml-cross-validation';\nimport { Matrix, NIPALS } from 'ml-matrix';\nimport { getRocCurve, getAuc } from 'ml-roc-multiclass';\n\nimport { oplsNipals } from './oplsNipals.js';\nimport { tss } from './util/tss.js';\n\n/**\n * Creates new OPLS (orthogonal partial latent structures) from features and labels.\n * @param {Array} data - matrix containing data (X).\n * @param {Array} labels - 1D Array containing metadata (Y).\n * @param {Object} [options={}]\n * @param {boolean} [options.center = true] - should the data be centered (subtract the mean).\n * @param {boolean} [options.scale = true] - should the data be scaled (divide by the standard deviation).\n * @param {Array} [options.cvFolds = []] - Allows to provide folds as array of objects with the arrays trainIndex and testIndex as properties.\n * @param {number} [options.nbFolds = 7] - Allows to generate the defined number of folds with the training and test set choosen randomly from the data set.\n * */\n\nexport class OPLS {\n  constructor(data, labels, options = {}) {\n    if (data === true) {\n      const opls = options;\n      this.center = opls.center;\n      this.scale = opls.scale;\n      this.means = opls.means;\n      this.meansY = opls.meansY;\n      this.stdevs = opls.stdevs;\n      this.stdevs = opls.stdevsY;\n      this.model = opls.model;\n      this.tCV = opls.tCV;\n      this.tOrthCV = opls.tOrthCV;\n      this.yHatCV = opls.yHatCV;\n      this.mode = opls.mode;\n      return;\n    }\n\n    const features = new Matrix(data);\n    // set default values\n    // cvFolds allows to define folds for testing purpose\n    const { center = true, scale = true, cvFolds = [], nbFolds = 7 } = options;\n\n    let group;\n    if (typeof labels[0] === 'number') {\n      // numeric labels: OPLS regression is used\n      this.mode = 'regression';\n      group = Matrix.from1DArray(labels.length, 1, labels);\n    } else if (typeof labels[0] === 'string') {\n      // non-numeric labels: OPLS-DA is used\n      this.mode = 'discriminantAnalysis';\n      group = Matrix.checkMatrix(createDummyY(labels)).transpose();\n    }\n\n    // getting center and scale the features (all)\n    this.center = center;\n    if (this.center) {\n      this.means = features.mean('column');\n      this.meansY = group.mean('column');\n    } else {\n      this.stdevs = null;\n    }\n    this.scale = scale;\n    if (this.scale) {\n      this.stdevs = features.standardDeviation('column');\n      this.stdevsY = group.standardDeviation('column');\n    } else {\n      this.means = null;\n    }\n\n    // check and remove for features with sd = 0 TODO here\n    // check opls.R line 70\n\n    const folds = cvFolds.length > 0 ? cvFolds : getFolds(labels, nbFolds);\n    const Q2 = [];\n    const aucResult = [];\n    this.model = [];\n    this.tCV = [];\n    this.tOrthCV = [];\n    this.yHatCV = [];\n    const oplsCV = [];\n\n    let modelNC = [];\n\n    // this code could be made more efficient by reverting the order of the loops\n    // this is a legacy loop to be consistent with R code from MetaboMate package\n    // this allows for having statistic (R2) from CV to decide wether to continue\n    // with more latent structures\n    let overfitted = false;\n    let nc = 0;\n    let value;\n\n    do {\n      const yHatk = new Matrix(group.rows, 1);\n      const tPredk = new Matrix(group.rows, 1);\n      const tOrthk = new Matrix(group.rows, 1);\n      oplsCV[nc] = [];\n      for (let f = 0; f < folds.length; f++) {\n        const trainTest = this._getTrainTest(features, group, folds[f]);\n        const testXk = trainTest.testFeatures;\n        const Xk = trainTest.trainFeatures;\n        const Yk = trainTest.trainLabels;\n\n        // determine center and scale of training set\n        const dataCenter = Xk.mean('column');\n        const dataSD = Xk.standardDeviation('column');\n\n        // center and scale training set\n        if (center) {\n          Xk.center('column');\n          Yk.center('column');\n        }\n\n        if (scale) {\n          Xk.scale('column');\n          Yk.scale('column');\n        }\n\n        // perform opls\n        let oplsk;\n        if (nc === 0) {\n          oplsk = oplsNipals(Xk, Yk);\n        } else {\n          oplsk = oplsNipals(oplsCV[nc - 1][f].filteredX, Yk);\n        }\n\n        // store model for next component\n        oplsCV[nc][f] = oplsk;\n        const plsCV = new NIPALS(oplsk.filteredX, { Y: Yk });\n\n        // scaling the test dataset with respect to the train\n        testXk.center('column', { center: dataCenter });\n        testXk.scale('column', { scale: dataSD });\n\n        const Eh = testXk;\n        // removing the orthogonal components from PLS\n        let scores;\n        for (let idx = 0; idx < nc + 1; idx++) {\n          scores = Eh.mmul(oplsCV[idx][f].weightsXOrtho.transpose()); // ok\n          Eh.sub(scores.mmul(oplsCV[idx][f].loadingsXOrtho));\n        }\n\n        // prediction\n        const tPred = Eh.mmul(plsCV.w.transpose());\n        const yHatComponents = tPred\n          .mmul(plsCV.betas)\n          .mmul(plsCV.q.transpose()); // ok\n        const yHat = new Matrix(yHatComponents.rows, 1);\n        for (let i = 0; i < yHatComponents.rows; i++) {\n          yHat.setRow(i, [yHatComponents.getRowVector(i).sum()]);\n        }\n        // adding all prediction from all folds\n        for (let i = 0; i < folds[f].testIndex.length; i++) {\n          yHatk.setRow(folds[f].testIndex[i], [yHat.get(i, 0)]);\n          tPredk.setRow(folds[f].testIndex[i], [tPred.get(i, 0)]);\n          tOrthk.setRow(folds[f].testIndex[i], [scores.get(i, 0)]);\n        }\n      } // end of loop over folds\n\n      this.tCV.push(tPredk);\n      this.tOrthCV.push(tOrthk);\n      this.yHatCV.push(yHatk);\n\n      // calculate Q2y for all the prediction (all folds)\n      // ROC for DA is not implemented (check opls.R line 183) TODO\n      const tssy = tss(group.center('column').scale('column'));\n      let press = 0;\n      for (let i = 0; i < group.columns; i++) {\n        press += tss(group.getColumnVector(i).sub(yHatk));\n      }\n      const Q2y = 1 - press / group.columns / tssy;\n      Q2.push(Q2y);\n      if (this.mode === 'regression') {\n        value = Q2y;\n      } else if (this.mode === 'discriminantAnalysis') {\n        const rocCurve = getRocCurve(labels, yHatk.to1DArray());\n        const areaUnderCurve = getAuc(rocCurve);\n        aucResult.push(areaUnderCurve);\n        value = areaUnderCurve;\n      }\n\n      // calculate the R2y for the complete data\n      if (nc === 0) {\n        modelNC = this._predictAll(features, group);\n      } else {\n        modelNC = this._predictAll(modelNC.xRes, group, {\n          scale: false,\n          center: false,\n        });\n      }\n\n      // adding the predictive statistics from CV\n      let listOfValues;\n      modelNC.Q2y = Q2;\n      if (this.mode === 'regression') {\n        listOfValues = Q2;\n      } else {\n        listOfValues = aucResult;\n        modelNC.auc = aucResult;\n      }\n      modelNC.value = value;\n\n      if (nc > 0) {\n        overfitted = listOfValues[nc - 1] >= value ? true : false;\n      }\n      this.model.push(modelNC);\n      // store the model for each component\n      nc++;\n      // console.warn(`OPLS iteration over # of Components: ${nc + 1}`);\n    } while (!overfitted); // end of loop over nc\n    // store scores from CV\n    const tCV = this.tCV;\n    const tOrthCV = this.tOrthCV;\n    const yHatCV = this.yHatCV;\n    const m = this.model[nc - 1];\n    const XOrth = m.XOrth;\n    const FeaturesCS = features.center('column').scale('column');\n    let labelsCS;\n    if (this.mode === 'regression') {\n      labelsCS = group.center('column').scale('column');\n    } else {\n      labelsCS = group;\n    }\n    const Xres = FeaturesCS.clone().sub(XOrth);\n    const plsCall = new NIPALS(Xres, { Y: labelsCS });\n    const E = Xres.clone().sub(plsCall.t.mmul(plsCall.p));\n\n    const R2x = this.model.map((x) => x.R2x);\n    const R2y = this.model.map((x) => x.R2y);\n\n    this.output = {\n      Q2y: Q2,\n      auc: aucResult,\n      R2x,\n      R2y,\n      tPred: m.plsC.t,\n      pPred: m.plsC.p,\n      wPred: m.plsC.w,\n      betasPred: m.plsC.betas,\n      Qpc: m.plsC.q,\n      tCV,\n      tOrthCV,\n      yHatCV,\n      oplsCV,\n      tOrth: m.tOrth,\n      pOrth: m.pOrth,\n      wOrth: m.wOrth,\n      XOrth,\n      yHat: m.totalPred,\n      Yres: m.plsC.yResidual,\n      E,\n      folds,\n    };\n  }\n\n  /**\n   * get access to all the computed elements\n   * Mainly for debug and testing\n   * @return {Object} output object\n   */\n  getLogs() {\n    return this.output;\n  }\n\n  getScores() {\n    const scoresX = this.tCV.map((x) => x.to1DArray());\n    const scoresY = this.tOrthCV.map((x) => x.to1DArray());\n    return { scoresX, scoresY };\n  }\n\n  /**\n   * Load an OPLS model from JSON\n   * @param {Object} model\n   * @return {OPLS}\n   */\n  static load(model) {\n    if (typeof model.name !== 'string') {\n      throw new TypeError('model must have a name property');\n    }\n    if (model.name !== 'OPLS') {\n      throw new RangeError(`invalid model: ${model.name}`);\n    }\n    return new OPLS(true, [], model);\n  }\n\n  /**\n   * Export the current model to a JSON object\n   * @return {Object} model\n   */\n  toJSON() {\n    return {\n      name: 'OPLS',\n      center: this.center,\n      scale: this.scale,\n      means: this.means,\n      stdevs: this.stdevs,\n      model: this.model,\n      tCV: this.tCV,\n      tOrthCV: this.tOrthCV,\n      yHatCV: this.yHatCV,\n    };\n  }\n\n  /**\n   * Predict scores for new data\n   * @param {Matrix} features - a matrix containing new data\n   * @param {Object} [options={}]\n   * @param {Array} [options.trueLabel] - an array with true values to compute confusion matrix\n   * @param {Number} [options.nc] - the number of components to be used\n   * @return {Object} - predictions\n   */\n  predict(features, options = {}) {\n    const {\n      trueLabels = [],\n      center = this.center,\n      scale = this.scale,\n    } = options;\n\n    let labels;\n    if (typeof trueLabels[0] === 'number') {\n      labels = Matrix.from1DArray(trueLabels.length, 1, trueLabels);\n    } else if (typeof trueLabels[0] === 'string') {\n      labels = Matrix.checkMatrix(createDummyY(trueLabels)).transpose();\n    }\n\n    features = new Matrix(features);\n\n    // scaling the test dataset with respect to the train\n    if (center) {\n      features.center('column', { center: this.means });\n      if (labels?.rows > 0) {\n        labels.center('column', { center: this.meansY });\n      }\n    }\n    if (scale) {\n      features.scale('column', { scale: this.stdevs });\n      if (labels?.rows > 0) {\n        labels.scale('column', { scale: this.stdevsY });\n      }\n    }\n\n    const nc =\n      this.mode === 'regression'\n        ? this.model[0].Q2y.length\n        : this.model[0].auc.length;\n\n    const Eh = features.clone();\n    // removing the orthogonal components from PLS\n    let tOrth;\n    let wOrth;\n    let pOrth;\n    let yHat;\n    let tPred;\n    for (let idx = 0; idx < nc; idx++) {\n      const model = this.model[idx];\n      wOrth = model.wOrth.transpose();\n      pOrth = model.pOrth;\n      tOrth = Eh.mmul(wOrth);\n      Eh.sub(tOrth.mmul(pOrth));\n      // prediction\n      tPred = Eh.mmul(model.plsC.w.transpose());\n      yHat = tPred.mmul(model.plsC.betas).mmul(model.plsC.q);\n    }\n\n    if (labels?.rows > 0) {\n      if (this.mode === 'regression') {\n        const tssy = tss(labels);\n        const press = tss(labels.clone().sub(yHat));\n        const Q2y = 1 - press / tssy;\n\n        return { tPred, tOrth, yHat, Q2y };\n      } else if (this.mode === 'discriminantAnalysis') {\n        const confusionMatrix = ConfusionMatrix.fromLabels(\n          trueLabels,\n          yHat.to1DArray(),\n        );\n\n        const rocCurve = getRocCurve(trueLabels, yHat.to1DArray());\n        const auc = getAuc(rocCurve);\n        return { tPred, tOrth, yHat, confusionMatrix, auc };\n      }\n    } else {\n      return { tPred, tOrth, yHat };\n    }\n  }\n\n  _predictAll(features, labels, options = {}) {\n    // cannot use the global this.center here\n    // since it is used in the NC loop and\n    // centering and scaling should only be\n    // performed once\n    const { center = true, scale = true } = options;\n\n    if (center) {\n      features.center('column');\n      labels.center('column');\n    }\n\n    if (scale) {\n      features.scale('column');\n      labels.scale('column');\n      // reevaluate tssy and tssx after scaling\n      // must be global because re-used for next nc iteration\n      // tssx is only evaluate the first time\n      this.tssy = tss(labels);\n      this.tssx = tss(features);\n    }\n\n    const oplsC = oplsNipals(features, labels);\n    const plsC = new NIPALS(oplsC.filteredX, { Y: labels });\n\n    const tPred = oplsC.filteredX.mmul(plsC.w.transpose());\n    const yHatComponents = tPred.mmul(plsC.betas).mmul(plsC.q.transpose()); // ok\n    const yHat = new Matrix(yHatComponents.rows, 1);\n    for (let i = 0; i < yHatComponents.rows; i++) {\n      yHat.setRow(i, [yHatComponents.getRowVector(i).sum()]);\n    }\n    let rss = 0;\n    for (let i = 0; i < labels.columns; i++) {\n      rss += tss(labels.getColumnVector(i).sub(yHat));\n    }\n    const R2y = 1 - rss / labels.columns / this.tssy;\n    const xEx = plsC.t.mmul(plsC.p);\n    const rssx = tss(xEx);\n    const R2x = rssx / this.tssx;\n\n    return {\n      R2y,\n      R2x,\n      xRes: oplsC.filteredX,\n      tOrth: oplsC.scoresXOrtho,\n      pOrth: oplsC.loadingsXOrtho,\n      wOrth: oplsC.weightsXOrtho,\n      tPred: tPred,\n      totalPred: yHat,\n      XOrth: oplsC.scoresXOrtho.mmul(oplsC.loadingsXOrtho),\n      oplsC,\n      plsC,\n    };\n  }\n  /**\n   *\n   * @param {*} X - dataset matrix object\n   * @param {*} group - labels matrix object\n   * @param {*} index - train and test index (output from getFold())\n   */\n  _getTrainTest(X, group, index) {\n    const testFeatures = new Matrix(index.testIndex.length, X.columns);\n    const testLabels = new Matrix(index.testIndex.length, group.columns);\n    index.testIndex.forEach((el, idx) => {\n      testFeatures.setRow(idx, X.getRow(el));\n      testLabels.setRow(idx, group.getRow(el));\n    });\n\n    const trainFeatures = new Matrix(index.trainIndex.length, X.columns);\n    const trainLabels = new Matrix(index.trainIndex.length, group.columns);\n    index.trainIndex.forEach((el, idx) => {\n      trainFeatures.setRow(idx, X.getRow(el));\n      trainLabels.setRow(idx, group.getRow(el));\n    });\n\n    return {\n      trainFeatures,\n      testFeatures,\n      trainLabels,\n      testLabels,\n    };\n  }\n}\n\nfunction createDummyY(array) {\n  const features = [...new Set(array)];\n  const result = [];\n  if (features.length > 2) {\n    for (let i = 0; i < features.length; i++) {\n      const feature = [];\n      for (let j = 0; j < array.length; j++) {\n        const point = features[i] === array[j] ? 1 : -1;\n        feature.push(point);\n      }\n      result.push(feature);\n    }\n    return result;\n  } else {\n    const result = [];\n    for (let j = 0; j < array.length; j++) {\n      const point = features[0] === array[j] ? 2 : 1;\n      result.push(point);\n    }\n    return [result];\n  }\n}\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","options","arguments","length","undefined","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","i","min","minValue","rescale","output","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","constructor","name","inspectData","rows","columns","maxI","Math","maxJ","result","line","j","push","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","slice","installMathOperations","AbstractMatrix","Matrix","add","value","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","nipals","scaleScores","maxIterations","terminationCriteria","u","diff","w","tOld","counter","xResidual","residual","yResidual","betas","pow2array","initializeMatrices","elem","PLS","model","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","tolerance","latentVectors","train","trainingSet","trainingValues","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","B","W","Utils","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","den","pnorm","ssqYcal","E","F","predict","dataset","getExplainedVariance","load","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","YOrthScoreNorm","removeInfinity","Infinity","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","toPredict","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","labels","fromLabels","actual","predicted","distinctLabels","Set","actualIdx","predictedIdx","getMatrix","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","accuracy","total","getFolds","features","N","allIdx","current","folds","randi","forEach","foldsIndex","map","testIndex","trainIndex","concat","filter","el","idx2","sumValue","oplsNipals","numberOSC","limit","tW","wh","getWh","ssWh","ssT","pcaW","NIPALS","uNew","wOrtho","tw","tOrtho","pOrtho","err","filteredX","weightsXOrtho","loadingsXOrtho","scoresXOrtho","weightsXPred","loadingsXpred","scoresXpred","loadingsY","xValue","yValue","yN","component","tss","OPLS","opls","means","meansY","stdevs","stdevsY","tCV","tOrthCV","yHatCV","mode","cvFolds","nbFolds","group","createDummyY","Q2","aucResult","oplsCV","modelNC","overfitted","nc","yHatk","tPredk","tOrthk","trainTest","_getTrainTest","testXk","testFeatures","Xk","trainFeatures","Yk","trainLabels","dataCenter","dataSD","oplsk","plsCV","Eh","scores","tPred","yHatComponents","yHat","tssy","press","Q2y","rocCurve","getRocCurve","areaUnderCurve","getAuc","_predictAll","xRes","listOfValues","auc","XOrth","FeaturesCS","labelsCS","Xres","plsCall","R2x","R2y","plsC","pPred","wPred","betasPred","Qpc","tOrth","pOrth","wOrth","totalPred","Yres","getLogs","getScores","scoresX","scoresY","trueLabels","confusionMatrix","tssx","oplsC","rss","xEx","rssx","testLabels","feature","point"],"mappings":";;;;;;;;;;;;EAAA,MAAMA,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;EAEe,SAASG,UAAT,CAAoBC,MAApB,EAA4B;EACzC,SAAOJ,QAAQ,CAACK,IAAT,CAAcD,MAAd,EAAsBE,QAAtB,CAA+B,QAA/B,CAAP;EACD;;ECFD,SAASC,GAAT,CAAaC,KAAb,EAAoB;EAClB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIC,kBAAkB,GAAGN,OAAO,CAACO,SAAjC;EAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;EAAA,MAEIE,gBAAgB,GAAGR,OAAO,CAACS,OAF/B;EAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BT,KAAK,CAACG,MAApC,GAA6CM,gBAH3D;;EAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIR,KAAK,CAACG,MAApC,IAA8C,CAACQ,MAAM,CAACC,SAAP,CAAiBJ,SAAjB,CAAnD,EAAgF;EAC9E,UAAM,IAAIK,KAAJ,CAAU,0DAAV,CAAN;EACD;;EAED,MAAIH,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGV,KAAK,CAACG,MAAxC,IAAkD,CAACQ,MAAM,CAACC,SAAP,CAAiBF,OAAjB,CAAvD,EAAkF;EAChF,UAAM,IAAIG,KAAJ,CAAU,+EAAV,CAAN;EACD;;EAED,MAAIC,QAAQ,GAAGd,KAAK,CAACQ,SAAD,CAApB;;EAEA,OAAK,IAAIO,CAAC,GAAGP,SAAS,GAAG,CAAzB,EAA4BO,CAAC,GAAGL,OAAhC,EAAyCK,CAAC,EAA1C,EAA8C;EAC5C,QAAIf,KAAK,CAACe,CAAD,CAAL,GAAWD,QAAf,EAAyBA,QAAQ,GAAGd,KAAK,CAACe,CAAD,CAAhB;EAC1B;;EAED,SAAOD,QAAP;EACD;;EC/BD,SAASE,GAAT,CAAahB,KAAb,EAAoB;EAClB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIC,kBAAkB,GAAGN,OAAO,CAACO,SAAjC;EAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;EAAA,MAEIE,gBAAgB,GAAGR,OAAO,CAACS,OAF/B;EAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BT,KAAK,CAACG,MAApC,GAA6CM,gBAH3D;;EAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIR,KAAK,CAACG,MAApC,IAA8C,CAACQ,MAAM,CAACC,SAAP,CAAiBJ,SAAjB,CAAnD,EAAgF;EAC9E,UAAM,IAAIK,KAAJ,CAAU,0DAAV,CAAN;EACD;;EAED,MAAIH,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGV,KAAK,CAACG,MAAxC,IAAkD,CAACQ,MAAM,CAACC,SAAP,CAAiBF,OAAjB,CAAvD,EAAkF;EAChF,UAAM,IAAIG,KAAJ,CAAU,+EAAV,CAAN;EACD;;EAED,MAAII,QAAQ,GAAGjB,KAAK,CAACQ,SAAD,CAApB;;EAEA,OAAK,IAAIO,CAAC,GAAGP,SAAS,GAAG,CAAzB,EAA4BO,CAAC,GAAGL,OAAhC,EAAyCK,CAAC,EAA1C,EAA8C;EAC5C,QAAIf,KAAK,CAACe,CAAD,CAAL,GAAWE,QAAf,EAAyBA,QAAQ,GAAGjB,KAAK,CAACe,CAAD,CAAhB;EAC1B;;EAED,SAAOE,QAAP;EACD;;EC7BD,SAASC,OAAT,CAAiBlB,KAAjB,EAAwB;EACtB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD,GAFD,MAEO,IAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EAC7B,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIa,MAAJ;;EAEA,MAAIlB,OAAO,CAACkB,MAAR,KAAmBf,SAAvB,EAAkC;EAChC,QAAI,CAACC,UAAO,CAACJ,OAAO,CAACkB,MAAT,CAAZ,EAA8B;EAC5B,YAAM,IAAIb,SAAJ,CAAc,6CAAd,CAAN;EACD;;EAEDa,IAAAA,MAAM,GAAGlB,OAAO,CAACkB,MAAjB;EACD,GAND,MAMO;EACLA,IAAAA,MAAM,GAAG,IAAIC,KAAJ,CAAUpB,KAAK,CAACG,MAAhB,CAAT;EACD;;EAED,MAAIkB,UAAU,GAAGL,GAAG,CAAChB,KAAD,CAApB;EACA,MAAIsB,UAAU,GAAGvB,GAAG,CAACC,KAAD,CAApB;;EAEA,MAAIqB,UAAU,KAAKC,UAAnB,EAA+B;EAC7B,UAAM,IAAIC,UAAJ,CAAe,6EAAf,CAAN;EACD;;EAED,MAAIC,YAAY,GAAGvB,OAAO,CAACe,GAA3B;EAAA,MACIC,QAAQ,GAAGO,YAAY,KAAK,KAAK,CAAtB,GAA0BvB,OAAO,CAACwB,UAAR,GAAqBJ,UAArB,GAAkC,CAA5D,GAAgEG,YAD/E;EAAA,MAEIE,YAAY,GAAGzB,OAAO,CAACF,GAF3B;EAAA,MAGIe,QAAQ,GAAGY,YAAY,KAAK,KAAK,CAAtB,GAA0BzB,OAAO,CAACwB,UAAR,GAAqBH,UAArB,GAAkC,CAA5D,GAAgEI,YAH/E;;EAKA,MAAIT,QAAQ,IAAIH,QAAhB,EAA0B;EACxB,UAAM,IAAIS,UAAJ,CAAe,4CAAf,CAAN;EACD;;EAED,MAAII,MAAM,GAAG,CAACb,QAAQ,GAAGG,QAAZ,KAAyBK,UAAU,GAAGD,UAAtC,CAAb;;EAEA,OAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGf,KAAK,CAACG,MAA1B,EAAkCY,CAAC,EAAnC,EAAuC;EACrCI,IAAAA,MAAM,CAACJ,CAAD,CAAN,GAAY,CAACf,KAAK,CAACe,CAAD,CAAL,GAAWM,UAAZ,IAA0BM,MAA1B,GAAmCV,QAA/C;EACD;;EAED,SAAOE,MAAP;EACD;;EChDD,MAAMS,MAAM,GAAG,IAAIC,MAAJ,CAAW,CAAX,CAAf;EACA,MAAMC,UAAU,GAAG,IAAID,MAAJ,CAAW,CAAX,CAAnB;EAEO,SAASE,aAAT,GAAyB;EAC9B,SAAOC,wBAAwB,CAAC,IAAD,CAA/B;EACD;EAEM,SAASA,wBAAT,CAAkCC,MAAlC,EAA0ChC,OAAO,GAAG,EAApD,EAAwD;EAC7D,QAAM;EAAEiC,IAAAA,OAAO,GAAG,EAAZ;EAAgBC,IAAAA,UAAU,GAAG,EAA7B;EAAiCC,IAAAA,UAAU,GAAG;EAA9C,MAAoDnC,OAA1D;EACA,SAAQ,GAAEgC,MAAM,CAACI,WAAP,CAAmBC,IAAK;AACpC,EAAEV,MAAO;AACT,EAAEE,UAAW,GAAES,WAAW,CAACN,MAAD,EAASC,OAAT,EAAkBC,UAAlB,EAA8BC,UAA9B,CAA0C;AACpE,EAAER,MAAO;AACT,EAAEA,MAAO,SAAQK,MAAM,CAACO,IAAK;AAC7B,EAAEZ,MAAO,YAAWK,MAAM,CAACQ,OAAQ;AACnC,EANE;EAOD;;EAED,SAASF,WAAT,CAAqBN,MAArB,EAA6BC,OAA7B,EAAsCC,UAAtC,EAAkDC,UAAlD,EAA8D;EAC5D,QAAM;EAAEI,IAAAA,IAAF;EAAQC,IAAAA;EAAR,MAAoBR,MAA1B;EACA,QAAMS,IAAI,GAAGC,IAAI,CAAC3B,GAAL,CAASwB,IAAT,EAAeN,OAAf,CAAb;EACA,QAAMU,IAAI,GAAGD,IAAI,CAAC3B,GAAL,CAASyB,OAAT,EAAkBN,UAAlB,CAAb;EACA,QAAMU,MAAM,GAAG,EAAf;;EACA,OAAK,IAAI9B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2B,IAApB,EAA0B3B,CAAC,EAA3B,EAA+B;EAC7B,QAAI+B,IAAI,GAAG,EAAX;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,IAApB,EAA0BG,CAAC,EAA3B,EAA+B;EAC7BD,MAAAA,IAAI,CAACE,IAAL,CAAUC,YAAY,CAAChB,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAD,EAAmBX,UAAnB,CAAtB;EACD;;EACDS,IAAAA,MAAM,CAACG,IAAP,CAAa,GAAEF,IAAI,CAACK,IAAL,CAAU,GAAV,CAAe,EAA9B;EACD;;EACD,MAAIP,IAAI,KAAKH,OAAb,EAAsB;EACpBI,IAAAA,MAAM,CAACA,MAAM,CAAC1C,MAAP,GAAgB,CAAjB,CAAN,IAA8B,QAAOsC,OAAO,GAAGN,UAAW,eAA1D;EACD;;EACD,MAAIO,IAAI,KAAKF,IAAb,EAAmB;EACjBK,IAAAA,MAAM,CAACG,IAAP,CAAa,OAAMR,IAAI,GAAGN,OAAQ,YAAlC;EACD;;EACD,SAAOW,MAAM,CAACM,IAAP,CAAa,KAAIrB,UAAW,EAA5B,CAAP;EACD;;EAED,SAASmB,YAAT,CAAsBG,GAAtB,EAA2BhB,UAA3B,EAAuC;EACrC,QAAMiB,MAAM,GAAGC,MAAM,CAACF,GAAD,CAArB;;EACA,MAAIC,MAAM,CAAClD,MAAP,IAAiBiC,UAArB,EAAiC;EAC/B,WAAOiB,MAAM,CAACE,MAAP,CAAcnB,UAAd,EAA0B,GAA1B,CAAP;EACD;;EACD,QAAMoB,OAAO,GAAGJ,GAAG,CAACK,WAAJ,CAAgBrB,UAAU,GAAG,CAA7B,CAAhB;;EACA,MAAIoB,OAAO,CAACrD,MAAR,IAAkBiC,UAAtB,EAAkC;EAChC,WAAOoB,OAAP;EACD;;EACD,QAAME,WAAW,GAAGN,GAAG,CAACO,aAAJ,CAAkBvB,UAAU,GAAG,CAA/B,CAApB;EACA,QAAMwB,MAAM,GAAGF,WAAW,CAACG,OAAZ,CAAoB,GAApB,CAAf;EACA,QAAMC,CAAC,GAAGJ,WAAW,CAACK,KAAZ,CAAkBH,MAAlB,CAAV;EACA,SAAOF,WAAW,CAACK,KAAZ,CAAkB,CAAlB,EAAqB3B,UAAU,GAAG0B,CAAC,CAAC3D,MAApC,IAA8C2D,CAArD;EACD;;ECpDM,SAASE,qBAAT,CAA+BC,cAA/B,EAA+CC,MAA/C,EAAuD;EAC5DD,EAAAA,cAAc,CAACvE,SAAf,CAAyByE,GAAzB,GAA+B,SAASA,GAAT,CAAaC,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKC,IAAL,CAAUD,KAAV,CAAP;EAC/B,WAAO,KAAKE,IAAL,CAAUF,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB2E,IAAzB,GAAgC,SAASA,IAAT,CAAcD,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB4E,IAAzB,GAAgC,SAASA,IAAT,CAAcrC,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACE,GAAf,GAAqB,SAASA,GAAT,CAAalC,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACN,GAAV,CAAcC,KAAd,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBgF,GAAzB,GAA+B,SAASA,GAAT,CAAaN,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKO,IAAL,CAAUP,KAAV,CAAP;EAC/B,WAAO,KAAKQ,IAAL,CAAUR,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBiF,IAAzB,GAAgC,SAASA,IAAT,CAAcP,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBkF,IAAzB,GAAgC,SAASA,IAAT,CAAc3C,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACS,GAAf,GAAqB,SAASA,GAAT,CAAazC,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACC,GAAV,CAAcN,KAAd,CAAP;EACD,GAHD;;EAIAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBmF,QAAzB,GAAoCZ,cAAc,CAACvE,SAAf,CAAyBgF,GAA7D;EACAT,EAAAA,cAAc,CAACvE,SAAf,CAAyBoF,SAAzB,GAAqCb,cAAc,CAACvE,SAAf,CAAyBiF,IAA9D;EACAV,EAAAA,cAAc,CAACvE,SAAf,CAAyBqF,SAAzB,GAAqCd,cAAc,CAACvE,SAAf,CAAyBkF,IAA9D;EACAX,EAAAA,cAAc,CAACY,QAAf,GAA0BZ,cAAc,CAACS,GAAzC;;EAEAT,EAAAA,cAAc,CAACvE,SAAf,CAAyBsF,GAAzB,GAA+B,SAASA,GAAT,CAAaZ,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKa,IAAL,CAAUb,KAAV,CAAP;EAC/B,WAAO,KAAKc,IAAL,CAAUd,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBuF,IAAzB,GAAgC,SAASA,IAAT,CAAcb,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBwF,IAAzB,GAAgC,SAASA,IAAT,CAAcjD,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACe,GAAf,GAAqB,SAASA,GAAT,CAAa/C,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACO,GAAV,CAAcZ,KAAd,CAAP;EACD,GAHD;;EAIAH,EAAAA,cAAc,CAACvE,SAAf,CAAyByF,QAAzB,GAAoClB,cAAc,CAACvE,SAAf,CAAyBsF,GAA7D;EACAf,EAAAA,cAAc,CAACvE,SAAf,CAAyB0F,SAAzB,GAAqCnB,cAAc,CAACvE,SAAf,CAAyBuF,IAA9D;EACAhB,EAAAA,cAAc,CAACvE,SAAf,CAAyB2F,SAAzB,GAAqCpB,cAAc,CAACvE,SAAf,CAAyBwF,IAA9D;EACAjB,EAAAA,cAAc,CAACkB,QAAf,GAA0BlB,cAAc,CAACe,GAAzC;;EAEAf,EAAAA,cAAc,CAACvE,SAAf,CAAyB4F,GAAzB,GAA+B,SAASA,GAAT,CAAalB,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKmB,IAAL,CAAUnB,KAAV,CAAP;EAC/B,WAAO,KAAKoB,IAAL,CAAUpB,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB6F,IAAzB,GAAgC,SAASA,IAAT,CAAcnB,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB8F,IAAzB,GAAgC,SAASA,IAAT,CAAcvD,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACqB,GAAf,GAAqB,SAASA,GAAT,CAAarD,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACa,GAAV,CAAclB,KAAd,CAAP;EACD,GAHD;;EAIAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB+F,MAAzB,GAAkCxB,cAAc,CAACvE,SAAf,CAAyB4F,GAA3D;EACArB,EAAAA,cAAc,CAACvE,SAAf,CAAyBgG,OAAzB,GAAmCzB,cAAc,CAACvE,SAAf,CAAyB6F,IAA5D;EACAtB,EAAAA,cAAc,CAACvE,SAAf,CAAyBiG,OAAzB,GAAmC1B,cAAc,CAACvE,SAAf,CAAyB8F,IAA5D;EACAvB,EAAAA,cAAc,CAACwB,MAAf,GAAwBxB,cAAc,CAACqB,GAAvC;;EAEArB,EAAAA,cAAc,CAACvE,SAAf,CAAyBkG,GAAzB,GAA+B,SAASA,GAAT,CAAaxB,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKyB,IAAL,CAAUzB,KAAV,CAAP;EAC/B,WAAO,KAAK0B,IAAL,CAAU1B,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBmG,IAAzB,GAAgC,SAASA,IAAT,CAAczB,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBoG,IAAzB,GAAgC,SAASA,IAAT,CAAc7D,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC2B,GAAf,GAAqB,SAASA,GAAT,CAAa3D,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACmB,GAAV,CAAcxB,KAAd,CAAP;EACD,GAHD;;EAIAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBqG,OAAzB,GAAmC9B,cAAc,CAACvE,SAAf,CAAyBkG,GAA5D;EACA3B,EAAAA,cAAc,CAACvE,SAAf,CAAyBsG,QAAzB,GAAoC/B,cAAc,CAACvE,SAAf,CAAyBmG,IAA7D;EACA5B,EAAAA,cAAc,CAACvE,SAAf,CAAyBuG,QAAzB,GAAoChC,cAAc,CAACvE,SAAf,CAAyBoG,IAA7D;EACA7B,EAAAA,cAAc,CAAC8B,OAAf,GAAyB9B,cAAc,CAAC2B,GAAxC;;EAEA3B,EAAAA,cAAc,CAACvE,SAAf,CAAyBwG,GAAzB,GAA+B,SAASA,GAAT,CAAa9B,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK+B,IAAL,CAAU/B,KAAV,CAAP;EAC/B,WAAO,KAAKgC,IAAL,CAAUhC,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyByG,IAAzB,GAAgC,SAASA,IAAT,CAAc/B,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB0G,IAAzB,GAAgC,SAASA,IAAT,CAAcnE,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACiC,GAAf,GAAqB,SAASA,GAAT,CAAajE,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACyB,GAAV,CAAc9B,KAAd,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB2G,EAAzB,GAA8B,SAASA,EAAT,CAAYjC,KAAZ,EAAmB;EAC/C,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKkC,GAAL,CAASlC,KAAT,CAAP;EAC/B,WAAO,KAAKmC,GAAL,CAASnC,KAAT,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB4G,GAAzB,GAA+B,SAASA,GAAT,CAAalC,KAAb,EAAoB;EACjD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB6G,GAAzB,GAA+B,SAASA,GAAT,CAAatE,MAAb,EAAqB;EAClDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACoC,EAAf,GAAoB,SAASA,EAAT,CAAYpE,MAAZ,EAAoBmC,KAApB,EAA2B;EAC7C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC4B,EAAV,CAAajC,KAAb,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB8G,GAAzB,GAA+B,SAASA,GAAT,CAAapC,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKqC,IAAL,CAAUrC,KAAV,CAAP;EAC/B,WAAO,KAAKsC,IAAL,CAAUtC,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB+G,IAAzB,GAAgC,SAASA,IAAT,CAAcrC,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBqB,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBgH,IAAzB,GAAgC,SAASA,IAAT,CAAczE,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACuC,GAAf,GAAqB,SAASA,GAAT,CAAavE,MAAb,EAAqBmC,KAArB,EAA4B;EAC/C,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC+B,GAAV,CAAcpC,KAAd,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBiH,SAAzB,GAAqC,SAASA,SAAT,CAAmBvC,KAAnB,EAA0B;EAC7D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKwC,UAAL,CAAgBxC,KAAhB,CAAP;EAC/B,WAAO,KAAKyC,UAAL,CAAgBzC,KAAhB,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBkH,UAAzB,GAAsC,SAASA,UAAT,CAAoBxC,KAApB,EAA2B;EAC/D,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,KAAkBqB,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBmH,UAAzB,GAAsC,SAASA,UAAT,CAAoB5E,MAApB,EAA4B;EAChEA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,KAAkBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC0C,SAAf,GAA2B,SAASA,SAAT,CAAmB1E,MAAnB,EAA2BmC,KAA3B,EAAkC;EAC3D,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACkC,SAAV,CAAoBvC,KAApB,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBoH,yBAAzB,GAAqD,SAASA,yBAAT,CAAmC1C,KAAnC,EAA0C;EAC7F,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK2C,0BAAL,CAAgC3C,KAAhC,CAAP;EAC/B,WAAO,KAAK4C,0BAAL,CAAgC5C,KAAhC,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBqH,0BAAzB,GAAsD,SAASA,0BAAT,CAAoC3C,KAApC,EAA2C;EAC/F,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,KAAkBqB,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBsH,0BAAzB,GAAsD,SAASA,0BAAT,CAAoC/E,MAApC,EAA4C;EAChGA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,KAAkBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC6C,yBAAf,GAA2C,SAASA,yBAAT,CAAmC7E,MAAnC,EAA2CmC,KAA3C,EAAkD;EAC3F,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACqC,yBAAV,CAAoC1C,KAApC,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBuH,UAAzB,GAAsC,SAASA,UAAT,CAAoB7C,KAApB,EAA2B;EAC/D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK8C,WAAL,CAAiB9C,KAAjB,CAAP;EAC/B,WAAO,KAAK+C,WAAL,CAAiB/C,KAAjB,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyBwH,WAAzB,GAAuC,SAASA,WAAT,CAAqB9C,KAArB,EAA4B;EACjE,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmBqB,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyByH,WAAzB,GAAuC,SAASA,WAAT,CAAqBlF,MAArB,EAA6B;EAClEA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACgD,UAAf,GAA4B,SAASA,UAAT,CAAoBhF,MAApB,EAA4BmC,KAA5B,EAAmC;EAC7D,UAAMK,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACwC,UAAV,CAAqB7C,KAArB,CAAP;EACD,GAHD;;EAIAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB0H,kBAAzB,GAA8CnD,cAAc,CAACvE,SAAf,CAAyBuH,UAAvE;EACAhD,EAAAA,cAAc,CAACvE,SAAf,CAAyB2H,mBAAzB,GAA+CpD,cAAc,CAACvE,SAAf,CAAyBwH,WAAxE;EACAjD,EAAAA,cAAc,CAACvE,SAAf,CAAyB4H,mBAAzB,GAA+CrD,cAAc,CAACvE,SAAf,CAAyByH,WAAxE;EACAlD,EAAAA,cAAc,CAACmD,kBAAf,GAAoCnD,cAAc,CAACgD,UAAnD;;EAEAhD,EAAAA,cAAc,CAACvE,SAAf,CAAyB6H,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIxG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,CAAE,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAjB;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACsD,GAAf,GAAqB,SAASA,GAAT,CAAatF,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC8C,GAAV,EAAP;EACD,GAHD;;EAKAtD,EAAAA,cAAc,CAACvE,SAAf,CAAyB8H,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC6E,GAAL,CAAS,KAAKtE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACuD,GAAf,GAAqB,SAASA,GAAT,CAAavF,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC+C,GAAV,EAAP;EACD,GAHD;;EAKAvD,EAAAA,cAAc,CAACvE,SAAf,CAAyB+H,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI1G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC8E,IAAL,CAAU,KAAKvE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACwD,IAAf,GAAsB,SAASA,IAAT,CAAcxF,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACgD,IAAV,EAAP;EACD,GAHD;;EAKAxD,EAAAA,cAAc,CAACvE,SAAf,CAAyBgI,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI3G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC+E,KAAL,CAAW,KAAKxE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACyD,KAAf,GAAuB,SAASA,KAAT,CAAezF,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACiD,KAAV,EAAP;EACD,GAHD;;EAKAzD,EAAAA,cAAc,CAACvE,SAAf,CAAyBiI,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI5G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACgF,IAAL,CAAU,KAAKzE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC0D,IAAf,GAAsB,SAASA,IAAT,CAAc1F,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACkD,IAAV,EAAP;EACD,GAHD;;EAKA1D,EAAAA,cAAc,CAACvE,SAAf,CAAyBkI,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACiF,KAAL,CAAW,KAAK1E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC2D,KAAf,GAAuB,SAASA,KAAT,CAAe3F,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACmD,KAAV,EAAP;EACD,GAHD;;EAKA3D,EAAAA,cAAc,CAACvE,SAAf,CAAyBmI,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACkF,IAAL,CAAU,KAAK3E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC4D,IAAf,GAAsB,SAASA,IAAT,CAAc5F,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACoD,IAAV,EAAP;EACD,GAHD;;EAKA5D,EAAAA,cAAc,CAACvE,SAAf,CAAyBoI,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI/G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACmF,KAAL,CAAW,KAAK5E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC6D,KAAf,GAAuB,SAASA,KAAT,CAAe7F,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACqD,KAAV,EAAP;EACD,GAHD;;EAKA7D,EAAAA,cAAc,CAACvE,SAAf,CAAyBqI,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACoF,IAAL,CAAU,KAAK7E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC8D,IAAf,GAAsB,SAASA,IAAT,CAAc9F,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACsD,IAAV,EAAP;EACD,GAHD;;EAKA9D,EAAAA,cAAc,CAACvE,SAAf,CAAyBsI,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIjH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACqF,IAAL,CAAU,KAAK9E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC+D,IAAf,GAAsB,SAASA,IAAT,CAAc/F,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACuD,IAAV,EAAP;EACD,GAHD;;EAKA/D,EAAAA,cAAc,CAACvE,SAAf,CAAyBuI,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACsF,KAAL,CAAW,KAAK/E,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACgE,KAAf,GAAuB,SAASA,KAAT,CAAehG,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACwD,KAAV,EAAP;EACD,GAHD;;EAKAhE,EAAAA,cAAc,CAACvE,SAAf,CAAyBwI,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAInH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACuF,GAAL,CAAS,KAAKhF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACiE,GAAf,GAAqB,SAASA,GAAT,CAAajG,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACyD,GAAV,EAAP;EACD,GAHD;;EAKAjE,EAAAA,cAAc,CAACvE,SAAf,CAAyByI,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACwF,IAAL,CAAU,KAAKjF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACkE,IAAf,GAAsB,SAASA,IAAT,CAAclG,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC0D,IAAV,EAAP;EACD,GAHD;;EAKAlE,EAAAA,cAAc,CAACvE,SAAf,CAAyB0I,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIrH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACyF,GAAL,CAAS,KAAKlF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACmE,GAAf,GAAqB,SAASA,GAAT,CAAanG,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC2D,GAAV,EAAP;EACD,GAHD;;EAKAnE,EAAAA,cAAc,CAACvE,SAAf,CAAyB2I,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAItH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC0F,KAAL,CAAW,KAAKnF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACoE,KAAf,GAAuB,SAASA,KAAT,CAAepG,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC4D,KAAV,EAAP;EACD,GAHD;;EAKApE,EAAAA,cAAc,CAACvE,SAAf,CAAyB4I,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIvH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC2F,KAAL,CAAW,KAAKpF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACqE,KAAf,GAAuB,SAASA,KAAT,CAAerG,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC6D,KAAV,EAAP;EACD,GAHD;;EAKArE,EAAAA,cAAc,CAACvE,SAAf,CAAyB6I,MAAzB,GAAkC,SAASA,MAAT,GAAkB;EAClD,SAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC4F,MAAL,CAAY,KAAKrF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAZ,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACsE,MAAf,GAAwB,SAASA,MAAT,CAAgBtG,MAAhB,EAAwB;EAC9C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC8D,MAAV,EAAP;EACD,GAHD;;EAKAtE,EAAAA,cAAc,CAACvE,SAAf,CAAyB8I,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIzH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC6F,GAAL,CAAS,KAAKtF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACuE,GAAf,GAAqB,SAASA,GAAT,CAAavG,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC+D,GAAV,EAAP;EACD,GAHD;;EAKAvE,EAAAA,cAAc,CAACvE,SAAf,CAAyB+I,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI1H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC8F,KAAL,CAAW,KAAKvF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACwE,KAAf,GAAuB,SAASA,KAAT,CAAexG,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACgE,KAAV,EAAP;EACD,GAHD;;EAKAxE,EAAAA,cAAc,CAACvE,SAAf,CAAyBgJ,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI3H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAAC+F,KAAL,CAAW,KAAKxF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACyE,KAAf,GAAuB,SAASA,KAAT,CAAezG,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACiE,KAAV,EAAP;EACD,GAHD;;EAKAzE,EAAAA,cAAc,CAACvE,SAAf,CAAyBiJ,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI5H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACgG,IAAL,CAAU,KAAKzF,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC0E,IAAf,GAAsB,SAASA,IAAT,CAAc1G,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACkE,IAAV,EAAP;EACD,GAHD;;EAKA1E,EAAAA,cAAc,CAACvE,SAAf,CAAyBkJ,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACiG,KAAL,CAAW,KAAK1F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC2E,KAAf,GAAuB,SAASA,KAAT,CAAe3G,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACmE,KAAV,EAAP;EACD,GAHD;;EAKA3E,EAAAA,cAAc,CAACvE,SAAf,CAAyBmJ,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACkG,IAAL,CAAU,KAAK3F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC4E,IAAf,GAAsB,SAASA,IAAT,CAAc5G,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACoE,IAAV,EAAP;EACD,GAHD;;EAKA5E,EAAAA,cAAc,CAACvE,SAAf,CAAyBoJ,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAI/H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACmG,GAAL,CAAS,KAAK5F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC6E,GAAf,GAAqB,SAASA,GAAT,CAAa7G,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACqE,GAAV,EAAP;EACD,GAHD;;EAKA7E,EAAAA,cAAc,CAACvE,SAAf,CAAyBqJ,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACoG,IAAL,CAAU,KAAK7F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC8E,IAAf,GAAsB,SAASA,IAAT,CAAc9G,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACsE,IAAV,EAAP;EACD,GAHD;;EAKA9E,EAAAA,cAAc,CAACvE,SAAf,CAAyBsJ,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACqG,IAAL,CAAU,KAAK9F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC+E,IAAf,GAAsB,SAASA,IAAT,CAAc/G,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACuE,IAAV,EAAP;EACD,GAHD;;EAKA/E,EAAAA,cAAc,CAACvE,SAAf,CAAyBuJ,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIlI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACsG,GAAL,CAAS,KAAK/F,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACgF,GAAf,GAAqB,SAASA,GAAT,CAAahH,MAAb,EAAqB;EACxC,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACwE,GAAV,EAAP;EACD,GAHD;;EAKAhF,EAAAA,cAAc,CAACvE,SAAf,CAAyBwJ,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAInI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACuG,IAAL,CAAU,KAAKhG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACiF,IAAf,GAAsB,SAASA,IAAT,CAAcjH,MAAd,EAAsB;EAC1C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAACyE,IAAV,EAAP;EACD,GAHD;;EAKAjF,EAAAA,cAAc,CAACvE,SAAf,CAAyByJ,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIpI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACwG,KAAL,CAAW,KAAKjG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACkF,KAAf,GAAuB,SAASA,KAAT,CAAelH,MAAf,EAAuB;EAC5C,UAAMwC,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC0E,KAAV,EAAP;EACD,GAHD;;EAKAlF,EAAAA,cAAc,CAACmF,GAAf,GAAqB,SAASA,GAAT,CAAanH,MAAb,EAAqBoH,IAArB,EAA2B;EAC9C,UAAM5E,SAAS,GAAG,IAAIP,MAAJ,CAAWjC,MAAX,CAAlB;EACA,WAAOwC,SAAS,CAAC2E,GAAV,CAAcC,IAAd,CAAP;EACD,GAHD;;EAKApF,EAAAA,cAAc,CAACvE,SAAf,CAAyB0J,GAAzB,GAA+B,SAASA,GAAT,CAAahF,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKkF,IAAL,CAAUlF,KAAV,CAAP;EAC/B,WAAO,KAAKmF,IAAL,CAAUnF,KAAV,CAAP;EACD,GAHD;;EAKAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB4J,IAAzB,GAAgC,SAASA,IAAT,CAAclF,KAAd,EAAqB;EACnD,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACyG,GAAL,CAAS,KAAKlG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,EAAyBqB,KAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAH,EAAAA,cAAc,CAACvE,SAAf,CAAyB6J,IAAzB,GAAgC,SAASA,IAAT,CAActH,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeJ,IAAI,CAACyG,GAAL,CAAS,KAAKlG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAT,EAAyBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;EAaD;;ECtzBD;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASyG,aAAT,CAAuBvH,MAAvB,EAA+BwH,KAA/B,EAAsCC,KAAtC,EAA6C;EAClD,MAAI3J,GAAG,GAAG2J,KAAK,GAAGzH,MAAM,CAACO,IAAV,GAAiBP,MAAM,CAACO,IAAP,GAAc,CAA9C;;EACA,MAAIiH,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG1J,GAAzB,EAA8B;EAC5B,UAAM,IAAIwB,UAAJ,CAAe,wBAAf,CAAN;EACD;EACF;EAED;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASoI,gBAAT,CAA0B1H,MAA1B,EAAkCwH,KAAlC,EAAyCC,KAAzC,EAAgD;EACrD,MAAI3J,GAAG,GAAG2J,KAAK,GAAGzH,MAAM,CAACQ,OAAV,GAAoBR,MAAM,CAACQ,OAAP,GAAiB,CAApD;;EACA,MAAIgH,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG1J,GAAzB,EAA8B;EAC5B,UAAM,IAAIwB,UAAJ,CAAe,2BAAf,CAAN;EACD;EACF;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASqI,cAAT,CAAwB3H,MAAxB,EAAgC4H,MAAhC,EAAwC;EAC7C,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC1J,MAAP,KAAkB8B,MAAM,CAACQ,OAA7B,EAAsC;EACpC,UAAM,IAAIlB,UAAJ,CACJ,uDADI,CAAN;EAGD;;EACD,SAAOsI,MAAP;EACD;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASE,iBAAT,CAA2B9H,MAA3B,EAAmC4H,MAAnC,EAA2C;EAChD,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC1J,MAAP,KAAkB8B,MAAM,CAACO,IAA7B,EAAmC;EACjC,UAAM,IAAIjB,UAAJ,CAAe,oDAAf,CAAN;EACD;;EACD,SAAOsI,MAAP;EACD;EAEM,SAASG,YAAT,CAAsB/H,MAAtB,EAA8BgI,UAA9B,EAA0CC,aAA1C,EAAyD;EAC9D,SAAO;EACLC,IAAAA,GAAG,EAAEC,eAAe,CAACnI,MAAD,EAASgI,UAAT,CADf;EAELI,IAAAA,MAAM,EAAEC,kBAAkB,CAACrI,MAAD,EAASiI,aAAT;EAFrB,GAAP;EAID;EAEM,SAASE,eAAT,CAAyBnI,MAAzB,EAAiCgI,UAAjC,EAA6C;EAClD,MAAI,OAAOA,UAAP,KAAsB,QAA1B,EAAoC;EAClC,UAAM,IAAI3J,SAAJ,CAAc,iCAAd,CAAN;EACD;;EAED,MAAIiK,MAAM,GAAGN,UAAU,CAACO,IAAX,CAAiBC,CAAD,IAAO;EAClC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAIxI,MAAM,CAACO,IAA5B;EACD,GAFY,CAAb;;EAIA,MAAI+H,MAAJ,EAAY;EACV,UAAM,IAAIhJ,UAAJ,CAAe,8BAAf,CAAN;EACD;;EAED,MAAI,CAACH,KAAK,CAACf,OAAN,CAAc4J,UAAd,CAAL,EAAgCA,UAAU,GAAG7I,KAAK,CAACsJ,IAAN,CAAWT,UAAX,CAAb;EAEhC,SAAOA,UAAP;EACD;EAEM,SAASK,kBAAT,CAA4BrI,MAA5B,EAAoCiI,aAApC,EAAmD;EACxD,MAAI,OAAOA,aAAP,KAAyB,QAA7B,EAAuC;EACrC,UAAM,IAAI5J,SAAJ,CAAc,oCAAd,CAAN;EACD;;EAED,MAAIqK,SAAS,GAAGT,aAAa,CAACM,IAAd,CAAoBI,CAAD,IAAO;EACxC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAI3I,MAAM,CAACQ,OAA5B;EACD,GAFe,CAAhB;;EAIA,MAAIkI,SAAJ,EAAe;EACb,UAAM,IAAIpJ,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,MAAI,CAACH,KAAK,CAACf,OAAN,CAAc6J,aAAd,CAAL,EAAmCA,aAAa,GAAG9I,KAAK,CAACsJ,IAAN,CAAWR,aAAX,CAAhB;EAEnC,SAAOA,aAAP;EACD;EAEM,SAASW,UAAT,CAAoB5I,MAApB,EAA4B6I,QAA5B,EAAsCC,MAAtC,EAA8CC,WAA9C,EAA2DC,SAA3D,EAAsE;EAC3E,MAAI/K,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAM,IAAIoB,UAAJ,CAAe,sBAAf,CAAN;EACD;;EACD2J,EAAAA,WAAW,CAAC,UAAD,EAAaJ,QAAb,CAAX;EACAI,EAAAA,WAAW,CAAC,QAAD,EAAWH,MAAX,CAAX;EACAG,EAAAA,WAAW,CAAC,aAAD,EAAgBF,WAAhB,CAAX;EACAE,EAAAA,WAAW,CAAC,WAAD,EAAcD,SAAd,CAAX;;EACA,MACEH,QAAQ,GAAGC,MAAX,IACAC,WAAW,GAAGC,SADd,IAEAH,QAAQ,GAAG,CAFX,IAGAA,QAAQ,IAAI7I,MAAM,CAACO,IAHnB,IAIAuI,MAAM,GAAG,CAJT,IAKAA,MAAM,IAAI9I,MAAM,CAACO,IALjB,IAMAwI,WAAW,GAAG,CANd,IAOAA,WAAW,IAAI/I,MAAM,CAACQ,OAPtB,IAQAwI,SAAS,GAAG,CARZ,IASAA,SAAS,IAAIhJ,MAAM,CAACQ,OAVtB,EAWE;EACA,UAAM,IAAIlB,UAAJ,CAAe,oCAAf,CAAN;EACD;EACF;EAEM,SAAS4J,QAAT,CAAkBhL,MAAlB,EAA0BiE,KAAK,GAAG,CAAlC,EAAqC;EAC1C,MAAIgH,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGZ,MAApB,EAA4BY,CAAC,EAA7B,EAAiC;EAC/BqK,IAAAA,KAAK,CAACpI,IAAN,CAAWoB,KAAX;EACD;;EACD,SAAOgH,KAAP;EACD;;EAED,SAASF,WAAT,CAAqB5I,IAArB,EAA2B8B,KAA3B,EAAkC;EAChC,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B,UAAM,IAAI9D,SAAJ,CAAe,GAAEgC,IAAK,mBAAtB,CAAN;EACD;EACF;;EAEM,SAAS+I,aAAT,CAAuBpJ,MAAvB,EAA+B;EACpC,MAAIA,MAAM,CAACqJ,OAAP,EAAJ,EAAsB;EACpB,UAAM,IAAIzK,KAAJ,CAAU,uCAAV,CAAN;EACD;EACF;;ECpJM,SAAS0K,QAAT,CAAkBtJ,MAAlB,EAA0B;EAC/B,MAAIuJ,GAAG,GAAGL,QAAQ,CAAClJ,MAAM,CAACO,IAAR,CAAlB;;EACA,OAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiC,EAAEzB,CAAnC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoC,EAAEM,CAAtC,EAAyC;EACvCyI,MAAAA,GAAG,CAACzK,CAAD,CAAH,IAAUkB,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAV;EACD;EACF;;EACD,SAAOyI,GAAP;EACD;EAEM,SAASC,WAAT,CAAqBxJ,MAArB,EAA6B;EAClC,MAAIuJ,GAAG,GAAGL,QAAQ,CAAClJ,MAAM,CAACQ,OAAR,CAAlB;;EACA,OAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiC,EAAEzB,CAAnC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoC,EAAEM,CAAtC,EAAyC;EACvCyI,MAAAA,GAAG,CAACzI,CAAD,CAAH,IAAUd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAV;EACD;EACF;;EACD,SAAOyI,GAAP;EACD;EAEM,SAASE,MAAT,CAAgBzJ,MAAhB,EAAwB;EAC7B,MAAI0J,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI5K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvC4I,MAAAA,CAAC,IAAI1J,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAL;EACD;EACF;;EACD,SAAO4I,CAAP;EACD;EAEM,SAASC,YAAT,CAAsB3J,MAAtB,EAA8B;EACnC,MAAIuJ,GAAG,GAAGL,QAAQ,CAAClJ,MAAM,CAACO,IAAR,EAAc,CAAd,CAAlB;;EACA,OAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiC,EAAEzB,CAAnC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoC,EAAEM,CAAtC,EAAyC;EACvCyI,MAAAA,GAAG,CAACzK,CAAD,CAAH,IAAUkB,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAV;EACD;EACF;;EACD,SAAOyI,GAAP;EACD;EAEM,SAASK,eAAT,CAAyB5J,MAAzB,EAAiC;EACtC,MAAIuJ,GAAG,GAAGL,QAAQ,CAAClJ,MAAM,CAACQ,OAAR,EAAiB,CAAjB,CAAlB;;EACA,OAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiC,EAAEzB,CAAnC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoC,EAAEM,CAAtC,EAAyC;EACvCyI,MAAAA,GAAG,CAACzI,CAAD,CAAH,IAAUd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAV;EACD;EACF;;EACD,SAAOyI,GAAP;EACD;EAEM,SAASM,UAAT,CAAoB7J,MAApB,EAA4B;EACjC,MAAI0J,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI5K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvC4I,MAAAA,CAAC,IAAI1J,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAL;EACD;EACF;;EACD,SAAO4I,CAAP;EACD;EAEM,SAASI,aAAT,CAAuB9J,MAAvB,EAA+B+J,QAA/B,EAAyCC,IAAzC,EAA+C;EACpD,QAAMzJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAM0J,IAAI,GAAGjK,MAAM,CAACQ,OAApB;EACA,QAAM0J,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIpL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,QAAIqL,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIvJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmJ,IAApB,EAA0BnJ,CAAC,EAA3B,EAA+B;EAC7BuJ,MAAAA,CAAC,GAAGrK,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAAI,CAAClL,CAAD,CAA3B;EACAqL,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIN,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAACnJ,IAAT,CAAc,CAACqJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACLC,MAAAA,QAAQ,CAACnJ,IAAT,CAAc,CAACqJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAOC,QAAP;EACD;EAEM,SAASI,gBAAT,CAA0BtK,MAA1B,EAAkC+J,QAAlC,EAA4CC,IAA5C,EAAkD;EACvD,QAAMzJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAM0J,IAAI,GAAGjK,MAAM,CAACQ,OAApB;EACA,QAAM0J,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmJ,IAApB,EAA0BnJ,CAAC,EAA3B,EAA+B;EAC7B,QAAIqJ,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7BuL,MAAAA,CAAC,GAAGrK,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAAI,CAAClJ,CAAD,CAA3B;EACAqJ,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIN,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAACnJ,IAAT,CAAc,CAACqJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgB5J,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACL2J,MAAAA,QAAQ,CAACnJ,IAAT,CAAc,CAACqJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgB5J,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAO2J,QAAP;EACD;EAEM,SAASK,WAAT,CAAqBvK,MAArB,EAA6B+J,QAA7B,EAAuCC,IAAvC,EAA6C;EAClD,QAAMzJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAM0J,IAAI,GAAGjK,MAAM,CAACQ,OAApB;EACA,QAAMgK,IAAI,GAAGjK,IAAI,GAAG0J,IAApB;EAEA,MAAIE,IAAI,GAAG,CAAX;EACA,MAAIC,IAAI,GAAG,CAAX;EACA,MAAIC,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmJ,IAApB,EAA0BnJ,CAAC,EAA3B,EAA+B;EAC7BuJ,MAAAA,CAAC,GAAGrK,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAAvB;EACAG,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;EACF;;EACD,MAAIN,QAAJ,EAAc;EACZ,WAAO,CAACK,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBK,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAP;EACD,GAFD,MAEO;EACL,WAAO,CAACJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBK,IAAxB,IAAgCA,IAAvC;EACD;EACF;EAEM,SAASC,WAAT,CAAqBzK,MAArB,EAA6BgK,IAA7B,EAAmC;EACxC,OAAK,IAAIlL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAAI,CAAClL,CAAD,CAAxC;EACD;EACF;EACF;EAEM,SAAS4L,cAAT,CAAwB1K,MAAxB,EAAgCgK,IAAhC,EAAsC;EAC3C,OAAK,IAAIlL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAAI,CAAClJ,CAAD,CAAxC;EACD;EACF;EACF;EAEM,SAAS6J,SAAT,CAAmB3K,MAAnB,EAA2BgK,IAA3B,EAAiC;EACtC,OAAK,IAAIlL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBkJ,IAApC;EACD;EACF;EACF;EAEM,SAASY,aAAT,CAAuB5K,MAAvB,EAA+B;EACpC,QAAM6K,KAAK,GAAG,EAAd;;EACA,OAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,QAAIyK,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIzI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCyI,MAAAA,GAAG,IAAI7I,IAAI,CAACyG,GAAL,CAASnH,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAT,EAA2B,CAA3B,KAAiCd,MAAM,CAACQ,OAAP,GAAiB,CAAlD,CAAP;EACD;;EACDqK,IAAAA,KAAK,CAAC9J,IAAN,CAAWL,IAAI,CAACqG,IAAL,CAAUwC,GAAV,CAAX;EACD;;EACD,SAAOsB,KAAP;EACD;EAEM,SAASC,UAAT,CAAoB9K,MAApB,EAA4B6K,KAA5B,EAAmC;EACxC,OAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmB+J,KAAK,CAAC/L,CAAD,CAAzC;EACD;EACF;EACF;EAEM,SAASiM,gBAAT,CAA0B/K,MAA1B,EAAkC;EACvC,QAAM6K,KAAK,GAAG,EAAd;;EACA,OAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvC,QAAIyI,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIzK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpCyK,MAAAA,GAAG,IAAI7I,IAAI,CAACyG,GAAL,CAASnH,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAT,EAA2B,CAA3B,KAAiCd,MAAM,CAACO,IAAP,GAAc,CAA/C,CAAP;EACD;;EACDsK,IAAAA,KAAK,CAAC9J,IAAN,CAAWL,IAAI,CAACqG,IAAL,CAAUwC,GAAV,CAAX;EACD;;EACD,SAAOsB,KAAP;EACD;EAEM,SAASG,aAAT,CAAuBhL,MAAvB,EAA+B6K,KAA/B,EAAsC;EAC3C,OAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmB+J,KAAK,CAAC/J,CAAD,CAAzC;EACD;EACF;EACF;EAEM,SAASmK,WAAT,CAAqBjL,MAArB,EAA6B;EAClC,QAAMkL,OAAO,GAAGlL,MAAM,CAACwK,IAAP,GAAc,CAA9B;EACA,MAAIjB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAIzI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvC,SAAK,IAAIhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpCyK,MAAAA,GAAG,IAAI7I,IAAI,CAACyG,GAAL,CAASnH,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAT,EAA2B,CAA3B,IAAgCoK,OAAvC;EACD;EACF;;EACD,SAAOxK,IAAI,CAACqG,IAAL,CAAUwC,GAAV,CAAP;EACD;EAEM,SAAS4B,QAAT,CAAkBnL,MAAlB,EAA0B6K,KAA1B,EAAiC;EACtC,OAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCd,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmB+J,KAApC;EACD;EACF;EACF;;ECjLM,MAAM7I,cAAN,CAAqB;EACR,SAAXoJ,WAAW,CAACC,OAAD,EAAUC,UAAV,EAAsBC,OAAtB,EAA+B;EAC/C,QAAIrN,MAAM,GAAGmN,OAAO,GAAGC,UAAvB;;EACA,QAAIpN,MAAM,KAAKqN,OAAO,CAACrN,MAAvB,EAA+B;EAC7B,YAAM,IAAIoB,UAAJ,CAAe,6CAAf,CAAN;EACD;;EACD,QAAIkD,SAAS,GAAG,IAAIP,MAAJ,CAAWoJ,OAAX,EAAoBC,UAApB,CAAhB;;EACA,SAAK,IAAIpD,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGmD,OAAxB,EAAiCnD,GAAG,EAApC,EAAwC;EACtC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGkD,UAA9B,EAA0ClD,MAAM,EAAhD,EAAoD;EAClD5F,QAAAA,SAAS,CAACF,GAAV,CAAc4F,GAAd,EAAmBE,MAAnB,EAA2BmD,OAAO,CAACrD,GAAG,GAAGoD,UAAN,GAAmBlD,MAApB,CAAlC;EACD;EACF;;EACD,WAAO5F,SAAP;EACD;;EAEe,SAATgJ,SAAS,CAACD,OAAD,EAAU;EACxB,QAAI3D,MAAM,GAAG,IAAI3F,MAAJ,CAAW,CAAX,EAAcsJ,OAAO,CAACrN,MAAtB,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyM,OAAO,CAACrN,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC8I,MAAAA,MAAM,CAACtF,GAAP,CAAW,CAAX,EAAcxD,CAAd,EAAiByM,OAAO,CAACzM,CAAD,CAAxB;EACD;;EACD,WAAO8I,MAAP;EACD;;EAEkB,SAAZ6D,YAAY,CAACF,OAAD,EAAU;EAC3B,QAAI3D,MAAM,GAAG,IAAI3F,MAAJ,CAAWsJ,OAAO,CAACrN,MAAnB,EAA2B,CAA3B,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyM,OAAO,CAACrN,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC8I,MAAAA,MAAM,CAACtF,GAAP,CAAWxD,CAAX,EAAc,CAAd,EAAiByM,OAAO,CAACzM,CAAD,CAAxB;EACD;;EACD,WAAO8I,MAAP;EACD;;EAEW,SAAL8D,KAAK,CAACnL,IAAD,EAAOC,OAAP,EAAgB;EAC1B,WAAO,IAAIyB,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAP;EACD;;EAEU,SAAJmL,IAAI,CAACpL,IAAD,EAAOC,OAAP,EAAgB;EACzB,WAAO,IAAIyB,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,EAA0BoL,IAA1B,CAA+B,CAA/B,CAAP;EACD;;EAEU,SAAJC,IAAI,CAACtL,IAAD,EAAOC,OAAP,EAAgBxC,OAAO,GAAG,EAA1B,EAA8B;EACvC,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEyN,MAAAA,MAAM,GAAGpL,IAAI,CAACoL;EAAhB,QAA2B9N,OAAjC;EACA,QAAIgC,MAAM,GAAG,IAAIiC,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChCd,QAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBgL,MAAM,EAAvB;EACD;EACF;;EACD,WAAO9L,MAAP;EACD;;EAEa,SAAP+L,OAAO,CAACxL,IAAD,EAAOC,OAAP,EAAgBxC,OAAO,GAAG,EAA1B,EAA8B;EAC1C,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEU,MAAAA,GAAG,GAAG,CAAR;EAAWjB,MAAAA,GAAG,GAAG,IAAjB;EAAuBgO,MAAAA,MAAM,GAAGpL,IAAI,CAACoL;EAArC,QAAgD9N,OAAtD;EACA,QAAI,CAACU,MAAM,CAACC,SAAP,CAAiBI,GAAjB,CAAL,EAA4B,MAAM,IAAIV,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAI,CAACK,MAAM,CAACC,SAAP,CAAiBb,GAAjB,CAAL,EAA4B,MAAM,IAAIO,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAIU,GAAG,IAAIjB,GAAX,EAAgB,MAAM,IAAIwB,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAI0M,QAAQ,GAAGlO,GAAG,GAAGiB,GAArB;EACA,QAAIiB,MAAM,GAAG,IAAIiC,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChC,YAAIqB,KAAK,GAAGpD,GAAG,GAAG2B,IAAI,CAACiG,KAAL,CAAWmF,MAAM,KAAKE,QAAtB,CAAlB;EACAhM,QAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBqB,KAAjB;EACD;EACF;;EACD,WAAOnC,MAAP;EACD;;EAES,SAAHiM,GAAG,CAAC1L,IAAD,EAAOC,OAAP,EAAgB2B,KAAhB,EAAuB;EAC/B,QAAI3B,OAAO,KAAKrC,SAAhB,EAA2BqC,OAAO,GAAGD,IAAV;EAC3B,QAAI4B,KAAK,KAAKhE,SAAd,EAAyBgE,KAAK,GAAG,CAAR;EACzB,QAAIpD,GAAG,GAAG2B,IAAI,CAAC3B,GAAL,CAASwB,IAAT,EAAeC,OAAf,CAAV;EACA,QAAIR,MAAM,GAAG,KAAK0L,KAAL,CAAWnL,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BkB,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcA,CAAd,EAAiBqD,KAAjB;EACD;;EACD,WAAOnC,MAAP;EACD;;EAEU,SAAJkM,IAAI,CAACC,IAAD,EAAO5L,IAAP,EAAaC,OAAb,EAAsB;EAC/B,QAAI4L,CAAC,GAAGD,IAAI,CAACjO,MAAb;EACA,QAAIqC,IAAI,KAAKpC,SAAb,EAAwBoC,IAAI,GAAG6L,CAAP;EACxB,QAAI5L,OAAO,KAAKrC,SAAhB,EAA2BqC,OAAO,GAAGD,IAAV;EAC3B,QAAIxB,GAAG,GAAG2B,IAAI,CAAC3B,GAAL,CAASqN,CAAT,EAAY7L,IAAZ,EAAkBC,OAAlB,CAAV;EACA,QAAIR,MAAM,GAAG,KAAK0L,KAAL,CAAWnL,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BkB,MAAAA,MAAM,CAACsC,GAAP,CAAWxD,CAAX,EAAcA,CAAd,EAAiBqN,IAAI,CAACrN,CAAD,CAArB;EACD;;EACD,WAAOkB,MAAP;EACD;;EAES,SAAHjB,GAAG,CAACsN,OAAD,EAAUC,OAAV,EAAmB;EAC3BD,IAAAA,OAAO,GAAG,KAAK9J,WAAL,CAAiB8J,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAK/J,WAAL,CAAiB+J,OAAjB,CAAV;EACA,QAAI/L,IAAI,GAAG8L,OAAO,CAAC9L,IAAnB;EACA,QAAIC,OAAO,GAAG6L,OAAO,CAAC7L,OAAtB;EACA,QAAII,MAAM,GAAG,IAAIqB,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChCF,QAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBJ,IAAI,CAAC3B,GAAL,CAASsN,OAAO,CAACpL,GAAR,CAAYnC,CAAZ,EAAegC,CAAf,CAAT,EAA4BwL,OAAO,CAACrL,GAAR,CAAYnC,CAAZ,EAAegC,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAES,SAAH9C,GAAG,CAACuO,OAAD,EAAUC,OAAV,EAAmB;EAC3BD,IAAAA,OAAO,GAAG,KAAK9J,WAAL,CAAiB8J,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAK/J,WAAL,CAAiB+J,OAAjB,CAAV;EACA,QAAI/L,IAAI,GAAG8L,OAAO,CAAC9L,IAAnB;EACA,QAAIC,OAAO,GAAG6L,OAAO,CAAC7L,OAAtB;EACA,QAAII,MAAM,GAAG,IAAI,IAAJ,CAASL,IAAT,EAAeC,OAAf,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChCF,QAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBJ,IAAI,CAAC5C,GAAL,CAASuO,OAAO,CAACpL,GAAR,CAAYnC,CAAZ,EAAegC,CAAf,CAAT,EAA4BwL,OAAO,CAACrL,GAAR,CAAYnC,CAAZ,EAAegC,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAEiB,SAAX2B,WAAW,CAACJ,KAAD,EAAQ;EACxB,WAAOH,cAAc,CAACuK,QAAf,CAAwBpK,KAAxB,IAAiCA,KAAjC,GAAyC,IAAIF,MAAJ,CAAWE,KAAX,CAAhD;EACD;;EAEc,SAARoK,QAAQ,CAACpK,KAAD,EAAQ;EACrB,WAAOA,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAACqK,KAAN,KAAgB,QAAxC;EACD;;EAEO,MAAJhC,IAAI,GAAG;EACT,WAAO,KAAKjK,IAAL,GAAY,KAAKC,OAAxB;EACD;;EAEDiM,EAAAA,KAAK,CAACC,QAAD,EAAW;EACd,QAAI,OAAOA,QAAP,KAAoB,UAAxB,EAAoC;EAClC,YAAM,IAAIrO,SAAJ,CAAc,6BAAd,CAAN;EACD;;EACD,SAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC4L,QAAAA,QAAQ,CAAC9O,IAAT,CAAc,IAAd,EAAoBkB,CAApB,EAAuBgC,CAAvB;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED+G,EAAAA,SAAS,GAAG;EACV,QAAIsB,KAAK,GAAG,EAAZ;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrCqI,QAAAA,KAAK,CAACpI,IAAN,CAAW,KAAKE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAX;EACD;EACF;;EACD,WAAOqI,KAAP;EACD;;EAEDwD,EAAAA,SAAS,GAAG;EACV,QAAIC,IAAI,GAAG,EAAX;;EACA,SAAK,IAAI9N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC8N,MAAAA,IAAI,CAAC7L,IAAL,CAAU,EAAV;;EACA,WAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC8L,QAAAA,IAAI,CAAC9N,CAAD,CAAJ,CAAQiC,IAAR,CAAa,KAAKE,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAb;EACD;EACF;;EACD,WAAO8L,IAAP;EACD;;EAEDC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKF,SAAL,EAAP;EACD;;EAEDG,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKvM,IAAL,KAAc,CAArB;EACD;;EAEDwM,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKvM,OAAL,KAAiB,CAAxB;EACD;;EAEDwM,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKzM,IAAL,KAAc,CAAd,IAAmB,KAAKC,OAAL,KAAiB,CAA3C;EACD;;EAEDyM,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK1M,IAAL,KAAc,KAAKC,OAA1B;EACD;;EAED6I,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK9I,IAAL,KAAc,CAAd,IAAmB,KAAKC,OAAL,KAAiB,CAA3C;EACD;;EAED0M,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKD,QAAL,EAAJ,EAAqB;EACnB,WAAK,IAAInO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIhC,CAArB,EAAwBgC,CAAC,EAAzB,EAA6B;EAC3B,cAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB,KAAKG,GAAL,CAASH,CAAT,EAAYhC,CAAZ,CAAvB,EAAuC;EACrC,mBAAO,KAAP;EACD;EACF;EACF;;EACD,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EAEDqO,EAAAA,aAAa,GAAG;EACd,QAAIrO,CAAC,GAAG,CAAR;EACA,QAAIgC,CAAC,GAAG,CAAR;EACA,QAAIsM,cAAc,GAAG,CAAC,CAAtB;EACA,QAAID,aAAa,GAAG,IAApB;EACA,QAAIE,OAAO,GAAG,KAAd;;EACA,WAAOvO,CAAC,GAAG,KAAKyB,IAAT,IAAiB4M,aAAxB,EAAuC;EACrCrM,MAAAA,CAAC,GAAG,CAAJ;EACAuM,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOvM,CAAC,GAAG,KAAKN,OAAT,IAAoB6M,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAKpM,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGsM,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGtM,CAAjB;EACD,SAHM,MAGA;EACLqM,UAAAA,aAAa,GAAG,KAAhB;EACAE,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACDvO,MAAAA,CAAC;EACF;;EACD,WAAOqO,aAAP;EACD;;EAEDG,EAAAA,oBAAoB,GAAG;EACrB,QAAIxO,CAAC,GAAG,CAAR;EACA,QAAIgC,CAAC,GAAG,CAAR;EACA,QAAIsM,cAAc,GAAG,CAAC,CAAtB;EACA,QAAIE,oBAAoB,GAAG,IAA3B;EACA,QAAID,OAAO,GAAG,KAAd;;EACA,WAAOvO,CAAC,GAAG,KAAKyB,IAAT,IAAiB+M,oBAAxB,EAA8C;EAC5CxM,MAAAA,CAAC,GAAG,CAAJ;EACAuM,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOvM,CAAC,GAAG,KAAKN,OAAT,IAAoB6M,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAKpM,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGsM,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGtM,CAAjB;EACD,SAHM,MAGA;EACLwM,UAAAA,oBAAoB,GAAG,KAAvB;EACAD,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACD,WAAK,IAAIE,CAAC,GAAGzM,CAAC,GAAG,CAAjB,EAAoByM,CAAC,GAAG,KAAKhN,IAA7B,EAAmCgN,CAAC,EAApC,EAAwC;EACtC,YAAI,KAAKtM,GAAL,CAASnC,CAAT,EAAYyO,CAAZ,MAAmB,CAAvB,EAA0B;EACxBD,UAAAA,oBAAoB,GAAG,KAAvB;EACD;EACF;;EACDxO,MAAAA,CAAC;EACF;;EACD,WAAOwO,oBAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,QAAI5M,MAAM,GAAG,KAAK6M,KAAL,EAAb;EACA,QAAIC,CAAC,GAAG,CAAR;EACA,QAAIH,CAAC,GAAG,CAAR;;EACA,WAAOG,CAAC,GAAG9M,MAAM,CAACL,IAAX,IAAmBgN,CAAC,GAAG3M,MAAM,CAACJ,OAArC,EAA8C;EAC5C,UAAImN,IAAI,GAAGD,CAAX;;EACA,WAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAG8B,MAAM,CAACL,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,YAAI8B,MAAM,CAACK,GAAP,CAAWnC,CAAX,EAAcyO,CAAd,IAAmB3M,MAAM,CAACK,GAAP,CAAW0M,IAAX,EAAiBJ,CAAjB,CAAvB,EAA4C;EAC1CI,UAAAA,IAAI,GAAG7O,CAAP;EACD;EACF;;EACD,UAAI8B,MAAM,CAACK,GAAP,CAAW0M,IAAX,EAAiBJ,CAAjB,MAAwB,CAA5B,EAA+B;EAC7BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACL3M,QAAAA,MAAM,CAACgN,QAAP,CAAgBF,CAAhB,EAAmBC,IAAnB;EACA,YAAIE,GAAG,GAAGjN,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAcH,CAAd,CAAV;;EACA,aAAK,IAAIzM,CAAC,GAAGyM,CAAb,EAAgBzM,CAAC,GAAGF,MAAM,CAACJ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvCF,UAAAA,MAAM,CAAC0B,GAAP,CAAWoL,CAAX,EAAc5M,CAAd,EAAiBF,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAc5M,CAAd,IAAmB+M,GAApC;EACD;;EACD,aAAK,IAAI/O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAG8B,MAAM,CAACL,IAA/B,EAAqCzB,CAAC,EAAtC,EAA0C;EACxC,cAAIY,MAAM,GAAGkB,MAAM,CAACK,GAAP,CAAWnC,CAAX,EAAcyO,CAAd,IAAmB3M,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAcH,CAAd,CAAhC;EACA3M,UAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcyO,CAAd,EAAiB,CAAjB;;EACA,eAAK,IAAIzM,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAGF,MAAM,CAACJ,OAA/B,EAAwCM,CAAC,EAAzC,EAA6C;EAC3CF,YAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBF,MAAM,CAACK,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBF,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAc5M,CAAd,IAAmBpB,MAAvD;EACD;EACF;;EACDgO,QAAAA,CAAC;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAO3M,MAAP;EACD;;EAEDkN,EAAAA,kBAAkB,GAAG;EACnB,QAAIlN,MAAM,GAAG,KAAK4M,WAAL,EAAb;EACA,QAAIO,CAAC,GAAGnN,MAAM,CAACJ,OAAf;EACA,QAAIwN,CAAC,GAAGpN,MAAM,CAACL,IAAf;EACA,QAAImN,CAAC,GAAGM,CAAC,GAAG,CAAZ;;EACA,WAAON,CAAC,IAAI,CAAZ,EAAe;EACb,UAAI9M,MAAM,CAACqN,MAAP,CAAcP,CAAd,MAAqB,CAAzB,EAA4B;EAC1BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACL,YAAIQ,CAAC,GAAG,CAAR;EACA,YAAIC,KAAK,GAAG,KAAZ;;EACA,eAAOD,CAAC,GAAGF,CAAJ,IAASG,KAAK,KAAK,KAA1B,EAAiC;EAC/B,cAAIvN,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAcQ,CAAd,MAAqB,CAAzB,EAA4B;EAC1BC,YAAAA,KAAK,GAAG,IAAR;EACD,WAFD,MAEO;EACLD,YAAAA,CAAC;EACF;EACF;;EACD,aAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4O,CAApB,EAAuB5O,CAAC,EAAxB,EAA4B;EAC1B,cAAIY,MAAM,GAAGkB,MAAM,CAACK,GAAP,CAAWnC,CAAX,EAAcoP,CAAd,CAAb;;EACA,eAAK,IAAIpN,CAAC,GAAGoN,CAAb,EAAgBpN,CAAC,GAAGiN,CAApB,EAAuBjN,CAAC,EAAxB,EAA4B;EAC1B,gBAAI+M,GAAG,GAAGjN,MAAM,CAACK,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,IAAmBpB,MAAM,GAAGkB,MAAM,CAACK,GAAP,CAAWyM,CAAX,EAAc5M,CAAd,CAAtC;EACAF,YAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiB+M,GAAjB;EACD;EACF;;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAO9M,MAAP;EACD;;EAED0B,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAI1D,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAEDqC,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAIrC,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAEDgB,EAAAA,MAAM,CAAC5B,OAAO,GAAG,EAAX,EAAe;EACnB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEkC,MAAAA,IAAI,GAAG,CAAT;EAAYC,MAAAA,OAAO,GAAG;EAAtB,QAA4BxC,OAAlC;;EACA,QAAI,CAACU,MAAM,CAACC,SAAP,CAAiB4B,IAAjB,CAAD,IAA2BA,IAAI,IAAI,CAAvC,EAA0C;EACxC,YAAM,IAAIlC,SAAJ,CAAc,iCAAd,CAAN;EACD;;EACD,QAAI,CAACK,MAAM,CAACC,SAAP,CAAiB6B,OAAjB,CAAD,IAA8BA,OAAO,IAAI,CAA7C,EAAgD;EAC9C,YAAM,IAAInC,SAAJ,CAAc,oCAAd,CAAN;EACD;;EACD,QAAI2B,MAAM,GAAG,IAAIiC,MAAJ,CAAW,KAAK1B,IAAL,GAAYA,IAAvB,EAA6B,KAAKC,OAAL,GAAeA,OAA5C,CAAb;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChCd,QAAAA,MAAM,CAACoO,YAAP,CAAoB,IAApB,EAA0B,KAAK7N,IAAL,GAAYzB,CAAtC,EAAyC,KAAK0B,OAAL,GAAeM,CAAxD;EACD;EACF;;EACD,WAAOd,MAAP;EACD;;EAED4L,EAAAA,IAAI,CAACzJ,KAAD,EAAQ;EACV,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeqB,KAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDkM,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKrL,IAAL,CAAU,CAAC,CAAX,CAAP;EACD;;EAEDsL,EAAAA,MAAM,CAAC9G,KAAD,EAAQ;EACZD,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA,QAAIU,GAAG,GAAG,EAAV;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrCoJ,MAAAA,GAAG,CAACnH,IAAJ,CAAS,KAAKE,GAAL,CAASuG,KAAT,EAAgB1I,CAAhB,CAAT;EACD;;EACD,WAAOoJ,GAAP;EACD;;EAEDqG,EAAAA,YAAY,CAAC/G,KAAD,EAAQ;EAClB,WAAOvF,MAAM,CAACuJ,SAAP,CAAiB,KAAK8C,MAAL,CAAY9G,KAAZ,CAAjB,CAAP;EACD;;EAEDgH,EAAAA,MAAM,CAAChH,KAAD,EAAQ2B,KAAR,EAAe;EACnB5B,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA2B,IAAAA,KAAK,GAAGxB,cAAc,CAAC,IAAD,EAAOwB,KAAP,CAAtB;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,WAAKwD,GAAL,CAASkF,KAAT,EAAgB1I,CAAhB,EAAmBqK,KAAK,CAACrK,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAED8O,EAAAA,QAAQ,CAACa,IAAD,EAAOC,IAAP,EAAa;EACnBnH,IAAAA,aAAa,CAAC,IAAD,EAAOkH,IAAP,CAAb;EACAlH,IAAAA,aAAa,CAAC,IAAD,EAAOmH,IAAP,CAAb;;EACA,SAAK,IAAI5P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,UAAI6P,IAAI,GAAG,KAAK1N,GAAL,CAASwN,IAAT,EAAe3P,CAAf,CAAX;EACA,WAAKwD,GAAL,CAASmM,IAAT,EAAe3P,CAAf,EAAkB,KAAKmC,GAAL,CAASyN,IAAT,EAAe5P,CAAf,CAAlB;EACA,WAAKwD,GAAL,CAASoM,IAAT,EAAe5P,CAAf,EAAkB6P,IAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDC,EAAAA,SAAS,CAACpH,KAAD,EAAQ;EACfE,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;EACA,QAAIY,MAAM,GAAG,EAAb;;EACA,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClCsJ,MAAAA,MAAM,CAACrH,IAAP,CAAY,KAAKE,GAAL,CAASnC,CAAT,EAAY0I,KAAZ,CAAZ;EACD;;EACD,WAAOY,MAAP;EACD;;EAEDyG,EAAAA,eAAe,CAACrH,KAAD,EAAQ;EACrB,WAAOvF,MAAM,CAACwJ,YAAP,CAAoB,KAAKmD,SAAL,CAAepH,KAAf,CAApB,CAAP;EACD;;EAEDsH,EAAAA,SAAS,CAACtH,KAAD,EAAQ2B,KAAR,EAAe;EACtBzB,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;EACA2B,IAAAA,KAAK,GAAGrB,iBAAiB,CAAC,IAAD,EAAOqB,KAAP,CAAzB;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAKwD,GAAL,CAASxD,CAAT,EAAY0I,KAAZ,EAAmB2B,KAAK,CAACrK,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDiQ,EAAAA,WAAW,CAACC,OAAD,EAAUC,OAAV,EAAmB;EAC5BvH,IAAAA,gBAAgB,CAAC,IAAD,EAAOsH,OAAP,CAAhB;EACAtH,IAAAA,gBAAgB,CAAC,IAAD,EAAOuH,OAAP,CAAhB;;EACA,SAAK,IAAInQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,UAAI6P,IAAI,GAAG,KAAK1N,GAAL,CAASnC,CAAT,EAAYkQ,OAAZ,CAAX;EACA,WAAK1M,GAAL,CAASxD,CAAT,EAAYkQ,OAAZ,EAAqB,KAAK/N,GAAL,CAASnC,CAAT,EAAYmQ,OAAZ,CAArB;EACA,WAAK3M,GAAL,CAASxD,CAAT,EAAYmQ,OAAZ,EAAqBN,IAArB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDO,EAAAA,YAAY,CAACtH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDqO,EAAAA,YAAY,CAACvH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDsO,EAAAA,YAAY,CAACxH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDuO,EAAAA,YAAY,CAACzH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDwO,EAAAA,eAAe,CAAC1H,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9I,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDyQ,EAAAA,eAAe,CAAC3H,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9I,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED0Q,EAAAA,eAAe,CAAC5H,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9I,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED2Q,EAAAA,eAAe,CAAC7H,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB8G,MAAM,CAAC9I,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED4Q,EAAAA,MAAM,CAAClI,KAAD,EAAQrF,KAAR,EAAe;EACnBoF,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;;EACA,SAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,WAAKwD,GAAL,CAASkF,KAAT,EAAgB1I,CAAhB,EAAmB,KAAKmC,GAAL,CAASuG,KAAT,EAAgB1I,CAAhB,IAAqBqD,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAEDwN,EAAAA,SAAS,CAACnI,KAAD,EAAQrF,KAAR,EAAe;EACtBuF,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;;EACA,SAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAKwD,GAAL,CAASxD,CAAT,EAAY0I,KAAZ,EAAmB,KAAKvG,GAAL,CAASnC,CAAT,EAAY0I,KAAZ,IAAqBrF,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAEDrE,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKuL,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAInC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB4I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAO4I,CAAP;EACD;;EAEDmG,EAAAA,QAAQ,GAAG;EACTzG,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAI6O,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAIhR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB4I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAJ;EACAgP,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACAgR,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAShP,CAAT;EACD;EACF;EACF;;EACD,WAAOgP,GAAP;EACD;;EAED/Q,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKsK,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAInC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB4I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAO4I,CAAP;EACD;;EAEDqG,EAAAA,QAAQ,GAAG;EACT3G,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAI6O,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAIhR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB4I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAJ;EACAgP,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACAgR,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAShP,CAAT;EACD;EACF;EACF;;EACD,WAAOgP,GAAP;EACD;;EAED7B,EAAAA,MAAM,CAAC/F,GAAD,EAAM;EACVX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;;EACA,QAAI,KAAKmB,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKmC,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,IAAmB4K,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,CAAJ;EACD;EACF;;EACD,WAAO4K,CAAP;EACD;;EAEDsG,EAAAA,WAAW,CAAC9H,GAAD,EAAM;EACfX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;EACAkB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAc,CAAd,CAAR;EACA,QAAI4H,GAAG,GAAG,CAAC5H,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKmC,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,IAAmB4K,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,CAAJ;EACAgR,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACD;EACF;;EACD,WAAOgR,GAAP;EACD;;EAEDG,EAAAA,MAAM,CAAC/H,GAAD,EAAM;EACVX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;;EACA,QAAI,KAAKmB,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKmC,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,IAAmB4K,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,CAAJ;EACD;EACF;;EACD,WAAO4K,CAAP;EACD;;EAEDwG,EAAAA,WAAW,CAAChI,GAAD,EAAM;EACfX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;EACAkB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAc,CAAd,CAAR;EACA,QAAI4H,GAAG,GAAG,CAAC5H,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKmC,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,IAAmB4K,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASiH,GAAT,EAAcpJ,CAAd,CAAJ;EACAgR,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACD;EACF;;EACD,WAAOgR,GAAP;EACD;;EAEDK,EAAAA,SAAS,CAAC/H,MAAD,EAAS;EAChBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;;EACA,QAAI,KAAKiB,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAYmH,MAAZ,CAAR;;EACA,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKmC,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOsB,CAAP;EACD;;EAED0G,EAAAA,cAAc,CAAChI,MAAD,EAAS;EACrBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;EACAgB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAYmH,MAAZ,CAAR;EACA,QAAI0H,GAAG,GAAG,CAAC,CAAD,EAAI1H,MAAJ,CAAV;;EACA,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKmC,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,CAAJ;EACA0H,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACD;EACF;;EACD,WAAOgR,GAAP;EACD;;EAEDO,EAAAA,SAAS,CAACjI,MAAD,EAAS;EAChBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;;EACA,QAAI,KAAKiB,OAAL,EAAJ,EAAoB;EAClB,aAAOuG,GAAP;EACD;;EACD,QAAIlG,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAYmH,MAAZ,CAAR;;EACA,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKmC,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOsB,CAAP;EACD;;EAED4G,EAAAA,cAAc,CAAClI,MAAD,EAAS;EACrBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;EACAgB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKzI,GAAL,CAAS,CAAT,EAAYmH,MAAZ,CAAR;EACA,QAAI0H,GAAG,GAAG,CAAC,CAAD,EAAI1H,MAAJ,CAAV;;EACA,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKmC,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKzI,GAAL,CAASnC,CAAT,EAAYsJ,MAAZ,CAAJ;EACA0H,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAShR,CAAT;EACD;EACF;;EACD,WAAOgR,GAAP;EACD;;EAED5D,EAAAA,IAAI,GAAG;EACL,QAAInN,GAAG,GAAG2B,IAAI,CAAC3B,GAAL,CAAS,KAAKwB,IAAd,EAAoB,KAAKC,OAAzB,CAAV;EACA,QAAI0L,IAAI,GAAG,EAAX;;EACA,SAAK,IAAIpN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BoN,MAAAA,IAAI,CAACnL,IAAL,CAAU,KAAKE,GAAL,CAASnC,CAAT,EAAYA,CAAZ,CAAV;EACD;;EACD,WAAOoN,IAAP;EACD;;EAEDqE,EAAAA,IAAI,CAACC,IAAI,GAAG,WAAR,EAAqB;EACvB,QAAI5P,MAAM,GAAG,CAAb;;EACA,QAAI4P,IAAI,KAAK,KAAb,EAAoB;EAClB,aAAO,KAAK1S,GAAL,EAAP;EACD,KAFD,MAEO,IAAI0S,IAAI,KAAK,WAAb,EAA0B;EAC/B,WAAK,IAAI1R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrCF,UAAAA,MAAM,GAAGA,MAAM,GAAG,KAAKK,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiB,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAnC;EACD;EACF;;EACD,aAAOJ,IAAI,CAACqG,IAAL,CAAUnG,MAAV,CAAP;EACD,KAPM,MAOA;EACL,YAAM,IAAItB,UAAJ,CAAgB,sBAAqBkR,IAAK,EAA1C,CAAN;EACD;EACF;;EAEDC,EAAAA,aAAa,GAAG;EACd,QAAIlH,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIzK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrCyI,QAAAA,GAAG,IAAI,KAAKtI,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAP;EACA,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAeyI,GAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDmH,EAAAA,GAAG,CAACC,OAAD,EAAU;EACX,QAAI3O,cAAc,CAACuK,QAAf,CAAwBoE,OAAxB,CAAJ,EAAsCA,OAAO,GAAGA,OAAO,CAAC9I,SAAR,EAAV;EACtC,QAAI+I,OAAO,GAAG,KAAK/I,SAAL,EAAd;;EACA,QAAI+I,OAAO,CAAC1S,MAAR,KAAmByS,OAAO,CAACzS,MAA/B,EAAuC;EACrC,YAAM,IAAIoB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,QAAIoR,GAAG,GAAG,CAAV;;EACA,SAAK,IAAI5R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8R,OAAO,CAAC1S,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC4R,MAAAA,GAAG,IAAIE,OAAO,CAAC9R,CAAD,CAAP,GAAa6R,OAAO,CAAC7R,CAAD,CAA3B;EACD;;EACD,WAAO4R,GAAP;EACD;;EAEDG,EAAAA,IAAI,CAACC,KAAD,EAAQ;EACVA,IAAAA,KAAK,GAAG7O,MAAM,CAACM,WAAP,CAAmBuO,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAKxN,IAAb;EACA,QAAIyN,CAAC,GAAG,KAAKxN,OAAb;EACA,QAAI0N,CAAC,GAAG4C,KAAK,CAACtQ,OAAd;EAEA,QAAII,MAAM,GAAG,IAAIqB,MAAJ,CAAW8L,CAAX,EAAcG,CAAd,CAAb;EAEA,QAAI6C,KAAK,GAAG,IAAIC,YAAJ,CAAiBhD,CAAjB,CAAZ;;EACA,SAAK,IAAIlN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoN,CAApB,EAAuBpN,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAIyM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,CAApB,EAAuBT,CAAC,EAAxB,EAA4B;EAC1BwD,QAAAA,KAAK,CAACxD,CAAD,CAAL,GAAWuD,KAAK,CAAC7P,GAAN,CAAUsM,CAAV,EAAazM,CAAb,CAAX;EACD;;EAED,WAAK,IAAIhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B,YAAImS,CAAC,GAAG,CAAR;;EACA,aAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,CAApB,EAAuBT,CAAC,EAAxB,EAA4B;EAC1B0D,UAAAA,CAAC,IAAI,KAAKhQ,GAAL,CAASnC,CAAT,EAAYyO,CAAZ,IAAiBwD,KAAK,CAACxD,CAAD,CAA3B;EACD;;EAED3M,QAAAA,MAAM,CAAC0B,GAAP,CAAWxD,CAAX,EAAcgC,CAAd,EAAiBmQ,CAAjB;EACD;EACF;;EACD,WAAOrQ,MAAP;EACD;;EAEDsQ,EAAAA,WAAW,CAACJ,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAG7O,MAAM,CAACM,WAAP,CAAmBuO,KAAnB,CAAR;EACA,QAAIlQ,MAAM,GAAG,IAAIqB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EACA,UAAMkP,GAAG,GAAG,KAAKlQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMmQ,GAAG,GAAGN,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMoQ,GAAG,GAAG,KAAKpQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMqQ,GAAG,GAAGR,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMsQ,GAAG,GAAG,KAAKtQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMuQ,GAAG,GAAGV,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMwQ,GAAG,GAAG,KAAKxQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMyQ,GAAG,GAAGZ,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ,CAViB;;EAajB,UAAM0Q,EAAE,GAAG,CAACR,GAAG,GAAGM,GAAP,KAAeL,GAAG,GAAGM,GAArB,CAAX;EACA,UAAME,EAAE,GAAG,CAACL,GAAG,GAAGE,GAAP,IAAcL,GAAzB;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAIG,GAAG,GAAGI,GAAV,CAAd;EACA,UAAMI,EAAE,GAAGL,GAAG,IAAID,GAAG,GAAGJ,GAAV,CAAd;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGE,GAAP,IAAcK,GAAzB;EACA,UAAMM,EAAE,GAAG,CAACT,GAAG,GAAGJ,GAAP,KAAeC,GAAG,GAAGE,GAArB,CAAX;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGI,GAAP,KAAeD,GAAG,GAAGE,GAArB,CAAX,CAnBiB;;EAsBjB,UAAMQ,GAAG,GAAGP,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeE,EAA3B;EACA,UAAME,GAAG,GAAGN,EAAE,GAAGE,EAAjB;EACA,UAAMK,GAAG,GAAGR,EAAE,GAAGE,EAAjB;EACA,UAAMO,GAAG,GAAGV,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeG,EAA3B;EAEApR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB4P,GAAjB;EACAtR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6P,GAAjB;EACAvR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8P,GAAjB;EACAxR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+P,GAAjB;EACA,WAAOzR,MAAP;EACD;;EAED0R,EAAAA,WAAW,CAACxB,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAG7O,MAAM,CAACM,WAAP,CAAmBuO,KAAnB,CAAR;EACA,QAAIlQ,MAAM,GAAG,IAAIqB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EAEA,UAAMsQ,GAAG,GAAG,KAAKtR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMuR,GAAG,GAAG,KAAKvR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMwR,GAAG,GAAG,KAAKxR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMyR,GAAG,GAAG,KAAKzR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMkQ,GAAG,GAAG,KAAKlQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMoQ,GAAG,GAAG,KAAKpQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAM0R,GAAG,GAAG,KAAK1R,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMsQ,GAAG,GAAG,KAAKtQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMwQ,GAAG,GAAG,KAAKxQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EAEA,UAAM2R,GAAG,GAAG9B,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM4R,GAAG,GAAG/B,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM6R,GAAG,GAAGhC,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM8R,GAAG,GAAGjC,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMmQ,GAAG,GAAGN,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMqQ,GAAG,GAAGR,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM+R,GAAG,GAAGlC,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMuQ,GAAG,GAAGV,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMyQ,GAAG,GAAGZ,KAAK,CAAC7P,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EAEA,UAAM0Q,EAAE,GAAG,CAACY,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBvB,GAAxB,GAA8BI,GAA9B,GAAoCE,GAArC,IAA4CL,GAAvD;EACA,UAAMQ,EAAE,GAAG,CAACW,GAAG,GAAGG,GAAP,KAAe,CAACG,GAAD,GAAOzB,GAAtB,CAAX;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAI,CAACyB,GAAD,GAAOC,GAAP,GAAaE,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCtB,GAAzC,CAAd;EACA,UAAMI,EAAE,GAAG,CAAC,CAACS,GAAD,GAAOG,GAAP,GAAavB,GAAd,KAAsByB,GAAG,GAAGC,GAAN,GAAYzB,GAAlC,CAAX;EACA,UAAMW,EAAE,GAAG,CAACW,GAAG,GAAGvB,GAAP,KAAe,CAACyB,GAAD,GAAOC,GAAtB,CAAX;EACA,UAAMb,EAAE,GAAGO,GAAG,GAAGK,GAAjB;EACA,UAAMX,EAAE,GAAG,CAAC,CAACM,GAAD,GAAOI,GAAP,GAAapB,GAAd,KAAsBqB,GAAG,GAAGE,GAAN,GAAYxB,GAAlC,CAAX;EACA,UAAM2B,EAAE,GAAG,CAAC,CAACV,GAAD,GAAOI,GAAR,KAAgBG,GAAG,GAAGxB,GAAtB,CAAX;EACA,UAAM4B,EAAE,GAAG,CAACP,GAAG,GAAGpB,GAAP,KAAe,CAACqB,GAAD,GAAOE,GAAtB,CAAX;EACA,UAAMK,GAAG,GAAG,CAACZ,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBtB,GAAlB,GAAwBE,GAAxB,GAA8BsB,GAA9B,GAAoCpB,GAArC,IAA4CD,GAAxD;EACA,UAAM8B,GAAG,GAAG7B,GAAG,IAAI,CAACqB,GAAD,GAAOE,GAAP,GAAaC,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCxB,GAAzC,CAAf;EACA,UAAM6B,GAAG,GAAG,CAAC,CAACZ,GAAD,GAAOlB,GAAP,GAAaE,GAAd,KAAsBL,GAAG,GAAG4B,GAAN,GAAYxB,GAAlC,CAAZ;EACA,UAAM8B,GAAG,GAAG,CAACb,GAAG,GAAGhB,GAAP,KAAeL,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAM+B,GAAG,GAAGd,GAAG,GAAGO,GAAlB;EACA,UAAMQ,GAAG,GAAG,CAACjC,GAAG,GAAGE,GAAP,KAAe,CAACuB,GAAD,GAAOxB,GAAtB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAAC,CAAChB,GAAD,GAAOtB,GAAP,GAAaE,GAAd,KAAsBC,GAAG,GAAG0B,GAAN,GAAYtB,GAAlC,CAAZ;EACA,UAAMgC,GAAG,GAAG,CAACjB,GAAG,GAAGpB,GAAP,KAAeC,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAACxC,GAAG,GAAGE,GAAP,KAAe,CAAC2B,GAAD,GAAOtB,GAAtB,CAAZ;EACA,UAAMkC,GAAG,GAAGpB,GAAG,GAAGO,GAAlB;EACA,UAAMc,GAAG,GAAGxC,GAAG,GAAGG,GAAlB;EACA,UAAMsC,GAAG,GAAGpB,GAAG,GAAGI,GAAlB;EACA,UAAMiB,GAAG,GAAGpB,GAAG,GAAGE,GAAlB;EACA,UAAMmB,GAAG,GAAGvC,GAAG,GAAGC,GAAlB;EAEA,UAAMQ,GAAG,GAAGF,EAAE,GAAGuB,GAAL,GAAWK,GAAvB;EACA,UAAMzB,GAAG,GAAGR,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoBqB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMS,GAAG,GAAGjC,EAAE,GAAGC,EAAL,GAAUiB,EAAV,GAAeC,GAAf,GAAqBI,GAArB,GAA2BE,GAA3B,GAAiCE,GAA7C;EACA,UAAMvB,GAAG,GAAGR,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeE,EAAf,GAAoBuB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMrB,GAAG,GAAGT,EAAE,GAAGE,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoB6B,GAAhC;EACA,UAAMK,GAAG,GAAGX,GAAG,GAAGE,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBG,GAApC;EACA,UAAMK,GAAG,GAAGnC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeG,GAAf,GAAqBC,GAArB,GAA2BC,GAA3B,GAAiCC,GAA7C;EACA,UAAMa,GAAG,GAAGf,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBO,GAApC;EACA,UAAMM,GAAG,GAAGrC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeC,EAAf,GAAoBc,GAAhC;EAEApT,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB4P,GAAjB;EACAtR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6P,GAAjB;EACAvR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB2R,GAAjB;EACArT,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8P,GAAjB;EACAxR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+P,GAAjB;EACAzR,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB4R,GAAjB;EACAtT,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6R,GAAjB;EACAvT,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8R,GAAjB;EACAxT,IAAAA,MAAM,CAAC0B,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+R,GAAjB;EACA,WAAOzT,MAAP;EACD;;EAED0T,EAAAA,YAAY,CAACC,CAAD,EAAI;EACdA,IAAAA,CAAC,GAAGtS,MAAM,CAACM,WAAP,CAAmBgS,CAAnB,CAAJ;EACA,QAAIlK,CAAC,GAAG,KAAKoD,KAAL,EAAR;EACA,QAAI+G,EAAE,GAAGnK,CAAC,CAAC9J,IAAX;EACA,QAAIkU,EAAE,GAAGpK,CAAC,CAAC7J,OAAX;EACA,QAAIkU,EAAE,GAAGH,CAAC,CAAChU,IAAX;EACA,QAAIoU,EAAE,GAAGJ,CAAC,CAAC/T,OAAX;;EACA,QAAIiU,EAAE,KAAKC,EAAX,EAAe;EACb;EACAE,MAAAA,OAAO,CAACC,IAAR,CACG,eAAcL,EAAG,MAAKC,EAAG,QAAOC,EAAG,MAAKC,EAAG,mCAD9C;EAGD,KAZa;EAed;;;EACA,aAASG,KAAT,CAAeC,GAAf,EAAoBxU,IAApB,EAA0B0J,IAA1B,EAAgC;EAC9B,UAAIzB,CAAC,GAAGuM,GAAG,CAACxU,IAAZ;EACA,UAAIoI,CAAC,GAAGoM,GAAG,CAACvU,OAAZ;;EACA,UAAIgI,CAAC,KAAKjI,IAAN,IAAcoI,CAAC,KAAKsB,IAAxB,EAA8B;EAC5B,eAAO8K,GAAP;EACD,OAFD,MAEO;EACL,YAAIC,QAAQ,GAAGhT,cAAc,CAAC0J,KAAf,CAAqBnL,IAArB,EAA2B0J,IAA3B,CAAf;EACA+K,QAAAA,QAAQ,GAAGA,QAAQ,CAAC5G,YAAT,CAAsB2G,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA,eAAOC,QAAP;EACD;EACF,KA1Ba;EA6Bd;EACA;;;EAEA,QAAIxM,CAAC,GAAG9H,IAAI,CAAC5C,GAAL,CAAS0W,EAAT,EAAaE,EAAb,CAAR;EACA,QAAI/L,CAAC,GAAGjI,IAAI,CAAC5C,GAAL,CAAS2W,EAAT,EAAaE,EAAb,CAAR;EACAtK,IAAAA,CAAC,GAAGyK,KAAK,CAACzK,CAAD,EAAI7B,CAAJ,EAAOG,CAAP,CAAT;EACA4L,IAAAA,CAAC,GAAGO,KAAK,CAACP,CAAD,EAAI/L,CAAJ,EAAOG,CAAP,CAAT,CAnCc;;EAsCd,aAASsM,SAAT,CAAmBC,CAAnB,EAAsBC,CAAtB,EAAyB5U,IAAzB,EAA+B0J,IAA/B,EAAqC;EACnC;EACA,UAAI1J,IAAI,IAAI,GAAR,IAAe0J,IAAI,IAAI,GAA3B,EAAgC;EAC9B,eAAOiL,CAAC,CAACrE,IAAF,CAAOsE,CAAP,CAAP,CAD8B;EAE/B,OAJkC;;;EAOnC,UAAI5U,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkB0J,IAAI,GAAG,CAAP,KAAa,CAAnC,EAAsC;EACpCiL,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAI3U,IAAI,GAAG,CAAX,EAAc0J,IAAI,GAAG,CAArB,CAAT;EACAkL,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAI5U,IAAI,GAAG,CAAX,EAAc0J,IAAI,GAAG,CAArB,CAAT;EACD,OAHD,MAGO,IAAI1J,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzB2U,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAI3U,IAAI,GAAG,CAAX,EAAc0J,IAAd,CAAT;EACAkL,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAI5U,IAAI,GAAG,CAAX,EAAc0J,IAAd,CAAT;EACD,OAHM,MAGA,IAAIA,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzBiL,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAI3U,IAAJ,EAAU0J,IAAI,GAAG,CAAjB,CAAT;EACAkL,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAI5U,IAAJ,EAAU0J,IAAI,GAAG,CAAjB,CAAT;EACD;;EAED,UAAImL,QAAQ,GAAGC,QAAQ,CAACH,CAAC,CAAC3U,IAAF,GAAS,CAAV,EAAa,EAAb,CAAvB;EACA,UAAI+U,QAAQ,GAAGD,QAAQ,CAACH,CAAC,CAAC1U,OAAF,GAAY,CAAb,EAAgB,EAAhB,CAAvB,CAnBmC;;EAqBnC,UAAI2Q,GAAG,GAAG+D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EACA,UAAIlE,GAAG,GAAG+D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EAEA,UAAIjE,GAAG,GAAG6D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCJ,CAAC,CAAC1U,OAAF,GAAY,CAAnD,CAAV;EACA,UAAI8Q,GAAG,GAAG6D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCH,CAAC,CAAC3U,OAAF,GAAY,CAAnD,CAAV;EAEA,UAAI+Q,GAAG,GAAG2D,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAAC3U,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqC+U,QAAQ,GAAG,CAAhD,CAAV;EACA,UAAI9D,GAAG,GAAG2D,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAAC5U,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqC+U,QAAQ,GAAG,CAAhD,CAAV;EAEA,UAAI7D,GAAG,GAAGyD,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAAC3U,IAAF,GAAS,CAA/B,EAAkC+U,QAAlC,EAA4CJ,CAAC,CAAC1U,OAAF,GAAY,CAAxD,CAAV;EACA,UAAIkR,GAAG,GAAGyD,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAAC5U,IAAF,GAAS,CAA/B,EAAkC+U,QAAlC,EAA4CH,CAAC,CAAC3U,OAAF,GAAY,CAAxD,CAAV,CA/BmC;;EAkCnC,UAAImR,EAAE,GAAGsD,SAAS,CAChBjT,cAAc,CAACE,GAAf,CAAmBiP,GAAnB,EAAwBM,GAAxB,CADgB,EAEhBzP,cAAc,CAACE,GAAf,CAAmBkP,GAAnB,EAAwBM,GAAxB,CAFgB,EAGhB0D,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAI1D,EAAE,GAAGqD,SAAS,CAACjT,cAAc,CAACE,GAAf,CAAmBqP,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BL,GAA/B,EAAoCgE,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIzD,EAAE,GAAGoD,SAAS,CAAC9D,GAAD,EAAMnP,cAAc,CAACS,GAAf,CAAmB6O,GAAnB,EAAwBI,GAAxB,CAAN,EAAoC0D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIxD,EAAE,GAAGmD,SAAS,CAACxD,GAAD,EAAMzP,cAAc,CAACS,GAAf,CAAmB+O,GAAnB,EAAwBJ,GAAxB,CAAN,EAAoCgE,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIvD,EAAE,GAAGkD,SAAS,CAACjT,cAAc,CAACE,GAAf,CAAmBiP,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BK,GAA/B,EAAoC0D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAItD,EAAE,GAAGiD,SAAS,CAChBjT,cAAc,CAACS,GAAf,CAAmB8O,GAAnB,EAAwBJ,GAAxB,CADgB,EAEhBnP,cAAc,CAACE,GAAf,CAAmBkP,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhB8D,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAIrD,EAAE,GAAGgD,SAAS,CAChBjT,cAAc,CAACS,GAAf,CAAmB4O,GAAnB,EAAwBI,GAAxB,CADgB,EAEhBzP,cAAc,CAACE,GAAf,CAAmBsP,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhB0D,QAHgB,EAIhBE,QAJgB,CAAlB,CAlDmC;;EA0DnC,UAAIjD,GAAG,GAAGrQ,cAAc,CAACE,GAAf,CAAmByP,EAAnB,EAAuBG,EAAvB,CAAV;EACAO,MAAAA,GAAG,CAAC5P,GAAJ,CAAQsP,EAAR;EACAM,MAAAA,GAAG,CAACnQ,GAAJ,CAAQ+P,EAAR;EACA,UAAIiC,GAAG,GAAGlS,cAAc,CAACE,GAAf,CAAmB2P,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIqC,GAAG,GAAGpS,cAAc,CAACE,GAAf,CAAmB0P,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIuC,GAAG,GAAGrS,cAAc,CAACS,GAAf,CAAmBkP,EAAnB,EAAuBC,EAAvB,CAAV;EACAyC,MAAAA,GAAG,CAACnS,GAAJ,CAAQ2P,EAAR;EACAwC,MAAAA,GAAG,CAACnS,GAAJ,CAAQ8P,EAAR,EAjEmC;;EAoEnC,UAAIgD,QAAQ,GAAGhT,cAAc,CAAC0J,KAAf,CAAqB,IAAI2G,GAAG,CAAC9R,IAA7B,EAAmC,IAAI8R,GAAG,CAAC7R,OAA3C,CAAf;EACAwU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC5G,YAAT,CAAsBiE,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA2C,MAAAA,QAAQ,GAAGA,QAAQ,CAAC5G,YAAT,CAAsB8F,GAAtB,EAA2B7B,GAAG,CAAC9R,IAA/B,EAAqC,CAArC,CAAX;EACAyU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC5G,YAAT,CAAsBgG,GAAtB,EAA2B,CAA3B,EAA8B/B,GAAG,CAAC7R,OAAlC,CAAX;EACAwU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC5G,YAAT,CAAsBiG,GAAtB,EAA2BhC,GAAG,CAAC9R,IAA/B,EAAqC8R,GAAG,CAAC7R,OAAzC,CAAX;EACA,aAAOwU,QAAQ,CAACO,SAAT,CAAmB,CAAnB,EAAsBhV,IAAI,GAAG,CAA7B,EAAgC,CAAhC,EAAmC0J,IAAI,GAAG,CAA1C,CAAP;EACD;;EACD,WAAOgL,SAAS,CAAC5K,CAAD,EAAIkK,CAAJ,EAAO/L,CAAP,EAAUG,CAAV,CAAhB;EACD;;EAED6M,EAAAA,SAAS,CAACxX,OAAO,GAAG,EAAX,EAAe;EACtB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEU,MAAAA,GAAG,GAAG,CAAR;EAAWjB,MAAAA,GAAG,GAAG;EAAjB,QAAuBE,OAA7B;EACA,QAAI,CAACU,MAAM,CAAC+W,QAAP,CAAgB1W,GAAhB,CAAL,EAA2B,MAAM,IAAIV,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACK,MAAM,CAAC+W,QAAP,CAAgB3X,GAAhB,CAAL,EAA2B,MAAM,IAAIO,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAIU,GAAG,IAAIjB,GAAX,EAAgB,MAAM,IAAIwB,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIkD,SAAS,GAAG,IAAIP,MAAJ,CAAW,KAAK1B,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,YAAMoJ,GAAG,GAAG,KAAKoG,MAAL,CAAYxP,CAAZ,CAAZ;;EACA,UAAIoJ,GAAG,CAAChK,MAAJ,GAAa,CAAjB,EAAoB;EAClBe,QAAAA,OAAO,CAACiJ,GAAD,EAAM;EAAEnJ,UAAAA,GAAF;EAAOjB,UAAAA,GAAP;EAAYoB,UAAAA,MAAM,EAAEgJ;EAApB,SAAN,CAAP;EACD;;EACD1F,MAAAA,SAAS,CAACgM,MAAV,CAAiB1P,CAAjB,EAAoBoJ,GAApB;EACD;;EACD,WAAO1F,SAAP;EACD;;EAEDkT,EAAAA,YAAY,CAAC1X,OAAO,GAAG,EAAX,EAAe;EACzB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEU,MAAAA,GAAG,GAAG,CAAR;EAAWjB,MAAAA,GAAG,GAAG;EAAjB,QAAuBE,OAA7B;EACA,QAAI,CAACU,MAAM,CAAC+W,QAAP,CAAgB1W,GAAhB,CAAL,EAA2B,MAAM,IAAIV,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACK,MAAM,CAAC+W,QAAP,CAAgB3X,GAAhB,CAAL,EAA2B,MAAM,IAAIO,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAIU,GAAG,IAAIjB,GAAX,EAAgB,MAAM,IAAIwB,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIkD,SAAS,GAAG,IAAIP,MAAJ,CAAW,KAAK1B,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,YAAMsJ,MAAM,GAAG,KAAKwG,SAAL,CAAe9P,CAAf,CAAf;;EACA,UAAIsJ,MAAM,CAAClK,MAAX,EAAmB;EACjBe,QAAAA,OAAO,CAACmJ,MAAD,EAAS;EACdrJ,UAAAA,GAAG,EAAEA,GADS;EAEdjB,UAAAA,GAAG,EAAEA,GAFS;EAGdoB,UAAAA,MAAM,EAAEkJ;EAHM,SAAT,CAAP;EAKD;;EACD5F,MAAAA,SAAS,CAACsM,SAAV,CAAoBhQ,CAApB,EAAuBsJ,MAAvB;EACD;;EACD,WAAO5F,SAAP;EACD;;EAEDmT,EAAAA,QAAQ,GAAG;EACT,UAAMC,MAAM,GAAGlV,IAAI,CAACqF,IAAL,CAAU,KAAKvF,OAAL,GAAe,CAAzB,CAAf;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8U,MAApB,EAA4B9U,CAAC,EAA7B,EAAiC;EAC/B,YAAI+U,KAAK,GAAG,KAAK5U,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAZ;EACA,YAAIgV,IAAI,GAAG,KAAK7U,GAAL,CAASnC,CAAT,EAAY,KAAK0B,OAAL,GAAe,CAAf,GAAmBM,CAA/B,CAAX;EACA,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAegV,IAAf;EACA,aAAKxT,GAAL,CAASxD,CAAT,EAAY,KAAK0B,OAAL,GAAe,CAAf,GAAmBM,CAA/B,EAAkC+U,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,UAAMH,MAAM,GAAGlV,IAAI,CAACqF,IAAL,CAAU,KAAKxF,IAAL,GAAY,CAAtB,CAAf;;EACA,SAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrC,WAAK,IAAIhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8W,MAApB,EAA4B9W,CAAC,EAA7B,EAAiC;EAC/B,YAAI+W,KAAK,GAAG,KAAK5U,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAZ;EACA,YAAIgV,IAAI,GAAG,KAAK7U,GAAL,CAAS,KAAKV,IAAL,GAAY,CAAZ,GAAgBzB,CAAzB,EAA4BgC,CAA5B,CAAX;EACA,aAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAegV,IAAf;EACA,aAAKxT,GAAL,CAAS,KAAK/B,IAAL,GAAY,CAAZ,GAAgBzB,CAAzB,EAA4BgC,CAA5B,EAA+B+U,KAA/B;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,gBAAgB,CAAClF,KAAD,EAAQ;EACtBA,IAAAA,KAAK,GAAG7O,MAAM,CAACM,WAAP,CAAmBuO,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAKxN,IAAb;EACA,QAAIyN,CAAC,GAAG,KAAKxN,OAAb;EACA,QAAI0N,CAAC,GAAG4C,KAAK,CAACvQ,IAAd;EACA,QAAI0V,CAAC,GAAGnF,KAAK,CAACtQ,OAAd;EAEA,QAAII,MAAM,GAAG,IAAIqB,MAAJ,CAAW8L,CAAC,GAAGG,CAAf,EAAkBF,CAAC,GAAGiI,CAAtB,CAAb;;EACA,SAAK,IAAInX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkN,CAApB,EAAuBlN,CAAC,EAAxB,EAA4B;EAC1B,aAAK,IAAIyM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,CAApB,EAAuBX,CAAC,EAAxB,EAA4B;EAC1B,eAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,CAApB,EAAuB7J,CAAC,EAAxB,EAA4B;EAC1BxL,YAAAA,MAAM,CAAC0B,GAAP,CAAW4L,CAAC,GAAGpP,CAAJ,GAAQyO,CAAnB,EAAsB0I,CAAC,GAAGnV,CAAJ,GAAQsL,CAA9B,EAAiC,KAAKnL,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,IAAiBgQ,KAAK,CAAC7P,GAAN,CAAUsM,CAAV,EAAanB,CAAb,CAAlD;EACD;EACF;EACF;EACF;;EACD,WAAOxL,MAAP;EACD;;EAEDsV,EAAAA,YAAY,CAACpF,KAAD,EAAQ;EAClBA,IAAAA,KAAK,GAAG7O,MAAM,CAACM,WAAP,CAAmBuO,KAAnB,CAAR;;EACA,QAAI,CAAC,KAAK7D,QAAL,EAAD,IAAoB,CAAC6D,KAAK,CAAC7D,QAAN,EAAzB,EAA2C;EACzC,YAAM,IAAIrO,KAAJ,CAAU,yCAAV,CAAN;EACD;;EACD,QAAImP,CAAC,GAAG,KAAKxN,IAAb;EACA,QAAIyN,CAAC,GAAG8C,KAAK,CAACvQ,IAAd;EACA,QAAI4V,GAAG,GAAG,KAAKH,gBAAL,CAAsB/T,MAAM,CAACgK,GAAP,CAAW+B,CAAX,EAAcA,CAAd,CAAtB,CAAV;EACA,QAAIoI,GAAG,GAAGnU,MAAM,CAACgK,GAAP,CAAW8B,CAAX,EAAcA,CAAd,EAAiBiI,gBAAjB,CAAkClF,KAAlC,CAAV;EACA,WAAOqF,GAAG,CAACjU,GAAJ,CAAQkU,GAAR,CAAP;EACD;;EAEDC,EAAAA,SAAS,GAAG;EACV,QAAIzV,MAAM,GAAG,IAAIqB,MAAJ,CAAW,KAAKzB,OAAhB,EAAyB,KAAKD,IAA9B,CAAb;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKN,OAAzB,EAAkCM,CAAC,EAAnC,EAAuC;EACrCF,QAAAA,MAAM,CAAC0B,GAAP,CAAWxB,CAAX,EAAchC,CAAd,EAAiB,KAAKmC,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAED0V,EAAAA,QAAQ,CAACC,eAAe,GAAGC,cAAnB,EAAmC;EACzC,SAAK,IAAI1X,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,WAAK0P,MAAL,CAAY1P,CAAZ,EAAe,KAAKwP,MAAL,CAAYxP,CAAZ,EAAe2X,IAAf,CAAoBF,eAApB,CAAf;EACD;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,WAAW,CAACH,eAAe,GAAGC,cAAnB,EAAmC;EAC5C,SAAK,IAAI1X,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrC,WAAKgQ,SAAL,CAAehQ,CAAf,EAAkB,KAAK8P,SAAL,CAAe9P,CAAf,EAAkB2X,IAAlB,CAAuBF,eAAvB,CAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDhB,EAAAA,SAAS,CAAC1M,QAAD,EAAWC,MAAX,EAAmBC,WAAnB,EAAgCC,SAAhC,EAA2C;EAClDJ,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;EACA,QAAIxG,SAAS,GAAG,IAAIP,MAAJ,CACd6G,MAAM,GAAGD,QAAT,GAAoB,CADN,EAEdG,SAAS,GAAGD,WAAZ,GAA0B,CAFZ,CAAhB;;EAIA,SAAK,IAAIjK,CAAC,GAAG+J,QAAb,EAAuB/J,CAAC,IAAIgK,MAA5B,EAAoChK,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIgC,CAAC,GAAGiI,WAAb,EAA0BjI,CAAC,IAAIkI,SAA/B,EAA0ClI,CAAC,EAA3C,EAA+C;EAC7C0B,QAAAA,SAAS,CAACF,GAAV,CAAcxD,CAAC,GAAG+J,QAAlB,EAA4B/H,CAAC,GAAGiI,WAAhC,EAA6C,KAAK9H,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAA7C;EACD;EACF;;EACD,WAAO0B,SAAP;EACD;;EAEDmU,EAAAA,YAAY,CAACC,OAAD,EAAU7N,WAAV,EAAuBC,SAAvB,EAAkC;EAC5C,QAAID,WAAW,KAAK5K,SAApB,EAA+B4K,WAAW,GAAG,CAAd;EAC/B,QAAIC,SAAS,KAAK7K,SAAlB,EAA6B6K,SAAS,GAAG,KAAKxI,OAAL,GAAe,CAA3B;;EAC7B,QACEuI,WAAW,GAAGC,SAAd,IACAD,WAAW,GAAG,CADd,IAEAA,WAAW,IAAI,KAAKvI,OAFpB,IAGAwI,SAAS,GAAG,CAHZ,IAIAA,SAAS,IAAI,KAAKxI,OALpB,EAME;EACA,YAAM,IAAIlB,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIkD,SAAS,GAAG,IAAIP,MAAJ,CAAW2U,OAAO,CAAC1Y,MAAnB,EAA2B8K,SAAS,GAAGD,WAAZ,GAA0B,CAArD,CAAhB;;EACA,SAAK,IAAIjK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC1Y,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIgC,CAAC,GAAGiI,WAAb,EAA0BjI,CAAC,IAAIkI,SAA/B,EAA0ClI,CAAC,EAA3C,EAA+C;EAC7C,YAAI8V,OAAO,CAAC9X,CAAD,CAAP,GAAa,CAAb,IAAkB8X,OAAO,CAAC9X,CAAD,CAAP,IAAc,KAAKyB,IAAzC,EAA+C;EAC7C,gBAAM,IAAIjB,UAAJ,CAAgB,2BAA0BsX,OAAO,CAAC9X,CAAD,CAAI,EAArD,CAAN;EACD;;EACD0D,QAAAA,SAAS,CAACF,GAAV,CAAcxD,CAAd,EAAiBgC,CAAC,GAAGiI,WAArB,EAAkC,KAAK9H,GAAL,CAAS2V,OAAO,CAAC9X,CAAD,CAAhB,EAAqBgC,CAArB,CAAlC;EACD;EACF;;EACD,WAAO0B,SAAP;EACD;;EAEDqU,EAAAA,eAAe,CAACD,OAAD,EAAU/N,QAAV,EAAoBC,MAApB,EAA4B;EACzC,QAAID,QAAQ,KAAK1K,SAAjB,EAA4B0K,QAAQ,GAAG,CAAX;EAC5B,QAAIC,MAAM,KAAK3K,SAAf,EAA0B2K,MAAM,GAAG,KAAKvI,IAAL,GAAY,CAArB;;EAC1B,QACEsI,QAAQ,GAAGC,MAAX,IACAD,QAAQ,GAAG,CADX,IAEAA,QAAQ,IAAI,KAAKtI,IAFjB,IAGAuI,MAAM,GAAG,CAHT,IAIAA,MAAM,IAAI,KAAKvI,IALjB,EAME;EACA,YAAM,IAAIjB,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIkD,SAAS,GAAG,IAAIP,MAAJ,CAAW6G,MAAM,GAAGD,QAAT,GAAoB,CAA/B,EAAkC+N,OAAO,CAAC1Y,MAA1C,CAAhB;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC1Y,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIgC,CAAC,GAAG+H,QAAb,EAAuB/H,CAAC,IAAIgI,MAA5B,EAAoChI,CAAC,EAArC,EAAyC;EACvC,YAAI8V,OAAO,CAAC9X,CAAD,CAAP,GAAa,CAAb,IAAkB8X,OAAO,CAAC9X,CAAD,CAAP,IAAc,KAAK0B,OAAzC,EAAkD;EAChD,gBAAM,IAAIlB,UAAJ,CAAgB,8BAA6BsX,OAAO,CAAC9X,CAAD,CAAI,EAAxD,CAAN;EACD;;EACD0D,QAAAA,SAAS,CAACF,GAAV,CAAcxB,CAAC,GAAG+H,QAAlB,EAA4B/J,CAA5B,EAA+B,KAAKmC,GAAL,CAASH,CAAT,EAAY8V,OAAO,CAAC9X,CAAD,CAAnB,CAA/B;EACD;EACF;;EACD,WAAO0D,SAAP;EACD;;EAED4L,EAAAA,YAAY,CAACpO,MAAD,EAAS6I,QAAT,EAAmBE,WAAnB,EAAgC;EAC1C/I,IAAAA,MAAM,GAAGiC,MAAM,CAACM,WAAP,CAAmBvC,MAAnB,CAAT;;EACA,QAAIA,MAAM,CAACqJ,OAAP,EAAJ,EAAsB;EACpB,aAAO,IAAP;EACD;;EACD,QAAIP,MAAM,GAAGD,QAAQ,GAAG7I,MAAM,CAACO,IAAlB,GAAyB,CAAtC;EACA,QAAIyI,SAAS,GAAGD,WAAW,GAAG/I,MAAM,CAACQ,OAArB,GAA+B,CAA/C;EACAoI,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;;EACA,SAAK,IAAIlK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACO,IAA3B,EAAiCzB,CAAC,EAAlC,EAAsC;EACpC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,MAAM,CAACQ,OAA3B,EAAoCM,CAAC,EAArC,EAAyC;EACvC,aAAKwB,GAAL,CAASuG,QAAQ,GAAG/J,CAApB,EAAuBiK,WAAW,GAAGjI,CAArC,EAAwCd,MAAM,CAACiB,GAAP,CAAWnC,CAAX,EAAcgC,CAAd,CAAxC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDgW,EAAAA,SAAS,CAAC9O,UAAD,EAAaC,aAAb,EAA4B;EACnC,QAAI2O,OAAO,GAAG7O,YAAY,CAAC,IAAD,EAAOC,UAAP,EAAmBC,aAAnB,CAA1B;EACA,QAAIzF,SAAS,GAAG,IAAIP,MAAJ,CAAW+F,UAAU,CAAC9J,MAAtB,EAA8B+J,aAAa,CAAC/J,MAA5C,CAAhB;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC1O,GAAR,CAAYhK,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,UAAIiY,QAAQ,GAAGH,OAAO,CAAC1O,GAAR,CAAYpJ,CAAZ,CAAf;;EACA,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8V,OAAO,CAACxO,MAAR,CAAelK,MAAnC,EAA2C4C,CAAC,EAA5C,EAAgD;EAC9C,YAAIkW,WAAW,GAAGJ,OAAO,CAACxO,MAAR,CAAetH,CAAf,CAAlB;EACA0B,QAAAA,SAAS,CAACF,GAAV,CAAcxD,CAAd,EAAiBgC,CAAjB,EAAoB,KAAKG,GAAL,CAAS8V,QAAT,EAAmBC,WAAnB,CAApB;EACD;EACF;;EACD,WAAOxU,SAAP;EACD;;EAEDyU,EAAAA,KAAK,GAAG;EACN,QAAIlY,GAAG,GAAG2B,IAAI,CAAC3B,GAAL,CAAS,KAAKwB,IAAd,EAAoB,KAAKC,OAAzB,CAAV;EACA,QAAIyW,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAInY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BmY,MAAAA,KAAK,IAAI,KAAKhW,GAAL,CAASnC,CAAT,EAAYA,CAAZ,CAAT;EACD;;EACD,WAAOmY,KAAP;EACD;;EAEDxJ,EAAAA,KAAK,GAAG;EACN,QAAIjL,SAAS,GAAG,IAAIP,MAAJ,CAAW,KAAK1B,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAI0H,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG,KAAK3H,IAA7B,EAAmC2H,GAAG,EAAtC,EAA0C;EACxC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAG,KAAK5H,OAAnC,EAA4C4H,MAAM,EAAlD,EAAsD;EACpD5F,QAAAA,SAAS,CAACF,GAAV,CAAc4F,GAAd,EAAmBE,MAAnB,EAA2B,KAAKnH,GAAL,CAASiH,GAAT,EAAcE,MAAd,CAA3B;EACD;EACF;;EACD,WAAO5F,SAAP;EACD;;EAED+G,EAAAA,GAAG,CAAC2N,EAAD,EAAK;EACN,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAO5N,QAAQ,CAAC,IAAD,CAAf;;EACF,WAAK,QAAL;EACE,eAAOE,WAAW,CAAC,IAAD,CAAlB;;EACF,WAAKrL,SAAL;EACE,eAAOsL,MAAM,CAAC,IAAD,CAAb;;EACF;EACE,cAAM,IAAI7K,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EARJ;EAUD;;EAEDC,EAAAA,OAAO,CAACD,EAAD,EAAK;EACV,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAOvN,YAAY,CAAC,IAAD,CAAnB;;EACF,WAAK,QAAL;EACE,eAAOC,eAAe,CAAC,IAAD,CAAtB;;EACF,WAAKzL,SAAL;EACE,eAAO0L,UAAU,CAAC,IAAD,CAAjB;;EACF;EACE,cAAM,IAAIjL,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EARJ;EAUD;;EAEDlN,EAAAA,IAAI,CAACkN,EAAD,EAAK;EACP,UAAM3N,GAAG,GAAG,KAAKA,GAAL,CAAS2N,EAAT,CAAZ;;EACA,YAAQA,EAAR;EACE,WAAK,KAAL;EAAY;EACV,eAAK,IAAIpY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClCyK,YAAAA,GAAG,CAACzK,CAAD,CAAH,IAAU,KAAK0B,OAAf;EACD;;EACD,iBAAO+I,GAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,eAAK,IAAIzK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0B,OAAzB,EAAkC1B,CAAC,EAAnC,EAAuC;EACrCyK,YAAAA,GAAG,CAACzK,CAAD,CAAH,IAAU,KAAKyB,IAAf;EACD;;EACD,iBAAOgJ,GAAP;EACD;;EACD,WAAKpL,SAAL;EACE,eAAOoL,GAAG,GAAG,KAAKiB,IAAlB;;EACF;EACE,cAAM,IAAI5L,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EAhBJ;EAkBD;;EAEDhN,EAAAA,QAAQ,CAACgN,EAAD,EAAKlZ,OAAO,GAAG,EAAf,EAAmB;EACzB,QAAI,OAAOkZ,EAAP,KAAc,QAAlB,EAA4B;EAC1BlZ,MAAAA,OAAO,GAAGkZ,EAAV;EACAA,MAAAA,EAAE,GAAG/Y,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE0L,MAAAA,QAAQ,GAAG,IAAb;EAAmBC,MAAAA,IAAI,GAAG,KAAKA,IAAL,CAAUkN,EAAV;EAA1B,QAA4ClZ,OAAlD;;EACA,QAAI,OAAO+L,QAAP,KAAoB,SAAxB,EAAmC;EACjC,YAAM,IAAI1L,SAAJ,CAAc,4BAAd,CAAN;EACD;;EACD,YAAQ6Y,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC/X,KAAK,CAACf,OAAN,CAAc4L,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAI3L,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOyL,aAAa,CAAC,IAAD,EAAOC,QAAP,EAAiBC,IAAjB,CAApB;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAAC7K,KAAK,CAACf,OAAN,CAAc4L,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAI3L,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOiM,gBAAgB,CAAC,IAAD,EAAOP,QAAP,EAAiBC,IAAjB,CAAvB;EACD;;EACD,WAAK7L,SAAL;EAAgB;EACd,cAAI,OAAO6L,IAAP,KAAgB,QAApB,EAA8B;EAC5B,kBAAM,IAAI3L,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOkM,WAAW,CAAC,IAAD,EAAOR,QAAP,EAAiBC,IAAjB,CAAlB;EACD;;EACD;EACE,cAAM,IAAIpL,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EApBJ;EAsBD;;EAEDE,EAAAA,iBAAiB,CAACF,EAAD,EAAKlZ,OAAL,EAAc;EAC7B,QAAI,OAAOkZ,EAAP,KAAc,QAAlB,EAA4B;EAC1BlZ,MAAAA,OAAO,GAAGkZ,EAAV;EACAA,MAAAA,EAAE,GAAG/Y,SAAL;EACD;;EACD,UAAM+L,QAAQ,GAAG,KAAKA,QAAL,CAAcgN,EAAd,EAAkBlZ,OAAlB,CAAjB;;EACA,QAAIkZ,EAAE,KAAK/Y,SAAX,EAAsB;EACpB,aAAOuC,IAAI,CAACqG,IAAL,CAAUmD,QAAV,CAAP;EACD,KAFD,MAEO;EACL,WAAK,IAAIpL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoL,QAAQ,CAAChM,MAA7B,EAAqCY,CAAC,EAAtC,EAA0C;EACxCoL,QAAAA,QAAQ,CAACpL,CAAD,CAAR,GAAc4B,IAAI,CAACqG,IAAL,CAAUmD,QAAQ,CAACpL,CAAD,CAAlB,CAAd;EACD;;EACD,aAAOoL,QAAP;EACD;EACF;;EAEDmN,EAAAA,MAAM,CAACH,EAAD,EAAKlZ,OAAO,GAAG,EAAf,EAAmB;EACvB,QAAI,OAAOkZ,EAAP,KAAc,QAAlB,EAA4B;EAC1BlZ,MAAAA,OAAO,GAAGkZ,EAAV;EACAA,MAAAA,EAAE,GAAG/Y,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEgZ,MAAAA,MAAM,GAAG,KAAKrN,IAAL,CAAUkN,EAAV;EAAX,QAA6BlZ,OAAnC;;EACA,YAAQkZ,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC/X,KAAK,CAACf,OAAN,CAAciZ,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAIhZ,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDoM,UAAAA,WAAW,CAAC,IAAD,EAAO4M,MAAP,CAAX;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAAClY,KAAK,CAACf,OAAN,CAAciZ,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAIhZ,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDqM,UAAAA,cAAc,CAAC,IAAD,EAAO2M,MAAP,CAAd;EACA,iBAAO,IAAP;EACD;;EACD,WAAKlZ,SAAL;EAAgB;EACd,cAAI,OAAOkZ,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,kBAAM,IAAIhZ,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDsM,UAAAA,SAAS,CAAC,IAAD,EAAO0M,MAAP,CAAT;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAIzY,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EAvBJ;EAyBD;;EAEDrM,EAAAA,KAAK,CAACqM,EAAD,EAAKlZ,OAAO,GAAG,EAAf,EAAmB;EACtB,QAAI,OAAOkZ,EAAP,KAAc,QAAlB,EAA4B;EAC1BlZ,MAAAA,OAAO,GAAGkZ,EAAV;EACAA,MAAAA,EAAE,GAAG/Y,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,QAAIwM,KAAK,GAAG7M,OAAO,CAAC6M,KAApB;;EACA,YAAQqM,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAIrM,KAAK,KAAK1M,SAAd,EAAyB;EACvB0M,YAAAA,KAAK,GAAGD,aAAa,CAAC,IAAD,CAArB;EACD,WAFD,MAEO,IAAI,CAACzL,KAAK,CAACf,OAAN,CAAcyM,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIxM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACDyM,UAAAA,UAAU,CAAC,IAAD,EAAOD,KAAP,CAAV;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAIA,KAAK,KAAK1M,SAAd,EAAyB;EACvB0M,YAAAA,KAAK,GAAGE,gBAAgB,CAAC,IAAD,CAAxB;EACD,WAFD,MAEO,IAAI,CAAC5L,KAAK,CAACf,OAAN,CAAcyM,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIxM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD2M,UAAAA,aAAa,CAAC,IAAD,EAAOH,KAAP,CAAb;EACA,iBAAO,IAAP;EACD;;EACD,WAAK1M,SAAL;EAAgB;EACd,cAAI0M,KAAK,KAAK1M,SAAd,EAAyB;EACvB0M,YAAAA,KAAK,GAAGI,WAAW,CAAC,IAAD,CAAnB;EACD,WAFD,MAEO,IAAI,OAAOJ,KAAP,KAAiB,QAArB,EAA+B;EACpC,kBAAM,IAAIxM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD8M,UAAAA,QAAQ,CAAC,IAAD,EAAON,KAAP,CAAR;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAIjM,KAAJ,CAAW,mBAAkBsY,EAAG,EAAhC,CAAN;EA7BJ;EA+BD;;EAED3Z,EAAAA,QAAQ,CAACS,OAAD,EAAU;EAChB,WAAO+B,wBAAwB,CAAC,IAAD,EAAO/B,OAAP,CAA/B;EACD;;EAv4CyB;EA04C5BgE,cAAc,CAACvE,SAAf,CAAyB+O,KAAzB,GAAiC,QAAjC;;EACA,IAAI,OAAO8K,MAAP,KAAkB,WAAtB,EAAmC;EACjCtV,EAAAA,cAAc,CAACvE,SAAf,CACE6Z,MAAM,CAACC,GAAP,CAAW,4BAAX,CADF,IAEIzX,aAFJ;EAGD;;EAED,SAAS0W,cAAT,CAAwBtB,CAAxB,EAA2BC,CAA3B,EAA8B;EAC5B,SAAOD,CAAC,GAAGC,CAAX;EACD;;;EAGDnT,cAAc,CAAC8J,MAAf,GAAwB9J,cAAc,CAAC6J,IAAvC;EACA7J,cAAc,CAACwV,SAAf,GAA2BxV,cAAc,CAAC+J,OAA1C;EACA/J,cAAc,CAACyV,QAAf,GAA0BzV,cAAc,CAACkK,IAAzC;EACAlK,cAAc,CAACvE,SAAf,CAAyBga,QAAzB,GAAoCzV,cAAc,CAACvE,SAAf,CAAyByO,IAA7D;EACAlK,cAAc,CAAC0V,QAAf,GAA0B1V,cAAc,CAACiK,GAAzC;EACAjK,cAAc,CAACvE,SAAf,CAAyBka,MAAzB,GAAkC3V,cAAc,CAACvE,SAAf,CAAyB4Q,GAA3D;EACArM,cAAc,CAACvE,SAAf,CAAyBma,aAAzB,GACE5V,cAAc,CAACvE,SAAf,CAAyBuY,gBAD3B;EAGe,MAAM/T,MAAN,SAAqBD,cAArB,CAAoC;EACjD5B,EAAAA,WAAW,CAACyX,KAAD,EAAQC,QAAR,EAAkB;EAC3B;;EACA,QAAI7V,MAAM,CAACsK,QAAP,CAAgBsL,KAAhB,CAAJ,EAA4B;EAC1B;EACA,aAAOA,KAAK,CAACpK,KAAN,EAAP;EACD,KAHD,MAGO,IAAI/O,MAAM,CAACC,SAAP,CAAiBkZ,KAAjB,KAA2BA,KAAK,IAAI,CAAxC,EAA2C;EAChD;EACA,WAAK1L,IAAL,GAAY,EAAZ;;EACA,UAAIzN,MAAM,CAACC,SAAP,CAAiBmZ,QAAjB,KAA8BA,QAAQ,IAAI,CAA9C,EAAiD;EAC/C,aAAK,IAAIhZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Y,KAApB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,eAAKqN,IAAL,CAAUpL,IAAV,CAAe,IAAIiQ,YAAJ,CAAiB8G,QAAjB,CAAf;EACD;EACF,OAJD,MAIO;EACL,cAAM,IAAIzZ,SAAJ,CAAc,qCAAd,CAAN;EACD;EACF,KAVM,MAUA,IAAIc,KAAK,CAACf,OAAN,CAAcyZ,KAAd,CAAJ,EAA0B;EAC/B;EACA,YAAME,SAAS,GAAGF,KAAlB;EACAA,MAAAA,KAAK,GAAGE,SAAS,CAAC7Z,MAAlB;EACA4Z,MAAAA,QAAQ,GAAGD,KAAK,GAAGE,SAAS,CAAC,CAAD,CAAT,CAAa7Z,MAAhB,GAAyB,CAAzC;;EACA,UAAI,OAAO4Z,QAAP,KAAoB,QAAxB,EAAkC;EAChC,cAAM,IAAIzZ,SAAJ,CACJ,mDADI,CAAN;EAGD;;EACD,WAAK8N,IAAL,GAAY,EAAZ;;EACA,WAAK,IAAIrN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Y,KAApB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,YAAIiZ,SAAS,CAACjZ,CAAD,CAAT,CAAaZ,MAAb,KAAwB4Z,QAA5B,EAAsC;EACpC,gBAAM,IAAIxY,UAAJ,CAAe,+BAAf,CAAN;EACD;;EACD,aAAK6M,IAAL,CAAUpL,IAAV,CAAeiQ,YAAY,CAACvI,IAAb,CAAkBsP,SAAS,CAACjZ,CAAD,CAA3B,CAAf;EACD;EACF,KAjBM,MAiBA;EACL,YAAM,IAAIT,SAAJ,CACJ,sDADI,CAAN;EAGD;;EACD,SAAKkC,IAAL,GAAYsX,KAAZ;EACA,SAAKrX,OAAL,GAAesX,QAAf;EACD;;EAEDxV,EAAAA,GAAG,CAACyU,QAAD,EAAWC,WAAX,EAAwB7U,KAAxB,EAA+B;EAChC,SAAKgK,IAAL,CAAU4K,QAAV,EAAoBC,WAApB,IAAmC7U,KAAnC;EACA,WAAO,IAAP;EACD;;EAEDlB,EAAAA,GAAG,CAAC8V,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK7K,IAAL,CAAU4K,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAEDgB,EAAAA,SAAS,CAACxQ,KAAD,EAAQ;EACfD,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA,SAAK2E,IAAL,CAAU8L,MAAV,CAAiBzQ,KAAjB,EAAwB,CAAxB;EACA,SAAKjH,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAED2X,EAAAA,MAAM,CAAC1Q,KAAD,EAAQ2B,KAAR,EAAe;EACnB,QAAIA,KAAK,KAAKhL,SAAd,EAAyB;EACvBgL,MAAAA,KAAK,GAAG3B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAKjH,IAAb;EACD;;EACDgH,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,EAAc,IAAd,CAAb;EACA2B,IAAAA,KAAK,GAAG6H,YAAY,CAACvI,IAAb,CAAkBd,cAAc,CAAC,IAAD,EAAOwB,KAAP,CAAhC,CAAR;EACA,SAAKgD,IAAL,CAAU8L,MAAV,CAAiBzQ,KAAjB,EAAwB,CAAxB,EAA2B2B,KAA3B;EACA,SAAK5I,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAED4X,EAAAA,YAAY,CAAC3Q,KAAD,EAAQ;EAClBE,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;;EACA,SAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,YAAMsZ,MAAM,GAAG,IAAIpH,YAAJ,CAAiB,KAAKxQ,OAAL,GAAe,CAAhC,CAAf;;EACA,WAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,KAApB,EAA2B1G,CAAC,EAA5B,EAAgC;EAC9BsX,QAAAA,MAAM,CAACtX,CAAD,CAAN,GAAY,KAAKqL,IAAL,CAAUrN,CAAV,EAAagC,CAAb,CAAZ;EACD;;EACD,WAAK,IAAIA,CAAC,GAAG0G,KAAK,GAAG,CAArB,EAAwB1G,CAAC,GAAG,KAAKN,OAAjC,EAA0CM,CAAC,EAA3C,EAA+C;EAC7CsX,QAAAA,MAAM,CAACtX,CAAC,GAAG,CAAL,CAAN,GAAgB,KAAKqL,IAAL,CAAUrN,CAAV,EAAagC,CAAb,CAAhB;EACD;;EACD,WAAKqL,IAAL,CAAUrN,CAAV,IAAesZ,MAAf;EACD;;EACD,SAAK5X,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EAED6X,EAAAA,SAAS,CAAC7Q,KAAD,EAAQ2B,KAAR,EAAe;EACtB,QAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;EAChCA,MAAAA,KAAK,GAAG3B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAKhH,OAAb;EACD;;EACDkH,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,EAAc,IAAd,CAAhB;EACA2B,IAAAA,KAAK,GAAGrB,iBAAiB,CAAC,IAAD,EAAOqB,KAAP,CAAzB;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKyB,IAAzB,EAA+BzB,CAAC,EAAhC,EAAoC;EAClC,YAAMsZ,MAAM,GAAG,IAAIpH,YAAJ,CAAiB,KAAKxQ,OAAL,GAAe,CAAhC,CAAf;EACA,UAAIM,CAAC,GAAG,CAAR;;EACA,aAAOA,CAAC,GAAG0G,KAAX,EAAkB1G,CAAC,EAAnB,EAAuB;EACrBsX,QAAAA,MAAM,CAACtX,CAAD,CAAN,GAAY,KAAKqL,IAAL,CAAUrN,CAAV,EAAagC,CAAb,CAAZ;EACD;;EACDsX,MAAAA,MAAM,CAACtX,CAAC,EAAF,CAAN,GAAcqI,KAAK,CAACrK,CAAD,CAAnB;;EACA,aAAOgC,CAAC,GAAG,KAAKN,OAAL,GAAe,CAA1B,EAA6BM,CAAC,EAA9B,EAAkC;EAChCsX,QAAAA,MAAM,CAACtX,CAAD,CAAN,GAAY,KAAKqL,IAAL,CAAUrN,CAAV,EAAagC,CAAC,GAAG,CAAjB,CAAZ;EACD;;EACD,WAAKqL,IAAL,CAAUrN,CAAV,IAAesZ,MAAf;EACD;;EACD,SAAK5X,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EA3GgD;EA8GnDuB,qBAAqB,CAACC,cAAD,EAAiBC,MAAjB,CAArB;;EC7iDe,MAAMqW,eAAN,SAA8BtW,cAA9B,CAA6C;EAC1D5B,EAAAA,WAAW,CAAC+L,IAAD,EAAO;EAChB;EACA,SAAKA,IAAL,GAAYA,IAAZ;EACA,SAAK5L,IAAL,GAAY4L,IAAI,CAACjO,MAAjB;EACA,SAAKsC,OAAL,GAAe2L,IAAI,CAAC,CAAD,CAAJ,CAAQjO,MAAvB;EACD;;EAEDoE,EAAAA,GAAG,CAACyU,QAAD,EAAWC,WAAX,EAAwB7U,KAAxB,EAA+B;EAChC,SAAKgK,IAAL,CAAU4K,QAAV,EAAoBC,WAApB,IAAmC7U,KAAnC;EACA,WAAO,IAAP;EACD;;EAEDlB,EAAAA,GAAG,CAAC8V,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK7K,IAAL,CAAU4K,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAfyD;;ECC7C,MAAMuB,eAAN,CAAsB;EACnCnY,EAAAA,WAAW,CAACJ,MAAD,EAAS;EAClBA,IAAAA,MAAM,GAAGsY,eAAe,CAAC/V,WAAhB,CAA4BvC,MAA5B,CAAT;EAEA,QAAIwY,EAAE,GAAGxY,MAAM,CAACyN,KAAP,EAAT;EACA,QAAIlN,IAAI,GAAGiY,EAAE,CAACjY,IAAd;EACA,QAAIC,OAAO,GAAGgY,EAAE,CAAChY,OAAjB;EACA,QAAIiY,WAAW,GAAG,IAAIzH,YAAJ,CAAiBzQ,IAAjB,CAAlB;EACA,QAAImY,SAAS,GAAG,CAAhB;EACA,QAAI5Z,CAAJ,EAAOgC,CAAP,EAAUyM,CAAV,EAAaW,CAAb,EAAgB+C,CAAhB,EAAmB0H,CAAnB,EAAsBjP,CAAtB;EACA,QAAIkP,MAAJ,EAAYC,IAAZ;;EAEA,SAAK/Z,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzB2Z,MAAAA,WAAW,CAAC3Z,CAAD,CAAX,GAAiBA,CAAjB;EACD;;EAED8Z,IAAAA,MAAM,GAAG,IAAI5H,YAAJ,CAAiBzQ,IAAjB,CAAT;;EAEA,SAAKO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,OAAhB,EAAyBM,CAAC,EAA1B,EAA8B;EAC5B,WAAKhC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzB8Z,QAAAA,MAAM,CAAC9Z,CAAD,CAAN,GAAY0Z,EAAE,CAACvX,GAAH,CAAOnC,CAAP,EAAUgC,CAAV,CAAZ;EACD;;EAED,WAAKhC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzB+Z,QAAAA,IAAI,GAAGnY,IAAI,CAAC3B,GAAL,CAASD,CAAT,EAAYgC,CAAZ,CAAP;EACAmQ,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsL,IAAhB,EAAsBtL,CAAC,EAAvB,EAA2B;EACzB0D,UAAAA,CAAC,IAAIuH,EAAE,CAACvX,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAeqL,MAAM,CAACrL,CAAD,CAA1B;EACD;;EACDqL,QAAAA,MAAM,CAAC9Z,CAAD,CAAN,IAAamS,CAAb;EACAuH,QAAAA,EAAE,CAAClW,GAAH,CAAOxD,CAAP,EAAUgC,CAAV,EAAa8X,MAAM,CAAC9Z,CAAD,CAAnB;EACD;;EAEDoP,MAAAA,CAAC,GAAGpN,CAAJ;;EACA,WAAKhC,CAAC,GAAGgC,CAAC,GAAG,CAAb,EAAgBhC,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,YAAI4B,IAAI,CAAC6E,GAAL,CAASqT,MAAM,CAAC9Z,CAAD,CAAf,IAAsB4B,IAAI,CAAC6E,GAAL,CAASqT,MAAM,CAAC1K,CAAD,CAAf,CAA1B,EAA+C;EAC7CA,UAAAA,CAAC,GAAGpP,CAAJ;EACD;EACF;;EAED,UAAIoP,CAAC,KAAKpN,CAAV,EAAa;EACX,aAAKyM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG/M,OAAhB,EAAyB+M,CAAC,EAA1B,EAA8B;EAC5BoL,UAAAA,CAAC,GAAGH,EAAE,CAACvX,GAAH,CAAOiN,CAAP,EAAUX,CAAV,CAAJ;EACAiL,UAAAA,EAAE,CAAClW,GAAH,CAAO4L,CAAP,EAAUX,CAAV,EAAaiL,EAAE,CAACvX,GAAH,CAAOH,CAAP,EAAUyM,CAAV,CAAb;EACAiL,UAAAA,EAAE,CAAClW,GAAH,CAAOxB,CAAP,EAAUyM,CAAV,EAAaoL,CAAb;EACD;;EAEDjP,QAAAA,CAAC,GAAG+O,WAAW,CAACvK,CAAD,CAAf;EACAuK,QAAAA,WAAW,CAACvK,CAAD,CAAX,GAAiBuK,WAAW,CAAC3X,CAAD,CAA5B;EACA2X,QAAAA,WAAW,CAAC3X,CAAD,CAAX,GAAiB4I,CAAjB;EAEAgP,QAAAA,SAAS,GAAG,CAACA,SAAb;EACD;;EAED,UAAI5X,CAAC,GAAGP,IAAJ,IAAYiY,EAAE,CAACvX,GAAH,CAAOH,CAAP,EAAUA,CAAV,MAAiB,CAAjC,EAAoC;EAClC,aAAKhC,CAAC,GAAGgC,CAAC,GAAG,CAAb,EAAgBhC,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B0Z,UAAAA,EAAE,CAAClW,GAAH,CAAOxD,CAAP,EAAUgC,CAAV,EAAa0X,EAAE,CAACvX,GAAH,CAAOnC,CAAP,EAAUgC,CAAV,IAAe0X,EAAE,CAACvX,GAAH,CAAOH,CAAP,EAAUA,CAAV,CAA5B;EACD;EACF;EACF;;EAED,SAAKgY,EAAL,GAAUN,EAAV;EACA,SAAKC,WAAL,GAAmBA,WAAnB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACD;;EAEDK,EAAAA,UAAU,GAAG;EACX,QAAI5M,IAAI,GAAG,KAAK2M,EAAhB;EACA,QAAIE,GAAG,GAAG7M,IAAI,CAAC3L,OAAf;;EACA,SAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkY,GAApB,EAAyBlY,CAAC,EAA1B,EAA8B;EAC5B,UAAIqL,IAAI,CAAClL,GAAL,CAASH,CAAT,EAAYA,CAAZ,MAAmB,CAAvB,EAA0B;EACxB,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD;;EAEDmY,EAAAA,KAAK,CAAC9W,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAGF,MAAM,CAACM,WAAP,CAAmBJ,KAAnB,CAAR;EAEA,QAAIqW,EAAE,GAAG,KAAKM,EAAd;EACA,QAAIvY,IAAI,GAAGiY,EAAE,CAACjY,IAAd;;EAEA,QAAIA,IAAI,KAAK4B,KAAK,CAAC5B,IAAnB,EAAyB;EACvB,YAAM,IAAI3B,KAAJ,CAAU,2BAAV,CAAN;EACD;;EACD,QAAI,KAAKma,UAAL,EAAJ,EAAuB;EACrB,YAAM,IAAIna,KAAJ,CAAU,uBAAV,CAAN;EACD;;EAED,QAAIsa,KAAK,GAAG/W,KAAK,CAAC3B,OAAlB;EACA,QAAI2Y,CAAC,GAAGhX,KAAK,CAACwU,YAAN,CAAmB,KAAK8B,WAAxB,EAAqC,CAArC,EAAwCS,KAAK,GAAG,CAAhD,CAAR;EACA,QAAI1Y,OAAO,GAAGgY,EAAE,CAAChY,OAAjB;EACA,QAAI1B,CAAJ,EAAOgC,CAAP,EAAUyM,CAAV;;EAEA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG/M,OAAhB,EAAyB+M,CAAC,EAA1B,EAA8B;EAC5B,WAAKzO,CAAC,GAAGyO,CAAC,GAAG,CAAb,EAAgBzO,CAAC,GAAG0B,OAApB,EAA6B1B,CAAC,EAA9B,EAAkC;EAChC,aAAKgC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAcqY,CAAC,CAAClY,GAAF,CAAMsM,CAAN,EAASzM,CAAT,IAAc0X,EAAE,CAACvX,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAAxC;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAG/M,OAAO,GAAG,CAAnB,EAAsB+M,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BqY,QAAAA,CAAC,CAAC7W,GAAF,CAAMiL,CAAN,EAASzM,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMsM,CAAN,EAASzM,CAAT,IAAc0X,EAAE,CAACvX,GAAH,CAAOsM,CAAP,EAAUA,CAAV,CAA1B;EACD;;EACD,WAAKzO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyO,CAAhB,EAAmBzO,CAAC,EAApB,EAAwB;EACtB,aAAKgC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAcqY,CAAC,CAAClY,GAAF,CAAMsM,CAAN,EAASzM,CAAT,IAAc0X,EAAE,CAACvX,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAAxC;EACD;EACF;EACF;;EACD,WAAO4L,CAAP;EACD;;EAEc,MAAXC,WAAW,GAAG;EAChB,QAAIjN,IAAI,GAAG,KAAK2M,EAAhB;;EACA,QAAI,CAAC3M,IAAI,CAACc,QAAL,EAAL,EAAsB;EACpB,YAAM,IAAIrO,KAAJ,CAAU,uBAAV,CAAN;EACD;;EACD,QAAIwa,WAAW,GAAG,KAAKV,SAAvB;EACA,QAAIM,GAAG,GAAG7M,IAAI,CAAC3L,OAAf;;EACA,SAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkY,GAApB,EAAyBlY,CAAC,EAA1B,EAA8B;EAC5BsY,MAAAA,WAAW,IAAIjN,IAAI,CAAClL,GAAL,CAASH,CAAT,EAAYA,CAAZ,CAAf;EACD;;EACD,WAAOsY,WAAP;EACD;;EAEwB,MAArBC,qBAAqB,GAAG;EAC1B,QAAIlN,IAAI,GAAG,KAAK2M,EAAhB;EACA,QAAIvY,IAAI,GAAG4L,IAAI,CAAC5L,IAAhB;EACA,QAAIC,OAAO,GAAG2L,IAAI,CAAC3L,OAAnB;EACA,QAAI2Y,CAAC,GAAG,IAAIlX,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAR;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChC,YAAIhC,CAAC,GAAGgC,CAAR,EAAW;EACTqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqL,IAAI,CAAClL,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAZ;EACD,SAFD,MAEO,IAAIhC,CAAC,KAAKgC,CAAV,EAAa;EAClBqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,CAAZ;EACD,SAFM,MAEA;EACLqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAOqY,CAAP;EACD;;EAEwB,MAArBG,qBAAqB,GAAG;EAC1B,QAAInN,IAAI,GAAG,KAAK2M,EAAhB;EACA,QAAIvY,IAAI,GAAG4L,IAAI,CAAC5L,IAAhB;EACA,QAAIC,OAAO,GAAG2L,IAAI,CAAC3L,OAAnB;EACA,QAAI2Y,CAAC,GAAG,IAAIlX,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAR;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,IAApB,EAA0BzB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,OAApB,EAA6BM,CAAC,EAA9B,EAAkC;EAChC,YAAIhC,CAAC,IAAIgC,CAAT,EAAY;EACVqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqL,IAAI,CAAClL,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,CAAZ;EACD,SAFD,MAEO;EACLqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAOqY,CAAP;EACD;;EAEyB,MAAtBI,sBAAsB,GAAG;EAC3B,WAAOpa,KAAK,CAACsJ,IAAN,CAAW,KAAKgQ,WAAhB,CAAP;EACD;;EAtKkC;;ECH9B,SAASe,UAAT,CAAoBtE,CAApB,EAAuBC,CAAvB,EAA0B;EAC/B,MAAI3M,CAAC,GAAG,CAAR;;EACA,MAAI9H,IAAI,CAAC6E,GAAL,CAAS2P,CAAT,IAAcxU,IAAI,CAAC6E,GAAL,CAAS4P,CAAT,CAAlB,EAA+B;EAC7B3M,IAAAA,CAAC,GAAG2M,CAAC,GAAGD,CAAR;EACA,WAAOxU,IAAI,CAAC6E,GAAL,CAAS2P,CAAT,IAAcxU,IAAI,CAACqG,IAAL,CAAU,IAAIyB,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,MAAI2M,CAAC,KAAK,CAAV,EAAa;EACX3M,IAAAA,CAAC,GAAG0M,CAAC,GAAGC,CAAR;EACA,WAAOzU,IAAI,CAAC6E,GAAL,CAAS4P,CAAT,IAAczU,IAAI,CAACqG,IAAL,CAAU,IAAIyB,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,SAAO,CAAP;EACD;;ECNc,MAAMiR,eAAN,CAAsB;EACnCrZ,EAAAA,WAAW,CAAC+B,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGmW,eAAe,CAAC/V,WAAhB,CAA4BJ,KAA5B,CAAR;EAEA,QAAIuX,EAAE,GAAGvX,KAAK,CAACsL,KAAN,EAAT;EACA,QAAIM,CAAC,GAAG5L,KAAK,CAAC5B,IAAd;EACA,QAAIyN,CAAC,GAAG7L,KAAK,CAAC3B,OAAd;EACA,QAAImZ,KAAK,GAAG,IAAI3I,YAAJ,CAAiBhD,CAAjB,CAAZ;EACA,QAAIlP,CAAJ,EAAOgC,CAAP,EAAUyM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,UAAIqM,GAAG,GAAG,CAAV;;EACA,WAAK9a,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtB8a,QAAAA,GAAG,GAAGJ,UAAU,CAACI,GAAD,EAAMF,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAAN,CAAhB;EACD;;EACD,UAAIqM,GAAG,KAAK,CAAZ,EAAe;EACb,YAAIF,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,IAAe,CAAnB,EAAsB;EACpBqM,UAAAA,GAAG,GAAG,CAACA,GAAP;EACD;;EACD,aAAK9a,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtB4a,UAAAA,EAAE,CAACpX,GAAH,CAAOxD,CAAP,EAAUyO,CAAV,EAAamM,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAeqM,GAA5B;EACD;;EACDF,QAAAA,EAAE,CAACpX,GAAH,CAAOiL,CAAP,EAAUA,CAAV,EAAamM,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,IAAe,CAA5B;;EACA,aAAKzM,CAAC,GAAGyM,CAAC,GAAG,CAAb,EAAgBzM,CAAC,GAAGkN,CAApB,EAAuBlN,CAAC,EAAxB,EAA4B;EAC1BmQ,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKnS,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtBmS,YAAAA,CAAC,IAAIyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAemM,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUgC,CAAV,CAApB;EACD;;EACDmQ,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKyI,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,CAAT;;EACA,eAAKzO,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtB4a,YAAAA,EAAE,CAACpX,GAAH,CAAOxD,CAAP,EAAUgC,CAAV,EAAa4Y,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUgC,CAAV,IAAemQ,CAAC,GAAGyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAAhC;EACD;EACF;EACF;;EACDoM,MAAAA,KAAK,CAACpM,CAAD,CAAL,GAAW,CAACqM,GAAZ;EACD;;EAED,SAAKC,EAAL,GAAUH,EAAV;EACA,SAAKI,KAAL,GAAaH,KAAb;EACD;;EAEDV,EAAAA,KAAK,CAAC9W,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAGF,MAAM,CAACM,WAAP,CAAmBJ,KAAnB,CAAR;EAEA,QAAIuX,EAAE,GAAG,KAAKG,EAAd;EACA,QAAI9L,CAAC,GAAG2L,EAAE,CAACnZ,IAAX;;EAEA,QAAI4B,KAAK,CAAC5B,IAAN,KAAewN,CAAnB,EAAsB;EACpB,YAAM,IAAInP,KAAJ,CAAU,kCAAV,CAAN;EACD;;EACD,QAAI,CAAC,KAAKmb,UAAL,EAAL,EAAwB;EACtB,YAAM,IAAInb,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,QAAIsa,KAAK,GAAG/W,KAAK,CAAC3B,OAAlB;EACA,QAAI2Y,CAAC,GAAGhX,KAAK,CAACsL,KAAN,EAAR;EACA,QAAIO,CAAC,GAAG0L,EAAE,CAAClZ,OAAX;EACA,QAAI1B,CAAJ,EAAOgC,CAAP,EAAUyM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,WAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BmQ,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKnS,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtBmS,UAAAA,CAAC,IAAIyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAe4L,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAApB;EACD;;EACDmQ,QAAAA,CAAC,GAAG,CAACA,CAAD,GAAKyI,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,CAAT;;EACA,aAAKzO,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGiP,CAAhB,EAAmBjP,CAAC,EAApB,EAAwB;EACtBqa,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAcmQ,CAAC,GAAGyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAA9B;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAGS,CAAC,GAAG,CAAb,EAAgBT,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B,WAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BqY,QAAAA,CAAC,CAAC7W,GAAF,CAAMiL,CAAN,EAASzM,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMsM,CAAN,EAASzM,CAAT,IAAc,KAAKgZ,KAAL,CAAWvM,CAAX,CAA1B;EACD;;EACD,WAAKzO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyO,CAAhB,EAAmBzO,CAAC,EAApB,EAAwB;EACtB,aAAKgC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoY,KAAhB,EAAuBpY,CAAC,EAAxB,EAA4B;EAC1BqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAcqY,CAAC,CAAClY,GAAF,CAAMsM,CAAN,EAASzM,CAAT,IAAc4Y,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAAxC;EACD;EACF;EACF;;EAED,WAAO4L,CAAC,CAAC5D,SAAF,CAAY,CAAZ,EAAevH,CAAC,GAAG,CAAnB,EAAsB,CAAtB,EAAyBkL,KAAK,GAAG,CAAjC,CAAP;EACD;;EAEDa,EAAAA,UAAU,GAAG;EACX,QAAIvZ,OAAO,GAAG,KAAKqZ,EAAL,CAAQrZ,OAAtB;;EACA,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0B,OAApB,EAA6B1B,CAAC,EAA9B,EAAkC;EAChC,UAAI,KAAKgb,KAAL,CAAWhb,CAAX,MAAkB,CAAtB,EAAyB;EACvB,eAAO,KAAP;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEwB,MAArBwa,qBAAqB,GAAG;EAC1B,QAAII,EAAE,GAAG,KAAKG,EAAd;EACA,QAAI7L,CAAC,GAAG0L,EAAE,CAAClZ,OAAX;EACA,QAAI2Y,CAAC,GAAG,IAAIlX,MAAJ,CAAW+L,CAAX,EAAcA,CAAd,CAAR;EACA,QAAIlP,CAAJ,EAAOgC,CAAP;;EACA,SAAKhC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkP,CAAhB,EAAmBlP,CAAC,EAApB,EAAwB;EACtB,WAAKgC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkN,CAAhB,EAAmBlN,CAAC,EAApB,EAAwB;EACtB,YAAIhC,CAAC,GAAGgC,CAAR,EAAW;EACTqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY4Y,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUgC,CAAV,CAAZ;EACD,SAFD,MAEO,IAAIhC,CAAC,KAAKgC,CAAV,EAAa;EAClBqY,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,KAAKgZ,KAAL,CAAWhb,CAAX,CAAZ;EACD,SAFM,MAEA;EACLqa,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAOqY,CAAP;EACD;;EAEmB,MAAhBa,gBAAgB,GAAG;EACrB,QAAIN,EAAE,GAAG,KAAKG,EAAd;EACA,QAAItZ,IAAI,GAAGmZ,EAAE,CAACnZ,IAAd;EACA,QAAIC,OAAO,GAAGkZ,EAAE,CAAClZ,OAAjB;EACA,QAAI2Y,CAAC,GAAG,IAAIlX,MAAJ,CAAW1B,IAAX,EAAiBC,OAAjB,CAAR;EACA,QAAI1B,CAAJ,EAAOgC,CAAP,EAAUyM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG/M,OAAO,GAAG,CAAnB,EAAsB+M,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAKzO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzBqa,QAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAAZ;EACD;;EACD4L,MAAAA,CAAC,CAAC7W,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY,CAAZ;;EACA,WAAKzM,CAAC,GAAGyM,CAAT,EAAYzM,CAAC,GAAGN,OAAhB,EAAyBM,CAAC,EAA1B,EAA8B;EAC5B,YAAI4Y,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,MAAiB,CAArB,EAAwB;EACtB0D,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKnS,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzBmS,YAAAA,CAAC,IAAIyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAe4L,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAApB;EACD;;EAEDmQ,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKyI,EAAE,CAACzY,GAAH,CAAOsM,CAAP,EAAUA,CAAV,CAAT;;EAEA,eAAKzO,CAAC,GAAGyO,CAAT,EAAYzO,CAAC,GAAGyB,IAAhB,EAAsBzB,CAAC,EAAvB,EAA2B;EACzBqa,YAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYqY,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAcmQ,CAAC,GAAGyI,EAAE,CAACzY,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,CAA9B;EACD;EACF;EACF;EACF;;EACD,WAAO4L,CAAP;EACD;;EA9IkC;;ECAtB,MAAMc,0BAAN,CAAiC;EAC9C7Z,EAAAA,WAAW,CAAC+B,KAAD,EAAQnE,OAAO,GAAG,EAAlB,EAAsB;EAC/BmE,IAAAA,KAAK,GAAGmW,eAAe,CAAC/V,WAAhB,CAA4BJ,KAA5B,CAAR;;EAEA,QAAIA,KAAK,CAACkH,OAAN,EAAJ,EAAqB;EACnB,YAAM,IAAIzK,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,QAAImP,CAAC,GAAG5L,KAAK,CAAC5B,IAAd;EACA,QAAIyN,CAAC,GAAG7L,KAAK,CAAC3B,OAAd;EAEA,UAAM;EACJ0Z,MAAAA,0BAA0B,GAAG,IADzB;EAEJC,MAAAA,2BAA2B,GAAG,IAF1B;EAGJC,MAAAA,aAAa,GAAG;EAHZ,QAIFpc,OAJJ;EAMA,QAAIqc,KAAK,GAAGC,OAAO,CAACJ,0BAAD,CAAnB;EACA,QAAIK,KAAK,GAAGD,OAAO,CAACH,2BAAD,CAAnB;EAEA,QAAIK,OAAO,GAAG,KAAd;EACA,QAAItF,CAAJ;;EACA,QAAInH,CAAC,GAAGC,CAAR,EAAW;EACT,UAAI,CAACoM,aAAL,EAAoB;EAClBlF,QAAAA,CAAC,GAAG/S,KAAK,CAACsL,KAAN,EAAJ,CADkB;;EAGlBmH,QAAAA,OAAO,CAACC,IAAR,CACE,wFADF;EAGD,OAND,MAMO;EACLK,QAAAA,CAAC,GAAG/S,KAAK,CAACkU,SAAN,EAAJ;EACAtI,QAAAA,CAAC,GAAGmH,CAAC,CAAC3U,IAAN;EACAyN,QAAAA,CAAC,GAAGkH,CAAC,CAAC1U,OAAN;EACAga,QAAAA,OAAO,GAAG,IAAV;EACA,YAAIC,GAAG,GAAGJ,KAAV;EACAA,QAAAA,KAAK,GAAGE,KAAR;EACAA,QAAAA,KAAK,GAAGE,GAAR;EACD;EACF,KAhBD,MAgBO;EACLvF,MAAAA,CAAC,GAAG/S,KAAK,CAACsL,KAAN,EAAJ;EACD;;EAED,QAAIiN,EAAE,GAAGha,IAAI,CAAC3B,GAAL,CAASgP,CAAT,EAAYC,CAAZ,CAAT;EACA,QAAI2M,EAAE,GAAGja,IAAI,CAAC3B,GAAL,CAASgP,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAT;EACA,QAAIiD,CAAC,GAAG,IAAID,YAAJ,CAAiB2J,EAAjB,CAAR;EACA,QAAIC,CAAC,GAAG,IAAI3Y,MAAJ,CAAW8L,CAAX,EAAc2M,EAAd,CAAR;EACA,QAAIG,CAAC,GAAG,IAAI5Y,MAAJ,CAAW+L,CAAX,EAAcA,CAAd,CAAR;EAEA,QAAInM,CAAC,GAAG,IAAImP,YAAJ,CAAiBhD,CAAjB,CAAR;EACA,QAAI8M,IAAI,GAAG,IAAI9J,YAAJ,CAAiBjD,CAAjB,CAAX;EAEA,QAAIgN,EAAE,GAAG,IAAI/J,YAAJ,CAAiB2J,EAAjB,CAAT;;EACA,SAAK,IAAI7b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6b,EAApB,EAAwB7b,CAAC,EAAzB,EAA6Bic,EAAE,CAACjc,CAAD,CAAF,GAAQA,CAAR;;EAE7B,QAAIkc,GAAG,GAAGta,IAAI,CAAC3B,GAAL,CAASgP,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAV;EACA,QAAIiN,GAAG,GAAGva,IAAI,CAAC5C,GAAL,CAAS,CAAT,EAAY4C,IAAI,CAAC3B,GAAL,CAASiP,CAAC,GAAG,CAAb,EAAgBD,CAAhB,CAAZ,CAAV;EACA,QAAImN,GAAG,GAAGxa,IAAI,CAAC5C,GAAL,CAASkd,GAAT,EAAcC,GAAd,CAAV;;EAEA,SAAK,IAAI1N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2N,GAApB,EAAyB3N,CAAC,EAA1B,EAA8B;EAC5B,UAAIA,CAAC,GAAGyN,GAAR,EAAa;EACX/J,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAIzO,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1BmS,UAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAOiM,UAAU,CAACvI,CAAC,CAAC1D,CAAD,CAAF,EAAO2H,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAP,CAAjB;EACD;;EACD,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAI2H,CAAC,CAACjU,GAAF,CAAMsM,CAAN,EAASA,CAAT,IAAc,CAAlB,EAAqB;EACnB0D,YAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EACD,eAAK,IAAIzO,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1BoW,YAAAA,CAAC,CAAC5S,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY2H,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASyO,CAAT,IAAc0D,CAAC,CAAC1D,CAAD,CAA3B;EACD;;EACD2H,UAAAA,CAAC,CAAC5S,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY2H,CAAC,CAACjU,GAAF,CAAMsM,CAAN,EAASA,CAAT,IAAc,CAA1B;EACD;;EACD0D,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EAED,WAAK,IAAIzM,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAGkN,CAAxB,EAA2BlN,CAAC,EAA5B,EAAgC;EAC9B,YAAIyM,CAAC,GAAGyN,GAAJ,IAAW/J,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,cAAIoL,CAAC,GAAG,CAAR;;EACA,eAAK,IAAI7Z,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B6Z,YAAAA,CAAC,IAAIzD,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASyO,CAAT,IAAc2H,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAnB;EACD;;EACD6X,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKzD,CAAC,CAACjU,GAAF,CAAMsM,CAAN,EAASA,CAAT,CAAT;;EACA,eAAK,IAAIzO,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1BoW,YAAAA,CAAC,CAAC5S,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYoU,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAc6X,CAAC,GAAGzD,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAA9B;EACD;EACF;;EACD1L,QAAAA,CAAC,CAACf,CAAD,CAAD,GAAOoU,CAAC,CAACjU,GAAF,CAAMsM,CAAN,EAASzM,CAAT,CAAP;EACD;;EAED,UAAIuZ,KAAK,IAAI9M,CAAC,GAAGyN,GAAjB,EAAsB;EACpB,aAAK,IAAIlc,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B8b,UAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY2H,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAZ;EACD;EACF;;EAED,UAAIA,CAAC,GAAG0N,GAAR,EAAa;EACXpZ,QAAAA,CAAC,CAAC0L,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAIzO,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGkP,CAAxB,EAA2BlP,CAAC,EAA5B,EAAgC;EAC9B+C,UAAAA,CAAC,CAAC0L,CAAD,CAAD,GAAOiM,UAAU,CAAC3X,CAAC,CAAC0L,CAAD,CAAF,EAAO1L,CAAC,CAAC/C,CAAD,CAAR,CAAjB;EACD;;EACD,YAAI+C,CAAC,CAAC0L,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAI1L,CAAC,CAAC0L,CAAC,GAAG,CAAL,CAAD,GAAW,CAAf,EAAkB;EAChB1L,YAAAA,CAAC,CAAC0L,CAAD,CAAD,GAAO,IAAI1L,CAAC,CAAC0L,CAAD,CAAZ;EACD;;EACD,eAAK,IAAIzO,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGkP,CAAxB,EAA2BlP,CAAC,EAA5B,EAAgC;EAC9B+C,YAAAA,CAAC,CAAC/C,CAAD,CAAD,IAAQ+C,CAAC,CAAC0L,CAAD,CAAT;EACD;;EACD1L,UAAAA,CAAC,CAAC0L,CAAC,GAAG,CAAL,CAAD,IAAY,CAAZ;EACD;;EACD1L,QAAAA,CAAC,CAAC0L,CAAD,CAAD,GAAO,CAAC1L,CAAC,CAAC0L,CAAD,CAAT;;EACA,YAAIA,CAAC,GAAG,CAAJ,GAAQQ,CAAR,IAAalM,CAAC,CAAC0L,CAAD,CAAD,KAAS,CAA1B,EAA6B;EAC3B,eAAK,IAAIzO,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGiP,CAAxB,EAA2BjP,CAAC,EAA5B,EAAgC;EAC9Bgc,YAAAA,IAAI,CAAChc,CAAD,CAAJ,GAAU,CAAV;EACD;;EACD,eAAK,IAAIA,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGiP,CAAxB,EAA2BjP,CAAC,EAA5B,EAAgC;EAC9B,iBAAK,IAAIgC,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAGkN,CAAxB,EAA2BlN,CAAC,EAA5B,EAAgC;EAC9Bga,cAAAA,IAAI,CAAChc,CAAD,CAAJ,IAAW+C,CAAC,CAACf,CAAD,CAAD,GAAOoU,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAlB;EACD;EACF;;EACD,eAAK,IAAIA,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAGkN,CAAxB,EAA2BlN,CAAC,EAA5B,EAAgC;EAC9B,gBAAI6X,CAAC,GAAG,CAAC9W,CAAC,CAACf,CAAD,CAAF,GAAQe,CAAC,CAAC0L,CAAC,GAAG,CAAL,CAAjB;;EACA,iBAAK,IAAIzO,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGiP,CAAxB,EAA2BjP,CAAC,EAA5B,EAAgC;EAC9BoW,cAAAA,CAAC,CAAC5S,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYoU,CAAC,CAACjU,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAc6X,CAAC,GAAGmC,IAAI,CAAChc,CAAD,CAAlC;EACD;EACF;EACF;;EACD,YAAIyb,KAAJ,EAAW;EACT,eAAK,IAAIzb,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGkP,CAAxB,EAA2BlP,CAAC,EAA5B,EAAgC;EAC9B+b,YAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY1L,CAAC,CAAC/C,CAAD,CAAb;EACD;EACF;EACF;EACF;;EAED,QAAIoP,CAAC,GAAGxN,IAAI,CAAC3B,GAAL,CAASiP,CAAT,EAAYD,CAAC,GAAG,CAAhB,CAAR;;EACA,QAAIiN,GAAG,GAAGhN,CAAV,EAAa;EACXiD,MAAAA,CAAC,CAAC+J,GAAD,CAAD,GAAS9F,CAAC,CAACjU,GAAF,CAAM+Z,GAAN,EAAWA,GAAX,CAAT;EACD;;EACD,QAAIjN,CAAC,GAAGG,CAAR,EAAW;EACT+C,MAAAA,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EACD;;EACD,QAAI+M,GAAG,GAAG,CAAN,GAAU/M,CAAd,EAAiB;EACfrM,MAAAA,CAAC,CAACoZ,GAAD,CAAD,GAAS/F,CAAC,CAACjU,GAAF,CAAMga,GAAN,EAAW/M,CAAC,GAAG,CAAf,CAAT;EACD;;EACDrM,IAAAA,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EAEA,QAAImM,KAAJ,EAAW;EACT,WAAK,IAAIvZ,CAAC,GAAGka,GAAb,EAAkBla,CAAC,GAAG4Z,EAAtB,EAA0B5Z,CAAC,EAA3B,EAA+B;EAC7B,aAAK,IAAIhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B8b,UAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY,CAAZ;EACD;;EACD8Z,QAAAA,CAAC,CAACtY,GAAF,CAAMxB,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;;EACD,WAAK,IAAIyM,CAAC,GAAGyN,GAAG,GAAG,CAAnB,EAAsBzN,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,eAAK,IAAIzM,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAG4Z,EAAxB,EAA4B5Z,CAAC,EAA7B,EAAiC;EAC/B,gBAAI6X,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAI7Z,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B6Z,cAAAA,CAAC,IAAIiC,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,IAAcqN,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAnB;EACD;;EACD6X,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKiC,CAAC,CAAC3Z,GAAF,CAAMsM,CAAN,EAASA,CAAT,CAAT;;EACA,iBAAK,IAAIzO,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B8b,cAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY8Z,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAc6X,CAAC,GAAGiC,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAA9B;EACD;EACF;;EACD,eAAK,IAAIzO,CAAC,GAAGyO,CAAb,EAAgBzO,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B8b,YAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAACqN,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAb;EACD;;EACDqN,UAAAA,CAAC,CAACtY,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY,IAAIqN,CAAC,CAAC3Z,GAAF,CAAMsM,CAAN,EAASA,CAAT,CAAhB;;EACA,eAAK,IAAIzO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyO,CAAC,GAAG,CAAxB,EAA2BzO,CAAC,EAA5B,EAAgC;EAC9B8b,YAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAAZ;EACD;EACF,SAlBD,MAkBO;EACL,eAAK,IAAIzO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B8b,YAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAAZ;EACD;;EACDqN,UAAAA,CAAC,CAACtY,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EAED,QAAIgN,KAAJ,EAAW;EACT,WAAK,IAAIhN,CAAC,GAAGS,CAAC,GAAG,CAAjB,EAAoBT,CAAC,IAAI,CAAzB,EAA4BA,CAAC,EAA7B,EAAiC;EAC/B,YAAIA,CAAC,GAAG0N,GAAJ,IAAWpZ,CAAC,CAAC0L,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,eAAK,IAAIzM,CAAC,GAAGyM,CAAC,GAAG,CAAjB,EAAoBzM,CAAC,GAAGkN,CAAxB,EAA2BlN,CAAC,EAA5B,EAAgC;EAC9B,gBAAI6X,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAI7Z,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGkP,CAAxB,EAA2BlP,CAAC,EAA5B,EAAgC;EAC9B6Z,cAAAA,CAAC,IAAIkC,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,IAAcsN,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAnB;EACD;;EACD6X,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKkC,CAAC,CAAC5Z,GAAF,CAAMsM,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAT;;EACA,iBAAK,IAAIzO,CAAC,GAAGyO,CAAC,GAAG,CAAjB,EAAoBzO,CAAC,GAAGkP,CAAxB,EAA2BlP,CAAC,EAA5B,EAAgC;EAC9B+b,cAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY+Z,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAc6X,CAAC,GAAGkC,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAA9B;EACD;EACF;EACF;;EACD,aAAK,IAAIzO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkP,CAApB,EAAuBlP,CAAC,EAAxB,EAA4B;EAC1B+b,UAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAAZ;EACD;;EACDsN,QAAAA,CAAC,CAACvY,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;;EAED,QAAI4N,EAAE,GAAGjN,CAAC,GAAG,CAAb;EAEA,QAAIkN,GAAG,GAAG1c,MAAM,CAAC2c,OAAjB;;EACA,WAAOnN,CAAC,GAAG,CAAX,EAAc;EACZ,UAAIX,CAAJ,EAAO+N,IAAP;;EACA,WAAK/N,CAAC,GAAGW,CAAC,GAAG,CAAb,EAAgBX,CAAC,IAAI,CAAC,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5B,YAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;EACZ;EACD;;EACD,cAAMgO,KAAK,GACT7c,MAAM,CAAC8c,SAAP,GAAmBJ,GAAG,GAAG1a,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAAC1D,CAAD,CAAD,GAAO7M,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAV,CAAhB,CAD3B;;EAEA,YAAI7M,IAAI,CAAC6E,GAAL,CAAS1D,CAAC,CAAC0L,CAAD,CAAV,KAAkBgO,KAAlB,IAA2B7c,MAAM,CAAC+c,KAAP,CAAa5Z,CAAC,CAAC0L,CAAD,CAAd,CAA/B,EAAmD;EACjD1L,UAAAA,CAAC,CAAC0L,CAAD,CAAD,GAAO,CAAP;EACA;EACD;EACF;;EACD,UAAIA,CAAC,KAAKW,CAAC,GAAG,CAAd,EAAiB;EACfoN,QAAAA,IAAI,GAAG,CAAP;EACD,OAFD,MAEO;EACL,YAAII,EAAJ;;EACA,aAAKA,EAAE,GAAGxN,CAAC,GAAG,CAAd,EAAiBwN,EAAE,IAAInO,CAAvB,EAA0BmO,EAAE,EAA5B,EAAgC;EAC9B,cAAIA,EAAE,KAAKnO,CAAX,EAAc;EACZ;EACD;;EACD,cAAIoL,CAAC,GACH,CAAC+C,EAAE,KAAKxN,CAAP,GAAWxN,IAAI,CAAC6E,GAAL,CAAS1D,CAAC,CAAC6Z,EAAD,CAAV,CAAX,GAA6B,CAA9B,KACCA,EAAE,KAAKnO,CAAC,GAAG,CAAX,GAAe7M,IAAI,CAAC6E,GAAL,CAAS1D,CAAC,CAAC6Z,EAAE,GAAG,CAAN,CAAV,CAAf,GAAqC,CADtC,CADF;;EAGA,cAAIhb,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAACyK,EAAD,CAAV,KAAmBN,GAAG,GAAGzC,CAA7B,EAAgC;EAC9B1H,YAAAA,CAAC,CAACyK,EAAD,CAAD,GAAQ,CAAR;EACA;EACD;EACF;;EACD,YAAIA,EAAE,KAAKnO,CAAX,EAAc;EACZ+N,UAAAA,IAAI,GAAG,CAAP;EACD,SAFD,MAEO,IAAII,EAAE,KAAKxN,CAAC,GAAG,CAAf,EAAkB;EACvBoN,UAAAA,IAAI,GAAG,CAAP;EACD,SAFM,MAEA;EACLA,UAAAA,IAAI,GAAG,CAAP;EACA/N,UAAAA,CAAC,GAAGmO,EAAJ;EACD;EACF;;EAEDnO,MAAAA,CAAC;;EAED,cAAQ+N,IAAR;EACE,aAAK,CAAL;EAAQ;EACN,gBAAIK,CAAC,GAAG9Z,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAT;EACArM,YAAAA,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAIpN,CAAC,GAAGoN,CAAC,GAAG,CAAjB,EAAoBpN,CAAC,IAAIyM,CAAzB,EAA4BzM,CAAC,EAA7B,EAAiC;EAC/B,kBAAI6X,CAAC,GAAGa,UAAU,CAACvI,CAAC,CAACnQ,CAAD,CAAF,EAAO6a,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAG3K,CAAC,CAACnQ,CAAD,CAAD,GAAO6X,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACA1H,cAAAA,CAAC,CAACnQ,CAAD,CAAD,GAAO6X,CAAP;;EACA,kBAAI7X,CAAC,KAAKyM,CAAV,EAAa;EACXoO,gBAAAA,CAAC,GAAG,CAACE,EAAD,GAAMha,CAAC,CAACf,CAAC,GAAG,CAAL,CAAX;EACAe,gBAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAW8a,EAAE,GAAG/Z,CAAC,CAACf,CAAC,GAAG,CAAL,CAAjB;EACD;;EACD,kBAAIyZ,KAAJ,EAAW;EACT,qBAAK,IAAIzb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkP,CAApB,EAAuBlP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAL,GAAmB+a,EAAE,GAAGhB,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASoP,CAAC,GAAG,CAAb,CAA5B;EACA2M,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASoP,CAAC,GAAG,CAAb,EAAgB,CAAC2N,EAAD,GAAMhB,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAN,GAAoB8a,EAAE,GAAGf,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASoP,CAAC,GAAG,CAAb,CAAzC;EACA2M,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY6X,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAIgD,CAAC,GAAG9Z,CAAC,CAAC0L,CAAC,GAAG,CAAL,CAAT;EACA1L,YAAAA,CAAC,CAAC0L,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAIzM,CAAC,GAAGyM,CAAb,EAAgBzM,CAAC,GAAGoN,CAApB,EAAuBpN,CAAC,EAAxB,EAA4B;EAC1B,kBAAI6X,CAAC,GAAGa,UAAU,CAACvI,CAAC,CAACnQ,CAAD,CAAF,EAAO6a,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAG3K,CAAC,CAACnQ,CAAD,CAAD,GAAO6X,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACA1H,cAAAA,CAAC,CAACnQ,CAAD,CAAD,GAAO6X,CAAP;EACAgD,cAAAA,CAAC,GAAG,CAACE,EAAD,GAAMha,CAAC,CAACf,CAAD,CAAX;EACAe,cAAAA,CAAC,CAACf,CAAD,CAAD,GAAO8a,EAAE,GAAG/Z,CAAC,CAACf,CAAD,CAAb;;EACA,kBAAIuZ,KAAJ,EAAW;EACT,qBAAK,IAAIvb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAL,GAAmB+a,EAAE,GAAGjB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAC,GAAG,CAAb,CAA5B;EACAqN,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAC,GAAG,CAAb,EAAgB,CAACsO,EAAD,GAAMjB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAN,GAAoB8a,EAAE,GAAGhB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAC,GAAG,CAAb,CAAzC;EACAqN,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY6X,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,kBAAM9N,KAAK,GAAGnK,IAAI,CAAC5C,GAAL,CACZ4C,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CADY,EAEZxN,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CAFY,EAGZxN,IAAI,CAAC6E,GAAL,CAAS1D,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAV,CAHY,EAIZxN,IAAI,CAAC6E,GAAL,CAAS0L,CAAC,CAAC1D,CAAD,CAAV,CAJY,EAKZ7M,IAAI,CAAC6E,GAAL,CAAS1D,CAAC,CAAC0L,CAAD,CAAV,CALY,CAAd;EAOA,kBAAMuO,EAAE,GAAG7K,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWrD,KAAtB;EACA,kBAAMkR,IAAI,GAAG9K,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWrD,KAAxB;EACA,kBAAMmR,IAAI,GAAGna,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAD,GAAWrD,KAAxB;EACA,kBAAMoR,EAAE,GAAGhL,CAAC,CAAC1D,CAAD,CAAD,GAAO1C,KAAlB;EACA,kBAAMqR,EAAE,GAAGra,CAAC,CAAC0L,CAAD,CAAD,GAAO1C,KAAlB;EACA,kBAAMsK,CAAC,GAAG,CAAC,CAAC4G,IAAI,GAAGD,EAAR,KAAeC,IAAI,GAAGD,EAAtB,IAA4BE,IAAI,GAAGA,IAApC,IAA4C,CAAtD;EACA,kBAAMrT,CAAC,GAAGmT,EAAE,GAAGE,IAAL,IAAaF,EAAE,GAAGE,IAAlB,CAAV;EACA,gBAAIG,KAAK,GAAG,CAAZ;;EACA,gBAAIhH,CAAC,KAAK,CAAN,IAAWxM,CAAC,KAAK,CAArB,EAAwB;EACtB,kBAAIwM,CAAC,GAAG,CAAR,EAAW;EACTgH,gBAAAA,KAAK,GAAG,IAAIzb,IAAI,CAACqG,IAAL,CAAUoO,CAAC,GAAGA,CAAJ,GAAQxM,CAAlB,CAAZ;EACD,eAFD,MAEO;EACLwT,gBAAAA,KAAK,GAAGzb,IAAI,CAACqG,IAAL,CAAUoO,CAAC,GAAGA,CAAJ,GAAQxM,CAAlB,CAAR;EACD;;EACDwT,cAAAA,KAAK,GAAGxT,CAAC,IAAIwM,CAAC,GAAGgH,KAAR,CAAT;EACD;;EACD,gBAAIR,CAAC,GAAG,CAACM,EAAE,GAAGH,EAAN,KAAaG,EAAE,GAAGH,EAAlB,IAAwBK,KAAhC;EACA,gBAAIC,CAAC,GAAGH,EAAE,GAAGC,EAAb;;EACA,iBAAK,IAAIpb,CAAC,GAAGyM,CAAb,EAAgBzM,CAAC,GAAGoN,CAAC,GAAG,CAAxB,EAA2BpN,CAAC,EAA5B,EAAgC;EAC9B,kBAAI6X,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAlB;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGja,MAAM,CAAC8c,SAAX;EACb,kBAAII,EAAE,GAAGD,CAAC,GAAGhD,CAAb;EACA,kBAAIkD,EAAE,GAAGO,CAAC,GAAGzD,CAAb;;EACA,kBAAI7X,CAAC,KAAKyM,CAAV,EAAa;EACX1L,gBAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAW6X,CAAX;EACD;;EACDgD,cAAAA,CAAC,GAAGC,EAAE,GAAG3K,CAAC,CAACnQ,CAAD,CAAN,GAAY+a,EAAE,GAAGha,CAAC,CAACf,CAAD,CAAtB;EACAe,cAAAA,CAAC,CAACf,CAAD,CAAD,GAAO8a,EAAE,GAAG/Z,CAAC,CAACf,CAAD,CAAN,GAAY+a,EAAE,GAAG5K,CAAC,CAACnQ,CAAD,CAAzB;EACAsb,cAAAA,CAAC,GAAGP,EAAE,GAAG5K,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAAV;EACAmQ,cAAAA,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAAD,GAAW8a,EAAE,GAAG3K,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAIyZ,KAAJ,EAAW;EACT,qBAAK,IAAIzb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkP,CAApB,EAAuBlP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAL,GAAmB+a,EAAE,GAAGhB,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAC,GAAG,CAAb,CAA5B;EACA+Z,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASgC,CAAC,GAAG,CAAb,EAAgB,CAAC+a,EAAD,GAAMhB,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAN,GAAoB8a,EAAE,GAAGf,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAC,GAAG,CAAb,CAAzC;EACA+Z,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY6X,CAAZ;EACD;EACF;;EACDA,cAAAA,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAd;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGja,MAAM,CAAC8c,SAAX;EACbI,cAAAA,EAAE,GAAGD,CAAC,GAAGhD,CAAT;EACAkD,cAAAA,EAAE,GAAGO,CAAC,GAAGzD,CAAT;EACA1H,cAAAA,CAAC,CAACnQ,CAAD,CAAD,GAAO6X,CAAP;EACAgD,cAAAA,CAAC,GAAGC,EAAE,GAAG/Z,CAAC,CAACf,CAAD,CAAN,GAAY+a,EAAE,GAAG5K,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAAtB;EACAmQ,cAAAA,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAAD,GAAW,CAAC+a,EAAD,GAAMha,CAAC,CAACf,CAAD,CAAP,GAAa8a,EAAE,GAAG3K,CAAC,CAACnQ,CAAC,GAAG,CAAL,CAA9B;EACAsb,cAAAA,CAAC,GAAGP,EAAE,GAAGha,CAAC,CAACf,CAAC,GAAG,CAAL,CAAV;EACAe,cAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAW8a,EAAE,GAAG/Z,CAAC,CAACf,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAIuZ,KAAK,IAAIvZ,CAAC,GAAGiN,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIjP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAL,GAAmB+a,EAAE,GAAGjB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAC,GAAG,CAAb,CAA5B;EACA8Z,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASgC,CAAC,GAAG,CAAb,EAAgB,CAAC+a,EAAD,GAAMjB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,CAAN,GAAoB8a,EAAE,GAAGhB,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASgC,CAAC,GAAG,CAAb,CAAzC;EACA8Z,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY6X,CAAZ;EACD;EACF;EACF;;EACD9W,YAAAA,CAAC,CAACqM,CAAC,GAAG,CAAL,CAAD,GAAWyN,CAAX;EAEA;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAI1K,CAAC,CAAC1D,CAAD,CAAD,IAAQ,CAAZ,EAAe;EACb0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP,GAAW,CAAC0D,CAAC,CAAC1D,CAAD,CAAb,GAAmB,CAA1B;;EACA,kBAAIgN,KAAJ,EAAW;EACT,qBAAK,IAAIzb,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIqc,EAArB,EAAyBrc,CAAC,EAA1B,EAA8B;EAC5B+b,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAY,CAACsN,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAb;EACD;EACF;EACF;;EACD,mBAAOA,CAAC,GAAG4N,EAAX,EAAe;EACb,kBAAIlK,CAAC,CAAC1D,CAAD,CAAD,IAAQ0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAb,EAAsB;EACpB;EACD;;EACD,kBAAIoL,CAAC,GAAG1H,CAAC,CAAC1D,CAAD,CAAT;EACA0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAR;EACA0D,cAAAA,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAD,GAAWoL,CAAX;;EACA,kBAAI4B,KAAK,IAAIhN,CAAC,GAAGS,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIlP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkP,CAApB,EAAuBlP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGkC,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASyO,CAAC,GAAG,CAAb,CAAJ;EACAsN,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASyO,CAAC,GAAG,CAAb,EAAgBsN,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAhB;EACAsN,kBAAAA,CAAC,CAACvY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAYoL,CAAZ;EACD;EACF;;EACD,kBAAI0B,KAAK,IAAI9M,CAAC,GAAGQ,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIjP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiP,CAApB,EAAuBjP,CAAC,EAAxB,EAA4B;EAC1B6Z,kBAAAA,CAAC,GAAGiC,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAC,GAAG,CAAb,CAAJ;EACAqN,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAC,GAAG,CAAb,EAAgBqN,CAAC,CAAC3Z,GAAF,CAAMnC,CAAN,EAASyO,CAAT,CAAhB;EACAqN,kBAAAA,CAAC,CAACtY,GAAF,CAAMxD,CAAN,EAASyO,CAAT,EAAYoL,CAAZ;EACD;EACF;;EACDpL,cAAAA,CAAC;EACF;EAEDW,YAAAA,CAAC;EACD;EACD;EACD;EAjJF;EAmJD;;EAED,QAAIsM,OAAJ,EAAa;EACX,UAAI3M,GAAG,GAAGgN,CAAV;EACAA,MAAAA,CAAC,GAAGD,CAAJ;EACAA,MAAAA,CAAC,GAAG/M,GAAJ;EACD;;EAED,SAAKE,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKiD,CAAL,GAASA,CAAT;EACA,SAAK2J,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACD;;EAED5B,EAAAA,KAAK,CAAC9W,KAAD,EAAQ;EACX,QAAIka,CAAC,GAAGla,KAAR;EACA,QAAIN,CAAC,GAAG,KAAKya,SAAb;EACA,QAAIC,KAAK,GAAG,KAAKtL,CAAL,CAAO/S,MAAnB;EACA,QAAIse,EAAE,GAAGva,MAAM,CAACyJ,KAAP,CAAa6Q,KAAb,EAAoBA,KAApB,CAAT;;EAEA,SAAK,IAAIzd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyd,KAApB,EAA2Bzd,CAAC,EAA5B,EAAgC;EAC9B,UAAI4B,IAAI,CAAC6E,GAAL,CAAS,KAAK0L,CAAL,CAAOnS,CAAP,CAAT,KAAuB+C,CAA3B,EAA8B;EAC5B2a,QAAAA,EAAE,CAACla,GAAH,CAAOxD,CAAP,EAAUA,CAAV,EAAa,CAAb;EACD,OAFD,MAEO;EACL0d,QAAAA,EAAE,CAACla,GAAH,CAAOxD,CAAP,EAAUA,CAAV,EAAa,IAAI,KAAKmS,CAAL,CAAOnS,CAAP,CAAjB;EACD;EACF;;EAED,QAAI8b,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIC,CAAC,GAAG,KAAK4B,oBAAb;EAEA,QAAIC,EAAE,GAAG7B,CAAC,CAAChK,IAAF,CAAO2L,EAAP,CAAT;EACA,QAAIG,KAAK,GAAG9B,CAAC,CAACta,IAAd;EACA,QAAIqc,KAAK,GAAGhC,CAAC,CAACra,IAAd;EACA,QAAIsc,GAAG,GAAG5a,MAAM,CAACyJ,KAAP,CAAaiR,KAAb,EAAoBC,KAApB,CAAV;;EAEA,SAAK,IAAI9d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6d,KAApB,EAA2B7d,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8b,KAApB,EAA2B9b,CAAC,EAA5B,EAAgC;EAC9B,YAAIyI,GAAG,GAAG,CAAV;;EACA,aAAK,IAAIgE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgP,KAApB,EAA2BhP,CAAC,EAA5B,EAAgC;EAC9BhE,UAAAA,GAAG,IAAImT,EAAE,CAACzb,GAAH,CAAOnC,CAAP,EAAUyO,CAAV,IAAeqN,CAAC,CAAC3Z,GAAF,CAAMH,CAAN,EAASyM,CAAT,CAAtB;EACD;;EACDsP,QAAAA,GAAG,CAACva,GAAJ,CAAQxD,CAAR,EAAWgC,CAAX,EAAcyI,GAAd;EACD;EACF;;EAED,WAAOsT,GAAG,CAAChM,IAAJ,CAASwL,CAAT,CAAP;EACD;;EAEDS,EAAAA,gBAAgB,CAAC3a,KAAD,EAAQ;EACtB,WAAO,KAAK8W,KAAL,CAAWhX,MAAM,CAACiK,IAAP,CAAY/J,KAAZ,CAAX,CAAP;EACD;;EAED4a,EAAAA,OAAO,GAAG;EACR,QAAIlC,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIhZ,CAAC,GAAG,KAAKya,SAAb;EACA,QAAIK,KAAK,GAAG9B,CAAC,CAACta,IAAd;EACA,QAAIyc,KAAK,GAAGnC,CAAC,CAACra,OAAd;EACA,QAAI2Y,CAAC,GAAG,IAAIlX,MAAJ,CAAW0a,KAAX,EAAkB,KAAK1L,CAAL,CAAO/S,MAAzB,CAAR;;EAEA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6d,KAApB,EAA2B7d,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkc,KAApB,EAA2Blc,CAAC,EAA5B,EAAgC;EAC9B,YAAIJ,IAAI,CAAC6E,GAAL,CAAS,KAAK0L,CAAL,CAAOnQ,CAAP,CAAT,IAAsBe,CAA1B,EAA6B;EAC3BsX,UAAAA,CAAC,CAAC7W,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAY+Z,CAAC,CAAC5Z,GAAF,CAAMnC,CAAN,EAASgC,CAAT,IAAc,KAAKmQ,CAAL,CAAOnQ,CAAP,CAA1B;EACD;EACF;EACF;;EAED,QAAI8Z,CAAC,GAAG,KAAKA,CAAb;EAEA,QAAIgC,KAAK,GAAGhC,CAAC,CAACra,IAAd;EACA,QAAI0c,KAAK,GAAGrC,CAAC,CAACpa,OAAd;EACA,QAAI6b,CAAC,GAAG,IAAIpa,MAAJ,CAAW0a,KAAX,EAAkBC,KAAlB,CAAR;;EAEA,SAAK,IAAI9d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6d,KAApB,EAA2B7d,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8b,KAApB,EAA2B9b,CAAC,EAA5B,EAAgC;EAC9B,YAAIyI,GAAG,GAAG,CAAV;;EACA,aAAK,IAAIgE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0P,KAApB,EAA2B1P,CAAC,EAA5B,EAAgC;EAC9BhE,UAAAA,GAAG,IAAI4P,CAAC,CAAClY,GAAF,CAAMnC,CAAN,EAASyO,CAAT,IAAcqN,CAAC,CAAC3Z,GAAF,CAAMH,CAAN,EAASyM,CAAT,CAArB;EACD;;EACD8O,QAAAA,CAAC,CAAC/Z,GAAF,CAAMxD,CAAN,EAASgC,CAAT,EAAYyI,GAAZ;EACD;EACF;;EAED,WAAO8S,CAAP;EACD;;EAEY,MAATa,SAAS,GAAG;EACd,WAAO,KAAKjM,CAAL,CAAO,CAAP,IAAY,KAAKA,CAAL,CAAOvQ,IAAI,CAAC3B,GAAL,CAAS,KAAKgP,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,CAAlC,CAAnB;EACD;;EAEQ,MAALmP,KAAK,GAAG;EACV,WAAO,KAAKlM,CAAL,CAAO,CAAP,CAAP;EACD;;EAEO,MAAJmM,IAAI,GAAG;EACT,QAAIC,GAAG,GAAG3c,IAAI,CAAC5C,GAAL,CAAS,KAAKiQ,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,KAAKiD,CAAL,CAAO,CAAP,CAA3B,GAAuCvS,MAAM,CAAC2c,OAAxD;EACA,QAAI7S,CAAC,GAAG,CAAR;EACA,QAAIyI,CAAC,GAAG,KAAKA,CAAb;;EACA,SAAK,IAAInS,CAAC,GAAG,CAAR,EAAWwe,EAAE,GAAGrM,CAAC,CAAC/S,MAAvB,EAA+BY,CAAC,GAAGwe,EAAnC,EAAuCxe,CAAC,EAAxC,EAA4C;EAC1C,UAAImS,CAAC,CAACnS,CAAD,CAAD,GAAOue,GAAX,EAAgB;EACd7U,QAAAA,CAAC;EACF;EACF;;EACD,WAAOA,CAAP;EACD;;EAEW,MAARiP,QAAQ,GAAG;EACb,WAAOtY,KAAK,CAACsJ,IAAN,CAAW,KAAKwI,CAAhB,CAAP;EACD;;EAEY,MAATqL,SAAS,GAAG;EACd,WAAQ5d,MAAM,CAAC2c,OAAP,GAAiB,CAAlB,GAAuB3a,IAAI,CAAC5C,GAAL,CAAS,KAAKiQ,CAAd,EAAiB,KAAKC,CAAtB,CAAvB,GAAkD,KAAKiD,CAAL,CAAO,CAAP,CAAzD;EACD;;EAEsB,MAAnBsM,mBAAmB,GAAG;EACxB,WAAO,KAAK3C,CAAZ;EACD;;EAEuB,MAApB6B,oBAAoB,GAAG;EACzB,WAAO,KAAK5B,CAAZ;EACD;;EAEiB,MAAd2C,cAAc,GAAG;EACnB,WAAOvb,MAAM,CAACiK,IAAP,CAAY,KAAK+E,CAAjB,CAAP;EACD;;EAxgB6C;;ECCzC,SAAS8L,OAAT,CAAiB/c,MAAjB,EAAyByd,MAAM,GAAG,KAAlC,EAAyC;EAC9Czd,EAAAA,MAAM,GAAGsY,eAAe,CAAC/V,WAAhB,CAA4BvC,MAA5B,CAAT;;EACA,MAAIyd,MAAJ,EAAY;EACV,WAAO,IAAIxD,0BAAJ,CAA+Bja,MAA/B,EAAuC+c,OAAvC,EAAP;EACD,GAFD,MAEO;EACL,WAAO9D,KAAK,CAACjZ,MAAD,EAASiC,MAAM,CAACgK,GAAP,CAAWjM,MAAM,CAACO,IAAlB,CAAT,CAAZ;EACD;EACF;EAEM,SAAS0Y,KAAT,CAAeyE,YAAf,EAA6BC,aAA7B,EAA4CF,MAAM,GAAG,KAArD,EAA4D;EACjEC,EAAAA,YAAY,GAAGpF,eAAe,CAAC/V,WAAhB,CAA4Bmb,YAA5B,CAAf;EACAC,EAAAA,aAAa,GAAGrF,eAAe,CAAC/V,WAAhB,CAA4Bob,aAA5B,CAAhB;;EACA,MAAIF,MAAJ,EAAY;EACV,WAAO,IAAIxD,0BAAJ,CAA+ByD,YAA/B,EAA6CzE,KAA7C,CAAmD0E,aAAnD,CAAP;EACD,GAFD,MAEO;EACL,WAAOD,YAAY,CAACzQ,QAAb,KACH,IAAIsL,eAAJ,CAAoBmF,YAApB,EAAkCzE,KAAlC,CAAwC0E,aAAxC,CADG,GAEH,IAAIlE,eAAJ,CAAoBiE,YAApB,EAAkCzE,KAAlC,CAAwC0E,aAAxC,CAFJ;EAGD;EACF;;ECtBc,MAAMC,MAAN,CAAa;EAC1Bxd,EAAAA,WAAW,CAAC+Y,CAAD,EAAInb,OAAO,GAAG,EAAd,EAAkB;EAC3Bmb,IAAAA,CAAC,GAAGb,eAAe,CAAC/V,WAAhB,CAA4B4W,CAA5B,CAAJ;EACA,QAAI;EAAEkD,MAAAA;EAAF,QAAQre,OAAZ;EACA,UAAM;EACJ6f,MAAAA,WAAW,GAAG,KADV;EAEJC,MAAAA,aAAa,GAAG,IAFZ;EAGJC,MAAAA,mBAAmB,GAAG;EAHlB,QAIF/f,OAJJ;EAMA,QAAIggB,CAAJ;;EACA,QAAI3B,CAAJ,EAAO;EACL,UAAIld,KAAK,CAACf,OAAN,CAAcie,CAAd,KAAoB,OAAOA,CAAC,CAAC,CAAD,CAAR,KAAgB,QAAxC,EAAkD;EAChDA,QAAAA,CAAC,GAAGpa,MAAM,CAACwJ,YAAP,CAAoB4Q,CAApB,CAAJ;EACD,OAFD,MAEO;EACLA,QAAAA,CAAC,GAAG/D,eAAe,CAAC/V,WAAhB,CAA4B8Z,CAA5B,CAAJ;EACD;;EACD,UAAIA,CAAC,CAAC9b,IAAF,KAAW4Y,CAAC,CAAC5Y,IAAjB,EAAuB;EACrB,cAAM,IAAI3B,KAAJ,CAAU,4CAAV,CAAN;EACD;;EACDof,MAAAA,CAAC,GAAG3B,CAAC,CAACxN,eAAF,CAAkB,CAAlB,CAAJ;EACD,KAVD,MAUO;EACLmP,MAAAA,CAAC,GAAG7E,CAAC,CAACtK,eAAF,CAAkB,CAAlB,CAAJ;EACD;;EAED,QAAIoP,IAAI,GAAG,CAAX;EACA,QAAItF,CAAJ,EAAO1C,CAAP,EAAUiI,CAAV,EAAaC,IAAb;;EAEA,SACE,IAAIC,OAAO,GAAG,CADhB,EAEEA,OAAO,GAAGN,aAAV,IAA2BG,IAAI,GAAGF,mBAFpC,EAGEK,OAAO,EAHT,EAIE;EACAF,MAAAA,CAAC,GAAG/E,CAAC,CAAC9C,SAAF,GAAcxF,IAAd,CAAmBmN,CAAnB,EAAsB3a,GAAtB,CAA0B2a,CAAC,CAAC3H,SAAF,GAAcxF,IAAd,CAAmBmN,CAAnB,EAAsB/c,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA1B,CAAJ;EACAid,MAAAA,CAAC,GAAGA,CAAC,CAAC7a,GAAF,CAAM6a,CAAC,CAAC3N,IAAF,EAAN,CAAJ;EAEAoI,MAAAA,CAAC,GAAGQ,CAAC,CAACtI,IAAF,CAAOqN,CAAP,EAAU7a,GAAV,CAAc6a,CAAC,CAAC7H,SAAF,GAAcxF,IAAd,CAAmBqN,CAAnB,EAAsBjd,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAd,CAAJ;;EAEA,UAAImd,OAAO,GAAG,CAAd,EAAiB;EACfH,QAAAA,IAAI,GAAGtF,CAAC,CAAClL,KAAF,GAAUhL,GAAV,CAAc0b,IAAd,EAAoBhX,GAApB,CAAwB,CAAxB,EAA2BoC,GAA3B,EAAP;EACD;;EACD4U,MAAAA,IAAI,GAAGxF,CAAC,CAAClL,KAAF,EAAP;;EAEA,UAAI4O,CAAJ,EAAO;EACLpG,QAAAA,CAAC,GAAGoG,CAAC,CAAChG,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsBtV,GAAtB,CAA0BsV,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA1B,CAAJ;EACAgV,QAAAA,CAAC,GAAGA,CAAC,CAAC5S,GAAF,CAAM4S,CAAC,CAAC1F,IAAF,EAAN,CAAJ;EAEAyN,QAAAA,CAAC,GAAG3B,CAAC,CAACxL,IAAF,CAAOoF,CAAP,EAAU5S,GAAV,CAAc4S,CAAC,CAACI,SAAF,GAAcxF,IAAd,CAAmBoF,CAAnB,EAAsBhV,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAd,CAAJ;EACD,OALD,MAKO;EACL+c,QAAAA,CAAC,GAAGrF,CAAJ;EACD;EACF;;EAED,QAAI0D,CAAJ,EAAO;EACL,UAAInO,CAAC,GAAGiL,CAAC,CAAC9C,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsBtV,GAAtB,CAA0BsV,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA1B,CAAR;EACAiN,MAAAA,CAAC,GAAGA,CAAC,CAAC7K,GAAF,CAAM6K,CAAC,CAACqC,IAAF,EAAN,CAAJ;EACA,UAAI8N,SAAS,GAAGlF,CAAC,CAAC1L,KAAF,GAAUhL,GAAV,CAAckW,CAAC,CAAClL,KAAF,GAAUoD,IAAV,CAAe3C,CAAC,CAACmI,SAAF,EAAf,CAAd,CAAhB;EACA,UAAIiI,QAAQ,GAAGN,CAAC,CAAC3H,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsBtV,GAAtB,CAA0BsV,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA1B,CAAf;EACA,UAAIsd,SAAS,GAAGlC,CAAC,CAAC5O,KAAF,GAAUhL,GAAV,CACdkW,CAAC,CAAClL,KAAF,GAAUzK,IAAV,CAAesb,QAAQ,CAACrd,GAAT,CAAa,CAAb,EAAgB,CAAhB,CAAf,EAAmC4P,IAAnC,CAAwCoF,CAAC,CAACI,SAAF,EAAxC,CADc,CAAhB;EAIA,WAAKsC,CAAL,GAASA,CAAT;EACA,WAAKzK,CAAL,GAASA,CAAC,CAACmI,SAAF,EAAT;EACA,WAAK6H,CAAL,GAASA,CAAC,CAAC7H,SAAF,EAAT;EACA,WAAKJ,CAAL,GAASA,CAAT;EACA,WAAK+H,CAAL,GAASA,CAAT;EACA,WAAK/M,CAAL,GAAS0H,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,CAAT;EACA,WAAK0F,SAAL,GAAiBA,SAAjB;EACA,WAAKE,SAAL,GAAiBA,SAAjB;EACA,WAAKC,KAAL,GAAaF,QAAb;EACD,KAlBD,MAkBO;EACL,WAAKJ,CAAL,GAASA,CAAC,CAAC7H,SAAF,EAAT;EACA,WAAKpF,CAAL,GAAS0H,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB5R,IAAtB,EAAT;;EACA,UAAI8W,WAAJ,EAAiB;EACf,aAAKlF,CAAL,GAASA,CAAC,CAAClL,KAAF,GAAUpK,GAAV,CAAc,KAAK4N,CAAL,CAAOhQ,GAAP,CAAW,CAAX,EAAc,CAAd,CAAd,CAAT;EACD,OAFD,MAEO;EACL,aAAK0X,CAAL,GAASA,CAAT;EACD;;EACD,WAAK0F,SAAL,GAAiBlF,CAAC,CAAC1W,GAAF,CAAMkW,CAAC,CAAC9H,IAAF,CAAOqN,CAAC,CAAC7H,SAAF,EAAP,CAAN,CAAjB;EACD;EACF;;EAjFyB;;ECD5B;EACA;EACA;EACA;EACA;EACA;;EACO,SAAS9F,IAAT,CAAc4I,CAAd,EAAiB;EACtB,SAAOzY,IAAI,CAACqG,IAAL,CAAUoS,CAAC,CAAC1L,KAAF,GAAUhB,KAAV,CAAgBgS,SAAhB,EAA2BlV,GAA3B,EAAV,CAAP;EACD;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASkV,SAAT,CAAmB3f,CAAnB,EAAsBgC,CAAtB,EAAyB;EAC9B,OAAKwB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,KAAkB,CAAjC;EACD;EAmBD;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAAS4d,kBAAT,CAA4BvV,KAA5B,EAAmCoD,QAAnC,EAA6C;EAClD,MAAIA,QAAJ,EAAc;EACZ,SAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,KAAK,CAACjL,MAA1B,EAAkC,EAAEY,CAApC,EAAuC;EACrC,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqI,KAAK,CAACrK,CAAD,CAAL,CAASZ,MAA7B,EAAqC,EAAE4C,CAAvC,EAA0C;EACxC,YAAI6d,IAAI,GAAGxV,KAAK,CAACrK,CAAD,CAAL,CAASgC,CAAT,CAAX;EACAqI,QAAAA,KAAK,CAACrK,CAAD,CAAL,CAASgC,CAAT,IAAc6d,IAAI,KAAK,IAAT,GAAgB,IAAI1c,MAAJ,CAAWkH,KAAK,CAACrK,CAAD,CAAL,CAASgC,CAAT,CAAX,CAAhB,GAA0C3C,SAAxD;EACD;EACF;EACF,GAPD,MAOO;EACL,SAAK,IAAIW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,KAAK,CAACjL,MAA1B,EAAkC,EAAEY,CAApC,EAAuC;EACrCqK,MAAAA,KAAK,CAACrK,CAAD,CAAL,GAAW,IAAImD,MAAJ,CAAWkH,KAAK,CAACrK,CAAD,CAAhB,CAAX;EACD;EACF;;EAED,SAAOqK,KAAP;EACD;;EC3DD;EACA;EACA;;EACO,MAAMyV,GAAN,CAAU;EACf;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACExe,EAAAA,WAAW,CAACpC,OAAD,EAAU6gB,KAAV,EAAiB;EAC1B,QAAI7gB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAK8gB,KAAL,GAAaD,KAAK,CAACC,KAAnB;EACA,WAAKC,OAAL,GAAeF,KAAK,CAACE,OAArB;EACA,WAAKC,KAAL,GAAaH,KAAK,CAACG,KAAnB;EACA,WAAKC,OAAL,GAAeJ,KAAK,CAACI,OAArB;EACA,WAAKC,GAAL,GAAWjd,MAAM,CAACM,WAAP,CAAmBsc,KAAK,CAACK,GAAzB,CAAX;EACA,WAAKC,GAAL,GAAWN,KAAK,CAACM,GAAjB;EACA,WAAKtU,KAAL,GAAagU,KAAK,CAAChU,KAAnB;EACA,WAAKuU,WAAL,GAAmBP,KAAK,CAACO,WAAzB;EACA,WAAKC,SAAL,GAAiBR,KAAK,CAACQ,SAAvB;EACD,KAVD,MAUO;EACL,UAAI;EAAEA,QAAAA,SAAS,GAAG,IAAd;EAAoBxU,QAAAA,KAAK,GAAG;EAA5B,UAAqC7M,OAAzC;EACA,WAAKqhB,SAAL,GAAiBA,SAAjB;EACA,WAAKxU,KAAL,GAAaA,KAAb;EACA,WAAKyU,aAAL,GAAqBthB,OAAO,CAACshB,aAA7B;EACD;EACF;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,KAAK,CAACC,WAAD,EAAcC,cAAd,EAA8B;EACjCD,IAAAA,WAAW,GAAGvd,MAAM,CAACM,WAAP,CAAmBid,WAAnB,CAAd;EACAC,IAAAA,cAAc,GAAGxd,MAAM,CAACM,WAAP,CAAmBkd,cAAnB,CAAjB;;EAEA,QAAID,WAAW,CAACthB,MAAZ,KAAuBuhB,cAAc,CAACvhB,MAA1C,EAAkD;EAChD,YAAM,IAAIoB,UAAJ,CACJ,4DADI,CAAN;EAGD;;EAED,SAAKwf,KAAL,GAAaU,WAAW,CAACxV,IAAZ,CAAiB,QAAjB,CAAb;EACA,SAAK+U,OAAL,GAAeS,WAAW,CAACpI,iBAAZ,CAA8B,QAA9B,EAAwC;EACrDpN,MAAAA,IAAI,EAAE,KAAK8U,KAD0C;EAErD/U,MAAAA,QAAQ,EAAE;EAF2C,KAAxC,CAAf;EAIA,SAAKiV,KAAL,GAAaS,cAAc,CAACzV,IAAf,CAAoB,QAApB,CAAb;EACA,SAAKiV,OAAL,GAAeQ,cAAc,CAACrI,iBAAf,CAAiC,QAAjC,EAA2C;EACxDpN,MAAAA,IAAI,EAAE,KAAKgV,KAD6C;EAExDjV,MAAAA,QAAQ,EAAE;EAF8C,KAA3C,CAAf;;EAKA,QAAI,KAAKc,KAAT,EAAgB;EACd2U,MAAAA,WAAW,GAAGA,WAAW,CACtB/R,KADW,GAEX0B,YAFW,CAEE,KAAK2P,KAFP,EAGXzP,YAHW,CAGE,KAAK0P,OAHP,CAAd;EAIAU,MAAAA,cAAc,GAAGA,cAAc,CAC5BhS,KADc,GAEd0B,YAFc,CAED,KAAK6P,KAFJ,EAGd3P,YAHc,CAGD,KAAK4P,OAHJ,CAAjB;EAID;;EAED,QAAI,KAAKK,aAAL,KAAuBnhB,SAA3B,EAAsC;EACpC,WAAKmhB,aAAL,GAAqB5e,IAAI,CAAC3B,GAAL,CAASygB,WAAW,CAACjf,IAAZ,GAAmB,CAA5B,EAA+Bif,WAAW,CAAChf,OAA3C,CAArB;EACD;;EAED,QAAIkf,EAAE,GAAGF,WAAW,CAACjf,IAArB;EACA,QAAIof,EAAE,GAAGH,WAAW,CAAChf,OAArB;EACA,QAAIof,EAAE,GAAGH,cAAc,CAAClf,IAAxB;EACA,QAAIsf,EAAE,GAAGJ,cAAc,CAACjf,OAAxB;EAEA,QAAIsf,OAAO,GAAGN,WAAW,CAAC/R,KAAZ,GAAoB1K,GAApB,CAAwByc,WAAxB,EAAqCjW,GAArC,EAAd,CAzCiC;;EA0CjC,QAAIwW,aAAa,GAAGN,cAAc,CAAChS,KAAf,GAAuB1K,GAAvB,CAA2B0c,cAA3B,EAA2ClW,GAA3C,EAApB;EAEA,QAAI8V,SAAS,GAAG,KAAKA,SAArB;EACA,QAAIrR,CAAC,GAAG,KAAKsR,aAAb;EACA,QAAIU,CAAC,GAAG/d,MAAM,CAACyJ,KAAP,CAAagU,EAAb,EAAiB1R,CAAjB,CAAR;EACA,QAAIiS,CAAC,GAAGhe,MAAM,CAACyJ,KAAP,CAAaiU,EAAb,EAAiB3R,CAAjB,CAAR;EACA,QAAI4M,CAAC,GAAG3Y,MAAM,CAACyJ,KAAP,CAAakU,EAAb,EAAiB5R,CAAjB,CAAR;EACA,QAAIkS,CAAC,GAAGje,MAAM,CAACyJ,KAAP,CAAamU,EAAb,EAAiB7R,CAAjB,CAAR;EACA,QAAImS,CAAC,GAAGle,MAAM,CAACyJ,KAAP,CAAasC,CAAb,EAAgBA,CAAhB,CAAR;EACA,QAAIoS,CAAC,GAAGH,CAAC,CAACxS,KAAF,EAAR;EACA,QAAIF,CAAC,GAAG,CAAR;EACA,QAAIoL,CAAJ;EACA,QAAIuF,CAAJ;EACA,QAAIjI,CAAJ;EACA,QAAI/H,CAAJ;;EAEA,WAAOmS,IAAA,CAAWZ,cAAX,IAA6BJ,SAA7B,IAA0C9R,CAAC,GAAGS,CAArD,EAAwD;EACtD,UAAIsS,UAAU,GAAGd,WAAW,CAACnJ,SAAZ,EAAjB;EACA,UAAIkK,UAAU,GAAGd,cAAc,CAACpJ,SAAf,EAAjB;EAEA,UAAImK,MAAM,GAAGC,cAAc,CAACjB,WAAW,CAAC/R,KAAZ,GAAoB1K,GAApB,CAAwByc,WAAxB,CAAD,CAA3B;EACA,UAAIkB,MAAM,GAAGD,cAAc,CAAChB,cAAc,CAAChS,KAAf,GAAuB1K,GAAvB,CAA2B0c,cAA3B,CAAD,CAA3B;EAEA,UAAIkB,EAAE,GAAGnB,WAAW,CAAC3Q,eAAZ,CAA4B2R,MAA5B,CAAT;EACA,UAAIxC,CAAC,GAAGyB,cAAc,CAAC5Q,eAAf,CAA+B6R,MAA/B,CAAR;EACA/H,MAAAA,CAAC,GAAG1W,MAAM,CAACyJ,KAAP,CAAagU,EAAb,EAAiB,CAAjB,CAAJ;;EAEA,aAAOW,IAAA,CAAWM,EAAE,CAAClT,KAAH,GAAWhL,GAAX,CAAekW,CAAf,CAAX,IAAgC0G,SAAvC,EAAkD;EAChDnB,QAAAA,CAAC,GAAGoC,UAAU,CAACzP,IAAX,CAAgBmN,CAAhB,CAAJ;EACAE,QAAAA,CAAC,CAAC7a,GAAF,CAAMgd,IAAA,CAAWnC,CAAX,CAAN;EACAvF,QAAAA,CAAC,GAAGgI,EAAJ;EACAA,QAAAA,EAAE,GAAGnB,WAAW,CAAC3O,IAAZ,CAAiBqN,CAAjB,CAAL;EACAjI,QAAAA,CAAC,GAAGsK,UAAU,CAAC1P,IAAX,CAAgB8P,EAAhB,CAAJ;EACA1K,QAAAA,CAAC,CAAC5S,GAAF,CAAMgd,IAAA,CAAWpK,CAAX,CAAN;EACA+H,QAAAA,CAAC,GAAGyB,cAAc,CAAC5O,IAAf,CAAoBoF,CAApB,CAAJ;EACD;;EAED0C,MAAAA,CAAC,GAAGgI,EAAJ;EACA,UAAIxf,GAAG,GAAGmf,UAAU,CAACzP,IAAX,CAAgB8H,CAAhB,CAAV;EACA,UAAIiI,GAAG,GAAGjI,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAV;EACAiN,MAAAA,CAAC,GAAG/M,GAAG,CAACkC,GAAJ,CAAQud,GAAR,CAAJ;EACA,UAAIC,KAAK,GAAGR,IAAA,CAAWnS,CAAX,CAAZ;EACAA,MAAAA,CAAC,CAAC7K,GAAF,CAAMwd,KAAN;EACAlI,MAAAA,CAAC,CAAC5V,GAAF,CAAM8d,KAAN;EACA3C,MAAAA,CAAC,CAACnb,GAAF,CAAM8d,KAAN;EAEA1f,MAAAA,GAAG,GAAG6c,CAAC,CAAC3H,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,CAAN;EACAiI,MAAAA,GAAG,GAAGjI,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAN;EACA,UAAIkU,CAAC,GAAGhU,GAAG,CAACkC,GAAJ,CAAQud,GAAR,EAAa3f,GAAb,CAAiB,CAAjB,EAAoB,CAApB,CAAR;EACAue,MAAAA,WAAW,CAAC/c,GAAZ,CAAgBkW,CAAC,CAAC9H,IAAF,CAAO3C,CAAC,CAACmI,SAAF,EAAP,CAAhB;EACAoJ,MAAAA,cAAc,CAAChd,GAAf,CAAmBkW,CAAC,CAAClL,KAAF,GAAU1K,GAAV,CAAcoS,CAAd,EAAiBtE,IAAjB,CAAsBoF,CAAC,CAACI,SAAF,EAAtB,CAAnB;EAEA2J,MAAAA,CAAC,CAAClR,SAAF,CAAYvB,CAAZ,EAAeoL,CAAf;EACAsH,MAAAA,CAAC,CAACnR,SAAF,CAAYvB,CAAZ,EAAeW,CAAf;EACA0M,MAAAA,CAAC,CAAC9L,SAAF,CAAYvB,CAAZ,EAAeyQ,CAAf;EACAkC,MAAAA,CAAC,CAACpR,SAAF,CAAYvB,CAAZ,EAAe0I,CAAf;EACAmK,MAAAA,CAAC,CAACtR,SAAF,CAAYvB,CAAZ,EAAe2Q,CAAf;EAEAiC,MAAAA,CAAC,CAAC7d,GAAF,CAAMiL,CAAN,EAASA,CAAT,EAAY4H,CAAZ;EACA5H,MAAAA,CAAC;EACF;;EAEDA,IAAAA,CAAC;EACDyS,IAAAA,CAAC,GAAGA,CAAC,CAACzK,SAAF,CAAY,CAAZ,EAAeyK,CAAC,CAACzf,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BgN,CAA9B,CAAJ;EACA0S,IAAAA,CAAC,GAAGA,CAAC,CAAC1K,SAAF,CAAY,CAAZ,EAAe0K,CAAC,CAAC1f,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BgN,CAA9B,CAAJ;EACAqN,IAAAA,CAAC,GAAGA,CAAC,CAACrF,SAAF,CAAY,CAAZ,EAAeqF,CAAC,CAACra,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BgN,CAA9B,CAAJ;EACA2S,IAAAA,CAAC,GAAGA,CAAC,CAAC3K,SAAF,CAAY,CAAZ,EAAe2K,CAAC,CAAC3f,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BgN,CAA9B,CAAJ;EACA6S,IAAAA,CAAC,GAAGA,CAAC,CAAC7K,SAAF,CAAY,CAAZ,EAAe6K,CAAC,CAAC7f,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BgN,CAA9B,CAAJ;EACA4S,IAAAA,CAAC,GAAGA,CAAC,CAAC5K,SAAF,CAAY,CAAZ,EAAehI,CAAf,EAAkB,CAAlB,EAAqBA,CAArB,CAAJ;EAEA,SAAKuT,OAAL,GAAef,aAAf;EACA,SAAKgB,CAAL,GAASvB,WAAT;EACA,SAAKwB,CAAL,GAASvB,cAAT;EACA,SAAKO,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKrF,CAAL,GAASA,CAAT;EACA,SAAKsF,CAAL,GAASA,CAAT;EACA,SAAKE,CAAL,GAASA,CAAT;EACA,SAAKD,CAAL,GAASA,CAAT;EACA,SAAKjB,GAAL,GAAWe,CAAC,CAACpP,IAAF,CAAOsP,CAAP,EAAUtP,IAAV,CAAeqP,CAAC,CAAC7J,SAAF,EAAf,CAAX;EACA,SAAK8I,GAAL,GAAWxG,CAAC,CACTtC,SADQ,GAERxF,IAFQ,CAEH8H,CAFG,EAGR9H,IAHQ,CAGH3C,CAAC,CAACmI,SAAF,GAAcxF,IAAd,CAAmB3C,CAAnB,CAHG,EAIR7K,GAJQ,CAIJyc,OAJI,EAKR7e,GALQ,CAKJ,CALI,EAKD,CALC,CAAX;EAMD;EAED;EACF;EACA;EACA;EACA;;;EACEggB,EAAAA,OAAO,CAACC,OAAD,EAAU;EACf,QAAI/H,CAAC,GAAGlX,MAAM,CAACM,WAAP,CAAmB2e,OAAnB,CAAR;;EACA,QAAI,KAAKrW,KAAT,EAAgB;EACdsO,MAAAA,CAAC,GAAGA,CAAC,CAAChK,YAAF,CAAe,KAAK2P,KAApB,EAA2BzP,YAA3B,CAAwC,KAAK0P,OAA7C,CAAJ;EACD;;EACD,QAAI1C,CAAC,GAAGlD,CAAC,CAACtI,IAAF,CAAO,KAAKqO,GAAZ,CAAR;EACA7C,IAAAA,CAAC,GAAGA,CAAC,CAACjN,YAAF,CAAe,KAAK6P,OAApB,EAA6B/P,YAA7B,CAA0C,KAAK8P,KAA/C,CAAJ;EACA,WAAO3C,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACE8E,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKhC,GAAZ;EACD;EAED;EACF;EACA;EACA;;;EACEtS,EAAAA,MAAM,GAAG;EACP,WAAO;EACLxM,MAAAA,IAAI,EAAE,KADD;EAEL8e,MAAAA,GAAG,EAAE,KAAKA,GAFL;EAGLL,MAAAA,KAAK,EAAE,KAAKA,KAHP;EAILC,MAAAA,OAAO,EAAE,KAAKA,OAJT;EAKLC,MAAAA,KAAK,EAAE,KAAKA,KALP;EAMLC,MAAAA,OAAO,EAAE,KAAKA,OANT;EAOLC,MAAAA,GAAG,EAAE,KAAKA,GAPL;EAQLG,MAAAA,SAAS,EAAE,KAAKA,SARX;EASLxU,MAAAA,KAAK,EAAE,KAAKA;EATP,KAAP;EAWD;EAED;EACF;EACA;EACA;EACA;;;EACa,SAAJuW,IAAI,CAACvC,KAAD,EAAQ;EACjB,QAAIA,KAAK,CAACxe,IAAN,KAAe,KAAnB,EAA0B;EACxB,YAAM,IAAIf,UAAJ,CAAgB,kBAAiBuf,KAAK,CAACxe,IAAK,EAA5C,CAAN;EACD;;EACD,WAAO,IAAIue,GAAJ,CAAQ,IAAR,EAAcC,KAAd,CAAP;EACD;;EA/Nc;EAkOjB;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAAS4B,cAAT,CAAwBtU,IAAxB,EAA8B;EAC5B,SAAOlK,MAAM,CAACuJ,SAAP,CAAiBW,IAAI,CAAC5C,GAAL,CAAS,QAAT,CAAjB,EAAqCsG,QAArC,GAAgD,CAAhD,CAAP;EACD;;EC9OD;EACA;EACA;;EACO,MAAMwR,KAAN,CAAY;EACjB;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEjhB,EAAAA,WAAW,CAACpC,OAAD,EAAU6gB,KAAV,EAAiB;EAC1B,QAAI7gB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAKwhB,WAAL,GAAmB,IAAIvd,MAAJ,CAAW4c,KAAK,CAACW,WAAjB,CAAnB;EACA,WAAK8B,WAAL,GAAmB,IAAIrf,MAAJ,CAAW4c,KAAK,CAACyC,WAAjB,CAAnB;EACA,WAAKC,QAAL,GAAgB,IAAItf,MAAJ,CAAW4c,KAAK,CAAC0C,QAAjB,CAAhB;EACA,WAAKC,SAAL,GAAiB,IAAIvf,MAAJ,CAAW4c,KAAK,CAAC2C,SAAjB,CAAjB;EACA,WAAKC,YAAL,GAAoB/C,kBAAkB,CAACG,KAAK,CAAC4C,YAAP,EAAqB,KAArB,CAAtC;EACA,WAAKC,eAAL,GAAuBhD,kBAAkB,CAACG,KAAK,CAAC6C,eAAP,EAAwB,KAAxB,CAAzC;EACA,WAAKC,UAAL,GAAkB9C,KAAK,CAAC8C,UAAxB;EACA,WAAKC,aAAL,GAAqBlD,kBAAkB,CAACG,KAAK,CAAC+C,aAAP,EAAsB,KAAtB,CAAvC;EACA,WAAKC,MAAL,GAAcnD,kBAAkB,CAACG,KAAK,CAACgD,MAAP,EAAe,KAAf,CAAhC;EACA,WAAKC,iBAAL,GAAyBpD,kBAAkB,CACzCG,KAAK,CAACiD,iBADmC,EAEzC,KAFyC,CAA3C;EAIA,WAAKC,OAAL,GAAerD,kBAAkB,CAACG,KAAK,CAACkD,OAAP,EAAgB,IAAhB,CAAjC;EACA,WAAKC,MAAL,GAAcnD,KAAK,CAACmD,MAApB;EACA,WAAKC,cAAL,GAAsBpD,KAAK,CAACoD,cAA5B;EACA,WAAKC,cAAL,GAAsBrD,KAAK,CAACqD,cAA5B;EACD,KAlBD,MAkBO;EACL,UAAIlkB,OAAO,CAACmkB,oBAAR,KAAiChkB,SAArC,EAAgD;EAC9C,cAAM,IAAImB,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,UAAItB,OAAO,CAACokB,oBAAR,KAAiCjkB,SAArC,EAAgD;EAC9C,cAAM,IAAImB,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,UAAItB,OAAO,CAACgkB,MAAR,KAAmB7jB,SAAvB,EAAkC;EAChC,cAAM,IAAImB,UAAJ,CAAe,kBAAf,CAAN;EACD;;EAED,WAAK2iB,cAAL,GAAsBjkB,OAAO,CAACokB,oBAA9B;EACA,WAAKF,cAAL,GAAsBlkB,OAAO,CAACmkB,oBAA9B;EACA,WAAKH,MAAL,GAAchkB,OAAO,CAACgkB,MAAtB;EACD;EACF;EAED;EACF;EACA;EACA;EACA;;;EACEzC,EAAAA,KAAK,CAACC,WAAD,EAAcC,cAAd,EAA8B;EACjCD,IAAAA,WAAW,GAAGvd,MAAM,CAACM,WAAP,CAAmBid,WAAnB,CAAd;EACAC,IAAAA,cAAc,GAAGxd,MAAM,CAACM,WAAP,CAAmBkd,cAAnB,CAAjB,CAFiC;;EAKjC,SAAKD,WAAL,GAAmBA,WAAW,CAAC/R,KAAZ,EAAnB;EAEA,QAAIsU,OAAO,GAAG,KAAKC,MAAL,CAAYK,OAAZ,CAAoB7C,WAApB,CAAd;EAEA,QAAI8C,QAAQ,GAAGrgB,MAAM,CAACgK,GAAP,CAAW8V,OAAO,CAACxhB,IAAnB,EAAyBwhB,OAAO,CAACxhB,IAAjC,EAAuC,CAAvC,CAAf;EACA,QAAIoO,IAAI,GAAGoT,OAAX;EACAA,IAAAA,OAAO,GAAG,IAAI5iB,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAV;;EACA,SAAK,IAAInjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKmjB,cAAL,GAAsB,CAA1C,EAA6CnjB,CAAC,EAA9C,EAAkD;EAChDijB,MAAAA,OAAO,CAACjjB,CAAD,CAAP,GAAa,IAAIK,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAb;EACD;;EACDF,IAAAA,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,IAAgBpT,IAAhB;EAEA,QAAI/N,MAAM,GAAG,IAAIqZ,0BAAJ,CACXwF,cAAc,CAACpJ,SAAf,GAA2BxF,IAA3B,CAAgCkR,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,CAAhC,EAA+ClR,IAA/C,CAAoD4O,cAApD,CADW,EAEX;EACEvF,MAAAA,0BAA0B,EAAE,IAD9B;EAEEC,MAAAA,2BAA2B,EAAE;EAF/B,KAFW,CAAb;EAOA,QAAImH,WAAW,GAAG1gB,MAAM,CAAC2c,mBAAzB;EACA,QAAIgF,KAAK,GAAG3hB,MAAM,CAAC4c,cAAnB;EAEA8D,IAAAA,WAAW,GAAGA,WAAW,CAAC/L,SAAZ,CACZ,CADY,EAEZ+L,WAAW,CAAC/gB,IAAZ,GAAmB,CAFP,EAGZ,CAHY,EAIZ,KAAK2hB,cAAL,GAAsB,CAJV,CAAd;EAMAK,IAAAA,KAAK,GAAGA,KAAK,CAAChN,SAAN,CACN,CADM,EAEN,KAAK2M,cAAL,GAAsB,CAFhB,EAGN,CAHM,EAIN,KAAKA,cAAL,GAAsB,CAJhB,CAAR;EAOA,QAAIV,SAAS,GAAG/B,cAAc,CAAC5O,IAAf,CAAoByQ,WAApB,CAAhB;EAEA,QAAIG,YAAY,GAAG,IAAItiB,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAnB;EACA,QAAIH,iBAAiB,GAAG,IAAI3iB,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAxB;EACA,QAAIL,aAAa,GAAG,IAAIziB,KAAJ,CAAU,KAAK8iB,cAAf,CAApB;EACA,QAAIP,eAAe,GAAG,IAAIviB,KAAJ,CAAU,KAAK8iB,cAAf,CAAtB;EACA,QAAIN,UAAU,GAAG,IAAIxiB,KAAJ,CAAU,KAAK8iB,cAAf,CAAjB;EACA,QAAIO,cAAc,GAAG,IAAIrjB,KAAJ,CAAU,KAAK8iB,cAAf,CAArB;EAEA,QAAIV,QAAQ,GAAGtf,MAAM,CAACkF,GAAP,CAAWob,KAAX,EAAkB,CAAC,GAAnB,CAAf,CAjDiC;;EAoDjC,aAASE,cAAT,CAAwB3jB,CAAxB,EAA2BgC,CAA3B,EAA8B;EAC5B,UAAI,KAAKG,GAAL,CAASnC,CAAT,EAAYgC,CAAZ,MAAmB4hB,QAAvB,EAAiC;EAC/B,aAAKpgB,GAAL,CAASxD,CAAT,EAAYgC,CAAZ,EAAe,CAAf;EACD;EACF;;EAEDygB,IAAAA,QAAQ,CAAC9U,KAAT,CAAegW,cAAf;;EAEA,SAAK,IAAI3jB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKmjB,cAAzB,EAAyC,EAAEnjB,CAA3C,EAA8C;EAC5C2iB,MAAAA,YAAY,CAAC3iB,CAAD,CAAZ,GAAkBijB,OAAO,CAAC,CAAD,CAAP,CAAWjjB,CAAX,EACfuX,SADe,GAEfxF,IAFe,CAEV2Q,SAFU,EAGf3Q,IAHe,CAGV0Q,QAHU,CAAlB;EAKA,UAAIoB,QAAQ,GAAGlB,YAAY,CAAC3iB,CAAD,CAAZ,CAAgBuX,SAAhB,EAAf;EACAyL,MAAAA,iBAAiB,CAAChjB,CAAD,CAAjB,GAAuBie,OAAO,CAAC4F,QAAQ,CAAC9R,IAAT,CAAc4Q,YAAY,CAAC3iB,CAAD,CAA1B,CAAD,CAAP,CACpB+R,IADoB,CACf8R,QADe,EAEpB9R,IAFoB,CAEf2Q,SAFe,CAAvB;EAIA5gB,MAAAA,MAAM,GAAG,IAAIqZ,0BAAJ,CACP0I,QAAQ,CAAC9R,IAAT,CACE5O,MAAM,CAACQ,GAAP,CAAWsf,OAAO,CAACjjB,CAAD,CAAP,CAAWA,CAAX,CAAX,EAA0B2iB,YAAY,CAAC3iB,CAAD,CAAZ,CAAgB+R,IAAhB,CAAqB8R,QAArB,CAA1B,CADF,EAEE9R,IAFF,CAEO4Q,YAAY,CAAC3iB,CAAD,CAFnB,CADO,EAIP;EACEob,QAAAA,0BAA0B,EAAE,IAD9B;EAEEC,QAAAA,2BAA2B,EAAE;EAF/B,OAJO,CAAT;EASA,UAAIyI,MAAM,GAAGhiB,MAAM,CAAC2c,mBAApB;EACA,UAAIsF,MAAM,GAAGjiB,MAAM,CAAC4c,cAApB;EAEAkE,MAAAA,eAAe,CAAC5iB,CAAD,CAAf,GAAqB8jB,MAAM,CAACrN,SAAP,CAAiB,CAAjB,EAAoBqN,MAAM,CAACriB,IAAP,GAAc,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,CAArB;EACAohB,MAAAA,UAAU,CAAC7iB,CAAD,CAAV,GAAgB+jB,MAAM,CAAC5hB,GAAP,CAAW,CAAX,EAAc,CAAd,CAAhB;EAEA2gB,MAAAA,aAAa,CAAC9iB,CAAD,CAAb,GAAmBmD,MAAM,CAACQ,GAAP,CACjBsf,OAAO,CAACjjB,CAAD,CAAP,CAAWA,CAAX,CADiB,EAEjB2iB,YAAY,CAAC3iB,CAAD,CAAZ,CAAgB+R,IAAhB,CAAqB8R,QAArB,CAFiB,EAIhB9R,IAJgB,CAIX4Q,YAAY,CAAC3iB,CAAD,CAJD,EAKhB+R,IALgB,CAKX6Q,eAAe,CAAC5iB,CAAD,CALJ,EAMhBiE,GANgB,CAMZrC,IAAI,CAACyG,GAAL,CAASwa,UAAU,CAAC7iB,CAAD,CAAnB,EAAwB,CAAC,GAAzB,CANY,CAAnB;EAQA,UAAIgkB,QAAQ,GAAGlB,aAAa,CAAC9iB,CAAD,CAAb,CAAiBuX,SAAjB,EAAf;EACAmM,MAAAA,cAAc,CAAC1jB,CAAD,CAAd,GAAoBmD,MAAM,CAAC8E,IAAP,CAAY+b,QAAQ,CAACjS,IAAT,CAAc+Q,aAAa,CAAC9iB,CAAD,CAA3B,CAAZ,CAApB;EAEA8iB,MAAAA,aAAa,CAAC9iB,CAAD,CAAb,GAAmB8iB,aAAa,CAAC9iB,CAAD,CAAb,CAAiBuQ,YAAjB,CAA8BmT,cAAc,CAAC1jB,CAAD,CAA5C,CAAnB;EAEA,UAAIikB,GAAG,GAAG9gB,MAAM,CAACQ,GAAP,CACR6f,QADQ,EAERV,aAAa,CAAC9iB,CAAD,CAAb,CAAiB+R,IAAjB,CAAsB+Q,aAAa,CAAC9iB,CAAD,CAAb,CAAiBuX,SAAjB,EAAtB,CAFQ,CAAV;EAKA0L,MAAAA,OAAO,CAAC,CAAD,CAAP,CAAWjjB,CAAC,GAAG,CAAf,IAAoBijB,OAAO,CAAC,CAAD,CAAP,CAAWjjB,CAAX,EAAc+R,IAAd,CAAmBkS,GAAnB,CAApB;EACAhB,MAAAA,OAAO,CAACjjB,CAAC,GAAG,CAAL,CAAP,CAAeA,CAAC,GAAG,CAAnB,IAAwBikB,GAAG,CAAClS,IAAJ,CAASkR,OAAO,CAACjjB,CAAD,CAAP,CAAWA,CAAX,CAAT,EAAwB+R,IAAxB,CAA6BkS,GAA7B,CAAxB;EACD;;EAED,QAAIC,YAAY,GAAIvB,YAAY,CAAC,KAAKQ,cAAN,CAAZ,GAAoCF,OAAO,CAAC,CAAD,CAAP,CACtD,KAAKE,cADiD,EAGrD5L,SAHqD,GAIrDxF,IAJqD,CAIhD2Q,SAJgD,EAKrD3Q,IALqD,CAKhD0Q,QALgD,CAAxD;EAOA,QAAI0B,WAAW,GAAGD,YAAY,CAAC3M,SAAb,EAAlB;EACAyL,IAAAA,iBAAiB,CAAC,KAAKG,cAAN,CAAjB,GAAyClF,OAAO,CAC9CkG,WAAW,CAACpS,IAAZ,CAAiBmS,YAAjB,CAD8C,CAAP,CAGtCnS,IAHsC,CAGjCoS,WAHiC,EAItCpS,IAJsC,CAIjC2Q,SAJiC,CAAzC;EAMA,SAAKF,WAAL,GAAmBA,WAAnB;EACA,SAAKC,QAAL,GAAgBA,QAAhB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACA,SAAKC,YAAL,GAAoBA,YAApB;EACA,SAAKC,eAAL,GAAuBA,eAAvB;EACA,SAAKC,UAAL,GAAkBA,UAAlB;EACA,SAAKC,aAAL,GAAqBA,aAArB;EACA,SAAKC,MAAL,GAAcW,cAAd;EACA,SAAKV,iBAAL,GAAyBA,iBAAzB;EACA,SAAKC,OAAL,GAAeA,OAAf;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEd,EAAAA,OAAO,CAACiC,SAAD,EAAY;EACjB,QAAIC,UAAU,GAAG,KAAKnB,MAAL,CAAYK,OAAZ,CAAoBa,SAApB,EAA+B,KAAK1D,WAApC,CAAjB;EAEA,QAAI7Q,IAAI,GAAGwU,UAAX;EACAA,IAAAA,UAAU,GAAG,IAAIhkB,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAb;;EACA,SAAK,IAAInjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKmjB,cAAL,GAAsB,CAA1C,EAA6CnjB,CAAC,EAA9C,EAAkD;EAChDqkB,MAAAA,UAAU,CAACrkB,CAAD,CAAV,GAAgB,IAAIK,KAAJ,CAAU,KAAK8iB,cAAL,GAAsB,CAAhC,CAAhB;EACD;;EACDkB,IAAAA,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,IAAmBxU,IAAnB;EAEA,QAAIyU,gBAAgB,GAAG,IAAIjkB,KAAJ,CAAU,KAAK8iB,cAAf,CAAvB;EACA,QAAIR,YAAY,GAAG,IAAItiB,KAAJ,CAAU,KAAK8iB,cAAf,CAAnB;EAEA,QAAInjB,CAAJ;;EACA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAKmjB,cAArB,EAAqC,EAAEnjB,CAAvC,EAA0C;EACxC2iB,MAAAA,YAAY,CAAC3iB,CAAD,CAAZ,GAAkBqkB,UAAU,CAACrkB,CAAD,CAAV,CAAc,CAAd,EACf+R,IADe,CACV,KAAK2Q,SADK,EAEf3Q,IAFe,CAEV,KAAK0Q,QAFK,CAAlB;EAIA6B,MAAAA,gBAAgB,CAACtkB,CAAD,CAAhB,GAAsBmD,MAAM,CAACQ,GAAP,CACpB0gB,UAAU,CAACrkB,CAAD,CAAV,CAAcA,CAAd,CADoB,EAEpB2iB,YAAY,CAAC3iB,CAAD,CAAZ,CAAgB+R,IAAhB,CAAqB,KAAK4Q,YAAL,CAAkB3iB,CAAlB,EAAqBuX,SAArB,EAArB,CAFoB,EAInBxF,IAJmB,CAId,KAAK4Q,YAAL,CAAkB3iB,CAAlB,CAJc,EAKnB+R,IALmB,CAKd,KAAK6Q,eAAL,CAAqB5iB,CAArB,CALc,EAMnBiE,GANmB,CAMfrC,IAAI,CAACyG,GAAL,CAAS,KAAKwa,UAAL,CAAgB7iB,CAAhB,CAAT,EAA6B,CAAC,GAA9B,CANe,CAAtB;EAQAskB,MAAAA,gBAAgB,CAACtkB,CAAD,CAAhB,GAAsBskB,gBAAgB,CAACtkB,CAAD,CAAhB,CAAoBuQ,YAApB,CAAiC,KAAKwS,MAAL,CAAY/iB,CAAZ,CAAjC,CAAtB;EAEA,UAAIukB,aAAa,GAAG,KAAKzB,aAAL,CAAmB9iB,CAAnB,EAAsBuX,SAAtB,EAApB;EACA8M,MAAAA,UAAU,CAACrkB,CAAC,GAAG,CAAL,CAAV,CAAkB,CAAlB,IAAuBmD,MAAM,CAACQ,GAAP,CACrB0gB,UAAU,CAACrkB,CAAD,CAAV,CAAc,CAAd,CADqB,EAErBskB,gBAAgB,CAACtkB,CAAD,CAAhB,CACG+R,IADH,CACQwS,aADR,EAEGxS,IAFH,CAEQ,KAAKkR,OAAL,CAAa,CAAb,EAAgBjjB,CAAhB,EAAmBuX,SAAnB,EAFR,CAFqB,CAAvB;EAOA,UAAIiN,EAAE,GAAGrhB,MAAM,CAACQ,GAAP,CACP0gB,UAAU,CAACrkB,CAAD,CAAV,CAAc,CAAd,CADO,EAEPqkB,UAAU,CAACrkB,CAAD,CAAV,CAAcA,CAAd,EAAiB+R,IAAjB,CAAsB,KAAK+Q,aAAL,CAAmB9iB,CAAnB,CAAtB,EAA6C+R,IAA7C,CAAkDwS,aAAlD,CAFO,CAAT;EAIA,UAAIE,EAAE,GAAGH,gBAAgB,CAACtkB,CAAD,CAAhB,CAAoB+R,IAApB,CAAyBwS,aAAzB,EAAwCxS,IAAxC,CAA6C,KAAKkR,OAAL,CAAajjB,CAAb,EAAgBA,CAAhB,CAA7C,CAAT;EACA,UAAI0kB,EAAE,GAAGD,EAAE,CAAC1S,IAAH,CAAQ,KAAK+Q,aAAL,CAAmB9iB,CAAnB,CAAR,EAA+B+R,IAA/B,CAAoCwS,aAApC,CAAT;EAEAF,MAAAA,UAAU,CAACrkB,CAAC,GAAG,CAAL,CAAV,CAAkBA,CAAC,GAAG,CAAtB,IAA2BwkB,EAAE,CAAC7gB,GAAH,CAAO8gB,EAAP,EAAWrhB,GAAX,CAAeshB,EAAf,CAA3B;EACD;;EAED/B,IAAAA,YAAY,CAAC3iB,CAAD,CAAZ,GAAkBqkB,UAAU,CAACrkB,CAAD,CAAV,CAAc,CAAd,EAAiB+R,IAAjB,CAAsB,KAAK2Q,SAA3B,EAAsC3Q,IAAtC,CAA2C,KAAK0Q,QAAhD,CAAlB;EACA,QAAIkC,UAAU,GAAGhC,YAAY,CAAC3iB,CAAD,CAAZ,CACd+R,IADc,CACT,KAAKiR,iBAAL,CAAuBhjB,CAAvB,CADS,EAEd+R,IAFc,CAET,KAAKyQ,WAAL,CAAiBjL,SAAjB,EAFS,CAAjB;EAIA,WAAO;EACLoN,MAAAA,UAAU,EAAEA,UADP;EAELhC,MAAAA,YAAY,EAAEA,YAFT;EAGLiC,MAAAA,gBAAgB,EAAEN;EAHb,KAAP;EAKD;EAED;EACF;EACA;EACA;;;EACEvW,EAAAA,MAAM,GAAG;EACP,WAAO;EACLxM,MAAAA,IAAI,EAAE,QADD;EAELihB,MAAAA,WAAW,EAAE,KAAKA,WAFb;EAGLC,MAAAA,QAAQ,EAAE,KAAKA,QAHV;EAILC,MAAAA,SAAS,EAAE,KAAKA,SAJX;EAKLC,MAAAA,YAAY,EAAE,KAAKA,YALd;EAMLC,MAAAA,eAAe,EAAE,KAAKA,eANjB;EAOLC,MAAAA,UAAU,EAAE,KAAKA,UAPZ;EAQLC,MAAAA,aAAa,EAAE,KAAKA,aARf;EASLC,MAAAA,MAAM,EAAE,KAAKA,MATR;EAULC,MAAAA,iBAAiB,EAAE,KAAKA,iBAVnB;EAWLC,MAAAA,OAAO,EAAE,KAAKA,OAXT;EAYLvC,MAAAA,WAAW,EAAE,KAAKA,WAZb;EAaLyC,MAAAA,cAAc,EAAE,KAAKA,cAbhB;EAcLC,MAAAA,cAAc,EAAE,KAAKA;EAdhB,KAAP;EAgBD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACa,SAAJd,IAAI,CAACvC,KAAD,EAAQmD,MAAR,EAAgB;EACzB,QAAInD,KAAK,CAACxe,IAAN,KAAe,QAAnB,EAA6B;EAC3B,YAAM,IAAIf,UAAJ,CAAgB,kBAAiBuf,KAAK,CAACxe,IAAK,EAA5C,CAAN;EACD;;EAED,QAAI,CAAC2hB,MAAL,EAAa;EACX,YAAM,IAAI1iB,UAAJ,CAAe,0CAAf,CAAN;EACD;;EAEDuf,IAAAA,KAAK,CAACmD,MAAN,GAAeA,MAAf;EACA,WAAO,IAAIX,KAAJ,CAAU,IAAV,EAAgBxC,KAAhB,CAAP;EACD;;EAhSgB;;ECPnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACe,MAAM8E,eAAN,CAAsB;EACnCvjB,EAAAA,WAAW,CAACJ,MAAD,EAAS4jB,MAAT,EAAiB;EAC1B,QAAI5jB,MAAM,CAAC9B,MAAP,KAAkB8B,MAAM,CAAC,CAAD,CAAN,CAAU9B,MAAhC,EAAwC;EACtC,YAAM,IAAIU,KAAJ,CAAU,iCAAV,CAAN;EACD;;EACD,QAAIglB,MAAM,CAAC1lB,MAAP,KAAkB8B,MAAM,CAAC9B,MAA7B,EAAqC;EACnC,YAAM,IAAIU,KAAJ,CACJ,yDADI,CAAN;EAGD;;EACD,SAAKglB,MAAL,GAAcA,MAAd;EACA,SAAK5jB,MAAL,GAAcA,MAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACmB,SAAV6jB,UAAU,CAACC,MAAD,EAASC,SAAT,EAAoB/lB,OAAO,GAAG,EAA9B,EAAkC;EACjD,QAAI+lB,SAAS,CAAC7lB,MAAV,KAAqB4lB,MAAM,CAAC5lB,MAAhC,EAAwC;EACtC,YAAM,IAAIU,KAAJ,CAAU,gDAAV,CAAN;EACD;;EACD,QAAIolB,cAAJ;;EACA,QAAIhmB,OAAO,CAAC4lB,MAAZ,EAAoB;EAClBI,MAAAA,cAAc,GAAG,IAAIC,GAAJ,CAAQjmB,OAAO,CAAC4lB,MAAhB,CAAjB;EACD,KAFD,MAEO;EACLI,MAAAA,cAAc,GAAG,IAAIC,GAAJ,CAAQ,CAAC,GAAGH,MAAJ,EAAY,GAAGC,SAAf,CAAR,CAAjB;EACD;;EACDC,IAAAA,cAAc,GAAG7kB,KAAK,CAACsJ,IAAN,CAAWub,cAAX,CAAjB;;EACA,QAAIhmB,OAAO,CAACyY,IAAZ,EAAkB;EAChBuN,MAAAA,cAAc,CAACvN,IAAf,CAAoBzY,OAAO,CAACyY,IAA5B;EACD,KAbgD;;;EAgBjD,UAAMzW,MAAM,GAAGb,KAAK,CAACsJ,IAAN,CAAW;EAAEvK,MAAAA,MAAM,EAAE8lB,cAAc,CAAC9lB;EAAzB,KAAX,CAAf;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAAC9B,MAA3B,EAAmCY,CAAC,EAApC,EAAwC;EACtCkB,MAAAA,MAAM,CAAClB,CAAD,CAAN,GAAY,IAAIK,KAAJ,CAAUa,MAAM,CAAC9B,MAAjB,CAAZ;EACA8B,MAAAA,MAAM,CAAClB,CAAD,CAAN,CAAU8M,IAAV,CAAe,CAAf;EACD;;EAED,SAAK,IAAI9M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGilB,SAAS,CAAC7lB,MAA9B,EAAsCY,CAAC,EAAvC,EAA2C;EACzC,YAAMolB,SAAS,GAAGF,cAAc,CAACpiB,OAAf,CAAuBkiB,MAAM,CAAChlB,CAAD,CAA7B,CAAlB;EACA,YAAMqlB,YAAY,GAAGH,cAAc,CAACpiB,OAAf,CAAuBmiB,SAAS,CAACjlB,CAAD,CAAhC,CAArB;;EACA,UAAIolB,SAAS,IAAI,CAAb,IAAkBC,YAAY,IAAI,CAAtC,EAAyC;EACvCnkB,QAAAA,MAAM,CAACkkB,SAAD,CAAN,CAAkBC,YAAlB;EACD;EACF;;EAED,WAAO,IAAIR,eAAJ,CAAoB3jB,MAApB,EAA4BgkB,cAA5B,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEI,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKpkB,MAAZ;EACD;;EAEDqkB,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKT,MAAZ;EACD;EAED;EACF;EACA;EACA;;;EACEU,EAAAA,aAAa,GAAG;EACd,QAAIP,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAIjlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKd,MAAL,CAAY9B,MAAhC,EAAwC4C,CAAC,EAAzC,EAA6C;EAC3CijB,QAAAA,SAAS,IAAI,KAAK/jB,MAAL,CAAYlB,CAAZ,EAAegC,CAAf,CAAb;EACD;EACF;;EACD,WAAOijB,SAAP;EACD;EAED;EACF;EACA;EACA;;;EACEQ,EAAAA,YAAY,GAAG;EACb,QAAIrL,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIpa,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3Coa,MAAAA,KAAK,IAAI,KAAKlZ,MAAL,CAAYlB,CAAZ,EAAeA,CAAf,CAAT;EACD;;EACD,WAAOoa,KAAP;EACD;EAED;EACF;EACA;EACA;;;EACEsL,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKF,aAAL,KAAuB,KAAKC,YAAL,EAA9B;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEE,EAAAA,oBAAoB,CAACC,KAAD,EAAQ;EAC1B,UAAMld,KAAK,GAAG,KAAKmd,QAAL,CAAcD,KAAd,CAAd;EACA,WAAO,KAAK1kB,MAAL,CAAYwH,KAAZ,EAAmBA,KAAnB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEod,EAAAA,oBAAoB,CAACF,KAAD,EAAQ;EAC1B,UAAMld,KAAK,GAAG,KAAKmd,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIxL,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIpa,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKd,MAAL,CAAY9B,MAAhC,EAAwC4C,CAAC,EAAzC,EAA6C;EAC3C,YAAIhC,CAAC,KAAK0I,KAAN,IAAe1G,CAAC,KAAK0G,KAAzB,EAAgC;EAC9B0R,UAAAA,KAAK,IAAI,KAAKlZ,MAAL,CAAYlB,CAAZ,EAAegC,CAAf,CAAT;EACD;EACF;EACF;;EACD,WAAOoY,KAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE2L,EAAAA,qBAAqB,CAACH,KAAD,EAAQ;EAC3B,UAAMld,KAAK,GAAG,KAAKmd,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIxL,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIpa,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,UAAIA,CAAC,KAAK0I,KAAV,EAAiB;EACf0R,QAAAA,KAAK,IAAI,KAAKlZ,MAAL,CAAYlB,CAAZ,EAAe0I,KAAf,CAAT;EACD;EACF;;EACD,WAAO0R,KAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE4L,EAAAA,qBAAqB,CAACJ,KAAD,EAAQ;EAC3B,UAAMld,KAAK,GAAG,KAAKmd,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIxL,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIpa,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,UAAIA,CAAC,KAAK0I,KAAV,EAAiB;EACf0R,QAAAA,KAAK,IAAI,KAAKlZ,MAAL,CAAYwH,KAAZ,EAAmB1I,CAAnB,CAAT;EACD;EACF;;EACD,WAAOoa,KAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE6L,EAAAA,gBAAgB,CAACL,KAAD,EAAQ;EACtB,WAAO,KAAKD,oBAAL,CAA0BC,KAA1B,IAAmC,KAAKI,qBAAL,CAA2BJ,KAA3B,CAA1C;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEM,EAAAA,gBAAgB,CAACN,KAAD,EAAQ;EACtB,WAAO,KAAKE,oBAAL,CAA0BF,KAA1B,IAAmC,KAAKG,qBAAL,CAA2BH,KAA3B,CAA1C;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,QAAQ,CAACD,KAAD,EAAQ;EACd,UAAMld,KAAK,GAAG,KAAKoc,MAAL,CAAYhiB,OAAZ,CAAoB8iB,KAApB,CAAd;EACA,QAAIld,KAAK,KAAK,CAAC,CAAf,EAAkB,MAAM,IAAI5I,KAAJ,CAAU,0BAAV,CAAN;EAClB,WAAO4I,KAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEyd,EAAAA,mBAAmB,CAACP,KAAD,EAAQ;EACzB,WAAO,KAAKD,oBAAL,CAA0BC,KAA1B,IAAmC,KAAKK,gBAAL,CAAsBL,KAAtB,CAA1C;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEQ,EAAAA,mBAAmB,CAACR,KAAD,EAAQ;EACzB,WAAO,KAAKE,oBAAL,CAA0BF,KAA1B,IAAmC,KAAKM,gBAAL,CAAsBN,KAAtB,CAA1C;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACES,EAAAA,0BAA0B,CAACT,KAAD,EAAQ;EAChC,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,WAAOU,EAAE,IAAIA,EAAE,GAAG,KAAKP,qBAAL,CAA2BH,KAA3B,CAAT,CAAT;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEW,EAAAA,0BAA0B,CAACX,KAAD,EAAQ;EAChC,UAAMY,EAAE,GAAG,KAAKV,oBAAL,CAA0BF,KAA1B,CAAX;EACA,WAAOY,EAAE,IAAIA,EAAE,GAAG,KAAKR,qBAAL,CAA2BJ,KAA3B,CAAT,CAAT;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEa,EAAAA,oBAAoB,CAACb,KAAD,EAAQ;EAC1B,WAAO,IAAI,KAAKO,mBAAL,CAAyBP,KAAzB,CAAX;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEc,EAAAA,oBAAoB,CAACd,KAAD,EAAQ;EAC1B,WAAO,IAAI,KAAKQ,mBAAL,CAAyBR,KAAzB,CAAX;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEe,EAAAA,qBAAqB,CAACf,KAAD,EAAQ;EAC3B,UAAMgB,EAAE,GAAG,KAAKb,qBAAL,CAA2BH,KAA3B,CAAX;EACA,WAAOgB,EAAE,IAAIA,EAAE,GAAG,KAAKjB,oBAAL,CAA0BC,KAA1B,CAAT,CAAT;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEiB,EAAAA,oBAAoB,CAACjB,KAAD,EAAQ;EAC1B,UAAMkB,EAAE,GAAG,KAAKd,qBAAL,CAA2BJ,KAA3B,CAAX;EACA,WAAOkB,EAAE,IAAIA,EAAE,GAAG,KAAKnB,oBAAL,CAA0BC,KAA1B,CAAT,CAAT;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEmB,EAAAA,UAAU,CAACnB,KAAD,EAAQ;EAChB,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,WACG,IAAIU,EAAL,IACC,IAAIA,EAAJ,GACC,KAAKP,qBAAL,CAA2BH,KAA3B,CADD,GAEC,KAAKI,qBAAL,CAA2BJ,KAA3B,CAHF,CADF;EAMD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEoB,EAAAA,iCAAiC,CAACpB,KAAD,EAAQ;EACvC,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,UAAMY,EAAE,GAAG,KAAKV,oBAAL,CAA0BF,KAA1B,CAAX;EACA,UAAMgB,EAAE,GAAG,KAAKb,qBAAL,CAA2BH,KAA3B,CAAX;EACA,UAAMkB,EAAE,GAAG,KAAKd,qBAAL,CAA2BJ,KAA3B,CAAX;EACA,WACE,CAACU,EAAE,GAAGE,EAAL,GAAUI,EAAE,GAAGE,EAAhB,IACAllB,IAAI,CAACqG,IAAL,CAAU,CAACqe,EAAE,GAAGM,EAAN,KAAaN,EAAE,GAAGQ,EAAlB,KAAyBN,EAAE,GAAGI,EAA9B,KAAqCJ,EAAE,GAAGM,EAA1C,CAAV,CAFF;EAID;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEG,EAAAA,eAAe,CAACrB,KAAD,EAAQ;EACrB,WACE,KAAKO,mBAAL,CAAyBP,KAAzB,IAAkC,KAAKQ,mBAAL,CAAyBR,KAAzB,CAAlC,GAAoE,CADtE;EAGD;EAED;EACF;EACA;EACA;EACA;;;EACEsB,EAAAA,aAAa,CAACtB,KAAD,EAAQ;EACnB,WACE,KAAKS,0BAAL,CAAgCT,KAAhC,IACA,KAAKW,0BAAL,CAAgCX,KAAhC,CADA,GAEA,CAHF;EAKD;EAED;EACF;EACA;EACA;EACA;;;EACEuB,EAAAA,iBAAiB,CAACvB,KAAD,EAAQ;EACvB,WAAO,CACL,CAAC,KAAKD,oBAAL,CAA0BC,KAA1B,CAAD,EAAmC,KAAKI,qBAAL,CAA2BJ,KAA3B,CAAnC,CADK,EAEL,CAAC,KAAKG,qBAAL,CAA2BH,KAA3B,CAAD,EAAoC,KAAKE,oBAAL,CAA0BF,KAA1B,CAApC,CAFK,CAAP;EAID;EAED;EACF;EACA;EACA;;;EACEwB,EAAAA,WAAW,GAAG;EACZ,QAAIC,OAAO,GAAG,CAAd;EACA,QAAIC,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAItnB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAY9B,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,WAAK,IAAIgC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKd,MAAL,CAAY9B,MAAhC,EAAwC4C,CAAC,EAAzC,EAA6C;EAC3C,YAAIhC,CAAC,KAAKgC,CAAV,EAAaqlB,OAAO,IAAI,KAAKnmB,MAAL,CAAYlB,CAAZ,EAAegC,CAAf,CAAX,CAAb,KACKslB,SAAS,IAAI,KAAKpmB,MAAL,CAAYlB,CAAZ,EAAegC,CAAf,CAAb;EACN;EACF;;EACD,WAAOqlB,OAAO,IAAIA,OAAO,GAAGC,SAAd,CAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,QAAQ,CAACvC,MAAD,EAASC,SAAT,EAAoB;EAC1B,UAAMuC,WAAW,GAAG,KAAK3B,QAAL,CAAcb,MAAd,CAApB;EACA,UAAMyC,cAAc,GAAG,KAAK5B,QAAL,CAAcZ,SAAd,CAAvB;EACA,WAAO,KAAK/jB,MAAL,CAAYsmB,WAAZ,EAAyBC,cAAzB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACc,MAARC,QAAQ,GAAG;EACb,WAAO,KAAKN,WAAL,EAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACW,MAALO,KAAK,GAAG;EACV,WAAO,KAAKnC,aAAL,EAAP;EACD;;EAxYkC;;ECTrC;EACA;EACA;EACA;EACA;EACO,SAASoC,QAAT,CAAkBC,QAAlB,EAA4BpZ,CAAC,GAAG,CAAhC,EAAmC;EACxC,MAAIqZ,CAAC,GAAGD,QAAQ,CAACzoB,MAAjB;EACA,MAAI2oB,MAAM,GAAG,IAAI1nB,KAAJ,CAAUynB,CAAV,CAAb;;EACA,OAAK,IAAI9nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8nB,CAApB,EAAuB9nB,CAAC,EAAxB,EAA4B;EAC1B+nB,IAAAA,MAAM,CAAC/nB,CAAD,CAAN,GAAYA,CAAZ;EACD;;EAED,MAAIsN,CAAC,GAAG1L,IAAI,CAAC2F,KAAL,CAAWugB,CAAC,GAAGrZ,CAAf,CAAR,CAPwC;;EASxC,MAAIuZ,OAAO,GAAG,EAAd;EACA,MAAIC,KAAK,GAAG,EAAZ;;EACA,SAAOF,MAAM,CAAC3oB,MAAd,EAAsB;EACpB,QAAI8oB,KAAK,GAAGtmB,IAAI,CAAC2F,KAAL,CAAW3F,IAAI,CAACoL,MAAL,KAAgB+a,MAAM,CAAC3oB,MAAlC,CAAZ;EACA4oB,IAAAA,OAAO,CAAC/lB,IAAR,CAAa8lB,MAAM,CAACG,KAAD,CAAnB;EACAH,IAAAA,MAAM,CAAC5O,MAAP,CAAc+O,KAAd,EAAqB,CAArB;;EACA,QAAIF,OAAO,CAAC5oB,MAAR,KAAmBkO,CAAvB,EAA0B;EACxB2a,MAAAA,KAAK,CAAChmB,IAAN,CAAW+lB,OAAX;EACAA,MAAAA,OAAO,GAAG,EAAV;EACD;EACF,GAnBuC;EAqBxC;;;EACA,MAAIA,OAAO,CAAC5oB,MAAZ,EAAoB4oB,OAAO,CAACG,OAAR,CAAiBplB,CAAD,IAAOklB,KAAK,CAACxZ,CAAC,GAAG,CAAL,CAAL,CAAaxM,IAAb,CAAkBc,CAAlB,CAAvB;EACpBklB,EAAAA,KAAK,GAAGA,KAAK,CAACjlB,KAAN,CAAY,CAAZ,EAAeyL,CAAf,CAAR;EAEA,MAAI2Z,UAAU,GAAGH,KAAK,CAACI,GAAN,CAAU,CAAC9c,CAAD,EAAIyF,GAAJ,MAAa;EACtCsX,IAAAA,SAAS,EAAE/c,CAD2B;EAEtCgd,IAAAA,UAAU,EAAE,GAAGC,MAAH,CAAU,GAAGP,KAAK,CAACQ,MAAN,CAAa,CAACC,EAAD,EAAKC,IAAL,KAAcA,IAAI,KAAK3X,GAApC,CAAb;EAF0B,GAAb,CAAV,CAAjB;EAIA,SAAOoX,UAAP;EACD;;ECjCD,SAAS3d,GAAT,CAAaxL,KAAb,EAAoB;EAClB,MAAI,CAACK,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIqpB,QAAQ,GAAG,CAAf;;EAEA,OAAK,IAAI5oB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGf,KAAK,CAACG,MAA1B,EAAkCY,CAAC,EAAnC,EAAuC;EACrC4oB,IAAAA,QAAQ,IAAI3pB,KAAK,CAACe,CAAD,CAAjB;EACD;;EAED,SAAO4oB,QAAP;EACD;;EChBD,SAAS1d,IAAT,CAAcjM,KAAd,EAAqB;EACnB,SAAOwL,GAAG,CAACxL,KAAD,CAAH,GAAaA,KAAK,CAACG,MAA1B;EACD;;ECAD;;;;EAIG;;EAEG,SAAU,MAAV,CAAiB,MAAjB,EAAgC;EACpC,QAAM,GAAG,GAAa,EAAtB;;EACA,OAAK,MAAM,KAAX,IAAoB,MAApB,EAA4B;EAC1B,QAAI,IAAI,GAAG,CAAX;EACA,UAAM,CAAC,GAAG,KAAK,CAAC,aAAhB;EACA,UAAM,CAAC,GAAG,KAAK,CAAC,aAAhB;;EACA,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,CAAC,CAAC,MAAtB,EAA8B,CAAC,EAA/B,EAAmC;EACjC,MAAA,IAAI,IAAI,OAAO,CAAC,CAAC,CAAD,CAAD,GAAO,CAAC,CAAC,CAAC,GAAG,CAAL,CAAf,KAA2B,CAAC,CAAC,CAAD,CAAD,GAAO,CAAC,CAAC,CAAC,GAAG,CAAL,CAAnC,CAAR;EACD;;EACD,IAAA,IAAI,GAAG,IAAI,GAAG,GAAP,GAAa,IAAb,GAAoB,IAAI,IAA/B;EACA,IAAA,GAAG,CAAC,IAAJ,CAAS,IAAT;EACD;;EACD,SAAO,IAAI,CAAC,GAAD,CAAX;EACD;;ECrBD;;;EAGG;EACG,SAAU,UAAV,CAAqB,KAArB,EAAoC;EACxC,MAAI,SAAS,GAAG,CAAhB;EACA,QAAM,OAAO,GAAY,CAAC;EAAE,IAAA,IAAI,EAAE,KAAK,CAAC,CAAD,CAAb;EAAkB,IAAA,KAAK,EAAE,CAAzB;EAA4B,IAAA,GAAG,EAAE;EAAjC,GAAD,CAAzB;;EACA,OAAK,MAAM,OAAX,IAAsB,KAAtB,EAA6B;EAC3B,UAAM,YAAY,GAAG,OAAO,CAAC,IAAR,CAAc,IAAD,IAAU,IAAI,CAAC,IAAL,KAAc,OAArC,CAArB;;EACA,QAAI,CAAC,YAAL,EAAmB;EACjB,MAAA,SAAS;EACT,MAAA,OAAO,CAAC,IAAR,CAAa;EAAE,QAAA,IAAI,EAAE,OAAR;EAAiB,QAAA,KAAK,EAAE,SAAxB;EAAmC,QAAA,GAAG,EAAE;EAAxC,OAAb;EACD;EACF;;EAED,OAAK,MAAM,QAAX,IAAuB,OAAvB,EAAgC;EAC9B,UAAM,KAAK,GAAG,QAAQ,CAAC,IAAvB;EACA,UAAM,OAAO,GAAa,EAA1B;;EACA,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,CAAC,MAA1B,EAAkC,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAK,CAAC,CAAD,CAAL,KAAa,KAAjB,EAAwB,OAAO,CAAC,IAAR,CAAa,CAAb;EACzB;;EACD,IAAA,QAAQ,CAAC,GAAT,GAAe,OAAf;EACD;;EACD,SAAO,OAAP;EACD;;ECxBD;;;;EAIG;EAEG,SAAU,eAAV,CAA0B,IAA1B,EAAuC;EAC3C,QAAM,KAAK,GAAqB,EAAhC;;EACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,IAAI,CAAC,MAAL,GAAc,CAAlC,EAAqC,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAjB,EAAoB,CAAC,GAAG,IAAI,CAAC,MAA7B,EAAqC,CAAC,EAAtC,EAA0C;EACxC,MAAA,KAAK,CAAC,IAAN,CAAW,CAAC,IAAI,CAAC,CAAD,CAAL,EAAU,IAAI,CAAC,CAAD,CAAd,CAAX;EACD;EACF;;EACD,SAAO,KAAP;EACD;;ECXD;;;;;;;EAOG;;EAEG,SAAU,mBAAV,CACJ,OADI,EAEJ,KAFI,EAGJ,IAHI,EAIJ,OAAA,GAAmB,EAJf,EAIiB;EAErB,QAAM;EAAE,IAAA,EAAE,GAAG;EAAP,MAAiB,OAAvB;EACA,QAAM,UAAU,GAAG,CAAC,GAAG,CAAC,KAAD,CAAH,GAAa,EAAd,EAAkB,GAAG,CAAC,KAAD,CAAH,GAAa,EAA/B,CAAnB;EACA,QAAM,OAAO,GAAa,EAA1B;;EACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,OAAO,CAAC,MAA5B,EAAoC,CAAC,EAArC,EAAyC;EACvC,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,IAAI,CAAC,MAAzB,EAAiC,CAAC,EAAlC,EAAsC;EACpC,UAAI,OAAO,CAAC,CAAD,CAAP,KAAe,IAAI,CAAC,CAAD,CAAJ,CAAQ,IAA3B,EAAiC;EAC/B,QAAA,OAAO,CAAC,CAAD,CAAP,GAAa,UAAU,CAAC,CAAD,CAAvB;EACA;EACD;EACF;EACF;;EACD,SAAO,OAAP;EACD;;EC9BD;;;;;EAKG;EAEH;EACM,SAAU,kBAAV,CAA6B,KAA7B,EAA2C,IAA3C,EAA+D;EACnE,QAAM,OAAO,GAAG,EAAhB;;EACA,OAAK,MAAM,IAAX,IAAmB,IAAnB,EAAyB;EACvB,SAAK,MAAM,EAAX,IAAiB,IAAI,CAAC,GAAtB,EAA2B;EACzB,YAAM,MAAM,GAAG,KAAK,CAAC,EAAD,CAApB;EACA,MAAA,OAAO,CAAC,IAAR,CAAa,MAAb;EACD;EACF;;EACD,SAAO,OAAP;EACD;;ECnBD;;;;EAIG;EAEG,SAAU,aAAV,CAAwB,WAAxB,EAA6C;EACjD,QAAM,OAAO,GAAa,CAAC,GAAG,IAAI,GAAJ,CAAQ,WAAR,CAAJ,EAA0B,IAA1B,CAA+B,CAAC,CAAD,EAAI,CAAJ,KAAU,CAAC,GAAG,CAA7C,CAA1B;EACA,QAAM,UAAU,GAAa,CAAC,OAAO,CAAC,CAAD,CAAR,CAA7B;;EACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,OAAO,CAAC,MAAR,GAAiB,CAArC,EAAwC,CAAC,EAAzC,EAA6C;EAC3C,UAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAL,CAAP,GAAiB,OAAO,CAAC,CAAD,CAAzB,IAAgC,CAA7C;EACA,IAAA,UAAU,CAAC,IAAX,CAAgB,OAAO,CAAC,CAAD,CAAP,GAAa,IAA7B;EACD;;EACD,EAAA,UAAU,CAAC,IAAX,CAAgB,OAAO,CAAC,OAAO,CAAC,MAAR,GAAiB,CAAlB,CAAP,GAA8B,KAA9C;EACA,SAAO,UAAP;EACD;;ECRD;;;;;EAKG;;EAEG,SAAU,WAAV,CAAsB,SAAtB,EAA2C,WAA3C,EAAgE;EACpE,QAAM,OAAO,GAAG,UAAU,CAAC,SAAD,CAA1B;EACA,QAAM,cAAc,GAAG,eAAe,CAAC,OAAD,CAAtC;EACA,QAAM,MAAM,GAAY,EAAxB;;EACA,OAAK,MAAM,KAAX,IAAoB,cAApB,EAAoC;EAClC,UAAM,KAAK,GAAG,kBAAkB,CAAC,WAAD,EAAc,KAAd,CAAhC;EACA,UAAM,OAAO,GAAG,kBAAkB,CAAC,SAAD,EAAY,KAAZ,CAAlC;EACA,UAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAD,EAAU,KAAV,EAAiB,KAAjB,CAA5C;EACA,UAAM,KAAK,GAAU;EAAE,MAAA,aAAa,EAAE,EAAjB;EAAqB,MAAA,aAAa,EAAE;EAApC,KAArB;EACA,UAAM,MAAM,GAAG,aAAa,CAAC,KAAD,CAA5B;;EACA,SAAK,MAAM,KAAX,IAAoB,MAApB,EAA4B;EAC1B,UAAI,aAAa,GAAG,CAApB;EACA,UAAI,cAAc,GAAG,CAArB;EACA,UAAI,aAAa,GAAG,CAApB;EACA,UAAI,cAAc,GAAG,CAArB;;EACA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,gBAAgB,CAAC,MAArC,EAA6C,CAAC,EAA9C,EAAkD;EAChD,YAAI,KAAK,CAAC,CAAD,CAAL,GAAW,KAAX,IAAoB,gBAAgB,CAAC,CAAD,CAAhB,GAAsB,KAA9C,EAAqD,aAAa;EAClE,YAAI,KAAK,CAAC,CAAD,CAAL,IAAY,KAAZ,IAAqB,gBAAgB,CAAC,CAAD,CAAhB,IAAuB,KAAhD,EAAuD,cAAc;EACrE,YAAI,KAAK,CAAC,CAAD,CAAL,GAAW,KAAX,IAAoB,gBAAgB,CAAC,CAAD,CAAhB,GAAsB,KAA9C,EAAqD,aAAa;EAClE,YAAI,KAAK,CAAC,CAAD,CAAL,IAAY,KAAZ,IAAqB,gBAAgB,CAAC,CAAD,CAAhB,IAAuB,KAAhD,EAAuD,cAAc;EACtE;;EACD,MAAA,KAAK,CAAC,aAAN,CAAoB,IAApB,CACE,aAAa,IAAI,aAAa,GAAG,cAApB,CADf;EAIA,MAAA,KAAK,CAAC,aAAN,CAAoB,IAApB,CACE,aAAa,IAAI,cAAc,GAAG,aAArB,CADf;EAGD;;EACD,IAAA,MAAM,CAAC,IAAP,CAAY,KAAZ;EACD;;EACD,SAAO,MAAP;EACD;;EC1CD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASypB,UAAT,CAAoBxb,IAApB,EAA0ByX,MAA1B,EAAkC5lB,OAAO,GAAG,EAA5C,EAAgD;EACrD,QAAM;EAAE4pB,IAAAA,SAAS,GAAG,GAAd;EAAmBC,IAAAA,KAAK,GAAG;EAA3B,MAAsC7pB,OAA5C;EAEAmO,EAAAA,IAAI,GAAGlK,MAAM,CAACM,WAAP,CAAmB4J,IAAnB,CAAP;EACAyX,EAAAA,MAAM,GAAG3hB,MAAM,CAACM,WAAP,CAAmBqhB,MAAnB,CAAT;EACA,MAAIkE,EAAE,GAAG,EAAT;;EACA,MAAIlE,MAAM,CAACpjB,OAAP,GAAiB,CAArB,EAAwB;EACtB,UAAMunB,EAAE,GAAGC,KAAK,CAAC7b,IAAD,EAAOyX,MAAP,CAAhB;EACA,UAAMqE,IAAI,GAAGF,EAAE,CAACxX,IAAH,MAAa,CAA1B;EACA,QAAI2X,GAAG,GAAGD,IAAV;EACA,QAAIE,IAAJ;EACA,QAAIjP,KAAK,GAAG,CAAZ;;EACA,OAAG;EACD,UAAIA,KAAK,KAAK,CAAd,EAAiB;EACfiP,QAAAA,IAAI,GAAG,IAAIC,MAAJ,CAAWL,EAAX,CAAP;EACAD,QAAAA,EAAE,CAAC/mB,IAAH,CAAQonB,IAAI,CAACxP,CAAb;EACD,OAHD,MAGO;EACL,YAAIxM,IAAI,GAAGgc,IAAI,CAAC9J,SAAhB;EACA8J,QAAAA,IAAI,GAAG,IAAIC,MAAJ,CAAWjc,IAAX,CAAP;EACA2b,QAAAA,EAAE,CAAC/mB,IAAH,CAAQonB,IAAI,CAACxP,CAAb;EACD;;EACDuP,MAAAA,GAAG,GAAGH,EAAE,CAACxX,IAAH,MAAa,CAAnB;EACA2I,MAAAA,KAAK;EACN,KAXD,QAWSgP,GAAG,GAAGD,IAAN,GAAaJ,KAXtB;EAYD;;EAED,MAAI7J,CAAC,GAAG4F,MAAM,CAAC/U,eAAP,CAAuB,CAAvB,CAAR;EACA,MAAIoP,IAAI,GAAG,CAAX;EACA,MAAItF,CAAJ,EAAOhQ,CAAP,EAAUuV,CAAV,EAAamK,IAAb;;EACA,OAAK,IAAIvpB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8oB,SAAJ,IAAiB3J,IAAI,GAAG4J,KAAxC,EAA+C/oB,CAAC,EAAhD,EAAoD;EAClDof,IAAAA,CAAC,GAAGF,CAAC,CAAC3H,SAAF,GAAcxF,IAAd,CAAmB1E,IAAnB,EAAyB9I,GAAzB,CAA6B2a,CAAC,CAAC3H,SAAF,GAAcxF,IAAd,CAAmBmN,CAAnB,EAAsB/c,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA7B,CAAJ;EACAid,IAAAA,CAAC,GAAGA,CAAC,CAAC7H,SAAF,GAAchT,GAAd,CAAkBkN,IAAI,CAAC2N,CAAD,CAAtB,CAAJ;EAEAvF,IAAAA,CAAC,GAAGxM,IAAI,CAAC0E,IAAL,CAAUqN,CAAV,EAAa7a,GAAb,CAAiB6a,CAAC,CAAC7H,SAAF,GAAcxF,IAAd,CAAmBqN,CAAnB,EAAsBjd,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAjB,CAAJ,CAJkD;EAMlD;;EACA0H,IAAAA,CAAC,GAAGgQ,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB+S,MAAnB,EAA2BvgB,GAA3B,CAA+BsV,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA/B,CAAJ,CAPkD;;EAUlDonB,IAAAA,IAAI,GAAGzE,MAAM,CAAC/S,IAAP,CAAYlI,CAAC,CAAC0N,SAAF,EAAZ,CAAP;EACAgS,IAAAA,IAAI,GAAGA,IAAI,CAAChlB,GAAL,CAASsF,CAAC,CAAC0N,SAAF,GAAcxF,IAAd,CAAmBlI,CAAnB,EAAsB1H,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAT,CAAP;;EAEA,QAAInC,CAAC,GAAG,CAAR,EAAW;EACTmf,MAAAA,IAAI,GAAGoK,IAAI,CAAC5a,KAAL,GAAahL,GAAb,CAAiBub,CAAjB,EAAoB7W,GAApB,CAAwB,CAAxB,EAA2BoC,GAA3B,KAAmC8e,IAAI,CAAC5a,KAAL,GAAatG,GAAb,CAAiB,CAAjB,EAAoBoC,GAApB,EAA1C;EACD;;EACDyU,IAAAA,CAAC,GAAGqK,IAAI,CAAC5a,KAAL,EAAJ;EACD,GA9CoD;;;EAiDrD,MAAI6a,MAAJ;EACA,MAAIpa,CAAC,GAAGyK,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB1E,IAAnB,EAAyB9I,GAAzB,CAA6BsV,CAAC,CAACtC,SAAF,GAAcxF,IAAd,CAAmB8H,CAAnB,EAAsB1X,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAA7B,CAAR;;EACA,MAAI2iB,MAAM,CAACpjB,OAAP,GAAiB,CAArB,EAAwB;EACtB,SAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgpB,EAAE,CAAC5pB,MAAvB,EAA+BY,CAAC,EAAhC,EAAoC;EAClC,UAAIypB,EAAE,GAAGT,EAAE,CAAChpB,CAAD,CAAF,CAAMuX,SAAN,EAAT;EACAnI,MAAAA,CAAC,GAAGA,CAAC,CAACzL,GAAF,CACF8lB,EAAE,CAAC1X,IAAH,CAAQ3C,CAAC,CAACmI,SAAF,EAAR,EAAuBxF,IAAvB,CAA4B0X,EAA5B,CADE;EAAA,OAAJ;EAGD;;EACDD,IAAAA,MAAM,GAAGpa,CAAC,CAACT,KAAF,EAAT;EACD,GARD,MAQO;EACL6a,IAAAA,MAAM,GAAGpa,CAAC,CACPT,KADM,GAENhL,GAFM,CAGLyb,CAAC,CACE7H,SADH,GAEGxF,IAFH,CAEQ3C,CAAC,CAACmI,SAAF,EAFR,EAGGhT,GAHH,CAGO6a,CAAC,CAAC7H,SAAF,GAAcxF,IAAd,CAAmBqN,CAAnB,EAAsBjd,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAHP,EAIG4P,IAJH,CAIQqN,CAAC,CAAC7H,SAAF,EAJR,CAHK,CAAT;EASD;;EAEDiS,EAAAA,MAAM,CAACjlB,GAAP,CAAWkN,IAAI,CAAC+X,MAAD,CAAf;EAEA,MAAIE,MAAM,GAAGrc,IAAI,CACd0E,IADU,CACLyX,MAAM,CAACjS,SAAP,EADK,EAEVhT,GAFU,CAENilB,MAAM,CAACzX,IAAP,CAAYyX,MAAM,CAACjS,SAAP,EAAZ,EAAgCpV,GAAhC,CAAoC,CAApC,EAAuC,CAAvC,CAFM,CAAb,CAzEqD;;EA8ErD,MAAIwnB,MAAM,GAAGD,MAAM,CAChBnS,SADU,GAEVxF,IAFU,CAEL1E,IAFK,EAGV9I,GAHU,CAGNmlB,MAAM,CAACnS,SAAP,GAAmBxF,IAAnB,CAAwB2X,MAAxB,EAAgCvnB,GAAhC,CAAoC,CAApC,EAAuC,CAAvC,CAHM,CAAb,CA9EqD;;EAoFrD,MAAIynB,GAAG,GAAGvc,IAAI,CAACsB,KAAL,GAAahL,GAAb,CAAiB+lB,MAAM,CAAC3X,IAAP,CAAY4X,MAAZ,CAAjB,CAAV;EACA,SAAO;EACLE,IAAAA,SAAS,EAAED,GADN;EAELE,IAAAA,aAAa,EAAEN,MAFV;EAGLO,IAAAA,cAAc,EAAEJ,MAHX;EAILK,IAAAA,YAAY,EAAEN,MAJT;EAKLO,IAAAA,YAAY,EAAE7K,CALT;EAML8K,IAAAA,aAAa,EAAE9a,CANV;EAOL+a,IAAAA,WAAW,EAAEtQ,CAPR;EAQLuQ,IAAAA,SAAS,EAAEvgB;EARN,GAAP;EAUD;;EAED,SAASqf,KAAT,CAAemB,MAAf,EAAuBC,MAAvB,EAA+B;EAC7B,MAAIxoB,MAAM,GAAG,IAAIqB,MAAJ,CAAWknB,MAAM,CAAC3oB,OAAlB,EAA2B4oB,MAAM,CAAC5oB,OAAlC,CAAb;;EACA,OAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsqB,MAAM,CAAC5oB,OAA3B,EAAoC1B,CAAC,EAArC,EAAyC;EACvC,QAAIuqB,EAAE,GAAGD,MAAM,CAACva,eAAP,CAAuB/P,CAAvB,EAA0BuX,SAA1B,EAAT;EACA,QAAIiT,SAAS,GAAGD,EAAE,CAACxY,IAAH,CAAQsY,MAAR,EAAgB9lB,GAAhB,CAAoBgmB,EAAE,CAACxY,IAAH,CAAQwY,EAAE,CAAChT,SAAH,EAAR,EAAwBpV,GAAxB,CAA4B,CAA5B,EAA+B,CAA/B,CAApB,CAAhB;EACAL,IAAAA,MAAM,CAACkO,SAAP,CAAiBhQ,CAAjB,EAAoBwqB,SAAS,CAAChb,MAAV,CAAiB,CAAjB,CAApB;EACD;;EACD,SAAO1N,MAAP;EACD;;ECzHD;EACA;EACA;EACA;EACA;;EACO,SAAS2oB,GAAT,CAAalf,CAAb,EAAgB;EACrB,SAAOpI,MAAM,CAACc,GAAP,CAAWsH,CAAX,EAAcA,CAAd,EAAiBd,GAAjB,EAAP;EACD;;ECDD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEO,MAAMigB,IAAN,CAAW;EAChBppB,EAAAA,WAAW,CAAC+L,IAAD,EAAOyX,MAAP,EAAe5lB,OAAO,GAAG,EAAzB,EAA6B;EACtC,QAAImO,IAAI,KAAK,IAAb,EAAmB;EACjB,YAAMsd,IAAI,GAAGzrB,OAAb;EACA,WAAKqZ,MAAL,GAAcoS,IAAI,CAACpS,MAAnB;EACA,WAAKxM,KAAL,GAAa4e,IAAI,CAAC5e,KAAlB;EACA,WAAK6e,KAAL,GAAaD,IAAI,CAACC,KAAlB;EACA,WAAKC,MAAL,GAAcF,IAAI,CAACE,MAAnB;EACA,WAAKC,MAAL,GAAcH,IAAI,CAACG,MAAnB;EACA,WAAKA,MAAL,GAAcH,IAAI,CAACI,OAAnB;EACA,WAAKhL,KAAL,GAAa4K,IAAI,CAAC5K,KAAlB;EACA,WAAKiL,GAAL,GAAWL,IAAI,CAACK,GAAhB;EACA,WAAKC,OAAL,GAAeN,IAAI,CAACM,OAApB;EACA,WAAKC,MAAL,GAAcP,IAAI,CAACO,MAAnB;EACA,WAAKC,IAAL,GAAYR,IAAI,CAACQ,IAAjB;EACA;EACD;;EAED,UAAMtD,QAAQ,GAAG,IAAI1kB,MAAJ,CAAWkK,IAAX,CAAjB,CAjBsC;EAmBtC;;EACA,UAAM;EAAEkL,MAAAA,MAAM,GAAG,IAAX;EAAiBxM,MAAAA,KAAK,GAAG,IAAzB;EAA+Bqf,MAAAA,OAAO,GAAG,EAAzC;EAA6CC,MAAAA,OAAO,GAAG;EAAvD,QAA6DnsB,OAAnE;EAEA,QAAIosB,KAAJ;;EACA,QAAI,OAAOxG,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAzB,EAAmC;EACjC;EACA,WAAKqG,IAAL,GAAY,YAAZ;EACAG,MAAAA,KAAK,GAAGnoB,MAAM,CAACmJ,WAAP,CAAmBwY,MAAM,CAAC1lB,MAA1B,EAAkC,CAAlC,EAAqC0lB,MAArC,CAAR;EACD,KAJD,MAIO,IAAI,OAAOA,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAzB,EAAmC;EACxC;EACA,WAAKqG,IAAL,GAAY,sBAAZ;EACAG,MAAAA,KAAK,GAAGnoB,MAAM,CAACM,WAAP,CAAmB8nB,YAAY,CAACzG,MAAD,CAA/B,EAAyCvN,SAAzC,EAAR;EACD,KA/BqC;;;EAkCtC,SAAKgB,MAAL,GAAcA,MAAd;;EACA,QAAI,KAAKA,MAAT,EAAiB;EACf,WAAKqS,KAAL,GAAa/C,QAAQ,CAAC3c,IAAT,CAAc,QAAd,CAAb;EACA,WAAK2f,MAAL,GAAcS,KAAK,CAACpgB,IAAN,CAAW,QAAX,CAAd;EACD,KAHD,MAGO;EACL,WAAK4f,MAAL,GAAc,IAAd;EACD;;EACD,SAAK/e,KAAL,GAAaA,KAAb;;EACA,QAAI,KAAKA,KAAT,EAAgB;EACd,WAAK+e,MAAL,GAAcjD,QAAQ,CAACvP,iBAAT,CAA2B,QAA3B,CAAd;EACA,WAAKyS,OAAL,GAAeO,KAAK,CAAChT,iBAAN,CAAwB,QAAxB,CAAf;EACD,KAHD,MAGO;EACL,WAAKsS,KAAL,GAAa,IAAb;EACD,KA/CqC;EAkDtC;;;EAEA,UAAM3C,KAAK,GAAGmD,OAAO,CAAChsB,MAAR,GAAiB,CAAjB,GAAqBgsB,OAArB,GAA+BxD,QAAQ,CAAC9C,MAAD,EAASuG,OAAT,CAArD;EACA,UAAMG,EAAE,GAAG,EAAX;EACA,UAAMC,SAAS,GAAG,EAAlB;EACA,SAAK1L,KAAL,GAAa,EAAb;EACA,SAAKiL,GAAL,GAAW,EAAX;EACA,SAAKC,OAAL,GAAe,EAAf;EACA,SAAKC,MAAL,GAAc,EAAd;EACA,UAAMQ,MAAM,GAAG,EAAf;EAEA,QAAIC,OAAO,GAAG,EAAd,CA7DsC;EAgEtC;EACA;EACA;;EACA,QAAIC,UAAU,GAAG,KAAjB;EACA,QAAIC,EAAE,GAAG,CAAT;EACA,QAAIxoB,KAAJ;;EAEA,OAAG;EACD,YAAMyoB,KAAK,GAAG,IAAI3oB,MAAJ,CAAWmoB,KAAK,CAAC7pB,IAAjB,EAAuB,CAAvB,CAAd;EACA,YAAMsqB,MAAM,GAAG,IAAI5oB,MAAJ,CAAWmoB,KAAK,CAAC7pB,IAAjB,EAAuB,CAAvB,CAAf;EACA,YAAMuqB,MAAM,GAAG,IAAI7oB,MAAJ,CAAWmoB,KAAK,CAAC7pB,IAAjB,EAAuB,CAAvB,CAAf;EACAiqB,MAAAA,MAAM,CAACG,EAAD,CAAN,GAAa,EAAb;;EACA,WAAK,IAAIhP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoL,KAAK,CAAC7oB,MAA1B,EAAkCyd,CAAC,EAAnC,EAAuC;EACrC,cAAMoP,SAAS,GAAG,KAAKC,aAAL,CAAmBrE,QAAnB,EAA6ByD,KAA7B,EAAoCrD,KAAK,CAACpL,CAAD,CAAzC,CAAlB;;EACA,cAAMsP,MAAM,GAAGF,SAAS,CAACG,YAAzB;EACA,cAAMC,EAAE,GAAGJ,SAAS,CAACK,aAArB;EACA,cAAMC,EAAE,GAAGN,SAAS,CAACO,WAArB,CAJqC;;EAOrC,cAAMC,UAAU,GAAGJ,EAAE,CAACnhB,IAAH,CAAQ,QAAR,CAAnB;EACA,cAAMwhB,MAAM,GAAGL,EAAE,CAAC/T,iBAAH,CAAqB,QAArB,CAAf,CARqC;;EAWrC,YAAIC,MAAJ,EAAY;EACV8T,UAAAA,EAAE,CAAC9T,MAAH,CAAU,QAAV;EACAgU,UAAAA,EAAE,CAAChU,MAAH,CAAU,QAAV;EACD;;EAED,YAAIxM,KAAJ,EAAW;EACTsgB,UAAAA,EAAE,CAACtgB,KAAH,CAAS,QAAT;EACAwgB,UAAAA,EAAE,CAACxgB,KAAH,CAAS,QAAT;EACD,SAnBoC;;;EAsBrC,YAAI4gB,KAAJ;;EACA,YAAId,EAAE,KAAK,CAAX,EAAc;EACZc,UAAAA,KAAK,GAAG9D,UAAU,CAACwD,EAAD,EAAKE,EAAL,CAAlB;EACD,SAFD,MAEO;EACLI,UAAAA,KAAK,GAAG9D,UAAU,CAAC6C,MAAM,CAACG,EAAE,GAAG,CAAN,CAAN,CAAehP,CAAf,EAAkBgN,SAAnB,EAA8B0C,EAA9B,CAAlB;EACD,SA3BoC;;;EA8BrCb,QAAAA,MAAM,CAACG,EAAD,CAAN,CAAWhP,CAAX,IAAgB8P,KAAhB;EACA,cAAMC,KAAK,GAAG,IAAItD,MAAJ,CAAWqD,KAAK,CAAC9C,SAAjB,EAA4B;EAAEtM,UAAAA,CAAC,EAAEgP;EAAL,SAA5B,CAAd,CA/BqC;;EAkCrCJ,QAAAA,MAAM,CAAC5T,MAAP,CAAc,QAAd,EAAwB;EAAEA,UAAAA,MAAM,EAAEkU;EAAV,SAAxB;EACAN,QAAAA,MAAM,CAACpgB,KAAP,CAAa,QAAb,EAAuB;EAAEA,UAAAA,KAAK,EAAE2gB;EAAT,SAAvB;EAEA,cAAMG,EAAE,GAAGV,MAAX,CArCqC;;EAuCrC,YAAIW,MAAJ;;EACA,aAAK,IAAI9b,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG6a,EAAE,GAAG,CAA7B,EAAgC7a,GAAG,EAAnC,EAAuC;EACrC8b,UAAAA,MAAM,GAAGD,EAAE,CAAC9a,IAAH,CAAQ2Z,MAAM,CAAC1a,GAAD,CAAN,CAAY6L,CAAZ,EAAeiN,aAAf,CAA6BvS,SAA7B,EAAR,CAAT,CADqC;;EAErCsV,UAAAA,EAAE,CAAClpB,GAAH,CAAOmpB,MAAM,CAAC/a,IAAP,CAAY2Z,MAAM,CAAC1a,GAAD,CAAN,CAAY6L,CAAZ,EAAekN,cAA3B,CAAP;EACD,SA3CoC;;;EA8CrC,cAAMgD,KAAK,GAAGF,EAAE,CAAC9a,IAAH,CAAQ6a,KAAK,CAACxN,CAAN,CAAQ7H,SAAR,EAAR,CAAd;EACA,cAAMyV,cAAc,GAAGD,KAAK,CACzBhb,IADoB,CACf6a,KAAK,CAAClN,KADS,EAEpB3N,IAFoB,CAEf6a,KAAK,CAACzV,CAAN,CAAQI,SAAR,EAFe,CAAvB,CA/CqC;;EAkDrC,cAAM0V,IAAI,GAAG,IAAI9pB,MAAJ,CAAW6pB,cAAc,CAACvrB,IAA1B,EAAgC,CAAhC,CAAb;;EACA,aAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgtB,cAAc,CAACvrB,IAAnC,EAAyCzB,CAAC,EAA1C,EAA8C;EAC5CitB,UAAAA,IAAI,CAACvd,MAAL,CAAY1P,CAAZ,EAAe,CAACgtB,cAAc,CAACvd,YAAf,CAA4BzP,CAA5B,EAA+ByK,GAA/B,EAAD,CAAf;EACD,SArDoC;;;EAuDrC,aAAK,IAAIzK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGioB,KAAK,CAACpL,CAAD,CAAL,CAASyL,SAAT,CAAmBlpB,MAAvC,EAA+CY,CAAC,EAAhD,EAAoD;EAClD8rB,UAAAA,KAAK,CAACpc,MAAN,CAAauY,KAAK,CAACpL,CAAD,CAAL,CAASyL,SAAT,CAAmBtoB,CAAnB,CAAb,EAAoC,CAACitB,IAAI,CAAC9qB,GAAL,CAASnC,CAAT,EAAY,CAAZ,CAAD,CAApC;EACA+rB,UAAAA,MAAM,CAACrc,MAAP,CAAcuY,KAAK,CAACpL,CAAD,CAAL,CAASyL,SAAT,CAAmBtoB,CAAnB,CAAd,EAAqC,CAAC+sB,KAAK,CAAC5qB,GAAN,CAAUnC,CAAV,EAAa,CAAb,CAAD,CAArC;EACAgsB,UAAAA,MAAM,CAACtc,MAAP,CAAcuY,KAAK,CAACpL,CAAD,CAAL,CAASyL,SAAT,CAAmBtoB,CAAnB,CAAd,EAAqC,CAAC8sB,MAAM,CAAC3qB,GAAP,CAAWnC,CAAX,EAAc,CAAd,CAAD,CAArC;EACD;EACF,OAjEA;;;EAmED,WAAKgrB,GAAL,CAAS/oB,IAAT,CAAc8pB,MAAd;EACA,WAAKd,OAAL,CAAahpB,IAAb,CAAkB+pB,MAAlB;EACA,WAAKd,MAAL,CAAYjpB,IAAZ,CAAiB6pB,KAAjB,EArEC;EAwED;;EACA,YAAMoB,IAAI,GAAGzC,GAAG,CAACa,KAAK,CAAC/S,MAAN,CAAa,QAAb,EAAuBxM,KAAvB,CAA6B,QAA7B,CAAD,CAAhB;EACA,UAAIohB,KAAK,GAAG,CAAZ;;EACA,WAAK,IAAIntB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsrB,KAAK,CAAC5pB,OAA1B,EAAmC1B,CAAC,EAApC,EAAwC;EACtCmtB,QAAAA,KAAK,IAAI1C,GAAG,CAACa,KAAK,CAACvb,eAAN,CAAsB/P,CAAtB,EAAyB2D,GAAzB,CAA6BmoB,KAA7B,CAAD,CAAZ;EACD;;EACD,YAAMsB,GAAG,GAAG,IAAID,KAAK,GAAG7B,KAAK,CAAC5pB,OAAd,GAAwBwrB,IAAxC;EACA1B,MAAAA,EAAE,CAACvpB,IAAH,CAAQmrB,GAAR;;EACA,UAAI,KAAKjC,IAAL,KAAc,YAAlB,EAAgC;EAC9B9nB,QAAAA,KAAK,GAAG+pB,GAAR;EACD,OAFD,MAEO,IAAI,KAAKjC,IAAL,KAAc,sBAAlB,EAA0C;EAC/C,cAAMkC,QAAQ,GAAGC,WAAW,CAACxI,MAAD,EAASgH,KAAK,CAAC/iB,SAAN,EAAT,CAA5B;EACA,cAAMwkB,cAAc,GAAGC,MAAM,CAACH,QAAD,CAA7B;EACA5B,QAAAA,SAAS,CAACxpB,IAAV,CAAesrB,cAAf;EACAlqB,QAAAA,KAAK,GAAGkqB,cAAR;EACD,OAvFA;;;EA0FD,UAAI1B,EAAE,KAAK,CAAX,EAAc;EACZF,QAAAA,OAAO,GAAG,KAAK8B,WAAL,CAAiB5F,QAAjB,EAA2ByD,KAA3B,CAAV;EACD,OAFD,MAEO;EACLK,QAAAA,OAAO,GAAG,KAAK8B,WAAL,CAAiB9B,OAAO,CAAC+B,IAAzB,EAA+BpC,KAA/B,EAAsC;EAC9Cvf,UAAAA,KAAK,EAAE,KADuC;EAE9CwM,UAAAA,MAAM,EAAE;EAFsC,SAAtC,CAAV;EAID,OAjGA;;;EAoGD,UAAIoV,YAAJ;EACAhC,MAAAA,OAAO,CAACyB,GAAR,GAAc5B,EAAd;;EACA,UAAI,KAAKL,IAAL,KAAc,YAAlB,EAAgC;EAC9BwC,QAAAA,YAAY,GAAGnC,EAAf;EACD,OAFD,MAEO;EACLmC,QAAAA,YAAY,GAAGlC,SAAf;EACAE,QAAAA,OAAO,CAACiC,GAAR,GAAcnC,SAAd;EACD;;EACDE,MAAAA,OAAO,CAACtoB,KAAR,GAAgBA,KAAhB;;EAEA,UAAIwoB,EAAE,GAAG,CAAT,EAAY;EACVD,QAAAA,UAAU,GAAG+B,YAAY,CAAC9B,EAAE,GAAG,CAAN,CAAZ,IAAwBxoB,KAAxB,GAAgC,IAAhC,GAAuC,KAApD;EACD;;EACD,WAAK0c,KAAL,CAAW9d,IAAX,CAAgB0pB,OAAhB,EAjHC;;EAmHDE,MAAAA,EAAE,GAnHD;EAqHF,KArHD,QAqHS,CAACD,UArHV,EAvEsC;EA6LtC;;;EACA,UAAMZ,GAAG,GAAG,KAAKA,GAAjB;EACA,UAAMC,OAAO,GAAG,KAAKA,OAArB;EACA,UAAMC,MAAM,GAAG,KAAKA,MAApB;EACA,UAAMjc,CAAC,GAAG,KAAK8Q,KAAL,CAAW8L,EAAE,GAAG,CAAhB,CAAV;EACA,UAAMgC,KAAK,GAAG5e,CAAC,CAAC4e,KAAhB;EACA,UAAMC,UAAU,GAAGjG,QAAQ,CAACtP,MAAT,CAAgB,QAAhB,EAA0BxM,KAA1B,CAAgC,QAAhC,CAAnB;EACA,QAAIgiB,QAAJ;;EACA,QAAI,KAAK5C,IAAL,KAAc,YAAlB,EAAgC;EAC9B4C,MAAAA,QAAQ,GAAGzC,KAAK,CAAC/S,MAAN,CAAa,QAAb,EAAuBxM,KAAvB,CAA6B,QAA7B,CAAX;EACD,KAFD,MAEO;EACLgiB,MAAAA,QAAQ,GAAGzC,KAAX;EACD;;EACD,UAAM0C,IAAI,GAAGF,UAAU,CAACnf,KAAX,GAAmBhL,GAAnB,CAAuBkqB,KAAvB,CAAb;EACA,UAAMI,OAAO,GAAG,IAAI3E,MAAJ,CAAW0E,IAAX,EAAiB;EAAEzQ,MAAAA,CAAC,EAAEwQ;EAAL,KAAjB,CAAhB;EACA,UAAM9L,CAAC,GAAG+L,IAAI,CAACrf,KAAL,GAAahL,GAAb,CAAiBsqB,OAAO,CAACpU,CAAR,CAAU9H,IAAV,CAAekc,OAAO,CAAC7e,CAAvB,CAAjB,CAAV;EAEA,UAAM8e,GAAG,GAAG,KAAKnO,KAAL,CAAWsI,GAAX,CAAgB9c,CAAD,IAAOA,CAAC,CAAC2iB,GAAxB,CAAZ;EACA,UAAMC,GAAG,GAAG,KAAKpO,KAAL,CAAWsI,GAAX,CAAgB9c,CAAD,IAAOA,CAAC,CAAC4iB,GAAxB,CAAZ;EAEA,SAAK/tB,MAAL,GAAc;EACZgtB,MAAAA,GAAG,EAAE5B,EADO;EAEZoC,MAAAA,GAAG,EAAEnC,SAFO;EAGZyC,MAAAA,GAHY;EAIZC,MAAAA,GAJY;EAKZpB,MAAAA,KAAK,EAAE9d,CAAC,CAACmf,IAAF,CAAOvU,CALF;EAMZwU,MAAAA,KAAK,EAAEpf,CAAC,CAACmf,IAAF,CAAOhf,CANF;EAOZkf,MAAAA,KAAK,EAAErf,CAAC,CAACmf,IAAF,CAAOhP,CAPF;EAQZmP,MAAAA,SAAS,EAAEtf,CAAC,CAACmf,IAAF,CAAO1O,KARN;EASZ8O,MAAAA,GAAG,EAAEvf,CAAC,CAACmf,IAAF,CAAOjX,CATA;EAUZ6T,MAAAA,GAVY;EAWZC,MAAAA,OAXY;EAYZC,MAAAA,MAZY;EAaZQ,MAAAA,MAbY;EAcZ+C,MAAAA,KAAK,EAAExf,CAAC,CAACwf,KAdG;EAeZC,MAAAA,KAAK,EAAEzf,CAAC,CAACyf,KAfG;EAgBZC,MAAAA,KAAK,EAAE1f,CAAC,CAAC0f,KAhBG;EAiBZd,MAAAA,KAjBY;EAkBZZ,MAAAA,IAAI,EAAEhe,CAAC,CAAC2f,SAlBI;EAmBZC,MAAAA,IAAI,EAAE5f,CAAC,CAACmf,IAAF,CAAO3O,SAnBD;EAoBZwC,MAAAA,CApBY;EAqBZgG,MAAAA;EArBY,KAAd;EAuBD;EAED;EACF;EACA;EACA;EACA;;;EACE6G,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK1uB,MAAZ;EACD;;EAED2uB,EAAAA,SAAS,GAAG;EACV,UAAMC,OAAO,GAAG,KAAKhE,GAAL,CAAS3C,GAAT,CAAc9c,CAAD,IAAOA,CAAC,CAACxC,SAAF,EAApB,CAAhB;EACA,UAAMkmB,OAAO,GAAG,KAAKhE,OAAL,CAAa5C,GAAb,CAAkB9c,CAAD,IAAOA,CAAC,CAACxC,SAAF,EAAxB,CAAhB;EACA,WAAO;EAAEimB,MAAAA,OAAF;EAAWC,MAAAA;EAAX,KAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACa,SAAJ3M,IAAI,CAACvC,KAAD,EAAQ;EACjB,QAAI,OAAOA,KAAK,CAACxe,IAAb,KAAsB,QAA1B,EAAoC;EAClC,YAAM,IAAIhC,SAAJ,CAAc,iCAAd,CAAN;EACD;;EACD,QAAIwgB,KAAK,CAACxe,IAAN,KAAe,MAAnB,EAA2B;EACzB,YAAM,IAAIf,UAAJ,CAAgB,kBAAiBuf,KAAK,CAACxe,IAAK,EAA5C,CAAN;EACD;;EACD,WAAO,IAAImpB,IAAJ,CAAS,IAAT,EAAe,EAAf,EAAmB3K,KAAnB,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEhS,EAAAA,MAAM,GAAG;EACP,WAAO;EACLxM,MAAAA,IAAI,EAAE,MADD;EAELgX,MAAAA,MAAM,EAAE,KAAKA,MAFR;EAGLxM,MAAAA,KAAK,EAAE,KAAKA,KAHP;EAIL6e,MAAAA,KAAK,EAAE,KAAKA,KAJP;EAKLE,MAAAA,MAAM,EAAE,KAAKA,MALR;EAML/K,MAAAA,KAAK,EAAE,KAAKA,KANP;EAOLiL,MAAAA,GAAG,EAAE,KAAKA,GAPL;EAQLC,MAAAA,OAAO,EAAE,KAAKA,OART;EASLC,MAAAA,MAAM,EAAE,KAAKA;EATR,KAAP;EAWD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACE/I,EAAAA,OAAO,CAAC0F,QAAD,EAAW3oB,OAAO,GAAG,EAArB,EAAyB;EAAA;;EAC9B,UAAM;EACJgwB,MAAAA,UAAU,GAAG,EADT;EAEJ3W,MAAAA,MAAM,GAAG,KAAKA,MAFV;EAGJxM,MAAAA,KAAK,GAAG,KAAKA;EAHT,QAIF7M,OAJJ;EAMA,QAAI4lB,MAAJ;;EACA,QAAI,OAAOoK,UAAU,CAAC,CAAD,CAAjB,KAAyB,QAA7B,EAAuC;EACrCpK,MAAAA,MAAM,GAAG3hB,MAAM,CAACmJ,WAAP,CAAmB4iB,UAAU,CAAC9vB,MAA9B,EAAsC,CAAtC,EAAyC8vB,UAAzC,CAAT;EACD,KAFD,MAEO,IAAI,OAAOA,UAAU,CAAC,CAAD,CAAjB,KAAyB,QAA7B,EAAuC;EAC5CpK,MAAAA,MAAM,GAAG3hB,MAAM,CAACM,WAAP,CAAmB8nB,YAAY,CAAC2D,UAAD,CAA/B,EAA6C3X,SAA7C,EAAT;EACD;;EAEDsQ,IAAAA,QAAQ,GAAG,IAAI1kB,MAAJ,CAAW0kB,QAAX,CAAX,CAd8B;;EAiB9B,QAAItP,MAAJ,EAAY;EAAA;;EACVsP,MAAAA,QAAQ,CAACtP,MAAT,CAAgB,QAAhB,EAA0B;EAAEA,QAAAA,MAAM,EAAE,KAAKqS;EAAf,OAA1B;;EACA,UAAI,YAAA9F,MAAM,UAAN,0CAAQrjB,IAAR,IAAe,CAAnB,EAAsB;EACpBqjB,QAAAA,MAAM,CAACvM,MAAP,CAAc,QAAd,EAAwB;EAAEA,UAAAA,MAAM,EAAE,KAAKsS;EAAf,SAAxB;EACD;EACF;;EACD,QAAI9e,KAAJ,EAAW;EAAA;;EACT8b,MAAAA,QAAQ,CAAC9b,KAAT,CAAe,QAAf,EAAyB;EAAEA,QAAAA,KAAK,EAAE,KAAK+e;EAAd,OAAzB;;EACA,UAAI,aAAAhG,MAAM,UAAN,4CAAQrjB,IAAR,IAAe,CAAnB,EAAsB;EACpBqjB,QAAAA,MAAM,CAAC/Y,KAAP,CAAa,QAAb,EAAuB;EAAEA,UAAAA,KAAK,EAAE,KAAKgf;EAAd,SAAvB;EACD;EACF;;EAED,UAAMc,EAAE,GACN,KAAKV,IAAL,KAAc,YAAd,GACI,KAAKpL,KAAL,CAAW,CAAX,EAAcqN,GAAd,CAAkBhuB,MADtB,GAEI,KAAK2gB,KAAL,CAAW,CAAX,EAAc6N,GAAd,CAAkBxuB,MAHxB;EAKA,UAAMytB,EAAE,GAAGhF,QAAQ,CAAClZ,KAAT,EAAX,CAnC8B;;EAqC9B,QAAI8f,KAAJ;EACA,QAAIE,KAAJ;EACA,QAAID,KAAJ;EACA,QAAIzB,IAAJ;EACA,QAAIF,KAAJ;;EACA,SAAK,IAAI/b,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG6a,EAAxB,EAA4B7a,GAAG,EAA/B,EAAmC;EACjC,YAAM+O,KAAK,GAAG,KAAKA,KAAL,CAAW/O,GAAX,CAAd;EACA2d,MAAAA,KAAK,GAAG5O,KAAK,CAAC4O,KAAN,CAAYpX,SAAZ,EAAR;EACAmX,MAAAA,KAAK,GAAG3O,KAAK,CAAC2O,KAAd;EACAD,MAAAA,KAAK,GAAG5B,EAAE,CAAC9a,IAAH,CAAQ4c,KAAR,CAAR;EACA9B,MAAAA,EAAE,CAAClpB,GAAH,CAAO8qB,KAAK,CAAC1c,IAAN,CAAW2c,KAAX,CAAP,EALiC;;EAOjC3B,MAAAA,KAAK,GAAGF,EAAE,CAAC9a,IAAH,CAAQgO,KAAK,CAACqO,IAAN,CAAWhP,CAAX,CAAa7H,SAAb,EAAR,CAAR;EACA0V,MAAAA,IAAI,GAAGF,KAAK,CAAChb,IAAN,CAAWgO,KAAK,CAACqO,IAAN,CAAW1O,KAAtB,EAA6B3N,IAA7B,CAAkCgO,KAAK,CAACqO,IAAN,CAAWjX,CAA7C,CAAP;EACD;;EAED,QAAI,aAAA2N,MAAM,UAAN,4CAAQrjB,IAAR,IAAe,CAAnB,EAAsB;EACpB,UAAI,KAAK0pB,IAAL,KAAc,YAAlB,EAAgC;EAC9B,cAAM+B,IAAI,GAAGzC,GAAG,CAAC3F,MAAD,CAAhB;EACA,cAAMqI,KAAK,GAAG1C,GAAG,CAAC3F,MAAM,CAACnW,KAAP,GAAehL,GAAf,CAAmBspB,IAAnB,CAAD,CAAjB;EACA,cAAMG,GAAG,GAAG,IAAID,KAAK,GAAGD,IAAxB;EAEA,eAAO;EAAEH,UAAAA,KAAF;EAAS0B,UAAAA,KAAT;EAAgBxB,UAAAA,IAAhB;EAAsBG,UAAAA;EAAtB,SAAP;EACD,OAND,MAMO,IAAI,KAAKjC,IAAL,KAAc,sBAAlB,EAA0C;EAC/C,cAAMgE,eAAe,GAAGtK,eAAe,CAACE,UAAhB,CACtBmK,UADsB,EAEtBjC,IAAI,CAAClkB,SAAL,EAFsB,CAAxB;EAKA,cAAMskB,QAAQ,GAAGC,WAAW,CAAC4B,UAAD,EAAajC,IAAI,CAAClkB,SAAL,EAAb,CAA5B;EACA,cAAM6kB,GAAG,GAAGJ,MAAM,CAACH,QAAD,CAAlB;EACA,eAAO;EAAEN,UAAAA,KAAF;EAAS0B,UAAAA,KAAT;EAAgBxB,UAAAA,IAAhB;EAAsBkC,UAAAA,eAAtB;EAAuCvB,UAAAA;EAAvC,SAAP;EACD;EACF,KAjBD,MAiBO;EACL,aAAO;EAAEb,QAAAA,KAAF;EAAS0B,QAAAA,KAAT;EAAgBxB,QAAAA;EAAhB,OAAP;EACD;EACF;;EAEDQ,EAAAA,WAAW,CAAC5F,QAAD,EAAW/C,MAAX,EAAmB5lB,OAAO,GAAG,EAA7B,EAAiC;EAC1C;EACA;EACA;EACA;EACA,UAAM;EAAEqZ,MAAAA,MAAM,GAAG,IAAX;EAAiBxM,MAAAA,KAAK,GAAG;EAAzB,QAAkC7M,OAAxC;;EAEA,QAAIqZ,MAAJ,EAAY;EACVsP,MAAAA,QAAQ,CAACtP,MAAT,CAAgB,QAAhB;EACAuM,MAAAA,MAAM,CAACvM,MAAP,CAAc,QAAd;EACD;;EAED,QAAIxM,KAAJ,EAAW;EACT8b,MAAAA,QAAQ,CAAC9b,KAAT,CAAe,QAAf;EACA+Y,MAAAA,MAAM,CAAC/Y,KAAP,CAAa,QAAb,EAFS;EAIT;EACA;;EACA,WAAKmhB,IAAL,GAAYzC,GAAG,CAAC3F,MAAD,CAAf;EACA,WAAKsK,IAAL,GAAY3E,GAAG,CAAC5C,QAAD,CAAf;EACD;;EAED,UAAMwH,KAAK,GAAGxG,UAAU,CAAChB,QAAD,EAAW/C,MAAX,CAAxB;EACA,UAAMsJ,IAAI,GAAG,IAAI9E,MAAJ,CAAW+F,KAAK,CAACxF,SAAjB,EAA4B;EAAEtM,MAAAA,CAAC,EAAEuH;EAAL,KAA5B,CAAb;EAEA,UAAMiI,KAAK,GAAGsC,KAAK,CAACxF,SAAN,CAAgB9X,IAAhB,CAAqBqc,IAAI,CAAChP,CAAL,CAAO7H,SAAP,EAArB,CAAd;EACA,UAAMyV,cAAc,GAAGD,KAAK,CAAChb,IAAN,CAAWqc,IAAI,CAAC1O,KAAhB,EAAuB3N,IAAvB,CAA4Bqc,IAAI,CAACjX,CAAL,CAAOI,SAAP,EAA5B,CAAvB,CA1B0C;;EA2B1C,UAAM0V,IAAI,GAAG,IAAI9pB,MAAJ,CAAW6pB,cAAc,CAACvrB,IAA1B,EAAgC,CAAhC,CAAb;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgtB,cAAc,CAACvrB,IAAnC,EAAyCzB,CAAC,EAA1C,EAA8C;EAC5CitB,MAAAA,IAAI,CAACvd,MAAL,CAAY1P,CAAZ,EAAe,CAACgtB,cAAc,CAACvd,YAAf,CAA4BzP,CAA5B,EAA+ByK,GAA/B,EAAD,CAAf;EACD;;EACD,QAAI6kB,GAAG,GAAG,CAAV;;EACA,SAAK,IAAItvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8kB,MAAM,CAACpjB,OAA3B,EAAoC1B,CAAC,EAArC,EAAyC;EACvCsvB,MAAAA,GAAG,IAAI7E,GAAG,CAAC3F,MAAM,CAAC/U,eAAP,CAAuB/P,CAAvB,EAA0B2D,GAA1B,CAA8BspB,IAA9B,CAAD,CAAV;EACD;;EACD,UAAMkB,GAAG,GAAG,IAAImB,GAAG,GAAGxK,MAAM,CAACpjB,OAAb,GAAuB,KAAKwrB,IAA5C;EACA,UAAMqC,GAAG,GAAGnB,IAAI,CAACvU,CAAL,CAAO9H,IAAP,CAAYqc,IAAI,CAAChf,CAAjB,CAAZ;EACA,UAAMogB,IAAI,GAAG/E,GAAG,CAAC8E,GAAD,CAAhB;EACA,UAAMrB,GAAG,GAAGsB,IAAI,GAAG,KAAKJ,IAAxB;EAEA,WAAO;EACLjB,MAAAA,GADK;EAELD,MAAAA,GAFK;EAGLR,MAAAA,IAAI,EAAE2B,KAAK,CAACxF,SAHP;EAIL4E,MAAAA,KAAK,EAAEY,KAAK,CAACrF,YAJR;EAKL0E,MAAAA,KAAK,EAAEW,KAAK,CAACtF,cALR;EAML4E,MAAAA,KAAK,EAAEU,KAAK,CAACvF,aANR;EAOLiD,MAAAA,KAAK,EAAEA,KAPF;EAQL6B,MAAAA,SAAS,EAAE3B,IARN;EASLY,MAAAA,KAAK,EAAEwB,KAAK,CAACrF,YAAN,CAAmBjY,IAAnB,CAAwBsd,KAAK,CAACtF,cAA9B,CATF;EAULsF,MAAAA,KAVK;EAWLjB,MAAAA;EAXK,KAAP;EAaD;EACD;EACF;EACA;EACA;EACA;EACA;;;EACElC,EAAAA,aAAa,CAAC7R,CAAD,EAAIiR,KAAJ,EAAW5iB,KAAX,EAAkB;EAC7B,UAAM0jB,YAAY,GAAG,IAAIjpB,MAAJ,CAAWuF,KAAK,CAAC4f,SAAN,CAAgBlpB,MAA3B,EAAmCib,CAAC,CAAC3Y,OAArC,CAArB;EACA,UAAM+tB,UAAU,GAAG,IAAItsB,MAAJ,CAAWuF,KAAK,CAAC4f,SAAN,CAAgBlpB,MAA3B,EAAmCksB,KAAK,CAAC5pB,OAAzC,CAAnB;EACAgH,IAAAA,KAAK,CAAC4f,SAAN,CAAgBH,OAAhB,CAAwB,CAACO,EAAD,EAAK1X,GAAL,KAAa;EACnCob,MAAAA,YAAY,CAAC1c,MAAb,CAAoBsB,GAApB,EAAyBqJ,CAAC,CAAC7K,MAAF,CAASkZ,EAAT,CAAzB;EACA+G,MAAAA,UAAU,CAAC/f,MAAX,CAAkBsB,GAAlB,EAAuBsa,KAAK,CAAC9b,MAAN,CAAakZ,EAAb,CAAvB;EACD,KAHD;EAKA,UAAM4D,aAAa,GAAG,IAAInpB,MAAJ,CAAWuF,KAAK,CAAC6f,UAAN,CAAiBnpB,MAA5B,EAAoCib,CAAC,CAAC3Y,OAAtC,CAAtB;EACA,UAAM8qB,WAAW,GAAG,IAAIrpB,MAAJ,CAAWuF,KAAK,CAAC6f,UAAN,CAAiBnpB,MAA5B,EAAoCksB,KAAK,CAAC5pB,OAA1C,CAApB;EACAgH,IAAAA,KAAK,CAAC6f,UAAN,CAAiBJ,OAAjB,CAAyB,CAACO,EAAD,EAAK1X,GAAL,KAAa;EACpCsb,MAAAA,aAAa,CAAC5c,MAAd,CAAqBsB,GAArB,EAA0BqJ,CAAC,CAAC7K,MAAF,CAASkZ,EAAT,CAA1B;EACA8D,MAAAA,WAAW,CAAC9c,MAAZ,CAAmBsB,GAAnB,EAAwBsa,KAAK,CAAC9b,MAAN,CAAakZ,EAAb,CAAxB;EACD,KAHD;EAKA,WAAO;EACL4D,MAAAA,aADK;EAELF,MAAAA,YAFK;EAGLI,MAAAA,WAHK;EAILiD,MAAAA;EAJK,KAAP;EAMD;;EA/be;;EAkclB,SAASlE,YAAT,CAAsBlhB,KAAtB,EAA6B;EAC3B,QAAMwd,QAAQ,GAAG,CAAC,GAAG,IAAI1C,GAAJ,CAAQ9a,KAAR,CAAJ,CAAjB;EACA,QAAMvI,MAAM,GAAG,EAAf;;EACA,MAAI+lB,QAAQ,CAACzoB,MAAT,GAAkB,CAAtB,EAAyB;EACvB,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6nB,QAAQ,CAACzoB,MAA7B,EAAqCY,CAAC,EAAtC,EAA0C;EACxC,YAAM0vB,OAAO,GAAG,EAAhB;;EACA,WAAK,IAAI1tB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqI,KAAK,CAACjL,MAA1B,EAAkC4C,CAAC,EAAnC,EAAuC;EACrC,cAAM2tB,KAAK,GAAG9H,QAAQ,CAAC7nB,CAAD,CAAR,KAAgBqK,KAAK,CAACrI,CAAD,CAArB,GAA2B,CAA3B,GAA+B,CAAC,CAA9C;EACA0tB,QAAAA,OAAO,CAACztB,IAAR,CAAa0tB,KAAb;EACD;;EACD7tB,MAAAA,MAAM,CAACG,IAAP,CAAYytB,OAAZ;EACD;;EACD,WAAO5tB,MAAP;EACD,GAVD,MAUO;EACL,UAAMA,MAAM,GAAG,EAAf;;EACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqI,KAAK,CAACjL,MAA1B,EAAkC4C,CAAC,EAAnC,EAAuC;EACrC,YAAM2tB,KAAK,GAAG9H,QAAQ,CAAC,CAAD,CAAR,KAAgBxd,KAAK,CAACrI,CAAD,CAArB,GAA2B,CAA3B,GAA+B,CAA7C;EACAF,MAAAA,MAAM,CAACG,IAAP,CAAY0tB,KAAZ;EACD;;EACD,WAAO,CAAC7tB,MAAD,CAAP;EACD;EACF;;;;;;;;;;;;;"}