@mnemonica/tactica 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/generator.js +20 -6
  2. package/package.json +5 -5
package/lib/generator.js CHANGED
@@ -85,6 +85,14 @@ class TypesGenerator {
85
85
  }
86
86
  const instanceName = this.getInstanceTypeName(node);
87
87
  generatedTypes.push(instanceName);
88
+ // Root types are declared as interfaces below (declaration
89
+ // merging with @decorate classes). Emitting `type X` here as
90
+ // well would collide with `interface X` in the same global
91
+ // scope (TS2300), and the root interface already carries
92
+ // everything the alias would (props + child constructors).
93
+ if (!node.parent) {
94
+ continue;
95
+ }
88
96
  this.generateInstanceType(node, lines, 1);
89
97
  }
90
98
  }
@@ -128,19 +136,25 @@ class TypesGenerator {
128
136
  const readonly = propInfo.readonly ? 'readonly ' : '';
129
137
  lines.push(`${indentStr}\t${readonly}${propName}${optional}: ${propInfo.type};`);
130
138
  }
131
- // Add nested constructor properties (only for root types)
132
- // Nested type constructors are accessible via parent, not directly on instances
133
- if (!node.parent) {
139
+ // Add nested constructor properties for non-leaf nodes — mirrors
140
+ // generateCompleteInstanceInterface (types.ts): subtypes construct
141
+ // from parent instances at any depth, not only from roots
142
+ if (node.children.size > 0) {
134
143
  for (const child of node.children.values()) {
135
144
  const childInstanceType = this.getInstanceTypeName(child);
136
145
  const constructorSig = this.generateConstructorSignature(child);
137
146
  lines.push(`${indentStr}\t${child.name}: ${constructorSig} => ${childInstanceType};`);
138
147
  }
139
148
  }
140
- // For nested types, add Subtype: undefined to indicate no further subtypes
141
- // This is needed for strict chain behavior
149
+ // For nested types, add this node's constructor and all siblings as
150
+ // undefined (strict-chain behavior; parent undefineds come via ProtoFlat)
142
151
  if (node.parent) {
143
152
  lines.push(`${indentStr}\t${node.name}: undefined;`);
153
+ for (const sibling of node.parent.children.values()) {
154
+ if (sibling.name !== node.name) {
155
+ lines.push(`${indentStr}\t${sibling.name}: undefined;`);
156
+ }
157
+ }
144
158
  }
145
159
  // Close the type properly - ProtoFlat uses }>; for nested, }; for root
146
160
  if (node.parent) {
@@ -494,4 +508,4 @@ class TypesGenerator {
494
508
  }
495
509
  }
496
510
  exports.TypesGenerator = TypesGenerator;
497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQU03Qjs7R0FFRztBQUNILE1BQWEsY0FBYztJQUkxQixZQUFxQixLQUFvQixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLFVBQVU7UUFBekQsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUN4QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FBRSxRQUFnQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7VUFPRztJQUNILDBCQUEwQjtRQUN6QixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBRXBDLDJEQUEyRDtRQUMzRCxLQUFLLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1FBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDM0UsS0FBSyxDQUFDLElBQUksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FB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Q0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVELFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxzQ0FBc0M7UUFDdEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsT0FBTyxhQUFhLENBQUM7SUFDdEIsQ0FBQztDQUNEO0FBOWZELHdDQThmQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG5cdFR5cGVOb2RlLCBHZW5lcmF0ZWRUeXBlcyBcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlR3JhcGhJbXBsIH0gZnJvbSAnLi9ncmFwaCc7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRvclxuICovXG5leHBvcnQgY2xhc3MgVHlwZXNHZW5lcmF0b3Ige1xuXHRwcml2YXRlIGVzbTogYm9vbGVhbjtcblx0cHJpdmF0ZSBvdXRwdXREaXI6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBncmFwaDogVHlwZUdyYXBoSW1wbCwgZXNtID0gZmFsc2UsIG91dHB1dERpciA9ICcudGFjdGljYScpIHtcblx0XHR0aGlzLmVzbSA9IGVzbTtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW1wb3J0IHBhdGggd2l0aCBvcHRpb25hbCAuanMgZXh0ZW5zaW9uIGZvciBFU00gTm9kZU5leHRcblx0ICovXG5cdHByaXZhdGUgaW1wb3J0UGF0aCAocmVsYXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXNtID8gYCR7cmVsYXRpdmV9LmpzYCA6IHJlbGF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBnbG9iYWwgYXVnbWVudGF0aW9uIGZpbGUgdGhhdCBhdWdtZW50cyB1c2VyIGNsYXNzZXMgZGlyZWN0bHlcblx0XHQqIFRoaXMgYWxsb3dzIHVzaW5nIGRlY29yYXRlZCBjbGFzc2VzIHdpdGhvdXQgbWFudWFsIHR5cGUgY2FzdGluZ1xuXHRcdCpcblx0XHQqIEFsbCB0eXBlcyBhcmUgcGxhY2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgdmlhIGRlY2xhcmUgZ2xvYmFsLCB3aGljaCBhbGxvd3Ncblx0XHQqIHRoZW0gdG8gYmUgYWNjZXNzZWQgZnJvbSBhbnkgbW9kdWxlIHdpdGhvdXQgaW1wb3J0cy4gSW50ZXJmYWNlcyBkZWNsYXJlZFxuXHRcdCogaW4gdGhlIGdsb2JhbCBzY29wZSB3aWxsIG1lcmdlIHdpdGggY2xhc3NlcyBvZiB0aGUgc2FtZSBuYW1lIGluIHVzZXIgbW9kdWxlcy5cblx0XHQqL1xuXHRnZW5lcmF0ZUdsb2JhbEF1Z21lbnRhdGlvbiAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyIC0gbWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCcvLyBHZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhIC0gRE8gTk9UIEVESVQnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBUaGlzIGZpbGUgcHJvdmlkZXMgYXV0b21hdGljIHR5cGUgYXVnbWVudGF0aW9uIGZvciBkZWNvcmF0ZWQgY2xhc3NlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gTWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCdleHBvcnQge307Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBBbGwgdHlwZXMgZ28gaW5zaWRlIGRlY2xhcmUgZ2xvYmFsIHNvIHRoZXkgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGVcblx0XHRsaW5lcy5wdXNoKCdkZWNsYXJlIGdsb2JhbCB7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblxuXHRcdC8vIEdlbmVyYXRlIGluc3RhbmNlIHR5cGVzIGZvciBhbGwgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIC0gaW4gZ2xvYmFsIHNjb3BlXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VOYW1lKTtcblx0XHRcdFx0dGhpcy5nZW5lcmF0ZUluc3RhbmNlVHlwZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhdGUgY2xhc3MgaW50ZXJmYWNlcyAtIGluIGdsb2JhbCBzY29wZSBmb3IgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdC8vIFRoZXNlIGludGVyZmFjZXMgd2lsbCBtZXJnZSB3aXRoIGNsYXNzZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiB1c2VyIG1vZHVsZXNcblx0XHRsaW5lcy5wdXNoKCdcdC8vIENsYXNzIGludGVyZmFjZXMgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCdcdC8vIFRoZXNlIG1lcmdlIHdpdGggQGRlY29yYXRlKCkgY2xhc3NlcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDbGFzc0ludGVyZmFjZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnfScpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgaW5zdGFuY2UgdHlwZSBhbGlhcyAoZGVzY3JpYmVzIHdoYXQgdGhlIGluc3RhbmNlIElTKVxuXHRcdCAqIFVzZXMgUHJvdG9GbGF0IGZvciBwcm9wZXIgaW5oZXJpdGFuY2UgKGV4Y2x1ZGVzIG92ZXJyaWRkZW4gcGFyZW50IHByb3BzKVxuXHRcdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlSW5zdGFuY2VUeXBlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9dHlwZSAke2luc3RhbmNlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IFsgcHJvcE5hbWUsIHByb3BJbmZvIF0gb2Ygbm9kZS5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwcm9wSW5mby5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0Y29uc3QgcmVhZG9ubHkgPSBwcm9wSW5mby5yZWFkb25seSA/ICdyZWFkb25seSAnIDogJyc7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke3JlYWRvbmx5fSR7cHJvcE5hbWV9JHtvcHRpb25hbH06ICR7cHJvcEluZm8udHlwZX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIChvbmx5IGZvciByb290IHR5cGVzKVxuXHRcdC8vIE5lc3RlZCB0eXBlIGNvbnN0cnVjdG9ycyBhcmUgYWNjZXNzaWJsZSB2aWEgcGFyZW50LCBub3QgZGlyZWN0bHkgb24gaW5zdGFuY2VzXG5cdFx0aWYgKCFub2RlLnBhcmVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkSW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGNoaWxkKTtcblx0XHRcdFx0Y29uc3QgY29uc3RydWN0b3JTaWcgPSB0aGlzLmdlbmVyYXRlQ29uc3RydWN0b3JTaWduYXR1cmUoY2hpbGQpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke2NoaWxkLm5hbWV9OiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2NoaWxkSW5zdGFuY2VUeXBlfTtgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3IgbmVzdGVkIHR5cGVzLCBhZGQgU3VidHlwZTogdW5kZWZpbmVkIHRvIGluZGljYXRlIG5vIGZ1cnRoZXIgc3VidHlwZXNcblx0XHQvLyBUaGlzIGlzIG5lZWRlZCBmb3Igc3RyaWN0IGNoYWluIGJlaGF2aW9yXG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke25vZGUubmFtZX06IHVuZGVmaW5lZDtgKTtcblx0XHR9XG5cblx0XHQvLyBDbG9zZSB0aGUgdHlwZSBwcm9wZXJseSAtIFByb3RvRmxhdCB1c2VzIH0+OyBmb3IgbmVzdGVkLCB9OyBmb3Igcm9vdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fT47YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGVtcHR5IGxpbmUgYWZ0ZXIgZWFjaCB0eXBlXG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdCAqIFRoaXMgbWVyZ2VzIHdpdGggdGhlIGFjdHVhbCBjbGFzcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmdcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNsYXNzSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXG5cdFx0Ly8gQnVpbGQgZXh0ZW5kcyBjbGF1c2Vcblx0XHRjb25zdCBleHRlbmRzVHlwZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRleHRlbmRzVHlwZXMucHVzaChub2RlLnBhcmVudC5uYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbmRzQ2xhdXNlID0gZXh0ZW5kc1R5cGVzLmxlbmd0aCA+IDBcblx0XHRcdD8gYCBleHRlbmRzICR7ZXh0ZW5kc1R5cGVzLmpvaW4oJywgJyl9YFxuXHRcdFx0OiAnJztcblxuXHRcdC8vIEludGVyZmFjZSB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcyAtIFR5cGVTY3JpcHQgbWVyZ2VzIHRoZXNlXG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9aW50ZXJmYWNlICR7bm9kZS5uYW1lfSR7ZXh0ZW5kc0NsYXVzZX0ge2ApO1xuXHRcdFx0XG5cdFx0Ly8gQWRkIGFsbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChmb3IgdHlwZSBtZXJnaW5nKVxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHtwcm9wSW5mby50eXBlfTtgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VidHlwZSBjb25zdHJ1Y3RvcnMgKG5vbi1vcHRpb25hbCBzbyB0aGV5J3JlIGFjY2Vzc2libGUpIC0gb25seSBmb3Igcm9vdCB0eXBlc1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKGNoaWxkKTtcblx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfTogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcblx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn19YCk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblx0XHRcblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBhIHR5cGVzLnRzIGZpbGUgd2l0aCBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzXG5cdFx0KiBUaGlzIGluY2x1ZGVzIGFsbCBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvcnNcblx0XHQqL1xuXHRnZW5lcmF0ZVR5cGVzRmlsZSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIGJ5IEBtbmVtb25pY2EvdGFjdGljYSAtIERPIE5PVCBFRElUJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gVGhpcyBmaWxlIHByb3ZpZGVzIGNvbXBsZXRlIFR5cGVTY3JpcHQgaW50ZXJmYWNlcyBmb3IgTW5lbW9uaWNhIHR5cGVzJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IFByb3RvRmxhdCBmcm9tIG1uZW1vbmljYVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgUHJvdG9GbGF0IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzIGZvciBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgYW5kXG5cdFx0Ly8gZm9yIGN1c3RvbSBjb2xsZWN0aW9ucyB0aGF0IGRlY2xhcmUgYSB1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZVxuXHRcdC8vIChPcHRpb24gQikuIEN1c3RvbS1jb2xsZWN0aW9uIHR5cGVzIHdpdGhvdXQgYSByZWdpc3RyeSBpbnRlcmZhY2UgYXJlXG5cdFx0Ly8gaXNvbGF0ZWQgYXQgcnVudGltZSBhbmQgYXJlIG5vdCBlbWl0dGVkLlxuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVyZmFjZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlKG5vZGUsIGxpbmVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29udGVudCA6IGxpbmVzLmpvaW4oJ1xcbicpLFxuXHRcdFx0dHlwZXMgICA6IGdlbmVyYXRlZFR5cGVzLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBhIGNvbXBsZXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgd2l0aCBhbGwgcHJvcGVydGllc1xuXHRcdCAqIFRoaXMgaXMgZm9yIHRoZSB0eXBlcy50cyBmaWxlIHRoYXQgdXNlcnMgaW1wb3J0IGZyb21cblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKG5vZGU6IFR5cGVOb2RlLCBsaW5lczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCB0eXBlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgZXhwb3J0IHR5cGUgJHt0eXBlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgXFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3RoaXMucmVzb2x2ZVR5cGVJblN0cmluZyhwcm9wSW5mby50eXBlLCBub2RlKX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIGZvciBub24tbGVhZiBub2Rlc1xuXHRcdC8vIExlYWYgbm9kZXMgKG5vIGNoaWxkcmVuKSBkb24ndCBnZXQgY29uc3RydWN0b3IgcHJvcGVydGllc1xuXHRcdC8vIFRoaXMgZm9sbG93cyBtbmVtb25pY2EncyBzdHJpY3RDaGFpbiBiZWhhdmlvclxuXHRcdGlmIChub2RlLmNoaWxkcmVuLnNpemUgPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShjaGlsZCk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7Y2hpbGQubmFtZX06ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvciBuZXN0ZWQgdHlwZXMsIGFkZCB0aGlzIG5vZGUncyBjb25zdHJ1Y3RvciBhbmQgYWxsIHNpYmxpbmdzIGZyb20gc2FtZSBwYXJlbnQgYXMgdW5kZWZpbmVkXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgZm9yIHN0cmljdCBjaGFpbiBiZWhhdmlvciAtIHBhcmVudCB1bmRlZmluZWRzIGFyZSBpbmhlcml0ZWQgdmlhIFByb3RvRmxhdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gQWRkIHRoaXMgbm9kZSdzIG93biBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWRcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7bm9kZS5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXG5cdFx0XHQvLyBBZGQgYWxsIHNpYmxpbmdzIChvdGhlciBjaGlsZHJlbiBvZiB0aGUgc2FtZSBwYXJlbnQpIGFzIHVuZGVmaW5lZFxuXHRcdFx0Zm9yIChjb25zdCBzaWJsaW5nIG9mIG5vZGUucGFyZW50LmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmIChzaWJsaW5nLm5hbWUgIT09IG5vZGUubmFtZSkge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7c2libGluZy5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2UgdGhlIHR5cGUgcHJvcGVybHkgLSBQcm90b0ZsYXQgdXNlcyB9PjsgZm9yIG5lc3RlZCwgfTsgZm9yIHJvb3Rcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdGxpbmVzLnB1c2goJ30+OycpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9OycpO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGEgc2ltcGxlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGEgc2luZ2xlIHR5cGVcblx0XHQgKi9cblx0Z2VuZXJhdGVTaW5nbGVUeXBlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0dGhpcy5nZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2Uobm9kZSwgbGluZXMpO1xuXHRcdHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdCAqIEF1Z21lbnQgbW5lbW9uaWNhJ3MgVHlwZVJlZ2lzdHJ5IHNvIGxvb2t1cCgnVHlwZU5hbWUnKSByZXR1cm5zIHRoZSB0eXBlZCBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHRnZW5lcmF0ZVR5cGVSZWdpc3RyeSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIFR5cGVSZWdpc3RyeSBmb3IgdHlwZS1zYWZlIG1uZW1vbmljYS5sb29rdXAoKScpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBhdWdtZW50cyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSB2aWEgZGVjbGFyYXRpb24gbWVyZ2luZy4nKTtcblx0XHRsaW5lcy5wdXNoKCcvLycpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFVzYWdlOicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgaW1wb3J0IHsgbG9va3VwIH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBpbXBvcnQgXFwnLi8udGFjdGljYS9yZWdpc3RyeVxcJzsgIC8vIGFwcGxpZXMgdGhlIGF1Z21lbnRhdGlvbicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgY29uc3QgTXlUeXBlID0gbG9va3VwKFxcJ015VHlwZVxcJyk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBUeXBlU2NyaXB0IGtub3dzOiBNeVR5cGUgaXMgdGhlIHR5cGVkIGNvbnN0cnVjdG9yIGZvciBNeVR5cGUnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE15VHlwZSh7IC8qIGNvbnN0cnVjdG9yIGFyZ3MgKi8gfSk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBpbnN0YW5jZSBoYXMgZnVsbCBpbnRlbGxpc2Vuc2UgZm9yIHRoZSBnZW5lcmF0ZWQgdHlwZScpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IGluc3RhbmNlIHR5cGVzIGZyb20gdHlwZXMudHMuXG5cdFx0Ly8gU2tpcCBjdXN0b20tY29sbGVjdGlvbiB0eXBlcyB0aGF0IGhhdmUgbm8gdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2UuXG5cdFx0bGluZXMucHVzaCgnaW1wb3J0IHR5cGUgeycpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7aW5zdGFuY2VUeXBlTmFtZX0sYCk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VUeXBlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goYH0gZnJvbSAnJHt0aGlzLmltcG9ydFBhdGgoJy4vdHlwZXMnKX0nO2ApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmb3IgbW5lbW9uaWNhIFR5cGVSZWdpc3RyeVxuXHRcdGxpbmVzLnB1c2goJy8qKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFR5cGUgcmVnaXN0cnkgYXVnbWVudGluZyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UnKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBUaGlzIGVuYWJsZXMgdHlwZS1zYWZlIGxvb2t1cCgpIHdpdGhvdXQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMnKTtcblx0XHRsaW5lcy5wdXNoKCcgKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFVzYWdlOiBjb25zdCBTb21lVHlwZSA9IGxvb2t1cChcXCdTb21lVHlwZVxcJyk7IC8vIEZ1bGx5IHR5cGVkIScpO1xuXHRcdGxpbmVzLnB1c2goJyAqLycpO1xuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgbW9kdWxlIFxcJ21uZW1vbmljYVxcJyB7Jyk7XG5cdFx0bGluZXMucHVzaCgnXHRpbnRlcmZhY2UgVHlwZVJlZ2lzdHJ5IHsnKTtcblxuXHRcdC8vIEdlbmVyYXRlIGVudHJpZXMgZm9yIGFsbCB0eXBlIHBhdGhzIHRoYXQgYmVsb25nIHRvIHRoZSBkZWZhdWx0L2dsb2JhbCBjb2xsZWN0aW9uLlxuXHRcdC8vIFR5cGVzIHRoYXQgbGl2ZSBpbiBhIGN1c3RvbSBjb2xsZWN0aW9uIChjb2xsZWN0aW9uSWQgc2V0KSBhcmUgaXNvbGF0ZWQgYXQgcnVudGltZVxuXHRcdC8vIGFuZCBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoIGZyZWUgbG9va3VwKCksIHNvIHRoZXkgbXVzdCBub3QgYmUgYWRkZWQgdG8gdGhlXG5cdFx0Ly8gZ2xvYmFsIFR5cGVSZWdpc3RyeSBhdWdtZW50YXRpb24uXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Ly8gR2VuZXJhdGUgdHlwZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBuZXN0ZWQgdHlwZXMgd2l0aCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKG5vZGUpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHRcXHQnJHtmdWxsUGF0aH0nOiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2luc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdGxpbmVzLnB1c2goJ30nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEdlbmVyYXRlIHBlci1jb2xsZWN0aW9uIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbnMgZm9yIE9wdGlvbiBCXG5cdFx0Ly8gKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlcykuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcygpO1xuXHRcdGZvciAoY29uc3QgWyBrZXksIG5vZGVzIF0gb2YgY29sbGVjdGlvbkdyb3Vwcykge1xuXHRcdFx0Y29uc3QgWyByZWdpc3RyeUludGVyZmFjZU5hbWUsIHNvdXJjZUZpbGUgXSA9IGtleS5zcGxpdCgnOjonKTtcblx0XHRcdGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLnJlc29sdmVNb2R1bGVQYXRoKHNvdXJjZUZpbGUpO1xuXHRcdFx0bGluZXMucHVzaChgZGVjbGFyZSBtb2R1bGUgJyR7bW9kdWxlUGF0aH0nIHtgKTtcblx0XHRcdGxpbmVzLnB1c2goYFxcdGludGVyZmFjZSAke3JlZ2lzdHJ5SW50ZXJmYWNlTmFtZX0ge2ApO1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdFx0bGluZXMucHVzaCgnfScpO1xuXHRcdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUmUtZXhwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBleHBsaWNpdCB1c2FnZVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnZXhwb3J0IHR5cGUgeyBUeXBlUmVnaXN0cnkgfTsnKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKiBVc2VzIGNvbnN0cnVjdG9yUGFyYW1zIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlIChub3QgaW5zdGFuY2UgcHJvcGVydGllcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Ly8gVXNlIGNvbnN0cnVjdG9yUGFyYW1zIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBlbXB0eSBzaWduYXR1cmVcblx0XHRjb25zdCBwYXJhbXMgPSBub2RlLmNvbnN0cnVjdG9yUGFyYW1zO1xuXG5cdFx0aWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICduZXcgKCknO1xuXHRcdH1cblxuXHRcdC8vIEJ1aWxkIHR5cGVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmcm9tIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnNcblx0XHRjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwYXJhbS5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0cHJvcHMucHVzaChgJHtwYXJhbS5uYW1lfSR7b3B0aW9uYWx9OiAke3BhcmFtLnR5cGV9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSB3aXRoIGRhdGEgcGFyYW1ldGVyXG5cdFx0cmV0dXJuIGBuZXcgKCR7cHJvcHMuam9pbignLCAnKX0pYDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdldCB0aGUgZnVsbCBkb3R0ZWQgcGF0aCBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKi9cblx0cHJpdmF0ZSBnZXRGdWxsUGF0aCAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdHJldHVybiBub2RlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmdldEZ1bGxQYXRoKG5vZGUucGFyZW50KX0uJHtub2RlLm5hbWV9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGluc3RhbmNlIHR5cGUgbmFtZSBmb3IgYSBub2RlXG5cdCAqIFVzZXMgZnVsbCBwYXRoIHdpdGggdW5kZXJzY29yZXM6IFVzYWdlcy5Vc2FnZUVudHJ5IC0+IFVzYWdlc19Vc2FnZUVudHJ5XG5cdCAqIEZvciBPcHRpb24gQiBjdXN0b20gY29sbGVjdGlvbnMsIHByZWZpeGVzIHdpdGggdGhlIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnN0YW5jZVR5cGVOYW1lIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IG5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lID8gYCR7bm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWV9X2AgOiAnJztcblx0XHRyZXR1cm4gYCR7cHJlZml4fSR7ZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc2ltcGxlIHR5cGUgbmFtZSB0byBpdHMgZnVsbCBwYXRoIG5hbWVcblx0ICogZS5nLiwgXCJEZWZpbml0aW9uRW50cnlcIiAtPiBcIkRlZmluaXRpb25zX0RlZmluaXRpb25FbnRyeVwiXG5cdCAqL1xuXHRwcml2YXRlIHJlc29sdmVUeXBlTmFtZSAoc2ltcGxlTmFtZTogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEZpcnN0IGNoZWNrIGlmIGl0J3MgdGhlIGN1cnJlbnQgbm9kZSBvciBpdHMgY2hpbGRyZW5cblx0XHRpZiAoY3VycmVudE5vZGUubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjdXJyZW50Tm9kZSk7XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgY3VycmVudE5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdGlmIChjaGlsZC5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBTZWFyY2ggYWxsIHR5cGVzIGluIHRoZSBncmFwaFxuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLmdyYXBoLmdldEFsbFR5cGVzKCkpIHtcblx0XHRcdGlmICh0eXBlLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZSh0eXBlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNpbXBsZU5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBzaW1wbGUgdHlwZSBuYW1lcyB0byBmdWxsIHBhdGggbmFtZXMgd2l0aGluIGEgdHlwZSBzdHJpbmdcblx0ICogSGFuZGxlcyBjb21wbGV4IHR5cGVzIGxpa2UgQXJyYXk8VXNhZ2VFbnRyeT4sIE1hcDxzdHJpbmcsIFR5cGVFbnRyeT4sIGV0Yy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVJblN0cmluZyAodHlwZVN0cjogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEdldCBhbGwgdHlwZSBuYW1lcyBmcm9tIHRoZSBncmFwaFxuXHRcdGNvbnN0IGFsbFR5cGVzID0gdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpO1xuXHRcdGNvbnN0IHR5cGVOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiBhbGxUeXBlcykge1xuXHRcdFx0dHlwZU5hbWVzLmFkZCh0eXBlLm5hbWUpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgYnkgbGVuZ3RoIChsb25nZXN0IGZpcnN0KSB0byBhdm9pZCBwYXJ0aWFsIHJlcGxhY2VtZW50c1xuXHRcdGNvbnN0IHNvcnRlZE5hbWVzID0gQXJyYXkuZnJvbSh0eXBlTmFtZXMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuXG5cdFx0Ly8gUmVwbGFjZSBlYWNoIHNpbXBsZSB0eXBlIG5hbWUgd2l0aCBpdHMgZnVsbCBwYXRoIHZlcnNpb25cblx0XHRsZXQgcmVzdWx0ID0gdHlwZVN0cjtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkTmFtZXMpIHtcblx0XHRcdC8vIFVzZSB3b3JkIGJvdW5kYXJ5IG1hdGNoaW5nIHRvIGF2b2lkIHJlcGxhY2luZyBwYXJ0aWFsIG5hbWVzXG5cdFx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtuYW1lfVxcXFxiYCwgJ2cnKTtcblx0XHRcdGNvbnN0IGZ1bGxUeXBlTmFtZSA9IHRoaXMucmVzb2x2ZVR5cGVOYW1lKG5hbWUsIGN1cnJlbnROb2RlKTtcblx0XHRcdGlmIChmdWxsVHlwZU5hbWUgIT09IG5hbWUpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocmVnZXgsIGZ1bGxUeXBlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogR3JvdXAgY29sbGVjdGlvbiB0eXBlIG5vZGVzIGJ5IHRoZWlyIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lIGFuZCBzb3VyY2UgZmlsZS5cblx0ICogUmV0dXJucyBhIG1hcCBrZXllZCBieSBgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9Ojoke3NvdXJjZUZpbGV9YC5cblx0ICovXG5cdHByaXZhdGUgZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcyAoKTogTWFwPHN0cmluZywgVHlwZU5vZGVbXT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlTm9kZVtdPigpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKCFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGtleSA9IGAke25vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtub2RlLnNvdXJjZUZpbGV9YDtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KGtleSk7XG5cdFx0XHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0XHRcdGV4aXN0aW5nLnB1c2gobm9kZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z3JvdXBzLnNldChrZXksIFsgbm9kZSBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZ3JvdXBzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc29sdmUgYSBzb3VyY2UgZmlsZSBwYXRoIHRvIGEgbW9kdWxlIHNwZWNpZmllciByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeSxcblx0ICogc3VpdGFibGUgZm9yIHVzZSBpbiBhIGBkZWNsYXJlIG1vZHVsZSAnLi4uJ2AgYmxvY2suXG5cdCAqL1xuXHRwcml2YXRlIHJlc29sdmVNb2R1bGVQYXRoIChzb3VyY2VGaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG91dHB1dEFic29sdXRlID0gcGF0aC5yZXNvbHZlKHRoaXMub3V0cHV0RGlyKTtcblx0XHRjb25zdCBzb3VyY2VBYnNvbHV0ZSA9IHBhdGgucmVzb2x2ZShzb3VyY2VGaWxlKTtcblx0XHRsZXQgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKG91dHB1dEFic29sdXRlLCBzb3VyY2VBYnNvbHV0ZSk7XG5cdFx0Ly8gUmVtb3ZlIC50cyBleHRlbnNpb247IGtlZXAgLnRzeCBpZiBwcmVzZW50XG5cdFx0aWYgKHJlbGF0aXZlLmVuZHNXaXRoKCcudHMnKSAmJiAhcmVsYXRpdmUuZW5kc1dpdGgoJy50c3gnKSkge1xuXHRcdFx0cmVsYXRpdmUgPSByZWxhdGl2ZS5zbGljZSgwLCAtMyk7XG5cdFx0fVxuXHRcdC8vIENvbnZlcnQgV2luZG93cyBzZXBhcmF0b3JzIHRvIFBPU0lYXG5cdFx0Y29uc3QgcG9zaXhSZWxhdGl2ZSA9IHJlbGF0aXZlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblx0XHRyZXR1cm4gcG9zaXhSZWxhdGl2ZTtcblx0fVxufVxuIl19
511
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQU03Qjs7R0FFRztBQUNILE1BQWEsY0FBYztJQUkxQixZQUFxQixLQUFvQixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLFVBQVU7UUFBekQsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUN4QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FBRSxRQUFnQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7VUFPRztJQUNILDBCQUEwQjtRQUN6QixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBRXBDLDJEQUEyRDtRQUMzRCxLQUFLLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1FBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDM0UsS0FBSyxDQUFDLElBQUksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixrREFBa0Q7UUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYscUVBQXFFO1FBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR2YsNkVBQTZFO1FBQzdFLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN2QixTQUFTO2dCQUNWLENBQUM7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNsQywyREFBMkQ7Z0JBQzNELDZEQUE2RDtnQkFDN0QsMkRBQTJEO2dCQUMzRCx5REFBeUQ7Z0JBQ3pELDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsU0FBUztnQkFDVixDQUFDO2dCQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDRixDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLDRFQUE0RTtRQUM1RSxLQUFLLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDM0QsS0FBSyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ2hGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdkIsU0FBUztnQkFDVixDQUFDO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDRixDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoQixPQUFPO1lBQ04sT0FBTyxFQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBSyxjQUFjO1NBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztXQUdJO0lBQ0ksb0JBQW9CLENBQUUsSUFBYyxFQUFFLEtBQWUsRUFBRSxNQUFjO1FBQzVFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLHVFQUF1RTtZQUN2RSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxRQUFRLFlBQVksZ0JBQWdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hHLENBQUM7YUFBTSxDQUFDO1lBQ1Asd0NBQXdDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLFFBQVEsWUFBWSxNQUFNLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLEtBQUssTUFBTSxDQUFFLFFBQVEsRUFBRSxRQUFRLENBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsS0FBSyxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLG1FQUFtRTtRQUNuRSwwREFBMEQ7UUFDMUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsT0FBTyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDdkYsQ0FBQztRQUNGLENBQUM7UUFFRCxvRUFBb0U7UUFDcEUsMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7WUFDckQsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDUCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7V0FHSTtJQUNJLHNCQUFzQixDQUFFLElBQWMsRUFBRSxLQUFlLEVBQUUsTUFBYztRQUM5RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUMsQ0FBQyxDQUFDLFlBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRU4sOERBQThEO1FBQzlELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLGFBQWEsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLElBQUksQ0FBQyxDQUFDO1FBRW5FLGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sQ0FBRSxRQUFRLEVBQUUsUUFBUSxDQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEtBQUssUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUVELHNGQUFzRjtRQUN0RixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxPQUFPLGlCQUFpQixHQUFHLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0YsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7VUFHRztJQUNILGlCQUFpQjtRQUNoQixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBRXBDLFNBQVM7UUFDVCxLQUFLLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3ZGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDM0UsS0FBSyxDQUFDLElBQUksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZix5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSwyQ0FBMkM7UUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQ3RELFNBQVM7Z0JBQ1YsQ0FBQztnQkFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JELGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNGLENBQUM7UUFFRCxPQUFPO1lBQ04sT0FBTyxFQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBSyxjQUFjO1NBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztXQUdJO0lBQ0ksaUNBQWlDLENBQUUsSUFBYyxFQUFFLEtBQWU7UUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLHVFQUF1RTtZQUN2RSxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsUUFBUSxnQkFBZ0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0YsQ0FBQzthQUFNLENBQUM7WUFDUCx3Q0FBd0M7WUFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLFFBQVEsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxLQUFLLE1BQU0sQ0FBRSxRQUFRLEVBQUUsUUFBUSxDQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEcsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCw0REFBNEQ7UUFDNUQsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsT0FBTyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNGLENBQUM7UUFFRCwrRkFBK0Y7UUFDL0YsMkZBQTJGO1FBQzNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLCtDQUErQztZQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7WUFFekMsb0VBQW9FO1lBQ3BFLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNQLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOztXQUVJO0lBQ0osa0JBQWtCLENBQUUsSUFBYztRQUNqQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7V0FHSTtJQUNKLG9CQUFvQjtRQUNuQixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBRXBDLFNBQVM7UUFDVCxLQUFLLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3ZGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDekQsS0FBSyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ2hGLEtBQUssQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDbkYsS0FBSyxDQUFDLElBQUksQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBQzVFLEtBQUssQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQztRQUM1RSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsdUNBQXVDO1FBQ3ZDLDhFQUE4RTtRQUM5RSxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUN0RCxTQUFTO2dCQUNWLENBQUM7Z0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0YsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsMERBQTBEO1FBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQzlFLEtBQUssQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUNqRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFeEMsb0ZBQW9GO1FBQ3BGLG9GQUFvRjtRQUNwRixnRkFBZ0Y7UUFDaEYsb0NBQW9DO1FBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN2QixTQUFTO2dCQUNWLENBQUM7Z0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCx3RUFBd0U7Z0JBQ3hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLFFBQVEsTUFBTSxjQUFjLE9BQU8sWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0YsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsOERBQThEO1FBQzlELHVDQUF1QztRQUN2QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQzdELEtBQUssTUFBTSxDQUFFLEdBQUcsRUFBRSxLQUFLLENBQUUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9DLE1BQU0sQ0FBRSxxQkFBcUIsRUFBRSxVQUFVLENBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixVQUFVLEtBQUssQ0FBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxxQkFBcUIsSUFBSSxDQUFDLENBQUM7WUFDckQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxRQUFRLE1BQU0sY0FBYyxPQUFPLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFFRCwwREFBMEQ7UUFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUU1QyxPQUFPO1lBQ04sT0FBTyxFQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBSyxjQUFjO1NBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztXQUdJO0lBQ0ksNEJBQTRCLENBQUUsSUFBYztRQUNuRCw2RUFBNkU7UUFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFFBQVEsQ0FBQztRQUNqQixDQUFDO1FBRUQsZ0VBQWdFO1FBQ2hFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEMsQ0FBQztJQUVEOztXQUVJO0lBQ0ksV0FBVyxDQUFFLElBQWM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBRSxJQUFjO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEYsT0FBTyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUUsVUFBa0IsRUFBRSxXQUFxQjtRQUNqRSx1REFBdUQ7UUFDdkQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDRixDQUFDO1FBQ0QsZ0NBQWdDO1FBQ2hDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNGLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssbUJBQW1CLENBQUUsT0FBZSxFQUFFLFdBQXFCO1FBQ2xFLG9DQUFvQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsK0RBQStEO1FBQy9ELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUUsMkRBQTJEO1FBQzNELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLDhEQUE4RDtZQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNGLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSyw0QkFBNEI7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFDN0MsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUNqQyxTQUFTO2dCQUNWLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUFFLFVBQWtCO1FBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsNkNBQTZDO1FBQzdDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0Qsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sYUFBYSxDQUFDO0lBQ3RCLENBQUM7Q0FDRDtBQTVnQkQsd0NBNGdCQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG5cdFR5cGVOb2RlLCBHZW5lcmF0ZWRUeXBlcyBcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlR3JhcGhJbXBsIH0gZnJvbSAnLi9ncmFwaCc7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRvclxuICovXG5leHBvcnQgY2xhc3MgVHlwZXNHZW5lcmF0b3Ige1xuXHRwcml2YXRlIGVzbTogYm9vbGVhbjtcblx0cHJpdmF0ZSBvdXRwdXREaXI6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBncmFwaDogVHlwZUdyYXBoSW1wbCwgZXNtID0gZmFsc2UsIG91dHB1dERpciA9ICcudGFjdGljYScpIHtcblx0XHR0aGlzLmVzbSA9IGVzbTtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW1wb3J0IHBhdGggd2l0aCBvcHRpb25hbCAuanMgZXh0ZW5zaW9uIGZvciBFU00gTm9kZU5leHRcblx0ICovXG5cdHByaXZhdGUgaW1wb3J0UGF0aCAocmVsYXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXNtID8gYCR7cmVsYXRpdmV9LmpzYCA6IHJlbGF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBnbG9iYWwgYXVnbWVudGF0aW9uIGZpbGUgdGhhdCBhdWdtZW50cyB1c2VyIGNsYXNzZXMgZGlyZWN0bHlcblx0XHQqIFRoaXMgYWxsb3dzIHVzaW5nIGRlY29yYXRlZCBjbGFzc2VzIHdpdGhvdXQgbWFudWFsIHR5cGUgY2FzdGluZ1xuXHRcdCpcblx0XHQqIEFsbCB0eXBlcyBhcmUgcGxhY2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgdmlhIGRlY2xhcmUgZ2xvYmFsLCB3aGljaCBhbGxvd3Ncblx0XHQqIHRoZW0gdG8gYmUgYWNjZXNzZWQgZnJvbSBhbnkgbW9kdWxlIHdpdGhvdXQgaW1wb3J0cy4gSW50ZXJmYWNlcyBkZWNsYXJlZFxuXHRcdCogaW4gdGhlIGdsb2JhbCBzY29wZSB3aWxsIG1lcmdlIHdpdGggY2xhc3NlcyBvZiB0aGUgc2FtZSBuYW1lIGluIHVzZXIgbW9kdWxlcy5cblx0XHQqL1xuXHRnZW5lcmF0ZUdsb2JhbEF1Z21lbnRhdGlvbiAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyIC0gbWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCcvLyBHZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhIC0gRE8gTk9UIEVESVQnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBUaGlzIGZpbGUgcHJvdmlkZXMgYXV0b21hdGljIHR5cGUgYXVnbWVudGF0aW9uIGZvciBkZWNvcmF0ZWQgY2xhc3NlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gTWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCdleHBvcnQge307Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBBbGwgdHlwZXMgZ28gaW5zaWRlIGRlY2xhcmUgZ2xvYmFsIHNvIHRoZXkgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGVcblx0XHRsaW5lcy5wdXNoKCdkZWNsYXJlIGdsb2JhbCB7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblxuXHRcdC8vIEdlbmVyYXRlIGluc3RhbmNlIHR5cGVzIGZvciBhbGwgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIC0gaW4gZ2xvYmFsIHNjb3BlXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VOYW1lKTtcblx0XHRcdFx0Ly8gUm9vdCB0eXBlcyBhcmUgZGVjbGFyZWQgYXMgaW50ZXJmYWNlcyBiZWxvdyAoZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gbWVyZ2luZyB3aXRoIEBkZWNvcmF0ZSBjbGFzc2VzKS4gRW1pdHRpbmcgYHR5cGUgWGAgaGVyZSBhc1xuXHRcdFx0XHQvLyB3ZWxsIHdvdWxkIGNvbGxpZGUgd2l0aCBgaW50ZXJmYWNlIFhgIGluIHRoZSBzYW1lIGdsb2JhbFxuXHRcdFx0XHQvLyBzY29wZSAoVFMyMzAwKSwgYW5kIHRoZSByb290IGludGVyZmFjZSBhbHJlYWR5IGNhcnJpZXNcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyB0aGUgYWxpYXMgd291bGQgKHByb3BzICsgY2hpbGQgY29uc3RydWN0b3JzKS5cblx0XHRcdFx0aWYgKCFub2RlLnBhcmVudCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVJbnN0YW5jZVR5cGUobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIGNsYXNzIGludGVyZmFjZXMgLSBpbiBnbG9iYWwgc2NvcGUgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0XHQvLyBUaGVzZSBpbnRlcmZhY2VzIHdpbGwgbWVyZ2Ugd2l0aCBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdXNlciBtb2R1bGVzXG5cdFx0bGluZXMucHVzaCgnXHQvLyBDbGFzcyBpbnRlcmZhY2VzIGZvciBkZWNsYXJhdGlvbiBtZXJnaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnXHQvLyBUaGVzZSBtZXJnZSB3aXRoIEBkZWNvcmF0ZSgpIGNsYXNzZXMgdG8gcHJvdmlkZSBwcm9wZXIgdHlwaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ2xhc3NJbnRlcmZhY2Uobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goJ30nKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgKGRlc2NyaWJlcyB3aGF0IHRoZSBpbnN0YW5jZSBJUylcblx0XHQgKiBVc2VzIFByb3RvRmxhdCBmb3IgcHJvcGVyIGluaGVyaXRhbmNlIChleGNsdWRlcyBvdmVycmlkZGVuIHBhcmVudCBwcm9wcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUluc3RhbmNlVHlwZSAobm9kZTogVHlwZU5vZGUsIGxpbmVzOiBzdHJpbmdbXSwgaW5kZW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBpbmRlbnRTdHIgPSAnXFx0Jy5yZXBlYXQoaW5kZW50KTtcblx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn10eXBlICR7aW5zdGFuY2VOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3Byb3BJbmZvLnR5cGV9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXMg4oCUIG1pcnJvcnNcblx0XHQvLyBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKHR5cGVzLnRzKTogc3VidHlwZXMgY29uc3RydWN0XG5cdFx0Ly8gZnJvbSBwYXJlbnQgaW5zdGFuY2VzIGF0IGFueSBkZXB0aCwgbm90IG9ubHkgZnJvbSByb290c1xuXHRcdGlmIChub2RlLmNoaWxkcmVuLnNpemUgPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShjaGlsZCk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7Y2hpbGQubmFtZX06ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvciBuZXN0ZWQgdHlwZXMsIGFkZCB0aGlzIG5vZGUncyBjb25zdHJ1Y3RvciBhbmQgYWxsIHNpYmxpbmdzIGFzXG5cdFx0Ly8gdW5kZWZpbmVkIChzdHJpY3QtY2hhaW4gYmVoYXZpb3I7IHBhcmVudCB1bmRlZmluZWRzIGNvbWUgdmlhIFByb3RvRmxhdClcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7bm9kZS5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXHRcdFx0Zm9yIChjb25zdCBzaWJsaW5nIG9mIG5vZGUucGFyZW50LmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmIChzaWJsaW5nLm5hbWUgIT09IG5vZGUubmFtZSkge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7c2libGluZy5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2UgdGhlIHR5cGUgcHJvcGVybHkgLSBQcm90b0ZsYXQgdXNlcyB9PjsgZm9yIG5lc3RlZCwgfTsgZm9yIHJvb3Rcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX0+O2ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn19O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBlbXB0eSBsaW5lIGFmdGVyIGVhY2ggdHlwZVxuXHRcdGxpbmVzLnB1c2goJycpO1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgY2xhc3MgaW50ZXJmYWNlIGZvciBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0XHQgKiBUaGlzIG1lcmdlcyB3aXRoIHRoZSBhY3R1YWwgY2xhc3MgdG8gcHJvdmlkZSBwcm9wZXIgdHlwaW5nXG5cdFx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDbGFzc0ludGVyZmFjZSAobm9kZTogVHlwZU5vZGUsIGxpbmVzOiBzdHJpbmdbXSwgaW5kZW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBpbmRlbnRTdHIgPSAnXFx0Jy5yZXBlYXQoaW5kZW50KTtcblxuXHRcdC8vIEJ1aWxkIGV4dGVuZHMgY2xhdXNlXG5cdFx0Y29uc3QgZXh0ZW5kc1R5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0ZXh0ZW5kc1R5cGVzLnB1c2gobm9kZS5wYXJlbnQubmFtZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0ZW5kc0NsYXVzZSA9IGV4dGVuZHNUeXBlcy5sZW5ndGggPiAwXG5cdFx0XHQ/IGAgZXh0ZW5kcyAke2V4dGVuZHNUeXBlcy5qb2luKCcsICcpfWBcblx0XHRcdDogJyc7XG5cblx0XHQvLyBJbnRlcmZhY2Ugd2l0aCBzYW1lIG5hbWUgYXMgY2xhc3MgLSBUeXBlU2NyaXB0IG1lcmdlcyB0aGVzZVxuXHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfWludGVyZmFjZSAke25vZGUubmFtZX0ke2V4dGVuZHNDbGF1c2V9IHtgKTtcblx0XHRcdFxuXHRcdC8vIEFkZCBhbGwgaW5zdGFuY2UgcHJvcGVydGllcyAoZm9yIHR5cGUgbWVyZ2luZylcblx0XHRmb3IgKGNvbnN0IFsgcHJvcE5hbWUsIHByb3BJbmZvIF0gb2Ygbm9kZS5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwcm9wSW5mby5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0Y29uc3QgcmVhZG9ubHkgPSBwcm9wSW5mby5yZWFkb25seSA/ICdyZWFkb25seSAnIDogJyc7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke3JlYWRvbmx5fSR7cHJvcE5hbWV9JHtvcHRpb25hbH06ICR7cHJvcEluZm8udHlwZX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHN1YnR5cGUgY29uc3RydWN0b3JzIChub24tb3B0aW9uYWwgc28gdGhleSdyZSBhY2Nlc3NpYmxlKSAtIG9ubHkgZm9yIHJvb3QgdHlwZXNcblx0XHRpZiAoIW5vZGUucGFyZW50KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShjaGlsZCk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7Y2hpbGQubmFtZX06ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblx0XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fWApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHR9XG5cdFx0XG5cdC8qKlxuXHRcdCogR2VuZXJhdGUgYSB0eXBlcy50cyBmaWxlIHdpdGggY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlc1xuXHRcdCogVGhpcyBpbmNsdWRlcyBhbGwgcHJvcGVydGllcyBleHRyYWN0ZWQgZnJvbSB0aGUgY29uc3RydWN0b3JzXG5cdFx0Ki9cblx0Z2VuZXJhdGVUeXBlc0ZpbGUgKCk6IEdlbmVyYXRlZFR5cGVzIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBnZW5lcmF0ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRcdC8vIEhlYWRlclxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVCcpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBwcm92aWRlcyBjb21wbGV0ZSBUeXBlU2NyaXB0IGludGVyZmFjZXMgZm9yIE1uZW1vbmljYSB0eXBlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlcyBmb3IgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIGFuZFxuXHRcdC8vIGZvciBjdXN0b20gY29sbGVjdGlvbnMgdGhhdCBkZWNsYXJlIGEgdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2Vcblx0XHQvLyAoT3B0aW9uIEIpLiBDdXN0b20tY29sbGVjdGlvbiB0eXBlcyB3aXRob3V0IGEgcmVnaXN0cnkgaW50ZXJmYWNlIGFyZVxuXHRcdC8vIGlzb2xhdGVkIGF0IHJ1bnRpbWUgYW5kIGFyZSBub3QgZW1pdHRlZC5cblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCAmJiAhbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRnZW5lcmF0ZWRUeXBlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZShub2RlLCBsaW5lcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgYSBjb21wbGV0ZSBpbnN0YW5jZSB0eXBlIGFsaWFzIHdpdGggYWxsIHByb3BlcnRpZXNcblx0XHQgKiBUaGlzIGlzIGZvciB0aGUgdHlwZXMudHMgZmlsZSB0aGF0IHVzZXJzIGltcG9ydCBmcm9tXG5cdFx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgdHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGBleHBvcnQgdHlwZSAke3R5cGVOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvclxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHt0aGlzLnJlc29sdmVUeXBlSW5TdHJpbmcocHJvcEluZm8udHlwZSwgbm9kZSl9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXNcblx0XHQvLyBMZWFmIG5vZGVzIChubyBjaGlsZHJlbikgZG9uJ3QgZ2V0IGNvbnN0cnVjdG9yIHByb3BlcnRpZXNcblx0XHQvLyBUaGlzIGZvbGxvd3MgbW5lbW9uaWNhJ3Mgc3RyaWN0Q2hhaW4gYmVoYXZpb3Jcblx0XHRpZiAobm9kZS5jaGlsZHJlbi5zaXplID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkSW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGNoaWxkKTtcblx0XHRcdFx0Y29uc3QgY29uc3RydWN0b3JTaWcgPSB0aGlzLmdlbmVyYXRlQ29uc3RydWN0b3JTaWduYXR1cmUoY2hpbGQpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHQke2NoaWxkLm5hbWV9OiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2NoaWxkSW5zdGFuY2VUeXBlfTtgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3IgbmVzdGVkIHR5cGVzLCBhZGQgdGhpcyBub2RlJ3MgY29uc3RydWN0b3IgYW5kIGFsbCBzaWJsaW5ncyBmcm9tIHNhbWUgcGFyZW50IGFzIHVuZGVmaW5lZFxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIGZvciBzdHJpY3QgY2hhaW4gYmVoYXZpb3IgLSBwYXJlbnQgdW5kZWZpbmVkcyBhcmUgaW5oZXJpdGVkIHZpYSBQcm90b0ZsYXRcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIEFkZCB0aGlzIG5vZGUncyBvd24gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkXG5cdFx0XHRsaW5lcy5wdXNoKGBcXHQke25vZGUubmFtZX06IHVuZGVmaW5lZDtgKTtcblxuXHRcdFx0Ly8gQWRkIGFsbCBzaWJsaW5ncyAob3RoZXIgY2hpbGRyZW4gb2YgdGhlIHNhbWUgcGFyZW50KSBhcyB1bmRlZmluZWRcblx0XHRcdGZvciAoY29uc3Qgc2libGluZyBvZiBub2RlLnBhcmVudC5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRpZiAoc2libGluZy5uYW1lICE9PSBub2RlLm5hbWUpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKGBcXHQke3NpYmxpbmcubmFtZX06IHVuZGVmaW5lZDtgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsb3NlIHRoZSB0eXBlIHByb3Blcmx5IC0gUHJvdG9GbGF0IHVzZXMgfT47IGZvciBuZXN0ZWQsIH07IGZvciByb290XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9PjsnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGluZXMucHVzaCgnfTsnKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBhIHNpbXBsZSB0eXBlIGRlY2xhcmF0aW9uIGZvciBhIHNpbmdsZSB0eXBlXG5cdFx0ICovXG5cdGdlbmVyYXRlU2luZ2xlVHlwZSAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHRoaXMuZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlKG5vZGUsIGxpbmVzKTtcblx0XHRyZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBUeXBlUmVnaXN0cnkgaW50ZXJmYWNlIGZvciB0eXBlLXNhZmUgbG9va3VwKCkgZnVuY3Rpb25cblx0XHQgKiBBdWdtZW50IG1uZW1vbmljYSdzIFR5cGVSZWdpc3RyeSBzbyBsb29rdXAoJ1R5cGVOYW1lJykgcmV0dXJucyB0aGUgdHlwZWQgY29uc3RydWN0b3Jcblx0XHQgKi9cblx0Z2VuZXJhdGVUeXBlUmVnaXN0cnkgKCk6IEdlbmVyYXRlZFR5cGVzIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBnZW5lcmF0ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRcdC8vIEhlYWRlclxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBUeXBlUmVnaXN0cnkgZm9yIHR5cGUtc2FmZSBtbmVtb25pY2EubG9va3VwKCknKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBUaGlzIGZpbGUgYXVnbWVudHMgbW5lbW9uaWNhXFwncyBUeXBlUmVnaXN0cnkgdmlhIGRlY2xhcmF0aW9uIG1lcmdpbmcuJyk7XG5cdFx0bGluZXMucHVzaCgnLy8nKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBVc2FnZTonKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGltcG9ydCB7IGxvb2t1cCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgaW1wb3J0IFxcJy4vLnRhY3RpY2EvcmVnaXN0cnlcXCc7ICAvLyBhcHBsaWVzIHRoZSBhdWdtZW50YXRpb24nKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGNvbnN0IE15VHlwZSA9IGxvb2t1cChcXCdNeVR5cGVcXCcpOycpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgLy8gVHlwZVNjcmlwdCBrbm93czogTXlUeXBlIGlzIHRoZSB0eXBlZCBjb25zdHJ1Y3RvciBmb3IgTXlUeXBlJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBjb25zdCBpbnN0YW5jZSA9IG5ldyBNeVR5cGUoeyAvKiBjb25zdHJ1Y3RvciBhcmdzICovIH0pOycpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgLy8gaW5zdGFuY2UgaGFzIGZ1bGwgaW50ZWxsaXNlbnNlIGZvciB0aGUgZ2VuZXJhdGVkIHR5cGUnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBpbnN0YW5jZSB0eXBlcyBmcm9tIHR5cGVzLnRzLlxuXHRcdC8vIFNraXAgY3VzdG9tLWNvbGxlY3Rpb24gdHlwZXMgdGhhdCBoYXZlIG5vIHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlLlxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsnKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCAmJiAhbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnN0YW5jZVR5cGVOYW1lID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHQke2luc3RhbmNlVHlwZU5hbWV9LGApO1xuXHRcdFx0XHRnZW5lcmF0ZWRUeXBlcy5wdXNoKGluc3RhbmNlVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsaW5lcy5wdXNoKGB9IGZyb20gJyR7dGhpcy5pbXBvcnRQYXRoKCcuL3R5cGVzJyl9JztgKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEdlbmVyYXRlIG1vZHVsZSBhdWdtZW50YXRpb24gZm9yIG1uZW1vbmljYSBUeXBlUmVnaXN0cnlcblx0XHRsaW5lcy5wdXNoKCcvKionKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBUeXBlIHJlZ2lzdHJ5IGF1Z21lbnRpbmcgbW5lbW9uaWNhXFwncyBUeXBlUmVnaXN0cnkgaW50ZXJmYWNlJyk7XG5cdFx0bGluZXMucHVzaCgnICogVGhpcyBlbmFibGVzIHR5cGUtc2FmZSBsb29rdXAoKSB3aXRob3V0IGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzJyk7XG5cdFx0bGluZXMucHVzaCgnIConKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBVc2FnZTogY29uc3QgU29tZVR5cGUgPSBsb29rdXAoXFwnU29tZVR5cGVcXCcpOyAvLyBGdWxseSB0eXBlZCEnKTtcblx0XHRsaW5lcy5wdXNoKCcgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCdkZWNsYXJlIG1vZHVsZSBcXCdtbmVtb25pY2FcXCcgeycpO1xuXHRcdGxpbmVzLnB1c2goJ1x0aW50ZXJmYWNlIFR5cGVSZWdpc3RyeSB7Jyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBlbnRyaWVzIGZvciBhbGwgdHlwZSBwYXRocyB0aGF0IGJlbG9uZyB0byB0aGUgZGVmYXVsdC9nbG9iYWwgY29sbGVjdGlvbi5cblx0XHQvLyBUeXBlcyB0aGF0IGxpdmUgaW4gYSBjdXN0b20gY29sbGVjdGlvbiAoY29sbGVjdGlvbklkIHNldCkgYXJlIGlzb2xhdGVkIGF0IHJ1bnRpbWVcblx0XHQvLyBhbmQgYXJlIG5vdCByZWFjaGFibGUgdGhyb3VnaCBmcmVlIGxvb2t1cCgpLCBzbyB0aGV5IG11c3Qgbm90IGJlIGFkZGVkIHRvIHRoZVxuXHRcdC8vIGdsb2JhbCBUeXBlUmVnaXN0cnkgYXVnbWVudGF0aW9uLlxuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdC8vIEdlbmVyYXRlIHR5cGVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgbmVzdGVkIHR5cGVzIHdpdGggcHJvcGVydGllc1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goJ1xcdH0nKTtcblx0XHRsaW5lcy5wdXNoKCd9Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBwZXItY29sbGVjdGlvbiByZWdpc3RyeSBhdWdtZW50YXRpb25zIGZvciBPcHRpb24gQlxuXHRcdC8vICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZXMpLlxuXHRcdGNvbnN0IGNvbGxlY3Rpb25Hcm91cHMgPSB0aGlzLmdyb3VwQ29sbGVjdGlvblJlZ2lzdHJ5Tm9kZXMoKTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCBub2RlcyBdIG9mIGNvbGxlY3Rpb25Hcm91cHMpIHtcblx0XHRcdGNvbnN0IFsgcmVnaXN0cnlJbnRlcmZhY2VOYW1lLCBzb3VyY2VGaWxlIF0gPSBrZXkuc3BsaXQoJzo6Jyk7XG5cdFx0XHRjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5yZXNvbHZlTW9kdWxlUGF0aChzb3VyY2VGaWxlKTtcblx0XHRcdGxpbmVzLnB1c2goYGRlY2xhcmUgbW9kdWxlICcke21vZHVsZVBhdGh9JyB7YCk7XG5cdFx0XHRsaW5lcy5wdXNoKGBcXHRpbnRlcmZhY2UgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9IHtgKTtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Y29uc3QgY29uc3RydWN0b3JTaWcgPSB0aGlzLmdlbmVyYXRlQ29uc3RydWN0b3JTaWduYXR1cmUobm9kZSk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdFxcdCcke2Z1bGxQYXRofSc6ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7aW5zdGFuY2VUeXBlfTtgKTtcblx0XHRcdH1cblx0XHRcdGxpbmVzLnB1c2goJ1xcdH0nKTtcblx0XHRcdGxpbmVzLnB1c2goJ30nKTtcblx0XHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdH1cblxuXHRcdC8vIFJlLWV4cG9ydCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgZXhwbGljaXQgdXNhZ2Vcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFR5cGVSZWdpc3RyeSB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJ2V4cG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH07Jyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29udGVudCA6IGxpbmVzLmpvaW4oJ1xcbicpLFxuXHRcdFx0dHlwZXMgICA6IGdlbmVyYXRlZFR5cGVzLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZm9yIGEgdHlwZSBub2RlXG5cdFx0ICogVXNlcyBjb25zdHJ1Y3RvclBhcmFtcyBmb3IgVHlwZVJlZ2lzdHJ5IHNpZ25hdHVyZSAobm90IGluc3RhbmNlIHByb3BlcnRpZXMpXG5cdFx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZSAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIFVzZSBjb25zdHJ1Y3RvclBhcmFtcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gZW1wdHkgc2lnbmF0dXJlXG5cdFx0Y29uc3QgcGFyYW1zID0gbm9kZS5jb25zdHJ1Y3RvclBhcmFtcztcblxuXHRcdGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAnbmV3ICgpJztcblx0XHR9XG5cblx0XHQvLyBCdWlsZCB0eXBlZCBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZnJvbSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzXG5cdFx0Y29uc3QgcHJvcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcGFyYW0ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdHByb3BzLnB1c2goYCR7cGFyYW0ubmFtZX0ke29wdGlvbmFsfTogJHtwYXJhbS50eXBlfWApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgd2l0aCBkYXRhIHBhcmFtZXRlclxuXHRcdHJldHVybiBgbmV3ICgke3Byb3BzLmpvaW4oJywgJyl9KWA7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZXQgdGhlIGZ1bGwgZG90dGVkIHBhdGggZm9yIGEgdHlwZSBub2RlXG5cdFx0ICovXG5cdHByaXZhdGUgZ2V0RnVsbFBhdGggKG5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHRpZiAoIW5vZGUucGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gbm9kZS5uYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7dGhpcy5nZXRGdWxsUGF0aChub2RlLnBhcmVudCl9LiR7bm9kZS5uYW1lfWA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBpbnN0YW5jZSB0eXBlIG5hbWUgZm9yIGEgbm9kZVxuXHQgKiBVc2VzIGZ1bGwgcGF0aCB3aXRoIHVuZGVyc2NvcmVzOiBVc2FnZXMuVXNhZ2VFbnRyeSAtPiBVc2FnZXNfVXNhZ2VFbnRyeVxuXHQgKiBGb3IgT3B0aW9uIEIgY3VzdG9tIGNvbGxlY3Rpb25zLCBwcmVmaXhlcyB3aXRoIHRoZSByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0SW5zdGFuY2VUeXBlTmFtZSAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRjb25zdCBwcmVmaXggPSBub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSA/IGAke25vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lfV9gIDogJyc7XG5cdFx0cmV0dXJuIGAke3ByZWZpeH0ke2Z1bGxQYXRoLnJlcGxhY2UoL1xcLi9nLCAnXycpfWA7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBhIHNpbXBsZSB0eXBlIG5hbWUgdG8gaXRzIGZ1bGwgcGF0aCBuYW1lXG5cdCAqIGUuZy4sIFwiRGVmaW5pdGlvbkVudHJ5XCIgLT4gXCJEZWZpbml0aW9uc19EZWZpbml0aW9uRW50cnlcIlxuXHQgKi9cblx0cHJpdmF0ZSByZXNvbHZlVHlwZU5hbWUgKHNpbXBsZU5hbWU6IHN0cmluZywgY3VycmVudE5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHQvLyBGaXJzdCBjaGVjayBpZiBpdCdzIHRoZSBjdXJyZW50IG5vZGUgb3IgaXRzIGNoaWxkcmVuXG5cdFx0aWYgKGN1cnJlbnROb2RlLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY3VycmVudE5vZGUpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGN1cnJlbnROb2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRpZiAoY2hpbGQubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGNoaWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gU2VhcmNoIGFsbCB0eXBlcyBpbiB0aGUgZ3JhcGhcblx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpKSB7XG5cdFx0XHRpZiAodHlwZS5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUodHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaW1wbGVOYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc29sdmUgc2ltcGxlIHR5cGUgbmFtZXMgdG8gZnVsbCBwYXRoIG5hbWVzIHdpdGhpbiBhIHR5cGUgc3RyaW5nXG5cdCAqIEhhbmRsZXMgY29tcGxleCB0eXBlcyBsaWtlIEFycmF5PFVzYWdlRW50cnk+LCBNYXA8c3RyaW5nLCBUeXBlRW50cnk+LCBldGMuXG5cdCAqL1xuXHRwcml2YXRlIHJlc29sdmVUeXBlSW5TdHJpbmcgKHR5cGVTdHI6IHN0cmluZywgY3VycmVudE5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHQvLyBHZXQgYWxsIHR5cGUgbmFtZXMgZnJvbSB0aGUgZ3JhcGhcblx0XHRjb25zdCBhbGxUeXBlcyA9IHRoaXMuZ3JhcGguZ2V0QWxsVHlwZXMoKTtcblx0XHRjb25zdCB0eXBlTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgYWxsVHlwZXMpIHtcblx0XHRcdHR5cGVOYW1lcy5hZGQodHlwZS5uYW1lKTtcblx0XHR9XG5cblx0XHQvLyBTb3J0IGJ5IGxlbmd0aCAobG9uZ2VzdCBmaXJzdCkgdG8gYXZvaWQgcGFydGlhbCByZXBsYWNlbWVudHNcblx0XHRjb25zdCBzb3J0ZWROYW1lcyA9IEFycmF5LmZyb20odHlwZU5hbWVzKS5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcblxuXHRcdC8vIFJlcGxhY2UgZWFjaCBzaW1wbGUgdHlwZSBuYW1lIHdpdGggaXRzIGZ1bGwgcGF0aCB2ZXJzaW9uXG5cdFx0bGV0IHJlc3VsdCA9IHR5cGVTdHI7XG5cdFx0Zm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZE5hbWVzKSB7XG5cdFx0XHQvLyBVc2Ugd29yZCBib3VuZGFyeSBtYXRjaGluZyB0byBhdm9pZCByZXBsYWNpbmcgcGFydGlhbCBuYW1lc1xuXHRcdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7bmFtZX1cXFxcYmAsICdnJyk7XG5cdFx0XHRjb25zdCBmdWxsVHlwZU5hbWUgPSB0aGlzLnJlc29sdmVUeXBlTmFtZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAoZnVsbFR5cGVOYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZ2V4LCBmdWxsVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIGNvbGxlY3Rpb24gdHlwZSBub2RlcyBieSB0aGVpciByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBhbmQgc291cmNlIGZpbGUuXG5cdCAqIFJldHVybnMgYSBtYXAga2V5ZWQgYnkgYCR7cmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtzb3VyY2VGaWxlfWAuXG5cdCAqL1xuXHRwcml2YXRlIGdyb3VwQ29sbGVjdGlvblJlZ2lzdHJ5Tm9kZXMgKCk6IE1hcDxzdHJpbmcsIFR5cGVOb2RlW10+IHtcblx0XHRjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgVHlwZU5vZGVbXT4oKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmICghbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBrZXkgPSBgJHtub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZX06OiR7bm9kZS5zb3VyY2VGaWxlfWA7XG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChrZXkpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdFx0XHRleGlzdGluZy5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdyb3Vwcy5zZXQoa2V5LCBbIG5vZGUgXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc291cmNlIGZpbGUgcGF0aCB0byBhIG1vZHVsZSBzcGVjaWZpZXIgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnksXG5cdCAqIHN1aXRhYmxlIGZvciB1c2UgaW4gYSBgZGVjbGFyZSBtb2R1bGUgJy4uLidgIGJsb2NrLlxuXHQgKi9cblx0cHJpdmF0ZSByZXNvbHZlTW9kdWxlUGF0aCAoc291cmNlRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRBYnNvbHV0ZSA9IHBhdGgucmVzb2x2ZSh0aGlzLm91dHB1dERpcik7XG5cdFx0Y29uc3Qgc291cmNlQWJzb2x1dGUgPSBwYXRoLnJlc29sdmUoc291cmNlRmlsZSk7XG5cdFx0bGV0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShvdXRwdXRBYnNvbHV0ZSwgc291cmNlQWJzb2x1dGUpO1xuXHRcdC8vIFJlbW92ZSAudHMgZXh0ZW5zaW9uOyBrZWVwIC50c3ggaWYgcHJlc2VudFxuXHRcdGlmIChyZWxhdGl2ZS5lbmRzV2l0aCgnLnRzJykgJiYgIXJlbGF0aXZlLmVuZHNXaXRoKCcudHN4JykpIHtcblx0XHRcdHJlbGF0aXZlID0gcmVsYXRpdmUuc2xpY2UoMCwgLTMpO1xuXHRcdH1cblx0XHQvLyBDb252ZXJ0IFdpbmRvd3Mgc2VwYXJhdG9ycyB0byBQT1NJWFxuXHRcdGNvbnN0IHBvc2l4UmVsYXRpdmUgPSByZWxhdGl2ZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cdFx0cmV0dXJuIHBvc2l4UmVsYXRpdmU7XG5cdH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonica/tactica",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "description": "Type definition generator for Mnemonica — statically analyzes define() calls and emits .tactica/ types, registry, and metadata",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -43,7 +43,7 @@
43
43
  "homepage": "https://github.com/mythographica/tactica#readme",
44
44
  "license": "MIT",
45
45
  "peerDependencies": {
46
- "mnemonica": "^1.2.5",
46
+ "mnemonica": "^1.2.7",
47
47
  "typescript": "^5.0.0 || ^6.0.0"
48
48
  },
49
49
  "devDependencies": {
@@ -51,8 +51,8 @@
51
51
  "@types/chai": "^4.3.20",
52
52
  "@types/mocha": "^10.0.10",
53
53
  "@types/node": "^20.19.43",
54
- "@typescript-eslint/eslint-plugin": "^8.67.0",
55
- "@typescript-eslint/parser": "^8.67.0",
54
+ "@typescript-eslint/eslint-plugin": "^8.68.0",
55
+ "@typescript-eslint/parser": "^8.68.0",
56
56
  "chai": "^4.5.0",
57
57
  "eslint": "^9.39.5",
58
58
  "eslint-plugin-mocha": "^10.5.0",
@@ -67,6 +67,6 @@
67
67
  "dependencies": {
68
68
  "@types/chokidar": "^2.1.7",
69
69
  "chokidar": "^3.6.0",
70
- "mnemonica": "^1.2.5"
70
+ "mnemonica": "^1.2.7"
71
71
  }
72
72
  }