{"version":3,"file":"index.cjs","sources":["../lib/base.js","../lib/factory.js","../lib/types.js","../lib/ns.js","../lib/descriptor-builder.js","../lib/registry.js","../lib/properties.js","../lib/moddle.js"],"sourcesContent":["/**\n * Moddle base element.\n */\nexport default function Base() { }\n\nBase.prototype.get = function(name) {\n  return this.$model.properties.get(this, name);\n};\n\nBase.prototype.set = function(name, value) {\n  this.$model.properties.set(this, name, value);\n};","import {\n  forEach,\n  bind\n} from 'min-dash';\n\nimport Base from './base.js';\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nexport default function Factory(model, properties) {\n  this.model = model;\n  this.properties = properties;\n}\n\n\nFactory.prototype.createType = function(descriptor) {\n\n  var model = this.model;\n\n  var props = this.properties,\n      prototype = Object.create(Base.prototype);\n\n  // initialize default values\n  forEach(descriptor.properties, function(p) {\n    if (!p.isMany && p.default !== undefined) {\n      prototype[p.name] = p.default;\n    }\n  });\n\n  props.defineModel(prototype, model);\n  props.defineDescriptor(prototype, descriptor);\n\n  var name = descriptor.ns.name;\n\n  /**\n   * The new type constructor\n   */\n  function ModdleElement(attrs) {\n    props.define(this, '$type', { value: name, enumerable: true });\n    props.define(this, '$attrs', { value: {} });\n    props.define(this, '$parent', { writable: true });\n\n    forEach(attrs, bind(function(val, key) {\n      this.set(key, val);\n    }, this));\n  }\n\n  ModdleElement.prototype = prototype;\n\n  ModdleElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n  // static links\n  props.defineModel(ModdleElement, model);\n  props.defineDescriptor(ModdleElement, descriptor);\n\n  return ModdleElement;\n};","/**\n * Built-in moddle types\n */\nvar BUILTINS = {\n  String: true,\n  Boolean: true,\n  Integer: true,\n  Real: true,\n  Element: true\n};\n\n/**\n * Converters for built in types from string representations\n */\nvar TYPE_CONVERTERS = {\n  String: function(s) { return s; },\n  Boolean: function(s) { return s === 'true'; },\n  Integer: function(s) { return parseInt(s, 10); },\n  Real: function(s) { return parseFloat(s); }\n};\n\n/**\n * Convert a type to its real representation\n */\nexport function coerceType(type, value) {\n\n  var converter = TYPE_CONVERTERS[type];\n\n  if (converter) {\n    return converter(value);\n  } else {\n    return value;\n  }\n}\n\n/**\n * Return whether the given type is built-in\n */\nexport function isBuiltIn(type) {\n  return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nexport function isSimple(type) {\n  return !!TYPE_CONVERTERS[type];\n}","/**\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\n * given a default prefix to assume in case no explicit namespace is given.\n *\n * @param {String} name\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\n *\n * @return {Object} the parsed name\n */\nexport function parseName(name, defaultPrefix) {\n  var parts = name.split(/:/),\n      localName, prefix;\n\n  // no prefix (i.e. only local name)\n  if (parts.length === 1) {\n    localName = name;\n    prefix = defaultPrefix;\n  }\n\n  // prefix + local name\n  else if (parts.length === 2) {\n    localName = parts[1];\n    prefix = parts[0];\n  }\n\n  else {\n    throw new Error('expected <prefix:localName> or <localName>, got ' + name);\n  }\n\n  name = (prefix ? prefix + ':' : '') + localName;\n\n  return {\n    name: name,\n    prefix: prefix,\n    localName: localName\n  };\n}","import {\n  pick,\n  assign,\n  forEach,\n  bind\n} from 'min-dash';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n\n/**\n * A utility to build element descriptors.\n */\nexport default function DescriptorBuilder(nameNs) {\n  this.ns = nameNs;\n  this.name = nameNs.name;\n  this.allTypes = [];\n  this.allTypesByName = {};\n  this.properties = [];\n  this.propertiesByName = {};\n}\n\n\nDescriptorBuilder.prototype.build = function() {\n  return pick(this, [\n    'ns',\n    'name',\n    'allTypes',\n    'allTypesByName',\n    'properties',\n    'propertiesByName',\n    'bodyProperty',\n    'idProperty'\n  ]);\n};\n\n/**\n * Add property at given index.\n *\n * @param {Object} p\n * @param {Number} [idx]\n * @param {Boolean} [validate=true]\n */\nDescriptorBuilder.prototype.addProperty = function(p, idx, validate) {\n\n  if (typeof idx === 'boolean') {\n    validate = idx;\n    idx = undefined;\n  }\n\n  this.addNamedProperty(p, validate !== false);\n\n  var properties = this.properties;\n\n  if (idx !== undefined) {\n    properties.splice(idx, 0, p);\n  } else {\n    properties.push(p);\n  }\n};\n\n\nDescriptorBuilder.prototype.replaceProperty = function(oldProperty, newProperty, replace) {\n  var oldNameNs = oldProperty.ns;\n\n  var props = this.properties,\n      propertiesByName = this.propertiesByName,\n      rename = oldProperty.name !== newProperty.name;\n\n  if (oldProperty.isId) {\n    if (!newProperty.isId) {\n      throw new Error(\n        'property <' + newProperty.ns.name + '> must be id property ' +\n        'to refine <' + oldProperty.ns.name + '>');\n    }\n\n    this.setIdProperty(newProperty, false);\n  }\n\n  if (oldProperty.isBody) {\n\n    if (!newProperty.isBody) {\n      throw new Error(\n        'property <' + newProperty.ns.name + '> must be body property ' +\n        'to refine <' + oldProperty.ns.name + '>');\n    }\n\n    // TODO: Check compatibility\n    this.setBodyProperty(newProperty, false);\n  }\n\n  // validate existence and get location of old property\n  var idx = props.indexOf(oldProperty);\n  if (idx === -1) {\n    throw new Error('property <' + oldNameNs.name + '> not found in property list');\n  }\n\n  // remove old property\n  props.splice(idx, 1);\n\n  // replacing the named property is intentional\n  //\n  //  * validate only if this is a \"rename\" operation\n  //  * add at specific index unless we \"replace\"\n  //\n  this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n  // make new property available under old name\n  propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\n\n\nDescriptorBuilder.prototype.redefineProperty = function(p, targetPropertyName, replace) {\n\n  var nsPrefix = p.ns.prefix;\n  var parts = targetPropertyName.split('#');\n\n  var name = parseNameNs(parts[0], nsPrefix);\n  var attrName = parseNameNs(parts[1], name.prefix).name;\n\n  var redefinedProperty = this.propertiesByName[attrName];\n  if (!redefinedProperty) {\n    throw new Error('refined property <' + attrName + '> not found');\n  } else {\n    this.replaceProperty(redefinedProperty, p, replace);\n  }\n\n  delete p.redefines;\n};\n\nDescriptorBuilder.prototype.addNamedProperty = function(p, validate) {\n  var ns = p.ns,\n      propsByName = this.propertiesByName;\n\n  if (validate) {\n    this.assertNotDefined(p, ns.name);\n    this.assertNotDefined(p, ns.localName);\n  }\n\n  propsByName[ns.name] = propsByName[ns.localName] = p;\n};\n\nDescriptorBuilder.prototype.removeNamedProperty = function(p) {\n  var ns = p.ns,\n      propsByName = this.propertiesByName;\n\n  delete propsByName[ns.name];\n  delete propsByName[ns.localName];\n};\n\nDescriptorBuilder.prototype.setBodyProperty = function(p, validate) {\n\n  if (validate && this.bodyProperty) {\n    throw new Error(\n      'body property defined multiple times ' +\n      '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n  }\n\n  this.bodyProperty = p;\n};\n\nDescriptorBuilder.prototype.setIdProperty = function(p, validate) {\n\n  if (validate && this.idProperty) {\n    throw new Error(\n      'id property defined multiple times ' +\n      '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n  }\n\n  this.idProperty = p;\n};\n\nDescriptorBuilder.prototype.assertNotTrait = function(typeDescriptor) {\n\n  const _extends = typeDescriptor.extends || [];\n\n  if (_extends.length) {\n    throw new Error(\n      `cannot create <${ typeDescriptor.name }> extending <${ typeDescriptor.extends }>`\n    );\n  }\n};\n\nDescriptorBuilder.prototype.assertNotDefined = function(p, name) {\n  var propertyName = p.name,\n      definedProperty = this.propertiesByName[propertyName];\n\n  if (definedProperty) {\n    throw new Error(\n      'property <' + propertyName + '> already defined; ' +\n      'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' +\n      '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n  }\n};\n\nDescriptorBuilder.prototype.hasProperty = function(name) {\n  return this.propertiesByName[name];\n};\n\nDescriptorBuilder.prototype.addTrait = function(t, inherited) {\n\n  if (inherited) {\n    this.assertNotTrait(t);\n  }\n\n  var typesByName = this.allTypesByName,\n      types = this.allTypes;\n\n  var typeName = t.name;\n\n  if (typeName in typesByName) {\n    return;\n  }\n\n  forEach(t.properties, bind(function(p) {\n\n    // clone property to allow extensions\n    p = assign({}, p, {\n      name: p.ns.localName,\n      inherited: inherited\n    });\n\n    Object.defineProperty(p, 'definedBy', {\n      value: t\n    });\n\n    var replaces = p.replaces,\n        redefines = p.redefines;\n\n    // add replace/redefine support\n    if (replaces || redefines) {\n      this.redefineProperty(p, replaces || redefines, replaces);\n    } else {\n      if (p.isBody) {\n        this.setBodyProperty(p);\n      }\n      if (p.isId) {\n        this.setIdProperty(p);\n      }\n      this.addProperty(p);\n    }\n  }, this));\n\n  types.push(t);\n  typesByName[typeName] = t;\n};","import {\n  assign,\n  forEach,\n  bind\n} from 'min-dash';\n\nimport {\n  isBuiltIn as isBuiltInType\n} from './types.js';\n\nimport DescriptorBuilder from './descriptor-builder.js';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array<Package>} packages\n * @param {Properties} properties\n */\nexport default function Registry(packages, properties) {\n  this.packageMap = {};\n  this.typeMap = {};\n\n  this.packages = [];\n\n  this.properties = properties;\n\n  forEach(packages, bind(this.registerPackage, this));\n}\n\n\nRegistry.prototype.getPackage = function(uriOrPrefix) {\n  return this.packageMap[uriOrPrefix];\n};\n\nRegistry.prototype.getPackages = function() {\n  return this.packages;\n};\n\n\nRegistry.prototype.registerPackage = function(pkg) {\n\n  // copy package\n  pkg = assign({}, pkg);\n\n  var pkgMap = this.packageMap;\n\n  ensureAvailable(pkgMap, pkg, 'prefix');\n  ensureAvailable(pkgMap, pkg, 'uri');\n\n  // register types\n  forEach(pkg.types, bind(function(descriptor) {\n    this.registerType(descriptor, pkg);\n  }, this));\n\n  pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n  this.packages.push(pkg);\n};\n\n\n/**\n * Register a type from a specific package with us\n */\nRegistry.prototype.registerType = function(type, pkg) {\n\n  type = assign({}, type, {\n    superClass: (type.superClass || []).slice(),\n    extends: (type.extends || []).slice(),\n    properties: (type.properties || []).slice(),\n    meta: assign(({}, type.meta || {}))\n  });\n\n  var ns = parseNameNs(type.name, pkg.prefix),\n      name = ns.name,\n      propertiesByName = {};\n\n  // parse properties\n  forEach(type.properties, bind(function(p) {\n\n    // namespace property names\n    var propertyNs = parseNameNs(p.name, ns.prefix),\n        propertyName = propertyNs.name;\n\n    // namespace property types\n    if (!isBuiltInType(p.type)) {\n      p.type = parseNameNs(p.type, propertyNs.prefix).name;\n    }\n\n    assign(p, {\n      ns: propertyNs,\n      name: propertyName\n    });\n\n    propertiesByName[propertyName] = p;\n  }, this));\n\n  // update ns + name\n  assign(type, {\n    ns: ns,\n    name: name,\n    propertiesByName: propertiesByName\n  });\n\n  forEach(type.extends, bind(function(extendsName) {\n    var extendsNameNs = parseNameNs(extendsName, ns.prefix);\n\n    var extended = this.typeMap[extendsNameNs.name];\n\n    extended.traits = extended.traits || [];\n    extended.traits.push(name);\n  }, this));\n\n  // link to package\n  this.definePackage(type, pkg);\n\n  // register\n  this.typeMap[name] = type;\n};\n\n\n/**\n * Traverse the type hierarchy from bottom to top,\n * calling iterator with (type, inherited) for all elements in\n * the inheritance chain.\n *\n * @param {Object} nsName\n * @param {Function} iterator\n * @param {Boolean} [trait=false]\n */\nRegistry.prototype.mapTypes = function(nsName, iterator, trait) {\n\n  var type = isBuiltInType(nsName.name) ? { name: nsName.name } : this.typeMap[nsName.name];\n\n  var self = this;\n\n  /**\n   * Traverse the selected super type or trait\n   *\n   * @param {String} cls\n   * @param {Boolean} [trait=false]\n   */\n  function traverse(cls, trait) {\n    var parentNs = parseNameNs(cls, isBuiltInType(cls) ? '' : nsName.prefix);\n    self.mapTypes(parentNs, iterator, trait);\n  }\n\n  /**\n   * Traverse the selected trait.\n   *\n   * @param {String} cls\n   */\n  function traverseTrait(cls) {\n    return traverse(cls, true);\n  }\n\n  /**\n   * Traverse the selected super type\n   *\n   * @param {String} cls\n   */\n  function traverseSuper(cls) {\n    return traverse(cls, false);\n  }\n\n  if (!type) {\n    throw new Error('unknown type <' + nsName.name + '>');\n  }\n\n  forEach(type.superClass, trait ? traverseTrait : traverseSuper);\n\n  // call iterator with (type, inherited=!trait)\n  iterator(type, !trait);\n\n  forEach(type.traits, traverseTrait);\n};\n\n\n/**\n * Returns the effective descriptor for a type.\n *\n * @param  {String} type the namespaced name (ns:localName) of the type\n *\n * @return {Descriptor} the resulting effective descriptor\n */\nRegistry.prototype.getEffectiveDescriptor = function(name) {\n\n  var nsName = parseNameNs(name);\n\n  var builder = new DescriptorBuilder(nsName);\n\n  this.mapTypes(nsName, function(type, inherited) {\n    builder.addTrait(type, inherited);\n  });\n\n  var descriptor = builder.build();\n\n  // define package link\n  this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n\n  return descriptor;\n};\n\n\nRegistry.prototype.definePackage = function(target, pkg) {\n  this.properties.define(target, '$pkg', { value: pkg });\n};\n\n\n\n// helpers ////////////////////////////\n\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n\n  var value = pkg[identifierKey];\n\n  if (value in packageMap) {\n    throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n  }\n}\n","import {\n  assign,\n  isString\n} from 'min-dash';\n\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nexport default function Properties(model) {\n  this.model = model;\n}\n\n\n/**\n * Sets a named property on the target element.\n * If the value is undefined, the property gets deleted.\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} value\n */\nProperties.prototype.set = function(target, name, value) {\n\n  if (!isString(name) || !name.length) {\n    throw new TypeError('property name must be a non-empty string');\n  }\n\n  var property = this.getProperty(target, name);\n\n  var propertyName = property && property.name;\n\n  if (isUndefined(value)) {\n\n    // unset the property, if the specified value is undefined;\n    // delete from $attrs (for extensions) or the target itself\n    if (property) {\n      delete target[propertyName];\n    } else {\n      delete target.$attrs[stripGlobal(name)];\n    }\n  } else {\n\n    // set the property, defining well defined properties on the fly\n    // or simply updating them in target.$attrs (for extensions)\n    if (property) {\n      if (propertyName in target) {\n        target[propertyName] = value;\n      } else {\n        defineProperty(target, property, value);\n      }\n    } else {\n      target.$attrs[stripGlobal(name)] = value;\n    }\n  }\n};\n\n/**\n * Returns the named property of the given element\n *\n * @param  {Object} target\n * @param  {String} name\n *\n * @return {Object}\n */\nProperties.prototype.get = function(target, name) {\n\n  var property = this.getProperty(target, name);\n\n  if (!property) {\n    return target.$attrs[stripGlobal(name)];\n  }\n\n  var propertyName = property.name;\n\n  // check if access to collection property and lazily initialize it\n  if (!target[propertyName] && property.isMany) {\n    defineProperty(target, property, []);\n  }\n\n  return target[propertyName];\n};\n\n\n/**\n * Define a property on the target element\n *\n * @param  {Object} target\n * @param  {String} name\n * @param  {Object} options\n */\nProperties.prototype.define = function(target, name, options) {\n\n  if (!options.writable) {\n\n    var value = options.value;\n\n    // use getters for read-only variables to support ES6 proxies\n    // cf. https://github.com/bpmn-io/internal-docs/issues/386\n    options = assign({}, options, {\n      get: function() { return value; }\n    });\n\n    delete options.value;\n  }\n\n  Object.defineProperty(target, name, options);\n};\n\n\n/**\n * Define the descriptor for an element\n */\nProperties.prototype.defineDescriptor = function(target, descriptor) {\n  this.define(target, '$descriptor', { value: descriptor });\n};\n\n/**\n * Define the model for an element\n */\nProperties.prototype.defineModel = function(target, model) {\n  this.define(target, '$model', { value: model });\n};\n\n/**\n * Return property with the given name on the element.\n *\n * @param {any} target\n * @param {string} name\n *\n * @return {object | null} property\n */\nProperties.prototype.getProperty = function(target, name) {\n\n  var model = this.model;\n\n  var property = model.getPropertyDescriptor(target, name);\n\n  if (property) {\n    return property;\n  }\n\n  if (name.includes(':')) {\n    return null;\n  }\n\n  const strict = model.config.strict;\n\n  if (typeof strict !== 'undefined') {\n    const error = new TypeError(`unknown property <${ name }> on <${ target.$type }>`);\n\n    if (strict) {\n      throw error;\n    } else {\n\n      // eslint-disable-next-line no-undef\n      typeof console !== 'undefined' && console.warn(error);\n    }\n  }\n\n  return null;\n};\n\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\nfunction defineProperty(target, property, value) {\n  Object.defineProperty(target, property.name, {\n    enumerable: !property.isReference,\n    writable: true,\n    value: value,\n    configurable: true\n  });\n}\n\nfunction stripGlobal(name) {\n  return name.replace(/^:/, '');\n}","import {\n  isString,\n  isObject,\n  forEach,\n  set\n} from 'min-dash';\n\nimport Factory from './factory.js';\nimport Registry from './registry.js';\nimport Properties from './properties.js';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n\n// Moddle implementation /////////////////////////////////////////////////\n\n/**\n * @class Moddle\n *\n * A model that can be used to create elements of a specific type.\n *\n * @example\n *\n * var Moddle = require('moddle');\n *\n * var pkg = {\n *   name: 'mypackage',\n *   prefix: 'my',\n *   types: [\n *     { name: 'Root' }\n *   ]\n * };\n *\n * var moddle = new Moddle([pkg]);\n *\n * @param {Array<Package>} packages the packages to contain\n *\n * @param { { strict?: boolean } } [config] moddle configuration\n */\nexport default function Moddle(packages, config = {}) {\n\n  this.properties = new Properties(this);\n\n  this.factory = new Factory(this, this.properties);\n  this.registry = new Registry(packages, this.properties);\n\n  this.typeCache = {};\n\n  this.config = config;\n}\n\n\n/**\n * Create an instance of the specified type.\n *\n * @method Moddle#create\n *\n * @example\n *\n * var foo = moddle.create('my:Foo');\n * var bar = moddle.create('my:Bar', { id: 'BAR_1' });\n *\n * @param  {String|Object} descriptor the type descriptor or name know to the model\n * @param  {Object} attrs   a number of attributes to initialize the model instance with\n * @return {Object}         model instance\n */\nModdle.prototype.create = function(descriptor, attrs) {\n  var Type = this.getType(descriptor);\n\n  if (!Type) {\n    throw new Error('unknown type <' + descriptor + '>');\n  }\n\n  return new Type(attrs);\n};\n\n\n/**\n * Returns the type representing a given descriptor\n *\n * @method Moddle#getType\n *\n * @example\n *\n * var Foo = moddle.getType('my:Foo');\n * var foo = new Foo({ 'id' : 'FOO_1' });\n *\n * @param  {String|Object} descriptor the type descriptor or name know to the model\n * @return {Object}         the type representing the descriptor\n */\nModdle.prototype.getType = function(descriptor) {\n\n  var cache = this.typeCache;\n\n  var name = isString(descriptor) ? descriptor : descriptor.ns.name;\n\n  var type = cache[name];\n\n  if (!type) {\n    descriptor = this.registry.getEffectiveDescriptor(name);\n    type = cache[name] = this.factory.createType(descriptor);\n  }\n\n  return type;\n};\n\n\n/**\n * Creates an any-element type to be used within model instances.\n *\n * This can be used to create custom elements that lie outside the meta-model.\n * The created element contains all the meta-data required to serialize it\n * as part of meta-model elements.\n *\n * @method Moddle#createAny\n *\n * @example\n *\n * var foo = moddle.createAny('vendor:Foo', 'http://vendor', {\n *   value: 'bar'\n * });\n *\n * var container = moddle.create('my:Container', 'http://my', {\n *   any: [ foo ]\n * });\n *\n * // go ahead and serialize the stuff\n *\n *\n * @param  {String} name  the name of the element\n * @param  {String} nsUri the namespace uri of the element\n * @param  {Object} [properties] a map of properties to initialize the instance with\n * @return {Object} the any type instance\n */\nModdle.prototype.createAny = function(name, nsUri, properties) {\n\n  var nameNs = parseNameNs(name);\n\n  var element = {\n    $type: name,\n    $instanceOf: function(type) {\n      return type === this.$type;\n    },\n    get: function(key) {\n      return this[key];\n    },\n    set: function(key, value) {\n      set(this, [ key ], value);\n    }\n  };\n\n  var descriptor = {\n    name: name,\n    isGeneric: true,\n    ns: {\n      prefix: nameNs.prefix,\n      localName: nameNs.localName,\n      uri: nsUri\n    }\n  };\n\n  this.properties.defineDescriptor(element, descriptor);\n  this.properties.defineModel(element, this);\n  this.properties.define(element, 'get', { enumerable: false, writable: true });\n  this.properties.define(element, 'set', { enumerable: false, writable: true });\n  this.properties.define(element, '$parent', { enumerable: false, writable: true });\n  this.properties.define(element, '$instanceOf', { enumerable: false, writable: true });\n\n  forEach(properties, function(a, key) {\n    if (isObject(a) && a.value !== undefined) {\n      element[a.name] = a.value;\n    } else {\n      element[key] = a;\n    }\n  });\n\n  return element;\n};\n\n/**\n * Returns a registered package by uri or prefix\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackage = function(uriOrPrefix) {\n  return this.registry.getPackage(uriOrPrefix);\n};\n\n/**\n * Returns a snapshot of all known packages\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackages = function() {\n  return this.registry.getPackages();\n};\n\n/**\n * Returns the descriptor for an element\n */\nModdle.prototype.getElementDescriptor = function(element) {\n  return element.$descriptor;\n};\n\n/**\n * Returns true if the given descriptor or instance\n * represents the given type.\n *\n * May be applied to this, if element is omitted.\n */\nModdle.prototype.hasType = function(element, type) {\n  if (type === undefined) {\n    type = element;\n    element = this;\n  }\n\n  var descriptor = element.$model.getElementDescriptor(element);\n\n  return (type in descriptor.allTypesByName);\n};\n\n/**\n * Returns the descriptor of an elements named property\n */\nModdle.prototype.getPropertyDescriptor = function(element, property) {\n  return this.getElementDescriptor(element).propertiesByName[property];\n};\n\n/**\n * Returns a mapped type's descriptor\n */\nModdle.prototype.getTypeDescriptor = function(type) {\n  return this.registry.typeMap[type];\n};"],"names":["forEach","bind","pick","parseNameNs","assign","isBuiltInType","isString","set","isObject"],"mappings":";;;;AAAA;AACA;AACA;AACe,SAAS,IAAI,GAAG,GAAG;AAClC;AACA,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;AACpC,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AACF;AACA,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;AAC3C,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;;ACJD;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE;AACnD,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B,CAAC;AACD;AACA;AACA,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE;AACpD;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD;AACA;AACA,EAAEA,eAAO,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;AAC7C,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9C,MAAM,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACpC,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACtC,EAAE,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD;AACA,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;AAChC;AACA;AACA;AACA;AACA,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE;AAChC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD;AACA,IAAIA,eAAO,CAAC,KAAK,EAAEC,YAAI,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE;AAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,GAAG;AACH;AACA,EAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;AACtC;AACA,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACrE;AACA;AACA,EAAE,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAC1C,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACpD;AACA,EAAE,OAAO,aAAa,CAAC;AACvB,CAAC;;AC5DD;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,OAAO,EAAE,IAAI;AACf,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;AACnC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,EAAE;AAC/C,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAClD,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;AACxC;AACA,EAAE,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;AACxC;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG,MAAM;AACT,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,IAAI,EAAE;AAC/B,EAAE,OAAO,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjC;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE;AAC/C,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,MAAM,SAAS,EAAE,MAAM,CAAC;AACxB;AACA;AACA,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,IAAI,MAAM,GAAG,aAAa,CAAC;AAC3B,GAAG;AACH;AACA;AACA,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,GAAG;AACH;AACA,OAAO;AACP,IAAI,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,IAAI,CAAC,CAAC;AAC/E,GAAG;AACH;AACA,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,SAAS,CAAC;AAClD;AACA,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,SAAS,EAAE,SAAS;AACxB,GAAG,CAAC;AACJ;;ACxBA;AACA;AACA;AACe,SAAS,iBAAiB,CAAC,MAAM,EAAE;AAClD,EAAE,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;AACnB,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC1B,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrB,EAAE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAC3B,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC7B,CAAC;AACD;AACA;AACA,iBAAiB,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW;AAC/C,EAAE,OAAOC,YAAI,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,UAAU;AACd,IAAI,gBAAgB;AACpB,IAAI,YAAY;AAChB,IAAI,kBAAkB;AACtB,IAAI,cAAc;AAClB,IAAI,YAAY;AAChB,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;AACrE;AACA,EAAE,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;AAChC,IAAI,QAAQ,GAAG,GAAG,CAAC;AACnB,IAAI,GAAG,GAAG,SAAS,CAAC;AACpB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC;AACA,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AACzB,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,GAAG,MAAM;AACT,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA,iBAAiB,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE;AAC1F,EAAE,IAAI,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC;AACjC;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC9C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;AACrD;AACA,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE;AACxB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAC3B,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,GAAG,wBAAwB;AACrE,QAAQ,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACnD,KAAK;AACL;AACA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,IAAI,WAAW,CAAC,MAAM,EAAE;AAC1B;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC7B,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,GAAG,0BAA0B;AACvE,QAAQ,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACnD,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACvC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AAClB,IAAI,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,GAAG,8BAA8B,CAAC,CAAC;AACpF,GAAG;AACH;AACA;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC;AACnE;AACA;AACA,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;AACzF,CAAC,CAAC;AACF;AACA;AACA,iBAAiB,CAAC,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE;AACxF;AACA,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;AAC7B,EAAE,IAAI,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C;AACA,EAAE,IAAI,IAAI,GAAGC,SAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7C,EAAE,IAAI,QAAQ,GAAGA,SAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACzD;AACA,EAAE,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC1D,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC1B,IAAI,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC;AACrE,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACxD,GAAG;AACH;AACA,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;AACrB,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE;AACrE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AACf,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC1C;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,SAAS,CAAC,EAAE;AAC9D,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AACf,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC1C;AACA,EAAE,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9B,EAAE,OAAO,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE;AACpE;AACA,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,uCAAuC;AAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACpE,GAAG;AACH;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE;AAClE;AACA,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,qCAAqC;AAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAClE,GAAG;AACH;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,cAAc,EAAE;AACtE;AACA,EAAE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;AAChD;AACA,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE;AACvB,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,CAAC,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;AACxF,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE;AACjE,EAAE,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI;AAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC5D;AACA,EAAE,IAAI,eAAe,EAAE;AACvB,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,YAAY,GAAG,YAAY,GAAG,qBAAqB;AACzD,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,EAAE,CAAC,IAAI,GAAG,OAAO;AACnG,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,iCAAiC,CAAC,CAAC;AACvF,GAAG;AACH,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACzD,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC;AACF;AACA,iBAAiB,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE;AAC9D;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc;AACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B;AACA,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;AACxB;AACA,EAAE,IAAI,QAAQ,IAAI,WAAW,EAAE;AAC/B,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAEH,eAAO,CAAC,CAAC,CAAC,UAAU,EAAEC,YAAI,CAAC,SAAS,CAAC,EAAE;AACzC;AACA;AACA,IAAI,CAAC,GAAGG,cAAM,CAAC,EAAE,EAAE,CAAC,EAAE;AACtB,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS;AAC1B,MAAM,SAAS,EAAE,SAAS;AAC1B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE;AAC1C,MAAM,KAAK,EAAE,CAAC;AACd,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAC7B,QAAQ,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AAChC;AACA;AACA,IAAI,IAAI,QAAQ,IAAI,SAAS,EAAE;AAC/B,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChE,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;AACpB,QAAQ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE;AAClB,QAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9B,OAAO;AACP,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAK;AACL,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACZ;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;;ACtOD;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE;AACvD,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrB;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B;AACA,EAAEJ,eAAO,CAAC,QAAQ,EAAEC,YAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AACD;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,WAAW,EAAE;AACtD,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC,CAAC;AACF;AACA,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW;AAC5C,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC,CAAC;AACF;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,GAAG,EAAE;AACnD;AACA;AACA,EAAE,GAAG,GAAGG,cAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACxB;AACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/B;AACA,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzC,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACtC;AACA;AACA,EAAEJ,eAAO,CAAC,GAAG,CAAC,KAAK,EAAEC,YAAI,CAAC,SAAS,UAAU,EAAE;AAC/C,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACvC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACZ;AACA,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC7C,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE;AACtD;AACA,EAAE,IAAI,GAAGG,cAAM,CAAC,EAAE,EAAE,IAAI,EAAE;AAC1B,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,EAAE;AAC/C,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE;AACzC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,EAAE;AAC/C,IAAI,IAAI,EAAEA,cAAM,EAAM,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACvC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,EAAE,GAAGD,SAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;AAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI;AACpB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B;AACA;AACA,EAAEH,eAAO,CAAC,IAAI,CAAC,UAAU,EAAEC,YAAI,CAAC,SAAS,CAAC,EAAE;AAC5C;AACA;AACA,IAAI,IAAI,UAAU,GAAGE,SAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC;AACnD,QAAQ,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;AACvC;AACA;AACA,IAAI,IAAI,CAACE,SAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAChC,MAAM,CAAC,CAAC,IAAI,GAAGF,SAAW,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAC3D,KAAK;AACL;AACA,IAAIC,cAAM,CAAC,CAAC,EAAE;AACd,MAAM,EAAE,EAAE,UAAU;AACpB,MAAM,IAAI,EAAE,YAAY;AACxB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACvC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACZ;AACA;AACA,EAAEA,cAAM,CAAC,IAAI,EAAE;AACf,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAEJ,eAAO,CAAC,IAAI,CAAC,OAAO,EAAEC,YAAI,CAAC,SAAS,WAAW,EAAE;AACnD,IAAI,IAAI,aAAa,GAAGE,SAAW,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAC5D;AACA,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACpD;AACA,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;AAC5C,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACZ;AACA;AACA,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC;AACA;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC5B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;AAChE;AACA,EAAE,IAAI,IAAI,GAAGE,SAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5F;AACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;AAChC,IAAI,IAAI,QAAQ,GAAGF,SAAW,CAAC,GAAG,EAAEE,SAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE;AAC9B,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE;AAC9B,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAC1D,GAAG;AACH;AACA,EAAEL,eAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;AAClE;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AACzB;AACA,EAAEA,eAAO,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACtC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE;AAC3D;AACA,EAAE,IAAI,MAAM,GAAGG,SAAW,CAAC,IAAI,CAAC,CAAC;AACjC;AACA,EAAE,IAAI,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC9C;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE;AAClD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AACnC;AACA;AACA,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3F;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF;AACA;AACA,QAAQ,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE;AACzD,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE;AACzD;AACA,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;AACjC;AACA,EAAE,IAAI,KAAK,IAAI,UAAU,EAAE;AAC3B,IAAI,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,aAAa,GAAG,IAAI,GAAG,KAAK,GAAG,mBAAmB,CAAC,CAAC;AAC1F,GAAG;AACH;;ACzNA;AACA;AACA;AACA;AACA;AACe,SAAS,UAAU,CAAC,KAAK,EAAE;AAC1C,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AACzD;AACA,EAAE,IAAI,CAACG,gBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;AACpE,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD;AACA,EAAE,IAAI,YAAY,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;AAC/C;AACA,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC1B;AACA;AACA;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;AAClC,KAAK,MAAM;AACX,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,KAAK;AACL,GAAG,MAAM;AACT;AACA;AACA;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,IAAI,YAAY,IAAI,MAAM,EAAE;AAClC,QAAQ,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;AACrC,OAAO,MAAM;AACb,QAAQ,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChD,OAAO;AACP,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AAC/C,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE;AAClD;AACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;AACnC;AACA;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;AAChD,IAAI,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzC,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;AAC9D;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB;AACA,IAAI,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B;AACA;AACA;AACA,IAAI,OAAO,GAAGF,cAAM,CAAC,EAAE,EAAE,OAAO,EAAE;AAClC,MAAM,GAAG,EAAE,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE;AACvC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC;AACzB,GAAG;AACH;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,gBAAgB,GAAG,SAAS,MAAM,EAAE,UAAU,EAAE;AACrE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,MAAM,EAAE,KAAK,EAAE;AAC3D,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE;AAC1D;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB;AACA,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACrC;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,kBAAkB,GAAG,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACvF;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,KAAK,CAAC;AAClB,KAAK,MAAM;AACX;AACA;AACA,MAAM,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,EAAE,OAAO,OAAO,GAAG,KAAK,WAAW,CAAC;AACpC,CAAC;AACD;AACA,SAAS,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;AACjD,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;AAC/C,IAAI,UAAU,EAAE,CAAC,QAAQ,CAAC,WAAW;AACrC,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,YAAY,EAAE,IAAI;AACtB,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChC;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,EAAE;AACtD;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1D;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACtB;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE;AACtD,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC;AACA,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;AACzD,GAAG;AACH;AACA,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,UAAU,EAAE;AAChD;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B;AACA,EAAE,IAAI,IAAI,GAAGE,gBAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;AACpE;AACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB;AACA,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7D,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE;AAC/D;AACA,EAAE,IAAI,MAAM,GAAGH,SAAW,CAAC,IAAI,CAAC,CAAC;AACjC;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,WAAW,EAAE,SAAS,IAAI,EAAE;AAChC,MAAM,OAAO,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AACjC,KAAK;AACL,IAAI,GAAG,EAAE,SAAS,GAAG,EAAE;AACvB,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,GAAG,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE;AAC9B,MAAMI,WAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;AAChC,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,EAAE,EAAE;AACR,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AAC3B,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS;AACjC,MAAM,GAAG,EAAE,KAAK;AAChB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACxD,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAChF,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAChF,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACpF,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxF;AACA,EAAEP,eAAO,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE;AACvC,IAAI,IAAIQ,gBAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9C,MAAM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAChC,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,WAAW,EAAE;AACpD,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW;AAC1C,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACrC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,oBAAoB,GAAG,SAAS,OAAO,EAAE;AAC1D,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,IAAI,EAAE;AACnD,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE;AAC1B,IAAI,IAAI,GAAG,OAAO,CAAC;AACnB,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAChE;AACA,EAAE,QAAQ,IAAI,IAAI,UAAU,CAAC,cAAc,EAAE;AAC7C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,qBAAqB,GAAG,SAAS,OAAO,EAAE,QAAQ,EAAE;AACrE,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACvE,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;AACpD,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;;;;;;;;"}