velocious 1.0.267 → 1.0.270

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.
@@ -82,15 +82,17 @@ export default class VelociousDatabaseMigration {
82
82
  * @param {string} tableName - Table name.
83
83
  * @param {string} referenceName - Reference name.
84
84
  * @param {object} args - Options object.
85
- * @param {boolean} args.foreignKey - Whether foreign key.
86
- * @param {string} args.type - Type identifier.
87
- * @param {boolean} args.unique - Whether unique.
85
+ * @param {boolean} [args.foreignKey] - Whether foreign key.
86
+ * @param {boolean} [args.null] - Whether nullable.
87
+ * @param {string} [args.type] - Type identifier.
88
+ * @param {boolean} [args.unique] - Whether unique.
88
89
  * @returns {Promise<void>} - Resolves when complete.
89
90
  */
90
91
  addReference(tableName: string, referenceName: string, args: {
91
- foreignKey: boolean;
92
- type: string;
93
- unique: boolean;
92
+ foreignKey?: boolean | undefined;
93
+ null?: boolean | undefined;
94
+ type?: string | undefined;
95
+ unique?: boolean | undefined;
94
96
  }): Promise<void>;
95
97
  /**
96
98
  * @param {string} tableName - Table name.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/index.js"],"names":[],"mappings":"AA+BA;IACE;;;OAGG;IACH,wCAHW,MAAM,EAAE,GACN,IAAI,CAIhB;IAED,mEAAmE;IACnE,iCADc,MAAM,EAAE,GAAG,SAAS,CAGjC;IAED;;;;;OAKG;IACH,uDAJG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,kBAAkB,EAA/B,MAAM;QACqC,EAAE,EAA7C,OAAO,oBAAoB,EAAE,OAAO;KAC9C,EAQA;IAHC,wDAAkC;IAClC,4BAA6C;IAC7C,0CAAa;IAGf,iCAIC;IAED,qEAAqE;IACrE,aADc,OAAO,oBAAoB,EAAE,OAAO,CACnB;IAC/B,mDAAwC;IAExC,wBAEC;IAED,oBAEC;IAED,sBAEC;IAED;;;OAGG;IACH,aAHW,MAAM,GACJ,OAAO,CAAC,OAAO,oBAAoB,EAAE,eAAe,CAAC,CAIjE;IAED;;;;;;OAMG;IACH,qBANW,MAAM,cACN,MAAM,cACN,MAAM,SACN,iBAAiB,GACf,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;OAIG;IACH,wBAJW,MAAM,cACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;;OAKG;IACH;;;;;OAKG;IACH,oBALW,MAAM,WACN,KAAK,CAAC,MAAM,GAAG,OAAO,+BAA+B,EAAE,OAAO,CAAC;;;;;;;;;;;;;QAE7D,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;OAIG;IACH,yBAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;;;;OAQG;IACH,wBARW,MAAM,iBACN,MAAM,QAEd;QAAsB,UAAU,EAAxB,OAAO;QACM,IAAI,EAAjB,MAAM;QACQ,MAAM,EAApB,OAAO;KACf,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;;OAIG;IACH,2BAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;OAKG;IACH,4BALW,MAAM,cACN,MAAM,YACN,OAAO,GACL,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACH,wBAJW,MAAM,cACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAc5B;;;;;;;IAGE,uBACQ,MAAM,YACN,uBAAuB,GACrB,OAAO,CAAC,IAAI,CAAC,CACzB;;;;;;;;IAEE,uBACQ,MAAM,QACN,mBAAmB,YACnB,uBAAuB,GACrB,OAAO,CAAC,IAAI,CAAC,CACzB;IA0ED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;;OAKG;IACH,wBALW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAM5B;CACF;;;;;cAxWa,GAAG;;;;;;;;;gBAEgB,OAAO;;;;;;;;;;;;;;;;;;;cAO1B,GAAG;;;;;;;;;;;;sCAQJ,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI;AAMvC;CAA0C;sBADpB,wBAAwB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/index.js"],"names":[],"mappings":"AA+BA;IACE;;;OAGG;IACH,wCAHW,MAAM,EAAE,GACN,IAAI,CAIhB;IAED,mEAAmE;IACnE,iCADc,MAAM,EAAE,GAAG,SAAS,CAGjC;IAED;;;;;OAKG;IACH,uDAJG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC3B,kBAAkB,EAA/B,MAAM;QACqC,EAAE,EAA7C,OAAO,oBAAoB,EAAE,OAAO;KAC9C,EAQA;IAHC,wDAAkC;IAClC,4BAA6C;IAC7C,0CAAa;IAGf,iCAIC;IAED,qEAAqE;IACrE,aADc,OAAO,oBAAoB,EAAE,OAAO,CACnB;IAC/B,mDAAwC;IAExC,wBAEC;IAED,oBAEC;IAED,sBAEC;IAED;;;OAGG;IACH,aAHW,MAAM,GACJ,OAAO,CAAC,OAAO,oBAAoB,EAAE,eAAe,CAAC,CAIjE;IAED;;;;;;OAMG;IACH,qBANW,MAAM,cACN,MAAM,cACN,MAAM,SACN,iBAAiB,GACf,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;OAIG;IACH,wBAJW,MAAM,cACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;;OAKG;IACH;;;;;OAKG;IACH,oBALW,MAAM,WACN,KAAK,CAAC,MAAM,GAAG,OAAO,+BAA+B,EAAE,OAAO,CAAC;;;;;;;;;;;;;QAE7D,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;OAIG;IACH,yBAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;;;;;OASG;IACH,wBATW,MAAM,iBACN,MAAM,QAEd;QAAuB,UAAU;QACV,IAAI;QACL,IAAI;QACH,MAAM;KAC7B,GAAU,OAAO,CAAC,IAAI,CAAC,CAiBzB;IAED;;;;OAIG;IACH,2BAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;OAKG;IACH,4BALW,MAAM,cACN,MAAM,YACN,OAAO,GACL,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACH,wBAJW,MAAM,cACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAc5B;;;;;;;IAGE,uBACQ,MAAM,YACN,uBAAuB,GACrB,OAAO,CAAC,IAAI,CAAC,CACzB;;;;;;;;IAEE,uBACQ,MAAM,QACN,mBAAmB,YACnB,uBAAuB,GACrB,OAAO,CAAC,IAAI,CAAC,CACzB;IA0ED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;;OAKG;IACH,wBALW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAM5B;CACF;;;;;cA5Wa,GAAG;;;;;;;;;gBAEgB,OAAO;;;;;;;;;;;;;;;;;;;cAO1B,GAAG;;;;;;;;;;;;sCAQJ,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI;AAMvC;CAA0C;sBADpB,wBAAwB"}
@@ -138,10 +138,10 @@ export default class VelociousDatabaseMigration {
138
138
  */
139
139
  async addForeignKey(tableName, referenceName) {
140
140
  const referenceNameUnderscore = inflection.underscore(referenceName);
141
- const tableNameUnderscore = inflection.underscore(tableName);
141
+ const referencedTableName = inflection.pluralize(referenceNameUnderscore);
142
142
  const columnName = `${referenceNameUnderscore}_id`;
143
143
  const foreignKeyName = `fk_${tableName}_${referenceName}`;
144
- await this.getDriver().addForeignKey(tableName, columnName, tableNameUnderscore, "id", {
144
+ await this.getDriver().addForeignKey(tableName, columnName, referencedTableName, "id", {
145
145
  isNewForeignKey: true,
146
146
  name: foreignKeyName
147
147
  });
@@ -150,16 +150,19 @@ export default class VelociousDatabaseMigration {
150
150
  * @param {string} tableName - Table name.
151
151
  * @param {string} referenceName - Reference name.
152
152
  * @param {object} args - Options object.
153
- * @param {boolean} args.foreignKey - Whether foreign key.
154
- * @param {string} args.type - Type identifier.
155
- * @param {boolean} args.unique - Whether unique.
153
+ * @param {boolean} [args.foreignKey] - Whether foreign key.
154
+ * @param {boolean} [args.null] - Whether nullable.
155
+ * @param {string} [args.type] - Type identifier.
156
+ * @param {boolean} [args.unique] - Whether unique.
156
157
  * @returns {Promise<void>} - Resolves when complete.
157
158
  */
158
159
  async addReference(tableName, referenceName, args) {
159
- const { foreignKey, type, unique, ...restArgs } = args;
160
+ const { foreignKey, null: nullable, type, unique, ...restArgs } = args;
160
161
  const columnName = `${inflection.underscore(referenceName)}_id`;
161
162
  restArgsError(restArgs);
162
- await this.addColumn(tableName, columnName, type || "integer");
163
+ const columnType = type || "integer";
164
+ const columnArgs = nullable !== undefined ? { null: nullable } : undefined;
165
+ await this.addColumn(tableName, columnName, columnType, columnArgs);
163
166
  await this.addIndex(tableName, [columnName], { unique: unique });
164
167
  if (foreignKey) {
165
168
  await this.addForeignKey(tableName, referenceName);
@@ -303,4 +306,4 @@ export default class VelociousDatabaseMigration {
303
306
  return exists;
304
307
  }
305
308
  }
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUNIOzs7O0dBSUc7QUFDSDs7O0dBR0c7QUFDSDs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE1BQU0sbUJBQW9CLFNBQVEsS0FBSztDQUFHO0FBRTFDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLE1BQU0sQ0FBQyxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQTtRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUNmLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7UUFFNUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUE7SUFDakMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFBLENBQUMsQ0FBQztJQUMvQixVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRXhDLEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxFQUFFO1FBQ04sTUFBTSxJQUFJLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxJQUFJLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRztRQUNmLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUk7UUFDckQsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFFeEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBRWhELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU3RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVO1FBQ3RDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUUxQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUVoRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFN0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNIOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUk7UUFDckMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDbkM7WUFDRSxPQUFPO1lBQ1AsU0FBUztTQUNWLEVBQ0QsSUFBSSxDQUNMLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUE7UUFFcEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYTtRQUMxQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDcEUsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzVELE1BQU0sVUFBVSxHQUFHLEdBQUcsdUJBQXVCLEtBQUssQ0FBQTtRQUNsRCxNQUFNLGNBQWMsR0FBRyxNQUFNLFNBQVMsSUFBSSxhQUFhLEVBQUUsQ0FBQTtRQUV6RCxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQ2xDLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLElBQUksRUFDSjtZQUNFLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJO1FBQy9DLE1BQU0sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQTtRQUUvRCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQzlELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBRTlELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGFBQWE7UUFDNUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUE7UUFFL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUTtRQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFOUQsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsU0FBUyxpQkFBaUIsQ0FBQyxDQUFBO1FBRWhFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV0RCxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxVQUFVLDRCQUE0QixTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRXpGLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVU7UUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTlELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFdEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0g7Ozs7OztPQU1HO0lBQ0g7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUNyQyxJQUFJLElBQUksQ0FBQTtRQUNSLElBQUksUUFBUSxDQUFBO1FBRVosSUFBSSxPQUFPLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixJQUFJLEdBQUcsRUFBRSxDQUFBO1lBQ1QsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksR0FBRyxJQUFJLENBQUE7WUFDWCxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLENBQUM7UUFFRCxNQUFNLEVBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDM0UsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQTtRQUVqQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFFeEQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3hDLENBQUM7UUFDRCxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUE7UUFDcEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxJQUFJLE1BQU0sQ0FBQTtRQUM5QyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3JGLElBQUksZUFBZSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUE7UUFFM0UsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxLQUFLLENBQUE7WUFFdkIsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO2dCQUM5QixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQTtnQkFDNUIsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25DLDZGQUE2RjtnQkFDN0YsU0FBUyxHQUFHLFNBQVMsQ0FBQTtZQUN2QixDQUFDO1lBQ0Qsd0ZBQXdGO1FBQzFGLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUUxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFFdEYsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzlILENBQUM7UUFFRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFN0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYTtRQUN4RCxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU1RCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFkZENvbHVtbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2FueX0gW2RlZmF1bHRdIC0gRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZm9yZWlnbktleV0gLSBGb3JlaWduIGtleSBkZWZpbml0aW9uIGZvciB0aGUgY29sdW1uLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwge3VuaXF1ZTogYm9vbGVhbn19IFtpbmRleF0gLSBXaGV0aGVyIHRvIGFkZCBhbiBpbmRleCAob3B0aW9uYWxseSB1bmlxdWUpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbnVsbF0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gYWxsb3dzIG51bGwgdmFsdWVzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHJpbWFyeUtleV0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgYSBwcmltYXJ5IGtleS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VuaXF1ZV0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gZW5mb3JjZXMgdW5pcXVlbmVzcy5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDcmVhdGVUYWJsZUlkQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSBbZGVmYXVsdF0gLSBEZWZhdWx0IHZhbHVlIGZvciB0aGUgSUQgY29sdW1uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIENvbHVtbiB0eXBlIGZvciB0aGUgSUQgY29sdW1uLlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZVRhYmxlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Q3JlYXRlVGFibGVJZEFyZ3NUeXBlIHwgZmFsc2V9IFtpZF0gLSBJRCBjb2x1bW4gb3B0aW9ucyBvciBmYWxzZSB0byBza2lwIElELlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHsodGFibGU6IFRhYmxlRGF0YSkgPT4gdm9pZH0gQ3JlYXRlVGFibGVDYWxsYmFja1R5cGVcbiAqL1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5jbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZU1pZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBkYXRhYmFzZUlkZW50aWZpZXJzIC0gRGF0YWJhc2UgaWRlbnRpZmllcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBvbkRhdGFiYXNlcyhkYXRhYmFzZUlkZW50aWZpZXJzKSB7XG4gICAgdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVycyA9IGRhdGFiYXNlSWRlbnRpZmllcnNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IC0gVGhlIGRhdGFiYXNlIGlkZW50aWZpZXJzLiAgKi9cbiAgc3RhdGljIGdldERhdGFiYXNlSWRlbnRpZmllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VJZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCIsIGRifSkge1xuICAgIGlmICghZGF0YWJhc2VJZGVudGlmaWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBkYXRhYmFzZSBpZGVudGlmaWVyIGdpdmVuXCIpXG4gICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2RiJyBnaXZlblwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMuX2RiID0gZGJcbiAgfVxuXG4gIF9nZXREYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGRhdGFiYXNlIGlkZW50aWZpZXIgc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIFRoZSBkcml2ZXIuICAqL1xuICBnZXREcml2ZXIoKSB7IHJldHVybiB0aGlzLl9kYiB9XG4gIGNvbm5lY3Rpb24oKSB7IHJldHVybiB0aGlzLmdldERyaXZlcigpIH1cblxuICBhc3luYyBjaGFuZ2UoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoXCInY2hhbmdlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIGFzeW5jIHVwKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICBhc3luYyBkb3duKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeVJlc3VsdFR5cGU+fSAtIFJlc29sdmVzIHdpdGggdGhlIGV4ZWN1dGUuXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHNxbCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS5xdWVyeShzcWwpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5UeXBlIC0gQ29sdW1uIHR5cGUuXG4gICAqIEBwYXJhbSB7QWRkQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgY29sdW1uVHlwZSwgYXJncykge1xuICAgIGlmICghY29sdW1uVHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIHR5cGUgZ2l2ZW5cIilcblxuICAgIGNvbnN0IHRhYmxlQ29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBjb2x1bW5UeXBlfSwgYXJncylcbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oY29sdW1uTmFtZSwgdGFibGVDb2x1bW5BcmdzKVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2Ryb3BDb2x1bW46IHRydWV9KVxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZENvbHVtbihjb2x1bW5OYW1lLCB0YWJsZUNvbHVtbkFyZ3MpXG5cbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5hbHRlclRhYmxlU1FMcyh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge29iamVjdH0gQWRkSW5kZXhBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZk5vdEV4aXN0c10gLSBTa2lwIGNyZWF0aW9uIGlmIHRoZSBpbmRleCBhbHJlYWR5IGV4aXN0cy5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEV4cGxpY2l0IGluZGV4IG5hbWUgdG8gdXNlLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmlxdWVdIC0gV2hldGhlciB0aGUgaW5kZXggc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBpbXBvcnQoXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiKS5kZWZhdWx0Pn0gY29sdW1ucyAtIENvbHVtbiBuYW1lcy5cbiAgICogQHBhcmFtIHtBZGRJbmRleEFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFkZEluZGV4KHRhYmxlTmFtZSwgY29sdW1ucywgYXJncykge1xuICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIHRhYmxlTmFtZVxuICAgICAgfSxcbiAgICAgIGFyZ3NcbiAgICApXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlSW5kZXhTUUxzKGNyZWF0ZUluZGV4QXJncylcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZU5hbWUgLSBSZWZlcmVuY2UgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFkZEZvcmVpZ25LZXkodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmZXJlbmNlTmFtZSlcbiAgICBjb25zdCB0YWJsZU5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHRhYmxlTmFtZSlcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7cmVmZXJlbmNlTmFtZVVuZGVyc2NvcmV9X2lkYFxuICAgIGNvbnN0IGZvcmVpZ25LZXlOYW1lID0gYGZrXyR7dGFibGVOYW1lfV8ke3JlZmVyZW5jZU5hbWV9YFxuXG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5hZGRGb3JlaWduS2V5KFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgY29sdW1uTmFtZSxcbiAgICAgIHRhYmxlTmFtZVVuZGVyc2NvcmUsXG4gICAgICBcImlkXCIsXG4gICAgICB7XG4gICAgICAgIGlzTmV3Rm9yZWlnbktleTogdHJ1ZSxcbiAgICAgICAgbmFtZTogZm9yZWlnbktleU5hbWVcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VOYW1lIC0gUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5mb3JlaWduS2V5IC0gV2hldGhlciBmb3JlaWduIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZSAtIFR5cGUgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtib29sZWFufSBhcmdzLnVuaXF1ZSAtIFdoZXRoZXIgdW5pcXVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkUmVmZXJlbmNlKHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSwgYXJncykge1xuICAgIGNvbnN0IHtmb3JlaWduS2V5LCB0eXBlLCB1bmlxdWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpfV9pZGBcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBhd2FpdCB0aGlzLmFkZENvbHVtbih0YWJsZU5hbWUsIGNvbHVtbk5hbWUsIHR5cGUgfHwgXCJpbnRlZ2VyXCIpXG4gICAgYXdhaXQgdGhpcy5hZGRJbmRleCh0YWJsZU5hbWUsIFtjb2x1bW5OYW1lXSwge3VuaXF1ZTogdW5pcXVlfSlcblxuICAgIGlmIChmb3JlaWduS2V5KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZEZvcmVpZ25LZXkodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZU5hbWUgLSBSZWZlcmVuY2UgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlZmVyZW5jZSh0YWJsZU5hbWUsIHJlZmVyZW5jZU5hbWUpIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpfV9pZGBcblxuICAgIHRoaXMucmVtb3ZlQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBudWxsYWJsZSAtIFdoZXRoZXIgbnVsbGFibGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBjaGFuZ2VDb2x1bW5OdWxsKHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgbnVsbGFibGUpIHtcbiAgICBjb25zdCB0YWJsZSA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VGFibGVCeU5hbWUodGFibGVOYW1lKVxuXG4gICAgaWYgKCF0YWJsZSkgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSAke3RhYmxlTmFtZX0gZG9lcyBub3QgZXhpc3RgKVxuXG4gICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGFibGUuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICBpZiAoIWNvbHVtbikgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW5OYW1lfSBkb2VzIG5vdCBleGlzdCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gKVxuXG4gICAgYXdhaXQgY29sdW1uLmNoYW5nZU51bGxhYmxlKG51bGxhYmxlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBSZXNvbHZlcyB3aXRoIFdoZXRoZXIgY29sdW1uIGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGNvbHVtbkV4aXN0cyh0YWJsZU5hbWUsIGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCB0YWJsZSA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VGFibGVCeU5hbWUodGFibGVOYW1lKVxuXG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0YWJsZS5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSlcblxuICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBCb29sZWFuKGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIC8qKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQXJnc1R5cGUgfCBDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZX0gYXJnMSAtIEFyZzEuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVDYWxsYmFja1R5cGUgfCB1bmRlZmluZWR9IFthcmcyXSAtIEFyZzIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZU5hbWUsIGFyZzEsIGFyZzIpIHtcbiAgICBsZXQgYXJnc1xuICAgIGxldCBjYWxsYmFja1xuXG4gICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgYXJncyA9IHt9XG4gICAgICBjYWxsYmFjayA9IGFyZzFcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IGFyZzFcbiAgICAgIGNhbGxiYWNrID0gYXJnMlxuICAgIH1cblxuICAgIGNvbnN0IHtpZCA9IHt9LCAuLi5yZXN0QXJnc30gPSBhcmdzXG4gICAgY29uc3QgZGF0YWJhc2VJZGVudGlmaWVyID0gdGhpcy5fZ2V0RGF0YWJhc2VJZGVudGlmaWVyKClcbiAgICBjb25zdCBkYXRhYmFzZVBvb2wgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGF0YWJhc2VQb29sKGRhdGFiYXNlSWRlbnRpZmllcilcbiAgICBsZXQgaWREZWZhdWx0LCBpZFR5cGUsIHJlc3RBcmdzSWRcblxuICAgIGlmIChpZCAhPT0gZmFsc2UpIHtcbiAgICAgICh7ZGVmYXVsdDogaWREZWZhdWx0LCB0eXBlOiBpZFR5cGUsIC4uLnJlc3RBcmdzSWR9ID0gaWQpXG5cbiAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3NJZClcbiAgICB9XG5cbiAgICBpZiAoIWlkVHlwZSkge1xuICAgICAgaWRUeXBlID0gZGF0YWJhc2VQb29sLnByaW1hcnlLZXlUeXBlKClcbiAgICB9XG4gICAgY29uc3QgZHJpdmVyU3VwcG9ydHNEZWZhdWx0VVVJRCA9IHRoaXMuZ2V0RHJpdmVyKCkuc3VwcG9ydHNEZWZhdWx0UHJpbWFyeUtleVVVSUQ/LigpXG4gICAgY29uc3QgbG93ZXJJZFR5cGUgPSBpZFR5cGU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBpc1VVSURQcmltYXJ5S2V5ID0gbG93ZXJJZFR5cGUgPT0gXCJ1dWlkXCJcbiAgICBjb25zdCBudW1lcmljQXV0b0luY3JlbWVudFR5cGVzID0gW1wiaW50XCIsIFwiaW50ZWdlclwiLCBcImJpZ2ludFwiLCBcInNtYWxsaW50XCIsIFwidGlueWludFwiXVxuICAgIGxldCBpZEF1dG9JbmNyZW1lbnQgPSBudW1lcmljQXV0b0luY3JlbWVudFR5cGVzLmluY2x1ZGVzKGxvd2VySWRUeXBlIHx8IFwiXCIpXG5cbiAgICBpZiAoaXNVVUlEUHJpbWFyeUtleSkge1xuICAgICAgaWRBdXRvSW5jcmVtZW50ID0gZmFsc2VcblxuICAgICAgaWYgKGRyaXZlclN1cHBvcnRzRGVmYXVsdFVVSUQpIHtcbiAgICAgICAgaWYgKGlkRGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWREZWZhdWx0ID0gKCkgPT4gXCJVVUlEKClcIlxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlkRGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExldCBhcHBsaWNhdGlvbiBjb2RlIGFzc2lnbiBVVUlEcyAoc2VlIERhdGFiYXNlUmVjb3JkLmluc2VydCkgd2hlbiB0aGUgZHJpdmVyIGNhbid0IGRvIGl0LlxuICAgICAgICBpZERlZmF1bHQgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIC8vIElmIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgVVVJRCgpIGJ1dCB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgc2V0IGEgZGVmYXVsdCwgcmVzcGVjdCBpdC5cbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoIShpZFR5cGUgaW4gdGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwcmltYXJ5IGtleSB0eXBlOiAke2lkVHlwZX1gKVxuXG4gICAgaWYgKGlkICE9PSBmYWxzZSkge1xuICAgICAgdGFibGVEYXRhLmFkZENvbHVtbihcImlkXCIsIHthdXRvSW5jcmVtZW50OiBpZEF1dG9JbmNyZW1lbnQsIGRlZmF1bHQ6IGlkRGVmYXVsdCwgbnVsbDogZmFsc2UsIHByaW1hcnlLZXk6IHRydWUsIHR5cGU6IGlkVHlwZX0pXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayh0YWJsZURhdGEpXG4gICAgfVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlVGFibGVTcWwodGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5fZGIucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGRyb3BUYWJsZSh0YWJsZU5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLmRyb3BUYWJsZSh0YWJsZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGRDb2x1bW5OYW1lIC0gUHJldmlvdXMgY29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdDb2x1bW5OYW1lIC0gTmV3IGNvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVuYW1lQ29sdW1uKHRhYmxlTmFtZSwgb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZSkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucmVuYW1lQ29sdW1uKHRhYmxlTmFtZSwgb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gUmVzb2x2ZXMgd2l0aCBXaGV0aGVyIHRhYmxlIGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlTmFtZSkge1xuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkudGFibGVFeGlzdHModGFibGVOYW1lKVxuXG4gICAgcmV0dXJuIGV4aXN0c1xuICB9XG59XG5cbiJdfQ==
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUNIOzs7O0dBSUc7QUFDSDs7O0dBR0c7QUFDSDs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE1BQU0sbUJBQW9CLFNBQVEsS0FBSztDQUFHO0FBRTFDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLE1BQU0sQ0FBQyxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQTtRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUNmLENBQUM7SUFFRCxzQkFBc0I7UUFD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QUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU1RCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFkZENvbHVtbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2FueX0gW2RlZmF1bHRdIC0gRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZm9yZWlnbktleV0gLSBGb3JlaWduIGtleSBkZWZpbml0aW9uIGZvciB0aGUgY29sdW1uLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwge3VuaXF1ZTogYm9vbGVhbn19IFtpbmRleF0gLSBXaGV0aGVyIHRvIGFkZCBhbiBpbmRleCAob3B0aW9uYWxseSB1bmlxdWUpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbnVsbF0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gYWxsb3dzIG51bGwgdmFsdWVzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHJpbWFyeUtleV0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgYSBwcmltYXJ5IGtleS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VuaXF1ZV0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gZW5mb3JjZXMgdW5pcXVlbmVzcy5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDcmVhdGVUYWJsZUlkQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSBbZGVmYXVsdF0gLSBEZWZhdWx0IHZhbHVlIGZvciB0aGUgSUQgY29sdW1uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIENvbHVtbiB0eXBlIGZvciB0aGUgSUQgY29sdW1uLlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZVRhYmxlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Q3JlYXRlVGFibGVJZEFyZ3NUeXBlIHwgZmFsc2V9IFtpZF0gLSBJRCBjb2x1bW4gb3B0aW9ucyBvciBmYWxzZSB0byBza2lwIElELlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHsodGFibGU6IFRhYmxlRGF0YSkgPT4gdm9pZH0gQ3JlYXRlVGFibGVDYWxsYmFja1R5cGVcbiAqL1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5jbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZU1pZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBkYXRhYmFzZUlkZW50aWZpZXJzIC0gRGF0YWJhc2UgaWRlbnRpZmllcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBvbkRhdGFiYXNlcyhkYXRhYmFzZUlkZW50aWZpZXJzKSB7XG4gICAgdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVycyA9IGRhdGFiYXNlSWRlbnRpZmllcnNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IC0gVGhlIGRhdGFiYXNlIGlkZW50aWZpZXJzLiAgKi9cbiAgc3RhdGljIGdldERhdGFiYXNlSWRlbnRpZmllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VJZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCIsIGRifSkge1xuICAgIGlmICghZGF0YWJhc2VJZGVudGlmaWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBkYXRhYmFzZSBpZGVudGlmaWVyIGdpdmVuXCIpXG4gICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2RiJyBnaXZlblwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMuX2RiID0gZGJcbiAgfVxuXG4gIF9nZXREYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGRhdGFiYXNlIGlkZW50aWZpZXIgc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIFRoZSBkcml2ZXIuICAqL1xuICBnZXREcml2ZXIoKSB7IHJldHVybiB0aGlzLl9kYiB9XG4gIGNvbm5lY3Rpb24oKSB7IHJldHVybiB0aGlzLmdldERyaXZlcigpIH1cblxuICBhc3luYyBjaGFuZ2UoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoXCInY2hhbmdlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIGFzeW5jIHVwKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICBhc3luYyBkb3duKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeVJlc3VsdFR5cGU+fSAtIFJlc29sdmVzIHdpdGggdGhlIGV4ZWN1dGUuXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHNxbCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS5xdWVyeShzcWwpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5UeXBlIC0gQ29sdW1uIHR5cGUuXG4gICAqIEBwYXJhbSB7QWRkQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgY29sdW1uVHlwZSwgYXJncykge1xuICAgIGlmICghY29sdW1uVHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIHR5cGUgZ2l2ZW5cIilcblxuICAgIGNvbnN0IHRhYmxlQ29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBjb2x1bW5UeXBlfSwgYXJncylcbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oY29sdW1uTmFtZSwgdGFibGVDb2x1bW5BcmdzKVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2Ryb3BDb2x1bW46IHRydWV9KVxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZENvbHVtbihjb2x1bW5OYW1lLCB0YWJsZUNvbHVtbkFyZ3MpXG5cbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5hbHRlclRhYmxlU1FMcyh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge29iamVjdH0gQWRkSW5kZXhBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZk5vdEV4aXN0c10gLSBTa2lwIGNyZWF0aW9uIGlmIHRoZSBpbmRleCBhbHJlYWR5IGV4aXN0cy5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEV4cGxpY2l0IGluZGV4IG5hbWUgdG8gdXNlLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmlxdWVdIC0gV2hldGhlciB0aGUgaW5kZXggc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBpbXBvcnQoXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiKS5kZWZhdWx0Pn0gY29sdW1ucyAtIENvbHVtbiBuYW1lcy5cbiAgICogQHBhcmFtIHtBZGRJbmRleEFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFkZEluZGV4KHRhYmxlTmFtZSwgY29sdW1ucywgYXJncykge1xuICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIHRhYmxlTmFtZVxuICAgICAgfSxcbiAgICAgIGFyZ3NcbiAgICApXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlSW5kZXhTUUxzKGNyZWF0ZUluZGV4QXJncylcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZU5hbWUgLSBSZWZlcmVuY2UgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFkZEZvcmVpZ25LZXkodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmZXJlbmNlTmFtZSlcbiAgICBjb25zdCByZWZlcmVuY2VkVGFibGVOYW1lID0gaW5mbGVjdGlvbi5wbHVyYWxpemUocmVmZXJlbmNlTmFtZVVuZGVyc2NvcmUpXG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGAke3JlZmVyZW5jZU5hbWVVbmRlcnNjb3JlfV9pZGBcbiAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9IGBma18ke3RhYmxlTmFtZX1fJHtyZWZlcmVuY2VOYW1lfWBcblxuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWRkRm9yZWlnbktleShcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICByZWZlcmVuY2VkVGFibGVOYW1lLFxuICAgICAgXCJpZFwiLFxuICAgICAge1xuICAgICAgICBpc05ld0ZvcmVpZ25LZXk6IHRydWUsXG4gICAgICAgIG5hbWU6IGZvcmVpZ25LZXlOYW1lXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlTmFtZSAtIFJlZmVyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmZvcmVpZ25LZXldIC0gV2hldGhlciBmb3JlaWduIGtleS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5udWxsXSAtIFdoZXRoZXIgbnVsbGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy50eXBlXSAtIFR5cGUgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy51bmlxdWVdIC0gV2hldGhlciB1bmlxdWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZGRSZWZlcmVuY2UodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lLCBhcmdzKSB7XG4gICAgY29uc3Qge2ZvcmVpZ25LZXksIG51bGw6IG51bGxhYmxlLCB0eXBlLCB1bmlxdWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpfV9pZGBcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCBjb2x1bW5UeXBlID0gdHlwZSB8fCBcImludGVnZXJcIlxuICAgIGNvbnN0IGNvbHVtbkFyZ3MgPSBudWxsYWJsZSAhPT0gdW5kZWZpbmVkID8ge251bGw6IG51bGxhYmxlfSA6IHVuZGVmaW5lZFxuXG4gICAgYXdhaXQgdGhpcy5hZGRDb2x1bW4odGFibGVOYW1lLCBjb2x1bW5OYW1lLCBjb2x1bW5UeXBlLCBjb2x1bW5BcmdzKVxuICAgIGF3YWl0IHRoaXMuYWRkSW5kZXgodGFibGVOYW1lLCBbY29sdW1uTmFtZV0sIHt1bmlxdWU6IHVuaXF1ZX0pXG5cbiAgICBpZiAoZm9yZWlnbktleSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRGb3JlaWduS2V5KHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VOYW1lIC0gUmVmZXJlbmNlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyByZW1vdmVSZWZlcmVuY2UodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGAke2luZmxlY3Rpb24udW5kZXJzY29yZShyZWZlcmVuY2VOYW1lKX1faWRgXG5cbiAgICB0aGlzLnJlbW92ZUNvbHVtbih0YWJsZU5hbWUsIGNvbHVtbk5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbnVsbGFibGUgLSBXaGV0aGVyIG51bGxhYmxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgY2hhbmdlQ29sdW1uTnVsbCh0YWJsZU5hbWUsIGNvbHVtbk5hbWUsIG51bGxhYmxlKSB7XG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXMgbm90IGV4aXN0YClcblxuICAgIGNvbnN0IGNvbHVtbiA9IGF3YWl0IHRhYmxlLmdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lKVxuXG4gICAgaWYgKCFjb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gdGFibGUgJHt0YWJsZU5hbWV9YClcblxuICAgIGF3YWl0IGNvbHVtbi5jaGFuZ2VOdWxsYWJsZShudWxsYWJsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gUmVzb2x2ZXMgd2l0aCBXaGV0aGVyIGNvbHVtbiBleGlzdHMuXG4gICAqL1xuICBhc3luYyBjb2x1bW5FeGlzdHModGFibGVOYW1lLCBjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGFibGUuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQm9vbGVhbihmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICAvKipcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQXJnc1R5cGV9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUFyZ3NUeXBlIHwgQ3JlYXRlVGFibGVDYWxsYmFja1R5cGV9IGFyZzEgLSBBcmcxLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlIHwgdW5kZWZpbmVkfSBbYXJnMl0gLSBBcmcyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVGFibGUodGFibGVOYW1lLCBhcmcxLCBhcmcyKSB7XG4gICAgbGV0IGFyZ3NcbiAgICBsZXQgY2FsbGJhY2tcblxuICAgIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGFyZ3MgPSB7fVxuICAgICAgY2FsbGJhY2sgPSBhcmcxXG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBhcmcxXG4gICAgICBjYWxsYmFjayA9IGFyZzJcbiAgICB9XG5cbiAgICBjb25zdCB7aWQgPSB7fSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuICAgIGNvbnN0IGRhdGFiYXNlSWRlbnRpZmllciA9IHRoaXMuX2dldERhdGFiYXNlSWRlbnRpZmllcigpXG4gICAgY29uc3QgZGF0YWJhc2VQb29sID0gdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlUG9vbChkYXRhYmFzZUlkZW50aWZpZXIpXG4gICAgbGV0IGlkRGVmYXVsdCwgaWRUeXBlLCByZXN0QXJnc0lkXG5cbiAgICBpZiAoaWQgIT09IGZhbHNlKSB7XG4gICAgICAoe2RlZmF1bHQ6IGlkRGVmYXVsdCwgdHlwZTogaWRUeXBlLCAuLi5yZXN0QXJnc0lkfSA9IGlkKVxuXG4gICAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzSWQpXG4gICAgfVxuXG4gICAgaWYgKCFpZFR5cGUpIHtcbiAgICAgIGlkVHlwZSA9IGRhdGFiYXNlUG9vbC5wcmltYXJ5S2V5VHlwZSgpXG4gICAgfVxuICAgIGNvbnN0IGRyaXZlclN1cHBvcnRzRGVmYXVsdFVVSUQgPSB0aGlzLmdldERyaXZlcigpLnN1cHBvcnRzRGVmYXVsdFByaW1hcnlLZXlVVUlEPy4oKVxuICAgIGNvbnN0IGxvd2VySWRUeXBlID0gaWRUeXBlPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgaXNVVUlEUHJpbWFyeUtleSA9IGxvd2VySWRUeXBlID09IFwidXVpZFwiXG4gICAgY29uc3QgbnVtZXJpY0F1dG9JbmNyZW1lbnRUeXBlcyA9IFtcImludFwiLCBcImludGVnZXJcIiwgXCJiaWdpbnRcIiwgXCJzbWFsbGludFwiLCBcInRpbnlpbnRcIl1cbiAgICBsZXQgaWRBdXRvSW5jcmVtZW50ID0gbnVtZXJpY0F1dG9JbmNyZW1lbnRUeXBlcy5pbmNsdWRlcyhsb3dlcklkVHlwZSB8fCBcIlwiKVxuXG4gICAgaWYgKGlzVVVJRFByaW1hcnlLZXkpIHtcbiAgICAgIGlkQXV0b0luY3JlbWVudCA9IGZhbHNlXG5cbiAgICAgIGlmIChkcml2ZXJTdXBwb3J0c0RlZmF1bHRVVUlEKSB7XG4gICAgICAgIGlmIChpZERlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlkRGVmYXVsdCA9ICgpID0+IFwiVVVJRCgpXCJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpZERlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMZXQgYXBwbGljYXRpb24gY29kZSBhc3NpZ24gVVVJRHMgKHNlZSBEYXRhYmFzZVJlY29yZC5pbnNlcnQpIHdoZW4gdGhlIGRyaXZlciBjYW4ndCBkbyBpdC5cbiAgICAgICAgaWREZWZhdWx0ID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICAvLyBJZiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IFVVSUQoKSBidXQgdGhlIGNhbGxlciBleHBsaWNpdGx5IHNldCBhIGRlZmF1bHQsIHJlc3BlY3QgaXQuXG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YSh0YWJsZU5hbWUpXG5cbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCEoaWRUeXBlIGluIHRhYmxlRGF0YSkpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcHJpbWFyeSBrZXkgdHlwZTogJHtpZFR5cGV9YClcblxuICAgIGlmIChpZCAhPT0gZmFsc2UpIHtcbiAgICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oXCJpZFwiLCB7YXV0b0luY3JlbWVudDogaWRBdXRvSW5jcmVtZW50LCBkZWZhdWx0OiBpZERlZmF1bHQsIG51bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlLCB0eXBlOiBpZFR5cGV9KVxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sodGFibGVEYXRhKVxuICAgIH1cblxuICAgIGNvbnN0IHNxbHMgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmNyZWF0ZVRhYmxlU3FsKHRhYmxlRGF0YSlcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2RiLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBkcm9wVGFibGUodGFibGVOYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5kcm9wVGFibGUodGFibGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkQ29sdW1uTmFtZSAtIFByZXZpb3VzIGNvbHVtbiBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3Q29sdW1uTmFtZSAtIE5ldyBjb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbmFtZUNvbHVtbih0YWJsZU5hbWUsIG9sZENvbHVtbk5hbWUsIG5ld0NvbHVtbk5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnJlbmFtZUNvbHVtbih0YWJsZU5hbWUsIG9sZENvbHVtbk5hbWUsIG5ld0NvbHVtbk5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFJlc29sdmVzIHdpdGggV2hldGhlciB0YWJsZSBleGlzdHMuXG4gICAqL1xuICBhc3luYyB0YWJsZUV4aXN0cyh0YWJsZU5hbWUpIHtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSlcblxuICAgIHJldHVybiBleGlzdHNcbiAgfVxufVxuXG4iXX0=
@@ -84,6 +84,12 @@ export default class TableData {
84
84
  * @returns {void} - No return value.
85
85
  */
86
86
  datetime(name: string, args?: import("./table-column.js").TableColumnArgsType): void;
87
+ /**
88
+ * @param {string} name - Name.
89
+ * @param {import("./table-column.js").TableColumnArgsType} [args] - Options object.
90
+ * @returns {void} - No return value.
91
+ */
92
+ decimal(name: string, args?: import("./table-column.js").TableColumnArgsType): void;
87
93
  /**
88
94
  * @param {string} name - Name.
89
95
  * @param {import("./table-column.js").TableColumnArgsType} [args] - Options object.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/index.js"],"names":[],"mappings":"AAMA;;;GAGG;AAEH;IAaE;;;OAGG;IACH,kBAHW,MAAM,SACN,iBAAiB,EAO3B;IArBD,4BAA4B;IAC5B,UADW,WAAW,EAAE,CACX;IAEb,yDAAyD;IACzD,cADW,OAAO,wBAAwB,EAAE,OAAO,EAAE,CACpC;IAEjB,2BAA2B;IAC3B,UADW,UAAU,EAAE,CACV;IAEb,+BAA+B;IAC/B,aADW,cAAc,EAAE,CACX;IASd,oCAAgB;IAChB,cAAiB;IAGnB;;;OAGG;IACH,gBAHW,MAAM,GAAC,WAAW,SAClB,OAAO,mBAAmB,EAAE,mBAAmB,QAUzD;IAED;;OAEG;IACH,cAFa,WAAW,EAAE,CAEW;IAErC;;OAEG;IACH,0BAFW,OAAO,wBAAwB,EAAE,OAAO,QAEa;IAEhE;;OAEG;IACH,kBAFa,OAAO,wBAAwB,EAAE,OAAO,EAAE,CAEV;IAE7C;;OAEG;IACH,gBAFW,UAAU,QAEwB;IAE7C;;OAEG;IACH,cAFa,UAAU,EAAE,CAEY;IAErC;;OAEG;IACH,WAFa,MAAM,CAEY;IAE/B;;;OAGG;IACH,iBAHW,MAAM,GACJ,IAAI,CAEwB;IAEzC;;OAEG;IACH,kBAFa,OAAO,CAEuC;IAE3D;;OAEG;IACH,iBAFa,cAAc,EAAE,CAEc;IAE3C;;;;OAIG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,eAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEwF;IAEzG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,iBAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAsBhB;IAED;;;;OAIG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;OAGG;IACH,kBAHW,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAKhB;IAED;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;CAClG;;;;;iBAhMa,OAAO;;wBANG,mBAAmB;uBACpB,kBAAkB;2BACd,sBAAsB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/index.js"],"names":[],"mappings":"AAMA;;;GAGG;AAEH;IAaE;;;OAGG;IACH,kBAHW,MAAM,SACN,iBAAiB,EAO3B;IArBD,4BAA4B;IAC5B,UADW,WAAW,EAAE,CACX;IAEb,yDAAyD;IACzD,cADW,OAAO,wBAAwB,EAAE,OAAO,EAAE,CACpC;IAEjB,2BAA2B;IAC3B,UADW,UAAU,EAAE,CACV;IAEb,+BAA+B;IAC/B,aADW,cAAc,EAAE,CACX;IASd,oCAAgB;IAChB,cAAiB;IAGnB;;;OAGG;IACH,gBAHW,MAAM,GAAC,WAAW,SAClB,OAAO,mBAAmB,EAAE,mBAAmB,QAUzD;IAED;;OAEG;IACH,cAFa,WAAW,EAAE,CAEW;IAErC;;OAEG;IACH,0BAFW,OAAO,wBAAwB,EAAE,OAAO,QAEa;IAEhE;;OAEG;IACH,kBAFa,OAAO,wBAAwB,EAAE,OAAO,EAAE,CAEV;IAE7C;;OAEG;IACH,gBAFW,UAAU,QAEwB;IAE7C;;OAEG;IACH,cAFa,UAAU,EAAE,CAEY;IAErC;;OAEG;IACH,WAFa,MAAM,CAEY;IAE/B;;;OAGG;IACH,iBAHW,MAAM,GACJ,IAAI,CAEwB;IAEzC;;OAEG;IACH,kBAFa,OAAO,CAEuC;IAE3D;;OAEG;IACH,iBAFa,cAAc,EAAE,CAEc;IAE3C;;;;OAIG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,eAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEwF;IAEzG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;OAIG;IACH,iBAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAsBhB;IAED;;;;OAIG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;OAGG;IACH,kBAHW,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAKhB;IAED;;;;OAIG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;CAClG;;;;;iBAvMa,OAAO;;wBANG,mBAAmB;uBACpB,kBAAkB;2BACd,sBAAsB"}
@@ -99,6 +99,12 @@ export default class TableData {
99
99
  * @returns {void} - No return value.
100
100
  */
101
101
  datetime(name, args) { this.addColumn(name, Object.assign({ isNewColumn: true, type: "datetime" }, args)); }
102
+ /**
103
+ * @param {string} name - Name.
104
+ * @param {import("./table-column.js").TableColumnArgsType} [args] - Options object.
105
+ * @returns {void} - No return value.
106
+ */
107
+ decimal(name, args) { this.addColumn(name, Object.assign({ isNewColumn: true, type: "decimal" }, args)); }
102
108
  /**
103
109
  * @param {string} name - Name.
104
110
  * @param {import("./table-column.js").TableColumnArgsType} [args] - Options object.
@@ -167,4 +173,4 @@ export default class TableData {
167
173
  */
168
174
  uuid(name, args) { this.addColumn(name, Object.assign({ isNewColumn: true, type: "uuid" }, args)); }
169
175
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxjQUFjLE1BQU0sc0JBQXNCLENBQUE7QUFFakQ7OztHQUdHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxTQUFTO0lBQzVCLDRCQUE0QjtJQUM1QixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRWIseURBQXlEO0lBQ3pELFlBQVksR0FBRyxFQUFFLENBQUE7SUFFakIsMkJBQTJCO0lBQzNCLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFYiwrQkFBK0I7SUFDL0IsV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUVoQjs7O09BR0c7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJO1FBQ2xCLElBQUksSUFBSSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtR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LEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7Q0FDbEciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gXCIuL3RhYmxlLWNvbHVtbi5qc1wiXG5pbXBvcnQgVGFibGVJbmRleCBmcm9tIFwiLi90YWJsZS1pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVSZWZlcmVuY2UgZnJvbSBcIi4vdGFibGUtcmVmZXJlbmNlLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZURhdGFBcmdzVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBpZk5vdEV4aXN0cyAtIFdoZXRoZXIgdG8gY3JlYXRlIHRoZSB0YWJsZSBvbmx5IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlRGF0YSB7XG4gIC8qKiBAdHlwZSB7VGFibGVDb2x1bW5bXX0gKi9cbiAgX2NvbHVtbnMgPSBbXVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90YWJsZS1mb3JlaWduLWtleS5qc1wiKS5kZWZhdWx0W119ICovXG4gIF9mb3JlaWduS2V5cyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtUYWJsZUluZGV4W119ICovXG4gIF9pbmRleGVzID0gW11cblxuICAvKiogQHR5cGUge1RhYmxlUmVmZXJlbmNlW119ICovXG4gIF9yZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YUFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWJsZSBuYW1lOiAke25hbWV9YClcblxuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgICB0aGlzLl9uYW1lID0gbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFRhYmxlQ29sdW1ufSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGFkZENvbHVtbihuYW1lLCBhcmdzKSB7XG4gICAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUYWJsZUNvbHVtbikge1xuICAgICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChuYW1lKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4obmFtZSwgYXJncylcblxuICAgICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChjb2x1bW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSAtIFRoZSBjb2x1bW5zLlxuICAgKi9cbiAgZ2V0Q29sdW1ucygpIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnMgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtZm9yZWlnbi1rZXkuanNcIikuZGVmYXVsdH0gZm9yZWlnbktleSAtIEZvcmVpZ24ga2V5LlxuICAgKi9cbiAgYWRkRm9yZWlnbktleShmb3JlaWduS2V5KSB7IHRoaXMuX2ZvcmVpZ25LZXlzLnB1c2goZm9yZWlnbktleSkgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90YWJsZS1mb3JlaWduLWtleS5qc1wiKS5kZWZhdWx0W119IC0gVGhlIGZvcmVpZ24ga2V5cy5cbiAgICovXG4gIGdldEZvcmVpZ25LZXlzKCkgeyByZXR1cm4gdGhpcy5fZm9yZWlnbktleXMgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlSW5kZXh9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqL1xuICBhZGRJbmRleChpbmRleCkgeyB0aGlzLl9pbmRleGVzLnB1c2goaW5kZXgpIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1RhYmxlSW5kZXhbXX0gLSBUaGUgaW5kZXhlcy5cbiAgICovXG4gIGdldEluZGV4ZXMoKSB7IHJldHVybiB0aGlzLl9pbmRleGVzIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbmFtZS5cbiAgICovXG4gIGdldE5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TmFtZShuZXdOYW1lKSB7IHRoaXMuX25hbWUgPSBuZXdOYW1lIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBpZiBub3QgZXhpc3RzLlxuICAgKi9cbiAgZ2V0SWZOb3RFeGlzdHMoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmlmTm90RXhpc3RzIHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1RhYmxlUmVmZXJlbmNlW119IC0gVGhlIHJlZmVyZW5jZXMuXG4gICAqL1xuICBnZXRSZWZlcmVuY2VzKCkgeyByZXR1cm4gdGhpcy5fcmVmZXJlbmNlcyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYmlnaW50KG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiYmlnaW50XCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGJsb2IobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJibG9iXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGJvb2xlYW4obmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJib29sZWFuXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGRhdGV0aW1lKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiZGF0ZXRpbWVcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgaW50ZWdlcihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImludGVnZXJcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAganNvbihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImpzb25cIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdGlueWludChuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcInRpbnlpbnRcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcmVmZXJlbmNlcyhuYW1lLCBhcmdzKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGAke25hbWV9X2lkYFxuICAgIGNvbnN0IHJlZmVyZW5jZUFyZ3MgPSBhcmdzIHx8IHt9XG4gICAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFRhYmxlUmVmZXJlbmNlKG5hbWUsIHJlZmVyZW5jZUFyZ3MpXG4gICAgY29uc3Qge2luZGV4LCBwb2x5bW9ycGhpYywgLi4ucmVzdEFyZ3N9ID0gcmVmZXJlbmNlQXJnc1xuICAgIGNvbnN0IGNvbHVtbkFyZ3MgPSBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJiaWdpbnRcIn0sIHJlc3RBcmdzKVxuICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihjb2x1bW5OYW1lLCBjb2x1bW5BcmdzKVxuICAgIGNvbnN0IGluZGV4QXJncyA9IHR5cGVvZiBpbmRleCA9PSBcIm9iamVjdFwiID8ge3VuaXF1ZTogaW5kZXgudW5pcXVlID09PSB0cnVlfSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHRhYmxlSW5kZXggPSBuZXcgVGFibGVJbmRleChbY29sdW1uXSwgaW5kZXhBcmdzKVxuXG4gICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChjb2x1bW4pXG4gICAgdGhpcy5nZXRJbmRleGVzKCkucHVzaCh0YWJsZUluZGV4KVxuICAgIHRoaXMuZ2V0UmVmZXJlbmNlcygpLnB1c2gocmVmZXJlbmNlKVxuXG4gICAgaWYgKHBvbHltb3JwaGljKSB7XG4gICAgICBjb25zdCB0eXBlQ29sdW1uTmFtZSA9IGAke25hbWV9X3R5cGVgXG4gICAgICBjb25zdCB0eXBlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHR5cGVDb2x1bW5OYW1lLCB7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwic3RyaW5nXCJ9KVxuXG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKHR5cGVDb2x1bW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RyaW5nKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwic3RyaW5nXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRleHQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJ0ZXh0XCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0aW1lc3RhbXBzKGFyZ3MpIHtcbiAgICB0aGlzLmRhdGV0aW1lKFwiY3JlYXRlZF9hdFwiLCBhcmdzKVxuICAgIHRoaXMuZGF0ZXRpbWUoXCJ1cGRhdGVkX2F0XCIsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB1dWlkKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwidXVpZFwifSwgYXJncykpIH1cbn1cbiJdfQ==
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxjQUFjLE1BQU0sc0JBQXNCLENBQUE7QUFFakQ7OztHQUdHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxTQUFTO0lBQzVCLDRCQUE0QjtJQUM1QixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRWIseURBQXlEO0lBQ3pELFlBQVksR0FBRyxFQUFFLENBQUE7SUFFakIsMkJBQTJCO0lBQzNCLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFYiwrQkFBK0I7SUFDL0IsV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUVoQjs7O09BR0c7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJO1FBQ2xCLElBQUksSUFBSSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQSxDQUFDLENBQUM7SUFFckM7O09BRUc7SUFDSCxhQUFhLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVoRTs7T0FFRztJQUNILGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFDO0lBRTdDOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFN0M7O09BRUc7SUFDSCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUVyQzs7T0FFRztJQUNILE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRS9COzs7T0FHRztJQUNILE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRXpDOztPQUVHO0lBQ0gsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNILGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFDO0lBRTNDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFckc7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVqRzs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXZHOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFekc7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXZHOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJ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LFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztDQUNsRyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSBcIi4vdGFibGUtY29sdW1uLmpzXCJcbmltcG9ydCBUYWJsZUluZGV4IGZyb20gXCIuL3RhYmxlLWluZGV4LmpzXCJcbmltcG9ydCBUYWJsZVJlZmVyZW5jZSBmcm9tIFwiLi90YWJsZS1yZWZlcmVuY2UuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRhYmxlRGF0YUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlmTm90RXhpc3RzIC0gV2hldGhlciB0byBjcmVhdGUgdGhlIHRhYmxlIG9ubHkgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVEYXRhIHtcbiAgLyoqIEB0eXBlIHtUYWJsZUNvbHVtbltdfSAqL1xuICBfY29sdW1ucyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCIpLmRlZmF1bHRbXX0gKi9cbiAgX2ZvcmVpZ25LZXlzID0gW11cblxuICAvKiogQHR5cGUge1RhYmxlSW5kZXhbXX0gKi9cbiAgX2luZGV4ZXMgPSBbXVxuXG4gIC8qKiBAdHlwZSB7VGFibGVSZWZlcmVuY2VbXX0gKi9cbiAgX3JlZmVyZW5jZXMgPSBbXVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7VGFibGVEYXRhQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZSwgYXJncykge1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhYmxlIG5hbWU6ICR7bmFtZX1gKVxuXG4gICAgdGhpcy5hcmdzID0gYXJnc1xuICAgIHRoaXMuX25hbWUgPSBuYW1lXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8VGFibGVDb2x1bW59IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgYWRkQ29sdW1uKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAobmFtZSBpbnN0YW5jZW9mIFRhYmxlQ29sdW1uKSB7XG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKG5hbWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihuYW1lLCBhcmdzKVxuXG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKGNvbHVtbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IC0gVGhlIGNvbHVtbnMuXG4gICAqL1xuICBnZXRDb2x1bW5zKCkgeyByZXR1cm4gdGhpcy5fY29sdW1ucyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1mb3JlaWduLWtleS5qc1wiKS5kZWZhdWx0fSBmb3JlaWduS2V5IC0gRm9yZWlnbiBrZXkuXG4gICAqL1xuICBhZGRGb3JlaWduS2V5KGZvcmVpZ25LZXkpIHsgdGhpcy5fZm9yZWlnbktleXMucHVzaChmb3JlaWduS2V5KSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCIpLmRlZmF1bHRbXX0gLSBUaGUgZm9yZWlnbiBrZXlzLlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleXMoKSB7IHJldHVybiB0aGlzLl9mb3JlaWduS2V5cyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VGFibGVJbmRleH0gaW5kZXggLSBJbmRleCB2YWx1ZS5cbiAgICovXG4gIGFkZEluZGV4KGluZGV4KSB7IHRoaXMuX2luZGV4ZXMucHVzaChpbmRleCkgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7VGFibGVJbmRleFtdfSAtIFRoZSBpbmRleGVzLlxuICAgKi9cbiAgZ2V0SW5kZXhlcygpIHsgcmV0dXJuIHRoaXMuX2luZGV4ZXMgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuYW1lLlxuICAgKi9cbiAgZ2V0TmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWUgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXROYW1lKG5ld05hbWUpIHsgdGhpcy5fbmFtZSA9IG5ld05hbWUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGlmIG5vdCBleGlzdHMuXG4gICAqL1xuICBnZXRJZk5vdEV4aXN0cygpIHsgcmV0dXJuIHRoaXMuYXJncz8uaWZOb3RFeGlzdHMgfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7VGFibGVSZWZlcmVuY2VbXX0gLSBUaGUgcmVmZXJlbmNlcy5cbiAgICovXG4gIGdldFJlZmVyZW5jZXMoKSB7IHJldHVybiB0aGlzLl9yZWZlcmVuY2VzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBiaWdpbnQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJiaWdpbnRcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYmxvYihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImJsb2JcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYm9vbGVhbihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImJvb2xlYW5cIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZGF0ZXRpbWUobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJkYXRldGltZVwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBkZWNpbWFsKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiZGVjaW1hbFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBpbnRlZ2VyKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiaW50ZWdlclwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBqc29uKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwianNvblwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0aW55aW50KG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwidGlueWludFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICByZWZlcmVuY2VzKG5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7bmFtZX1faWRgXG4gICAgY29uc3QgcmVmZXJlbmNlQXJncyA9IGFyZ3MgfHwge31cbiAgICBjb25zdCByZWZlcmVuY2UgPSBuZXcgVGFibGVSZWZlcmVuY2UobmFtZSwgcmVmZXJlbmNlQXJncylcbiAgICBjb25zdCB7aW5kZXgsIHBvbHltb3JwaGljLCAuLi5yZXN0QXJnc30gPSByZWZlcmVuY2VBcmdzXG4gICAgY29uc3QgY29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImJpZ2ludFwifSwgcmVzdEFyZ3MpXG4gICAgY29uc3QgY29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGNvbHVtbk5hbWUsIGNvbHVtbkFyZ3MpXG4gICAgY29uc3QgaW5kZXhBcmdzID0gdHlwZW9mIGluZGV4ID09IFwib2JqZWN0XCIgPyB7dW5pcXVlOiBpbmRleC51bmlxdWUgPT09IHRydWV9IDogdW5kZWZpbmVkXG4gICAgY29uc3QgdGFibGVJbmRleCA9IG5ldyBUYWJsZUluZGV4KFtjb2x1bW5dLCBpbmRleEFyZ3MpXG5cbiAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKGNvbHVtbilcbiAgICB0aGlzLmdldEluZGV4ZXMoKS5wdXNoKHRhYmxlSW5kZXgpXG4gICAgdGhpcy5nZXRSZWZlcmVuY2VzKCkucHVzaChyZWZlcmVuY2UpXG5cbiAgICBpZiAocG9seW1vcnBoaWMpIHtcbiAgICAgIGNvbnN0IHR5cGVDb2x1bW5OYW1lID0gYCR7bmFtZX1fdHlwZWBcbiAgICAgIGNvbnN0IHR5cGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odHlwZUNvbHVtbk5hbWUsIHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJzdHJpbmdcIn0pXG5cbiAgICAgIHRoaXMuZ2V0Q29sdW1ucygpLnB1c2godHlwZUNvbHVtbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdHJpbmcobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJzdHJpbmdcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdGV4dChuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcInRleHRcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRpbWVzdGFtcHMoYXJncykge1xuICAgIHRoaXMuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIGFyZ3MpXG4gICAgdGhpcy5kYXRldGltZShcInVwZGF0ZWRfYXRcIiwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHV1aWQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJ1dWlkXCJ9LCBhcmdzKSkgfVxufVxuIl19
@@ -10,7 +10,9 @@
10
10
  * @property {string} [notes] - Column notes or comment.
11
11
  * @property {boolean} [null] - Whether the column allows null values.
12
12
  * @property {boolean} [polymorphic] - Whether the column is polymorphic.
13
+ * @property {number} [precision] - Numeric precision (total digits) for decimal/numeric types.
13
14
  * @property {boolean} [primaryKey] - Whether the column is a primary key.
15
+ * @property {number} [scale] - Numeric scale (digits after decimal point) for decimal/numeric types.
14
16
  * @property {string} [type] - Column data type.
15
17
  */
16
18
  export default class TableColumn {
@@ -111,6 +113,10 @@ export default class TableColumn {
111
113
  * @returns {void} - No return value.
112
114
  */
113
115
  setNull(nullable: boolean): void;
116
+ /**
117
+ * @returns {number | undefined} - Numeric precision (total digits).
118
+ */
119
+ getPrecision(): number | undefined;
114
120
  /**
115
121
  * @returns {boolean} - Whether primary key.
116
122
  */
@@ -120,6 +126,10 @@ export default class TableColumn {
120
126
  * @returns {void} - No return value.
121
127
  */
122
128
  setPrimaryKey(newPrimaryKey: boolean): void;
129
+ /**
130
+ * @returns {number | undefined} - Numeric scale (digits after decimal point).
131
+ */
132
+ getScale(): number | undefined;
123
133
  /**
124
134
  * @returns {string | undefined} - The type.
125
135
  */
@@ -197,10 +207,18 @@ export type TableColumnArgsType = {
197
207
  * - Whether the column is polymorphic.
198
208
  */
199
209
  polymorphic?: boolean | undefined;
210
+ /**
211
+ * - Numeric precision (total digits) for decimal/numeric types.
212
+ */
213
+ precision?: number | undefined;
200
214
  /**
201
215
  * - Whether the column is a primary key.
202
216
  */
203
217
  primaryKey?: boolean | undefined;
218
+ /**
219
+ * - Numeric scale (digits after decimal point) for decimal/numeric types.
220
+ */
221
+ scale?: number | undefined;
204
222
  /**
205
223
  * - Column data type.
206
224
  */
@@ -1 +1 @@
1
- {"version":3,"file":"table-column.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/table-column.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;GAcG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,mBAAmB,EAe7B;IAFC,0BAAsB;IACtB,aAAgB;IAGlB;;OAEG;IACH,WAFa,MAAM,CAEW;IAE9B;;OAEG;IACH,cAFa,MAAM,GAAG,SAAS,CAEM;IAErC;;;OAGG;IACH,oBAHW,MAAM,GACJ,IAAI,CAE8B;IAAzB,6BAAuB;IAE7C;;OAEG;IACH,iBAFa,MAAM,CAE2C;IAE9D;;OAEG;IACH,oBAFa,OAAO,CAE2C;IAE/D;;;OAGG;IACH,mCAHW,OAAO,GACL,IAAI,CAEgE;IAEjF;;OAEG;IACH,cAFa,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAEI;IAE1C;;;OAGG;IACH,uBAHW,GAAG,GACD,IAAI,CAEwC;IAEzD;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;OAEG;IACH,iBAFa,OAAO,GAAG,MAAM,GAAG,SAAS,CAEO;IAEhD;;;OAGG;IACH,6BAHW,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1B,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,OAAO,GAAC,YAAY,CAEc;IAE/C;;OAEG;IACH,gBAFa,YAAY,CAQxB;IAED,0BAMC;IAED;;;OAGG;IACH,mBAHW,OAAO,GAAC,YAAY,GAClB,IAAI,CAEgC;IAEjD;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;;OAGG;IACH,2BAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgD;IAEjE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;;OAGG;IACH,mBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgC;IAEjD;;OAEG;IACH,WAFa,OAAO,GAAG,SAAS,CAEI;IAEpC;;;OAGG;IACH,kBAHW,OAAO,GACL,IAAI,CAE8B;IAE/C;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;;OAGG;IACH,6BAHW,OAAO,GACL,IAAI,CAEoD;IAErE;;OAEG;IACH,WAFa,MAAM,GAAG,SAAS,CAEK;IAEpC;;;OAGG;IACH,iBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAE4B;IAE7C;;OAEG;IACH,oBAFa,MAAM,GAAG,SAAS,CAI9B;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;OAEG;IACH,eAFa,OAAO,CAEoC;IAExD;;;;;OAKG;IACH,+CAJG;QAAsB,aAAa,EAA3B,OAAO;QACoC,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;KAC5C,GAAU,MAAM,CAwHlB;CACF;2BA9UY;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC;;;;;;;;;cAUhB,GAAG"}
1
+ {"version":3,"file":"table-column.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/table-column.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;GAgBG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,mBAAmB,EAe7B;IAFC,0BAAsB;IACtB,aAAgB;IAGlB;;OAEG;IACH,WAFa,MAAM,CAEW;IAE9B;;OAEG;IACH,cAFa,MAAM,GAAG,SAAS,CAEM;IAErC;;;OAGG;IACH,oBAHW,MAAM,GACJ,IAAI,CAE8B;IAAzB,6BAAuB;IAE7C;;OAEG;IACH,iBAFa,MAAM,CAE2C;IAE9D;;OAEG;IACH,oBAFa,OAAO,CAE2C;IAE/D;;;OAGG;IACH,mCAHW,OAAO,GACL,IAAI,CAEgE;IAEjF;;OAEG;IACH,cAFa,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAEI;IAE1C;;;OAGG;IACH,uBAHW,GAAG,GACD,IAAI,CAEwC;IAEzD;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;OAEG;IACH,iBAFa,OAAO,GAAG,MAAM,GAAG,SAAS,CAEO;IAEhD;;;OAGG;IACH,6BAHW,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1B,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,OAAO,GAAC,YAAY,CAEc;IAE/C;;OAEG;IACH,gBAFa,YAAY,CAQxB;IAED,0BAMC;IAED;;;OAGG;IACH,mBAHW,OAAO,GAAC,YAAY,GAClB,IAAI,CAEgC;IAEjD;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;;OAGG;IACH,2BAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgD;IAEjE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;;OAGG;IACH,mBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgC;IAEjD;;OAEG;IACH,WAFa,OAAO,GAAG,SAAS,CAEI;IAEpC;;;OAGG;IACH,kBAHW,OAAO,GACL,IAAI,CAE8B;IAE/C;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;;OAGG;IACH,6BAHW,OAAO,GACL,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;OAEG;IACH,WAFa,MAAM,GAAG,SAAS,CAEK;IAEpC;;;OAGG;IACH,iBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAE4B;IAE7C;;OAEG;IACH,oBAFa,MAAM,GAAG,SAAS,CAI9B;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;OAEG;IACH,eAFa,OAAO,CAEoC;IAExD;;;;;OAKG;IACH,+CAJG;QAAsB,aAAa,EAA3B,OAAO;QACoC,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;KAC5C,GAAU,MAAM,CAoIlB;CACF;2BAtWY;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC;;;;;;;;;cAUhB,GAAG"}
@@ -17,7 +17,9 @@ import TableForeignKey from "./table-foreign-key.js";
17
17
  * @property {string} [notes] - Column notes or comment.
18
18
  * @property {boolean} [null] - Whether the column allows null values.
19
19
  * @property {boolean} [polymorphic] - Whether the column is polymorphic.
20
+ * @property {number} [precision] - Numeric precision (total digits) for decimal/numeric types.
20
21
  * @property {boolean} [primaryKey] - Whether the column is a primary key.
22
+ * @property {number} [scale] - Numeric scale (digits after decimal point) for decimal/numeric types.
21
23
  * @property {string} [type] - Column data type.
22
24
  */
23
25
  export default class TableColumn {
@@ -27,7 +29,7 @@ export default class TableColumn {
27
29
  */
28
30
  constructor(name, args) {
29
31
  if (args) {
30
- const { autoIncrement, default: columnDefault, dropColumn, foreignKey, index, isNewColumn, maxLength, notes, null: argsNull, polymorphic, primaryKey, type, ...restArgs } = args; // eslint-disable-line no-unused-vars
32
+ const { autoIncrement, default: columnDefault, dropColumn, foreignKey, index, isNewColumn, maxLength, notes, null: argsNull, polymorphic, precision, primaryKey, scale, type, ...restArgs } = args; // eslint-disable-line no-unused-vars
31
33
  if (Object.keys(args).length == 0) {
32
34
  throw new Error("Empty args given");
33
35
  }
@@ -137,6 +139,10 @@ export default class TableColumn {
137
139
  * @returns {void} - No return value.
138
140
  */
139
141
  setNull(nullable) { this.args.null = nullable; }
142
+ /**
143
+ * @returns {number | undefined} - Numeric precision (total digits).
144
+ */
145
+ getPrecision() { return this.args?.precision; }
140
146
  /**
141
147
  * @returns {boolean} - Whether primary key.
142
148
  */
@@ -146,6 +152,10 @@ export default class TableColumn {
146
152
  * @returns {void} - No return value.
147
153
  */
148
154
  setPrimaryKey(newPrimaryKey) { this.args.primaryKey = newPrimaryKey; }
155
+ /**
156
+ * @returns {number | undefined} - Numeric scale (digits after decimal point).
157
+ */
158
+ getScale() { return this.args?.scale; }
149
159
  /**
150
160
  * @returns {string | undefined} - The type.
151
161
  */
@@ -234,8 +244,17 @@ export default class TableColumn {
234
244
  sql += "TYPE ";
235
245
  if (type)
236
246
  sql += type;
237
- if (type && maxlength !== undefined && maxlength !== null)
247
+ const precision = this.getPrecision();
248
+ const scale = this.getScale();
249
+ if ((scale !== undefined && scale !== null) && (precision === undefined || precision === null)) {
250
+ throw new Error(`Column '${this.getActualName()}': scale requires precision to be set`);
251
+ }
252
+ if (precision !== undefined && precision !== null) {
253
+ sql += scale !== undefined && scale !== null ? `(${precision}, ${scale})` : `(${precision})`;
254
+ }
255
+ else if (type && maxlength !== undefined && maxlength !== null) {
238
256
  sql += `(${maxlength})`;
257
+ }
239
258
  if (this.getAutoIncrement() && driver.shouldSetAutoIncrementWhenPrimaryKey()) {
240
259
  if (databaseType == "mssql") {
241
260
  sql += " IDENTITY";
@@ -297,4 +316,4 @@ export default class TableColumn {
297
316
  return sql;
298
317
  }
299
318
  }
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBRXBEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFXO0lBQzlCOzs7T0FHRztJQUNILFlBQVksSUFBSSxFQUFFLElBQUk7UUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsSUFBSSxDQUFBLENBQUMscUNBQXFDO1lBRXBOLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1lBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUM7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SyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNyQyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7UUFDM0MsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxlQUFlLEVBQUUsZ0JBQWdCLENBQUE7WUFFckMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLGdCQUFnQixHQUFHLElBQUksQ0FBQTtnQkFDdkIsZUFBZSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNsRixDQUFDO2lCQUFNLElBQUksVUFBVSxZQUFZLGVBQWUsRUFBRSxDQUFDO2dCQUNqRCxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtnQkFDdkQsZUFBZSxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxVQUFVLEtBQUssT0FBTyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1lBQ3pGLENBQUM7WUFFRCxHQUFHLElBQUksZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFBO1FBQy9HLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7dW5pcXVlOiBib29sZWFufX0gSW5kZXhBcmdUeXBlXG4gKi9cblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZUZvcmVpZ25LZXkgZnJvbSBcIi4vdGFibGUtZm9yZWlnbi1rZXkuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRhYmxlQ29sdW1uQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9JbmNyZW1lbnRdIC0gV2hldGhlciB0aGUgY29sdW1uIGF1dG8taW5jcmVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7YW55fSBbZGVmYXVsdF0gLSBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZHJvcENvbHVtbl0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGRyb3BwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58b2JqZWN0fSBbZm9yZWlnbktleV0gLSBGb3JlaWduIGtleSBvcHRpb25zIG9yIGZsYWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58SW5kZXhBcmdUeXBlfSBbaW5kZXhdIC0gV2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBpbmRleGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNOZXdDb2x1bW5dIC0gV2hldGhlciB0aGlzIGNvbHVtbiBpcyBiZWluZyBhZGRlZCBpbiBhIG1pZ3JhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4TGVuZ3RoXSAtIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgY29sdW1uIHZhbHVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub3Rlc10gLSBDb2x1bW4gbm90ZXMgb3IgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB0aGUgY29sdW1uIGFsbG93cyBudWxsIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3BvbHltb3JwaGljXSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBwb2x5bW9ycGhpYy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3ByaW1hcnlLZXldIC0gV2hldGhlciB0aGUgY29sdW1uIGlzIGEgcHJpbWFyeSBrZXkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIGRhdGEgdHlwZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUNvbHVtbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7VGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzKSB7XG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IHthdXRvSW5jcmVtZW50LCBkZWZhdWx0OiBjb2x1bW5EZWZhdWx0LCBkcm9wQ29sdW1uLCBmb3JlaWduS2V5LCBpbmRleCwgaXNOZXdDb2x1bW4sIG1heExlbmd0aCwgbm90ZXMsIG51bGw6IGFyZ3NOdWxsLCBwb2x5bW9ycGhpYywgcHJpbWFyeUtleSwgdHlwZSwgLi4ucmVzdEFyZ3N9ID0gYXJncyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhcmdzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBhcmdzIGdpdmVuXCIpXG4gICAgICB9XG5cbiAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG4gICAgfVxuXG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCB7fVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBnZXROYW1lKCkgeyByZXR1cm4gdGhpcy5uYW1lIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgbmV3IG5hbWUuXG4gICAqL1xuICBnZXROZXdOYW1lKCkgeyByZXR1cm4gdGhpcy5fbmV3TmFtZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE5ld05hbWUobmV3TmFtZSkgeyB0aGlzLl9uZXdOYW1lID0gbmV3TmFtZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGFjdHVhbCBuYW1lLlxuICAgKi9cbiAgZ2V0QWN0dWFsTmFtZSgpIHsgcmV0dXJuIHRoaXMuZ2V0TmV3TmFtZSgpIHx8IHRoaXMuZ2V0TmFtZSgpIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBhdXRvIGluY3JlbWVudC5cbiAgICovXG4gIGdldEF1dG9JbmNyZW1lbnQoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmF1dG9JbmNyZW1lbnQgfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5ld0F1dG9JbmNyZW1lbnQgLSBOZXcgYXV0byBpbmNyZW1lbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEF1dG9JbmNyZW1lbnQobmV3QXV0b0luY3JlbWVudCkgeyB0aGlzLmFyZ3MuYXV0b0luY3JlbWVudCA9IG5ld0F1dG9JbmNyZW1lbnQgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5rbm93biB8ICgoKSA9PiB1bmtub3duKX0gLSBUaGUgZGVmYXVsdCB2YWx1ZSBvciBmYWN0b3J5LlxuICAgKi9cbiAgZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIHRoaXMuYXJncz8uZGVmYXVsdCB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBuZXdEZWZhdWx0IC0gTmV3IGRlZmF1bHQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldERlZmF1bHQobmV3RGVmYXVsdCkgeyB0aGlzLmFyZ3MuZGVmYXVsdCA9IG5ld0RlZmF1bHQgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGRyb3AgY29sdW1uLlxuICAgKi9cbiAgZ2V0RHJvcENvbHVtbigpIHsgcmV0dXJuIHRoaXMuYXJncz8uZHJvcENvbHVtbiB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFuIHwgb2JqZWN0IHwgdW5kZWZpbmVkfSAtIFdoZXRoZXIgZm9yZWlnbiBrZXkuXG4gICAqL1xuICBnZXRGb3JlaWduS2V5KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5mb3JlaWduS2V5IH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFuIHwgb2JqZWN0IHwgdW5kZWZpbmVkfSBuZXdGb3JlaWduS2V5IC0gTmV3IGZvcmVpZ24ga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRGb3JlaWduS2V5KG5ld0ZvcmVpZ25LZXkpIHsgdGhpcy5hcmdzLmZvcmVpZ25LZXkgPSBuZXdGb3JlaWduS2V5IH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW58SW5kZXhBcmdUeXBlfSAtIFdoZXRoZXIgaW5kZXguXG4gICAqL1xuICBnZXRJbmRleCgpIHsgcmV0dXJuIHRoaXMuYXJncz8uaW5kZXggfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SW5kZXhBcmdUeXBlfSAtIFRoZSBpbmRleCBhcmdzLlxuICAgKi9cbiAgZ2V0SW5kZXhBcmdzKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5hcmdzPy5pbmRleCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcmdzLmluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7dW5pcXVlOiBmYWxzZX1cbiAgICB9XG4gIH1cblxuICBnZXRJbmRleFVuaXF1ZSgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuYXJncz8uaW5kZXhcblxuICAgIGlmICh0eXBlb2YgaW5kZXggPT0gXCJvYmplY3RcIiAmJiBpbmRleC51bmlxdWUgPT09IHRydWUpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW58SW5kZXhBcmdUeXBlfSBuZXdJbmRleCAtIE5ldyBpbmRleC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0SW5kZXgobmV3SW5kZXgpIHsgdGhpcy5hcmdzLmluZGV4ID0gbmV3SW5kZXggfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgdW5kZWZpbmVkfSAtIFRoZSBtYXggbGVuZ3RoLlxuICAgKi9cbiAgZ2V0TWF4TGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5tYXhMZW5ndGggfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gbmV3TWF4TGVuZ3RoIC0gTmV3IG1heCBsZW5ndGguXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE1heExlbmd0aChuZXdNYXhMZW5ndGgpIHsgdGhpcy5hcmdzLm1heExlbmd0aCA9IG5ld01heExlbmd0aCB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIG5vdGVzLlxuICAgKi9cbiAgZ2V0Tm90ZXMoKSB7IHJldHVybiB0aGlzLmFyZ3M/Lm5vdGVzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG5ld05vdGVzIC0gTmV3IG5vdGVzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXROb3RlcyhuZXdOb3RlcykgeyB0aGlzLmFyZ3Mubm90ZXMgPSBuZXdOb3RlcyB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfSAtIFdoZXRoZXIgbnVsbC5cbiAgICovXG4gIGdldE51bGwoKSB7IHJldHVybiB0aGlzLmFyZ3M/Lm51bGwgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG51bGxhYmxlIC0gV2hldGhlciBudWxsYWJsZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TnVsbChudWxsYWJsZSkgeyB0aGlzLmFyZ3MubnVsbCA9IG51bGxhYmxlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBwcmltYXJ5IGtleS5cbiAgICovXG4gIGdldFByaW1hcnlLZXkoKSB7IHJldHVybiB0aGlzLmFyZ3M/LnByaW1hcnlLZXkgfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5ld1ByaW1hcnlLZXkgLSBOZXcgcHJpbWFyeSBrZXkuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFByaW1hcnlLZXkobmV3UHJpbWFyeUtleSkgeyB0aGlzLmFyZ3MucHJpbWFyeUtleSA9IG5ld1ByaW1hcnlLZXkgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlLlxuICAgKi9cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuYXJncz8udHlwZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuZXdUeXBlIC0gTmV3IHR5cGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFR5cGUobmV3VHlwZSkgeyB0aGlzLmFyZ3MudHlwZSA9IG5ld1R5cGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlIGhpbnQgbm90ZXMuXG4gICAqL1xuICBnZXRUeXBlSGludE5vdGVzKCkge1xuICAgIGlmICh0aGlzLmdldFR5cGUoKT8udG9Mb3dlckNhc2UoKSA9PSBcImJvb2xlYW5cIikgcmV0dXJuIFwidmVsb2Npb3VzOnR5cGU9Ym9vbGVhblwiXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlVHlwZSAtIERhdGFiYXNlIHR5cGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gTm90ZXMgZm9yIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKSB7XG4gICAgaWYgKCFbXCJteXNxbFwiLCBcInBnc3FsXCJdLmluY2x1ZGVzKGRhdGFiYXNlVHlwZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm90ZXMoKSB8fCB0aGlzLmdldFR5cGVIaW50Tm90ZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgbmV3IGNvbHVtbi5cbiAgICovXG4gIGlzTmV3Q29sdW1uKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5pc05ld0NvbHVtbiB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5mb3JBbHRlclRhYmxlIC0gV2hldGhlciBmb3IgYWx0ZXIgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBnZXRTUUwoe2ZvckFsdGVyVGFibGUsIGRyaXZlciwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IGRyaXZlci5nZXRUeXBlKClcbiAgICBjb25zdCBvcHRpb25zID0gZHJpdmVyLm9wdGlvbnMoKVxuICAgIGxldCBtYXhsZW5ndGggPSB0aGlzLmdldE1heExlbmd0aCgpXG4gICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUoKT8udG9VcHBlckNhc2UoKVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgIGlmICh0eXBlID09IFwiREFURVRJTUVcIikge1xuICAgICAgICB0eXBlID0gXCJUSU1FU1RBTVBcIlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVElOWUlOVFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJCWVRFQVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IFwiU1RSSU5HXCIpIHtcbiAgICAgIHR5cGUgPSBcIlZBUkNIQVJcIlxuICAgICAgbWF4bGVuZ3RoIHx8PSAyNTVcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIgJiYgdHlwZSA9PSBcIlRJTllJTlRcIikge1xuICAgICAgdHlwZSA9IFwiU01BTExJTlRcIlxuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIkJPT0xFQU5cIikge1xuICAgICAgICB0eXBlID0gXCJCSVRcIlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVVVJRFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIlZBUkNIQVJcIlxuICAgICAgICBtYXhsZW5ndGggfHw9IDM2XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJKU09OXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiTlZBUkNIQVIoTUFYKVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiQkxPQlwiKSB7XG4gICAgICAgIHR5cGUgPSBcIlZBUkJJTkFSWShNQVgpXCJcbiAgICAgICAgbWF4bGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInNxbGl0ZVwiICYmIHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIHRoaXMuZ2V0UHJpbWFyeUtleSgpKSB7XG4gICAgICB0eXBlID0gXCJJTlRFR0VSXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIiAmJiB0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSAmJiB0aGlzLmdldFByaW1hcnlLZXkoKSkge1xuICAgICAgdHlwZSA9IFwiU0VSSUFMXCJcbiAgICB9XG5cbiAgICBsZXQgc3FsID0gYCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUodGhpcy5nZXRBY3R1YWxOYW1lKCkpfSBgXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIiAmJiBmb3JBbHRlclRhYmxlKSBzcWwgKz0gXCJUWVBFIFwiXG4gICAgaWYgKHR5cGUpIHNxbCArPSB0eXBlXG4gICAgaWYgKHR5cGUgJiYgbWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgbWF4bGVuZ3RoICE9PSBudWxsKSBzcWwgKz0gYCgke21heGxlbmd0aH0pYFxuXG4gICAgaWYgKHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIGRyaXZlci5zaG91bGRTZXRBdXRvSW5jcmVtZW50V2hlblByaW1hcnlLZXkoKSkge1xuICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgc3FsICs9IFwiIElERU5USVRZXCJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIikge1xuICAgICAgICBpZiAodGhpcy5nZXRBdXRvSW5jcmVtZW50KCkgJiYgdGhpcy5nZXRQcmltYXJ5S2V5KCkpIHtcbiAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGdzcWwgYXV0byBpbmNyZW1lbnQgbXVzdCBiZSBwcmltYXJ5IGtleVwiKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcWwgKz0gXCIgQVVUT19JTkNSRU1FTlRcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdCgpXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGV2YWx1YXRlZERlZmF1bHQgPSBkZWZhdWx0VmFsdWUoKVxuXG4gICAgICBzcWwgKz0gYCBERUZBVUxUIChgXG5cbiAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIGV2YWx1YXRlZERlZmF1bHQgPT0gXCJVVUlEKClcIikge1xuICAgICAgICBzcWwgKz0gXCJnZW5fcmFuZG9tX3V1aWQoKVwiXG4gICAgICB9IGVsc2UgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIgJiYgZXZhbHVhdGVkRGVmYXVsdCA9PSBcIlVVSUQoKVwiKSB7XG4gICAgICAgIHNxbCArPSBcIk5FV0lEKClcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3FsICs9IGV2YWx1YXRlZERlZmF1bHRcbiAgICAgIH1cblxuICAgICAgc3FsICs9IFwiKVwiXG4gICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHNxbCArPSBgIERFRkFVTFQgJHtvcHRpb25zLnF1b3RlKGRlZmF1bHRWYWx1ZSl9YFxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldFByaW1hcnlLZXkoKSkgc3FsICs9IFwiIFBSSU1BUlkgS0VZXCJcbiAgICBpZiAodGhpcy5nZXROdWxsKCkgPT09IGZhbHNlKSBzcWwgKz0gXCIgTk9UIE5VTExcIlxuXG4gICAgY29uc3Qgbm90ZXMgPSB0aGlzLmdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKVxuXG4gICAgaWYgKG5vdGVzICYmIGRhdGFiYXNlVHlwZSA9PSBcIm15c3FsXCIpIHtcbiAgICAgIHNxbCArPSBgIENPTU1FTlQgJHtvcHRpb25zLnF1b3RlKG5vdGVzKX1gXG4gICAgfVxuXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG5cbiAgICBpZiAoZm9yZWlnbktleSkge1xuICAgICAgbGV0IGZvcmVpZ25LZXlUYWJsZSwgZm9yZWlnbktleUNvbHVtblxuXG4gICAgICBpZiAoZm9yZWlnbktleSA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gXCJpZFwiXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKHRoaXMuZ2V0QWN0dWFsTmFtZSgpLnJlcGxhY2UoL19pZCQvLCBcIlwiKSlcbiAgICAgIH0gZWxzZSBpZiAoZm9yZWlnbktleSBpbnN0YW5jZW9mIFRhYmxlRm9yZWlnbktleSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZm9yZWlnbiBrZXkgdHlwZSBnaXZlbjogJHtmb3JlaWduS2V5fSAoJHt0eXBlb2YgZm9yZWlnbktleX0pYClcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAgUkVGRVJFTkNFUyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUoZm9yZWlnbktleVRhYmxlKX0oJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShmb3JlaWduS2V5Q29sdW1uKX0pYFxuICAgIH1cblxuICAgIHJldHVybiBzcWxcbiAgfVxufVxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFXO0lBQzlCOzs7T0FHRztJQUNILFlBQVksSUFBSSxFQUFFLElBQUk7UUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUEsQ0FBQyxxQ0FBcUM7WUFFdE8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3JDLENBQUM7WUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQztJQUU5Qjs7T0FFRztJQUNILFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRXJDOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRS9DOztPQUVHO0lBQ0gsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFFOUQ7O09BRUc7SUFDSCxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFL0Q7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUEsQ0FBQyxDQUFDO0lBRWpGOztPQUVHO0lBQ0gsVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTFDOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFBLENBQUMsQ0FBQztJQUV6RDs7T0FFRztJQUNILGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFekQ7O09BRUc7SUFDSCxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQSxDQUFDLENBQUM7SUFFaEQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUEsQ0FBQyxDQUFDO0lBRXJFOztPQUVHO0lBQ0gsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUvQzs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUE7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUE7UUFFOUIsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFbEUsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRWpEOztPQUVHO0lBQ0gsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUEsQ0FBQyxDQUFDO0lBRTlDOzs7T0FHRztJQUNILFlBQVksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFBLENBQUMsQ0FBQztJQUVqRTs7T0FFRztJQUNILFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUV0Qzs7O09BR0c7SUFDSCxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQSxDQUFDLENBQUM7SUFFakQ7O09BRUc7SUFDSCxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFcEM7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRS9DOztPQUVHO0lBQ0gsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUEsQ0FBQyxDQUFDO0lBRTlDOztPQUVHO0lBQ0gsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLElBQUksS0FBSyxDQUFBLENBQUMsQ0FBQztJQUV6RDs7O09BR0c7SUFDSCxhQUFhLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQSxDQUFDLENBQUM7SUFFckU7O09BRUc7SUFDSCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFdEM7O09BRUc7SUFDSCxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFcEM7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTdDOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksU0FBUztZQUFFLE9BQU8sd0JBQXdCLENBQUE7SUFDakYsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLFlBQVk7UUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFNO1FBRXRELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFeEQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsRUFBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2hDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFFeEMsSUFBSSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksR0FBRyxXQUFXLENBQUE7WUFDcEIsQ0FBQztpQkFBTSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxHQUFHLFVBQVUsQ0FBQTtZQUNuQixDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixJQUFJLEdBQUcsT0FBTyxDQUFBO2dCQUNkLFNBQVMsR0FBRyxTQUFTLENBQUE7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLEdBQUcsU0FBUyxDQUFBO1lBQ2hCLFNBQVMsS0FBSyxHQUFHLENBQUE7UUFDbkIsQ0FBQztRQUNELElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakQsSUFBSSxHQUFHLFVBQVUsQ0FBQTtRQUNuQixDQUFDO1FBRUQsSUFBSSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksR0FBRyxLQUFLLENBQUE7WUFDZCxDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixJQUFJLEdBQUcsU0FBUyxDQUFBO2dCQUNoQixTQUFTLEtBQUssRUFBRSxDQUFBO1lBQ2xCLENBQUM7aUJBQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzFCLElBQUksR0FBRyxlQUFlLENBQUE7Z0JBQ3RCLFNBQVMsR0FBRyxTQUFTLENBQUE7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxHQUFHLGdCQUFnQixDQUFBO2dCQUN2QixTQUFTLEdBQUcsU0FBUyxDQUFBO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ2hGLElBQUksR0FBRyxTQUFTLENBQUE7UUFDbEIsQ0FBQztRQUVELElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMvRSxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBQ2pCLENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQTtRQUU3RCxJQUFJLFlBQVksSUFBSSxPQUFPLElBQUksYUFBYTtZQUFFLEdBQUcsSUFBSSxPQUFPLENBQUE7UUFDNUQsSUFBSSxJQUFJO1lBQUUsR0FBRyxJQUFJLElBQUksQ0FBQTtRQUVyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBRTdCLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxhQUFhLEVBQUUsdUNBQXVDLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsRCxHQUFHLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQTtRQUM5RixDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakUsR0FBRyxJQUFJLElBQUksU0FBUyxHQUFHLENBQUE7UUFDekIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksTUFBTSxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQztZQUM3RSxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxJQUFJLFdBQVcsQ0FBQTtZQUNwQixDQUFDO2lCQUFNLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO29CQUNwRCxhQUFhO2dCQUNmLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7Z0JBQzdELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxJQUFJLGlCQUFpQixDQUFBO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBRXRDLElBQUksT0FBTyxZQUFZLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLEVBQUUsQ0FBQTtZQUV2QyxHQUFHLElBQUksWUFBWSxDQUFBO1lBRW5CLElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDNUQsR0FBRyxJQUFJLG1CQUFtQixDQUFBO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNuRSxHQUFHLElBQUksU0FBUyxDQUFBO1lBQ2xCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLElBQUksZ0JBQWdCLENBQUE7WUFDekIsQ0FBQztZQUVELEdBQUcsSUFBSSxHQUFHLENBQUE7UUFDWixDQUFDO2FBQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN4QixHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUE7UUFDbEQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUFFLEdBQUcsSUFBSSxjQUFjLENBQUE7UUFDL0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSztZQUFFLEdBQUcsSUFBSSxXQUFXLENBQUE7UUFFaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXBELElBQUksS0FBSyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNyQyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7UUFDM0MsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxlQUFlLEVBQUUsZ0JBQWdCLENBQUE7WUFFckMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLGdCQUFnQixHQUFHLElBQUksQ0FBQTtnQkFDdkIsZUFBZSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNsRixDQUFDO2lCQUFNLElBQUksVUFBVSxZQUFZLGVBQWUsRUFBRSxDQUFDO2dCQUNqRCxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtnQkFDdkQsZUFBZSxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxVQUFVLEtBQUssT0FBTyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1lBQ3pGLENBQUM7WUFFRCxHQUFHLElBQUksZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFBO1FBQy9HLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7dW5pcXVlOiBib29sZWFufX0gSW5kZXhBcmdUeXBlXG4gKi9cblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZUZvcmVpZ25LZXkgZnJvbSBcIi4vdGFibGUtZm9yZWlnbi1rZXkuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRhYmxlQ29sdW1uQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9JbmNyZW1lbnRdIC0gV2hldGhlciB0aGUgY29sdW1uIGF1dG8taW5jcmVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7YW55fSBbZGVmYXVsdF0gLSBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZHJvcENvbHVtbl0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGRyb3BwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58b2JqZWN0fSBbZm9yZWlnbktleV0gLSBGb3JlaWduIGtleSBvcHRpb25zIG9yIGZsYWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58SW5kZXhBcmdUeXBlfSBbaW5kZXhdIC0gV2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBpbmRleGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNOZXdDb2x1bW5dIC0gV2hldGhlciB0aGlzIGNvbHVtbiBpcyBiZWluZyBhZGRlZCBpbiBhIG1pZ3JhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4TGVuZ3RoXSAtIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgY29sdW1uIHZhbHVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub3Rlc10gLSBDb2x1bW4gbm90ZXMgb3IgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB0aGUgY29sdW1uIGFsbG93cyBudWxsIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3BvbHltb3JwaGljXSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBwb2x5bW9ycGhpYy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAtIE51bWVyaWMgcHJlY2lzaW9uICh0b3RhbCBkaWdpdHMpIGZvciBkZWNpbWFsL251bWVyaWMgdHlwZXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmltYXJ5S2V5XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBhIHByaW1hcnkga2V5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzY2FsZV0gLSBOdW1lcmljIHNjYWxlIChkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkgZm9yIGRlY2ltYWwvbnVtZXJpYyB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV0gLSBDb2x1bW4gZGF0YSB0eXBlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlQ29sdW1uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3Qge2F1dG9JbmNyZW1lbnQsIGRlZmF1bHQ6IGNvbHVtbkRlZmF1bHQsIGRyb3BDb2x1bW4sIGZvcmVpZ25LZXksIGluZGV4LCBpc05ld0NvbHVtbiwgbWF4TGVuZ3RoLCBub3RlcywgbnVsbDogYXJnc051bGwsIHBvbHltb3JwaGljLCBwcmVjaXNpb24sIHByaW1hcnlLZXksIHNjYWxlLCB0eXBlLCAuLi5yZXN0QXJnc30gPSBhcmdzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGFyZ3MpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IGFyZ3MgZ2l2ZW5cIilcbiAgICAgIH1cblxuICAgICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcbiAgICB9XG5cbiAgICB0aGlzLmFyZ3MgPSBhcmdzIHx8IHt9XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGdldE5hbWUoKSB7IHJldHVybiB0aGlzLm5hbWUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBuZXcgbmFtZS5cbiAgICovXG4gIGdldE5ld05hbWUoKSB7IHJldHVybiB0aGlzLl9uZXdOYW1lIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TmV3TmFtZShuZXdOYW1lKSB7IHRoaXMuX25ld05hbWUgPSBuZXdOYW1lIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYWN0dWFsIG5hbWUuXG4gICAqL1xuICBnZXRBY3R1YWxOYW1lKCkgeyByZXR1cm4gdGhpcy5nZXROZXdOYW1lKCkgfHwgdGhpcy5nZXROYW1lKCkgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGF1dG8gaW5jcmVtZW50LlxuICAgKi9cbiAgZ2V0QXV0b0luY3JlbWVudCgpIHsgcmV0dXJuIHRoaXMuYXJncz8uYXV0b0luY3JlbWVudCB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmV3QXV0b0luY3JlbWVudCAtIE5ldyBhdXRvIGluY3JlbWVudC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0QXV0b0luY3JlbWVudChuZXdBdXRvSW5jcmVtZW50KSB7IHRoaXMuYXJncy5hdXRvSW5jcmVtZW50ID0gbmV3QXV0b0luY3JlbWVudCB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt1bmtub3duIHwgKCgpID0+IHVua25vd24pfSAtIFRoZSBkZWZhdWx0IHZhbHVlIG9yIGZhY3RvcnkuXG4gICAqL1xuICBnZXREZWZhdWx0KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5kZWZhdWx0IH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IG5ld0RlZmF1bHQgLSBOZXcgZGVmYXVsdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0RGVmYXVsdChuZXdEZWZhdWx0KSB7IHRoaXMuYXJncy5kZWZhdWx0ID0gbmV3RGVmYXVsdCB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgZHJvcCBjb2x1bW4uXG4gICAqL1xuICBnZXREcm9wQ29sdW1uKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5kcm9wQ29sdW1uIHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW4gfCBvYmplY3QgfCB1bmRlZmluZWR9IC0gV2hldGhlciBmb3JlaWduIGtleS5cbiAgICovXG4gIGdldEZvcmVpZ25LZXkoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmZvcmVpZ25LZXkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3QgfCB1bmRlZmluZWR9IG5ld0ZvcmVpZ25LZXkgLSBOZXcgZm9yZWlnbiBrZXkuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEZvcmVpZ25LZXkobmV3Rm9yZWlnbktleSkgeyB0aGlzLmFyZ3MuZm9yZWlnbktleSA9IG5ld0ZvcmVpZ25LZXkgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxJbmRleEFyZ1R5cGV9IC0gV2hldGhlciBpbmRleC5cbiAgICovXG4gIGdldEluZGV4KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5pbmRleCB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtJbmRleEFyZ1R5cGV9IC0gVGhlIGluZGV4IGFyZ3MuXG4gICAqL1xuICBnZXRJbmRleEFyZ3MoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFyZ3M/LmluZGV4ID09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFyZ3MuaW5kZXhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt1bmlxdWU6IGZhbHNlfVxuICAgIH1cbiAgfVxuXG4gIGdldEluZGV4VW5pcXVlKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hcmdzPy5pbmRleFxuXG4gICAgaWYgKHR5cGVvZiBpbmRleCA9PSBcIm9iamVjdFwiICYmIGluZGV4LnVuaXF1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxJbmRleEFyZ1R5cGV9IG5ld0luZGV4IC0gTmV3IGluZGV4LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRJbmRleChuZXdJbmRleCkgeyB0aGlzLmFyZ3MuaW5kZXggPSBuZXdJbmRleCB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gVGhlIG1heCBsZW5ndGguXG4gICAqL1xuICBnZXRNYXhMZW5ndGgoKSB7IHJldHVybiB0aGlzLmFyZ3M/Lm1heExlbmd0aCB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBuZXdNYXhMZW5ndGggLSBOZXcgbWF4IGxlbmd0aC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TWF4TGVuZ3RoKG5ld01heExlbmd0aCkgeyB0aGlzLmFyZ3MubWF4TGVuZ3RoID0gbmV3TWF4TGVuZ3RoIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgbm90ZXMuXG4gICAqL1xuICBnZXROb3RlcygpIHsgcmV0dXJuIHRoaXMuYXJncz8ubm90ZXMgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gbmV3Tm90ZXMgLSBOZXcgbm90ZXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE5vdGVzKG5ld05vdGVzKSB7IHRoaXMuYXJncy5ub3RlcyA9IG5ld05vdGVzIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9IC0gV2hldGhlciBudWxsLlxuICAgKi9cbiAgZ2V0TnVsbCgpIHsgcmV0dXJuIHRoaXMuYXJncz8ubnVsbCB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbnVsbGFibGUgLSBXaGV0aGVyIG51bGxhYmxlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXROdWxsKG51bGxhYmxlKSB7IHRoaXMuYXJncy5udWxsID0gbnVsbGFibGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgdW5kZWZpbmVkfSAtIE51bWVyaWMgcHJlY2lzaW9uICh0b3RhbCBkaWdpdHMpLlxuICAgKi9cbiAgZ2V0UHJlY2lzaW9uKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5wcmVjaXNpb24gfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHByaW1hcnkga2V5LlxuICAgKi9cbiAgZ2V0UHJpbWFyeUtleSgpIHsgcmV0dXJuIHRoaXMuYXJncz8ucHJpbWFyeUtleSB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmV3UHJpbWFyeUtleSAtIE5ldyBwcmltYXJ5IGtleS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0UHJpbWFyeUtleShuZXdQcmltYXJ5S2V5KSB7IHRoaXMuYXJncy5wcmltYXJ5S2V5ID0gbmV3UHJpbWFyeUtleSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gTnVtZXJpYyBzY2FsZSAoZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnQpLlxuICAgKi9cbiAgZ2V0U2NhbGUoKSB7IHJldHVybiB0aGlzLmFyZ3M/LnNjYWxlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgdHlwZS5cbiAgICovXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLmFyZ3M/LnR5cGUgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gbmV3VHlwZSAtIE5ldyB0eXBlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRUeXBlKG5ld1R5cGUpIHsgdGhpcy5hcmdzLnR5cGUgPSBuZXdUeXBlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgdHlwZSBoaW50IG5vdGVzLlxuICAgKi9cbiAgZ2V0VHlwZUhpbnROb3RlcygpIHtcbiAgICBpZiAodGhpcy5nZXRUeXBlKCk/LnRvTG93ZXJDYXNlKCkgPT0gXCJib29sZWFuXCIpIHJldHVybiBcInZlbG9jaW91czp0eXBlPWJvb2xlYW5cIlxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhYmFzZVR5cGUgLSBEYXRhYmFzZSB0eXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIE5vdGVzIGZvciB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBnZXROb3Rlc0ZvckRhdGFiYXNlKGRhdGFiYXNlVHlwZSkge1xuICAgIGlmICghW1wibXlzcWxcIiwgXCJwZ3NxbFwiXS5pbmNsdWRlcyhkYXRhYmFzZVR5cGUpKSByZXR1cm5cblxuICAgIHJldHVybiB0aGlzLmdldE5vdGVzKCkgfHwgdGhpcy5nZXRUeXBlSGludE5vdGVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG5ldyBjb2x1bW4uXG4gICAqL1xuICBpc05ld0NvbHVtbigpIHsgcmV0dXJuIHRoaXMuYXJncz8uaXNOZXdDb2x1bW4gfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuZm9yQWx0ZXJUYWJsZSAtIFdoZXRoZXIgZm9yIGFsdGVyIHRhYmxlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgc3RyaW5nLlxuICAgKi9cbiAgZ2V0U1FMKHtmb3JBbHRlclRhYmxlLCBkcml2ZXIsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkcml2ZXIuZ2V0VHlwZSgpXG4gICAgY29uc3Qgb3B0aW9ucyA9IGRyaXZlci5vcHRpb25zKClcbiAgICBsZXQgbWF4bGVuZ3RoID0gdGhpcy5nZXRNYXhMZW5ndGgoKVxuICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlKCk/LnRvVXBwZXJDYXNlKClcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIkRBVEVUSU1FXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiVElNRVNUQU1QXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIlRJTllJTlRcIikge1xuICAgICAgICB0eXBlID0gXCJTTUFMTElOVFwiXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJCTE9CXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiQllURUFcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcIlNUUklOR1wiKSB7XG4gICAgICB0eXBlID0gXCJWQVJDSEFSXCJcbiAgICAgIG1heGxlbmd0aCB8fD0gMjU1XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIHR5cGUgPT0gXCJUSU5ZSU5UXCIpIHtcbiAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIikge1xuICAgICAgaWYgKHR5cGUgPT0gXCJCT09MRUFOXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiQklUXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIlVVSURcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJDSEFSXCJcbiAgICAgICAgbWF4bGVuZ3RoIHx8PSAzNlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiSlNPTlwiKSB7XG4gICAgICAgIHR5cGUgPSBcIk5WQVJDSEFSKE1BWClcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJCSU5BUlkoTUFYKVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJzcWxpdGVcIiAmJiB0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSAmJiB0aGlzLmdldFByaW1hcnlLZXkoKSkge1xuICAgICAgdHlwZSA9IFwiSU5URUdFUlwiXG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIgJiYgdGhpcy5nZXRBdXRvSW5jcmVtZW50KCkgJiYgdGhpcy5nZXRQcmltYXJ5S2V5KCkpIHtcbiAgICAgIHR5cGUgPSBcIlNFUklBTFwiXG4gICAgfVxuXG4gICAgbGV0IHNxbCA9IGAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKHRoaXMuZ2V0QWN0dWFsTmFtZSgpKX0gYFxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIgJiYgZm9yQWx0ZXJUYWJsZSkgc3FsICs9IFwiVFlQRSBcIlxuICAgIGlmICh0eXBlKSBzcWwgKz0gdHlwZVxuXG4gICAgY29uc3QgcHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24oKVxuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5nZXRTY2FsZSgpXG5cbiAgICBpZiAoKHNjYWxlICE9PSB1bmRlZmluZWQgJiYgc2NhbGUgIT09IG51bGwpICYmIChwcmVjaXNpb24gPT09IHVuZGVmaW5lZCB8fCBwcmVjaXNpb24gPT09IG51bGwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAnJHt0aGlzLmdldEFjdHVhbE5hbWUoKX0nOiBzY2FsZSByZXF1aXJlcyBwcmVjaXNpb24gdG8gYmUgc2V0YClcbiAgICB9XG5cbiAgICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQgJiYgcHJlY2lzaW9uICE9PSBudWxsKSB7XG4gICAgICBzcWwgKz0gc2NhbGUgIT09IHVuZGVmaW5lZCAmJiBzY2FsZSAhPT0gbnVsbCA/IGAoJHtwcmVjaXNpb259LCAke3NjYWxlfSlgIDogYCgke3ByZWNpc2lvbn0pYFxuICAgIH0gZWxzZSBpZiAodHlwZSAmJiBtYXhsZW5ndGggIT09IHVuZGVmaW5lZCAmJiBtYXhsZW5ndGggIT09IG51bGwpIHtcbiAgICAgIHNxbCArPSBgKCR7bWF4bGVuZ3RofSlgXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIGRyaXZlci5zaG91bGRTZXRBdXRvSW5jcmVtZW50V2hlblByaW1hcnlLZXkoKSkge1xuICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgc3FsICs9IFwiIElERU5USVRZXCJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIikge1xuICAgICAgICBpZiAodGhpcy5nZXRBdXRvSW5jcmVtZW50KCkgJiYgdGhpcy5nZXRQcmltYXJ5S2V5KCkpIHtcbiAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGdzcWwgYXV0byBpbmNyZW1lbnQgbXVzdCBiZSBwcmltYXJ5IGtleVwiKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcWwgKz0gXCIgQVVUT19JTkNSRU1FTlRcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdCgpXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGV2YWx1YXRlZERlZmF1bHQgPSBkZWZhdWx0VmFsdWUoKVxuXG4gICAgICBzcWwgKz0gYCBERUZBVUxUIChgXG5cbiAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIGV2YWx1YXRlZERlZmF1bHQgPT0gXCJVVUlEKClcIikge1xuICAgICAgICBzcWwgKz0gXCJnZW5fcmFuZG9tX3V1aWQoKVwiXG4gICAgICB9IGVsc2UgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIgJiYgZXZhbHVhdGVkRGVmYXVsdCA9PSBcIlVVSUQoKVwiKSB7XG4gICAgICAgIHNxbCArPSBcIk5FV0lEKClcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3FsICs9IGV2YWx1YXRlZERlZmF1bHRcbiAgICAgIH1cblxuICAgICAgc3FsICs9IFwiKVwiXG4gICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHNxbCArPSBgIERFRkFVTFQgJHtvcHRpb25zLnF1b3RlKGRlZmF1bHRWYWx1ZSl9YFxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldFByaW1hcnlLZXkoKSkgc3FsICs9IFwiIFBSSU1BUlkgS0VZXCJcbiAgICBpZiAodGhpcy5nZXROdWxsKCkgPT09IGZhbHNlKSBzcWwgKz0gXCIgTk9UIE5VTExcIlxuXG4gICAgY29uc3Qgbm90ZXMgPSB0aGlzLmdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKVxuXG4gICAgaWYgKG5vdGVzICYmIGRhdGFiYXNlVHlwZSA9PSBcIm15c3FsXCIpIHtcbiAgICAgIHNxbCArPSBgIENPTU1FTlQgJHtvcHRpb25zLnF1b3RlKG5vdGVzKX1gXG4gICAgfVxuXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG5cbiAgICBpZiAoZm9yZWlnbktleSkge1xuICAgICAgbGV0IGZvcmVpZ25LZXlUYWJsZSwgZm9yZWlnbktleUNvbHVtblxuXG4gICAgICBpZiAoZm9yZWlnbktleSA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gXCJpZFwiXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKHRoaXMuZ2V0QWN0dWFsTmFtZSgpLnJlcGxhY2UoL19pZCQvLCBcIlwiKSlcbiAgICAgIH0gZWxzZSBpZiAoZm9yZWlnbktleSBpbnN0YW5jZW9mIFRhYmxlRm9yZWlnbktleSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZm9yZWlnbiBrZXkgdHlwZSBnaXZlbjogJHtmb3JlaWduS2V5fSAoJHt0eXBlb2YgZm9yZWlnbktleX0pYClcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAgUkVGRVJFTkNFUyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUoZm9yZWlnbktleVRhYmxlKX0oJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShmb3JlaWduS2V5Q29sdW1uKX0pYFxuICAgIH1cblxuICAgIHJldHVybiBzcWxcbiAgfVxufVxuIl19
@@ -251,7 +251,7 @@ export default class DbGenerateModel extends BaseCommand {
251
251
  else if (["blob", "char", "nvarchar", "varchar", "text", "longtext", "uuid", "character varying"].includes(type)) {
252
252
  return "string";
253
253
  }
254
- else if (["bit", "bigint", "float", "int", "integer", "smallint", "tinyint"].includes(type)) {
254
+ else if (["bit", "bigint", "decimal", "float", "int", "integer", "numeric", "smallint", "tinyint"].includes(type)) {
255
255
  return "number";
256
256
  }
257
257
  else if (["date", "datetime", "timestamp without time zone"].includes(type)) {
@@ -273,4 +273,4 @@ export default class DbGenerateModel extends BaseCommand {
273
273
  return this.jsDocTypeFromColumn(column);
274
274
  }
275
275
  }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnQtaGFuZGxlcnMvbm9kZS9jbGkvY29tbWFuZHMvZ2VuZXJhdGUvYmFzZS1tb2RlbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0sb0NBQW9DLENBQUE7QUFDNUQsT0FBTyxVQUFVLE1BQU0scUNBQXFDLENBQUE7QUFDNUQsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBRXhDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBQ3RELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRWhELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsYUFBYSxDQUFBO1FBQy9DLE1BQU0sYUFBYSxHQUFHLEdBQUcsYUFBYSxrQkFBa0IsQ0FBQTtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7UUFFbkIsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGdC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QUMsT0FBTyxFQUFFLENBQUE7UUFFN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2RSxPQUFPLGVBQWUsQ0FBQTtRQUN4QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBmaWxlRXhpc3RzIGZyb20gXCIuLi8uLi8uLi8uLi8uLi91dGlscy9maWxlLWV4aXN0cy5qc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYkdlbmVyYXRlTW9kZWwgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuaW5pdGlhbGl6ZU1vZGVscygpXG5cbiAgICBjb25zdCByb290RGlyZWN0b3J5ID0gdGhpcy5kaXJlY3RvcnkoKVxuICAgIGNvbnN0IG1vZGVsc0RpciA9IGAke3Jvb3REaXJlY3Rvcnl9L3NyYy9tb2RlbHNgXG4gICAgY29uc3QgYmFzZU1vZGVsc0RpciA9IGAke3Jvb3REaXJlY3Rvcnl9L3NyYy9tb2RlbC1iYXNlc2BcbiAgICBjb25zdCBtb2RlbENsYXNzZXMgPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRNb2RlbENsYXNzZXMoKVxuICAgIGxldCBkZXZNb2RlID0gZmFsc2VcblxuICAgIGlmIChiYXNlTW9kZWxzRGlyLmluY2x1ZGVzKFwiL3NwZWMvZHVtbXkvc3JjL21vZGVsLWJhc2VzXCIpKSB7XG4gICAgICBkZXZNb2RlID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmICghYXdhaXQgZmlsZUV4aXN0cyhiYXNlTW9kZWxzRGlyKSkge1xuICAgICAgYXdhaXQgZnMubWtkaXIoYmFzZU1vZGVsc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZW5zdXJlQ29ubmVjdGlvbnMoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBtb2RlbENsYXNzTmFtZSBpbiBtb2RlbENsYXNzZXMpIHtcbiAgICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3Nlc1ttb2RlbENsYXNzTmFtZV1cbiAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gaW5mbGVjdGlvbi5kYXNoZXJpemUobW9kZWxDbGFzc05hbWUpXG4gICAgICAgIGNvbnN0IG1vZGVsTmFtZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUobW9kZWxOYW1lLnJlcGxhY2VBbGwoXCItXCIsIFwiX1wiKSlcbiAgICAgICAgY29uc3QgbW9kZWxCYXNlRmlsZU5hbWUgPSBgJHtpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUobW9kZWxOYW1lKSl9LmpzYFxuICAgICAgICBjb25zdCBtb2RlbFBhdGggPSBgJHtiYXNlTW9kZWxzRGlyfS8ke21vZGVsQmFzZUZpbGVOYW1lfWBcblxuICAgICAgICBjb25zb2xlLmxvZyhgY3JlYXRlIHNyYy9tb2RlbC1iYXNlcy8ke21vZGVsQmFzZUZpbGVOYW1lfWApXG5cbiAgICAgICAgY29uc3Qgc291cmNlTW9kZWxGdWxsRmlsZVBhdGggPSBgJHttb2RlbHNEaXJ9LyR7bW9kZWxCYXNlRmlsZU5hbWV9YFxuICAgICAgICBsZXQgc291cmNlTW9kZWxGaWxlUGF0aFxuXG4gICAgICAgIGlmIChhd2FpdCBmaWxlRXhpc3RzKHNvdXJjZU1vZGVsRnVsbEZpbGVQYXRoKSkge1xuICAgICAgICAgIHNvdXJjZU1vZGVsRmlsZVBhdGggPSBgLi4vbW9kZWxzLyR7bW9kZWxCYXNlRmlsZU5hbWV9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNvdXJjZU1vZGVsRmlsZVBhdGggPSBcInZlbG9jaW91cy9idWlsZC9zcmMvZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlQ29udGVudCA9IFwiXCJcbiAgICAgICAgbGV0IHZlbG9jaW91c1BhdGhcblxuICAgICAgICBpZiAoZGV2TW9kZSkge1xuICAgICAgICAgIHZlbG9jaW91c1BhdGggPSBcIi4uLy4uLy4uLy4uL3NyY1wiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmVsb2Npb3VzUGF0aCA9IFwidmVsb2Npb3VzL2J1aWxkL3NyY1wiXG4gICAgICAgIH1cblxuICAgICAgICBmaWxlQ29udGVudCArPSBgaW1wb3J0IERhdGFiYXNlUmVjb3JkIGZyb20gXCIke3ZlbG9jaW91c1BhdGh9L2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiXFxuXFxuYFxuXG4gICAgICAgIGNvbnN0IGhhc01hbnlSZWxhdGlvbkZpbGVQYXRoID0gYCR7dmVsb2Npb3VzUGF0aH0vZGF0YWJhc2UvcmVjb3JkL2luc3RhbmNlLXJlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNgXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYGV4cG9ydCBkZWZhdWx0IGNsYXNzICR7bW9kZWxOYW1lQ2FtZWxpemVkfUJhc2UgZXh0ZW5kcyBEYXRhYmFzZVJlY29yZCB7XFxuYFxuXG4gICAgICAvLyAtLS0gZ2V0TW9kZWxDbGFzcygpIG92ZXJyaWRlIChmaXhlcyBwb2x5bW9ycGhpYyB0eXBpbmcgaW4gSlMvSlNEb2MpIC0tLVxuICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoc291cmNlTW9kZWxGdWxsRmlsZVBhdGgpKSB7XG4gICAgICAgIC8vIE1vZGVsIGZpbGUgZXhpc3RzIChlLmcuIHNyYy9tb2RlbHMvdGlja2V0LmpzKSDihpIgcmV0dXJuIHR5cGVvZiBUaWNrZXRcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiJHtzb3VyY2VNb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0fVxcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvLyBAdHMtaWdub3JlIC0gb3ZlcnJpZGUgbmFycm93cyByZXR1cm4gdHlwZSBmb3IgYmV0dGVyIEludGVsbGlTZW5zZSBpbiBnZW5lcmF0ZWQgbW9kZWwgYmFzZXNcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBnZXRNb2RlbENsYXNzKCkgeyByZXR1cm4gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiJHtzb3VyY2VNb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0fSAqLyAodGhpcy5jb25zdHJ1Y3RvcikgfVxcblxcbmBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIG1vZGVsIGZpbGUgeWV0IOKGkiBmYWxsIGJhY2sgdG8gdHlwZW9mIFRpY2tldEJhc2VcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHt0eXBlb2YgJHttb2RlbE5hbWVDYW1lbGl6ZWR9QmFzZX1cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLy8gQHRzLWlnbm9yZSAtIG92ZXJyaWRlIG5hcnJvd3MgcmV0dXJuIHR5cGUgZm9yIGJldHRlciBJbnRlbGxpU2Vuc2UgaW4gZ2VuZXJhdGVkIG1vZGVsIGJhc2VzXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgZ2V0TW9kZWxDbGFzcygpIHsgcmV0dXJuIC8qKiBAdHlwZSB7dHlwZW9mICR7bW9kZWxOYW1lQ2FtZWxpemVkfUJhc2V9ICovICh0aGlzLmNvbnN0cnVjdG9yKSB9XFxuXFxuYFxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YWJsZSA9IGF3YWl0IG1vZGVsQ2xhc3MuY29ubmVjdGlvbigpLmdldFRhYmxlQnlOYW1lKG1vZGVsQ2xhc3MudGFibGVOYW1lKCkpXG5cbiAgICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGFibGUgZm9yIG1vZGVsICcke21vZGVsQ2xhc3MubmFtZX0nYClcblxuICAgICAgY29uc3QgY29sdW1ucyA9IGF3YWl0IHRhYmxlLmdldENvbHVtbnMoKVxuICAgICAgbGV0IG1ldGhvZHNDb3VudCA9IDBcblxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBjb25zdCBjYW1lbGl6ZWRDb2x1bW5OYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShjb2x1bW4uZ2V0TmFtZSgpLCB0cnVlKVxuICAgICAgICBjb25zdCBjYW1lbGl6ZWRDb2x1bW5OYW1lQmlnRmlyc3QgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGNvbHVtbi5nZXROYW1lKCkpXG4gICAgICAgIGNvbnN0IGpzZG9jVHlwZSA9IHRoaXMuanNEb2NUeXBlRnJvbUNvbHVtbihjb2x1bW4pXG5cbiAgICAgICAgaWYgKG1ldGhvZHNDb3VudCA+IDApIHtcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoanNkb2NUeXBlKSB7XG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMgeyR7anNkb2NUeXBlfSR7Y29sdW1uLmdldE51bGwoKSA/IFwiIHwgbnVsbFwiIDogXCJcIn19XFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICB9XG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtjYW1lbGl6ZWRDb2x1bW5OYW1lfSgpIHsgcmV0dXJuIHRoaXMucmVhZEF0dHJpYnV0ZShcIiR7Y2FtZWxpemVkQ29sdW1uTmFtZX1cIikgfVxcblxcbmBcblxuICAgICAgICBjb25zdCBzZXR0ZXJKc2RvY1R5cGUgPSB0aGlzLmpzRG9jU2V0dGVyVHlwZUZyb21Db2x1bW4oY29sdW1uKVxuXG4gICAgICAgIGlmIChzZXR0ZXJKc2RvY1R5cGUpIHtcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcGFyYW0geyR7c2V0dGVySnNkb2NUeXBlfSR7Y29sdW1uLmdldE51bGwoKSA/IFwiIHwgbnVsbFwiIDogXCJcIn19IG5ld1ZhbHVlXFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcmV0dXJucyB7dm9pZH1cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICB9XG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgc2V0JHtjYW1lbGl6ZWRDb2x1bW5OYW1lQmlnRmlyc3R9KG5ld1ZhbHVlKSB7IHJldHVybiB0aGlzLl9zZXRDb2x1bW5BdHRyaWJ1dGUoXCIke2NhbWVsaXplZENvbHVtbk5hbWV9XCIsIG5ld1ZhbHVlKSB9XFxuXFxuYFxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHJldHVybnMge2Jvb2xlYW59XFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGhhcyR7Y2FtZWxpemVkQ29sdW1uTmFtZUJpZ0ZpcnN0fSgpIHsgcmV0dXJuIHRoaXMuX2hhc0F0dHJpYnV0ZSh0aGlzLiR7Y2FtZWxpemVkQ29sdW1uTmFtZX0oKSkgfVxcbmBcblxuICAgICAgICBtZXRob2RzQ291bnQrK1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxDbGFzcy5fdHJhbnNsYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IFRyYW5zbGF0aW9uQ2xhc3MgPSBtb2RlbENsYXNzLmdldFRyYW5zbGF0aW9uQ2xhc3MoKVxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbkNvbHVtbnMgPSBUcmFuc2xhdGlvbkNsYXNzLmdldENvbHVtbnMoKVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBtb2RlbENsYXNzLl90cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lVW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShuYW1lKVxuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRyYW5zbGF0aW9uQ29sdW1ucy5maW5kKCh0cmFuc2xhdGlvbkNvbHVtbikgPT4gdHJhbnNsYXRpb25Db2x1bW4uZ2V0TmFtZSgpID09PSBuYW1lVW5kZXJzY29yZSlcbiAgICAgICAgICBsZXQgdHJhbnNsYXRpb25Kc2RvY1R5cGVcblxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uSnNkb2NUeXBlID0gdGhpcy5qc0RvY1R5cGVGcm9tQ29sdW1uKGNvbHVtbilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNsYXRpb25Kc2RvY1R5cGUgJiYgY29sdW1uKSB7XG4gICAgICAgICAgICBmaWxlQ29udGVudCArPSBgXFxuYFxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7JHt0cmFuc2xhdGlvbkpzZG9jVHlwZX0ke2NvbHVtbi5nZXROdWxsKCkgPyBcIiB8IG51bGxcIiA6IFwiXCJ9fVxcbmBcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7bmFtZX0oKSB7IHJldHVybiB0aGlzLl9nZXRUcmFuc2xhdGVkQXR0cmlidXRlV2l0aEZhbGxiYWNrKFwiJHtuYW1lfVwiLCB0aGlzLl9nZXRDb25maWd1cmF0aW9uKCkuZ2V0TG9jYWxlKCkpID8/IG51bGwgfVxcbmBcbiAgICAgICAgICBtZXRob2RzQ291bnQrK1xuXG4gICAgICAgICAgY29uc3QgaGFzTmFtZSA9IGBoYXMke2luZmxlY3Rpb24uY2FtZWxpemUobmFtZSl9YFxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYFxcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAYWJzdHJhY3RcXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2Jvb2xlYW59XFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7aGFzTmFtZX0oKSB7IHRocm93IG5ldyBFcnJvcihcIiR7aGFzTmFtZX0gbm90IGltcGxlbWVudGVkXCIpIH1cXG5gXG4gICAgICAgICAgbWV0aG9kc0NvdW50KytcblxuICAgICAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldExvY2FsZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlTWV0aG9kTmFtZSA9IGAke25hbWV9JHtpbmZsZWN0aW9uLmNhbWVsaXplKGxvY2FsZSl9YFxuXG4gICAgICAgICAgICBpZiAodHJhbnNsYXRpb25Kc2RvY1R5cGUgJiYgY29sdW1uKSB7XG4gICAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGBcXG5gXG4gICAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7JHt0cmFuc2xhdGlvbkpzZG9jVHlwZX0ke2NvbHVtbi5nZXROdWxsKCkgPyBcIiB8IG51bGxcIiA6IFwiXCJ9fVxcbmBcbiAgICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7bG9jYWxlTWV0aG9kTmFtZX0oKSB7IHJldHVybiB0aGlzLl9nZXRUcmFuc2xhdGVkQXR0cmlidXRlV2l0aEZhbGxiYWNrKFwiJHtuYW1lfVwiLCBcIiR7bG9jYWxlfVwiKSA/PyBudWxsIH1cXG5gXG4gICAgICAgICAgICBtZXRob2RzQ291bnQrK1xuXG4gICAgICAgICAgICBjb25zdCBsb2NhbGVIYXNOYW1lID0gYGhhcyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShsb2NhbGVNZXRob2ROYW1lKX1gXG5cbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGBcXG5gXG4gICAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBhYnN0cmFjdFxcbmBcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHtib29sZWFufVxcbmBcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtsb2NhbGVIYXNOYW1lfSgpIHsgdGhyb3cgbmV3IEVycm9yKFwiJHtsb2NhbGVIYXNOYW1lfSBub3QgaW1wbGVtZW50ZWRcIikgfVxcbmBcbiAgICAgICAgICAgIG1ldGhvZHNDb3VudCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwIG9mIG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwcygpKSB7XG4gICAgICAgIGxldCBiYXNlRmlsZVBhdGgsIGJhc2VGdWxsRmlsZVBhdGgsIGZpbGVOYW1lLCBmdWxsRmlsZVBhdGhcblxuICAgICAgICBpZiAocmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljKCkpIHtcbiAgICAgICAgICBmaWxlTmFtZSA9IFwidmVsb2Npb3VzL2J1aWxkL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgICAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb25zaGlwICcke3JlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9JyBvbiAnJHttb2RlbENsYXNzLm5hbWV9JyBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgICAgICAgIGZpbGVOYW1lID0gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHRhcmdldE1vZGVsQ2xhc3MubmFtZSkpXG4gICAgICAgICAgZnVsbEZpbGVQYXRoID0gYHNyYy9tb2RlbHMvJHtmaWxlTmFtZX0uanNgXG4gICAgICAgICAgYmFzZUZpbGVQYXRoID0gYC4uL21vZGVsLWJhc2VzLyR7ZmlsZU5hbWV9LmpzYFxuICAgICAgICAgIGJhc2VGdWxsRmlsZVBhdGggPSBgc3JjL21vZGVsLWJhc2VzLyR7ZmlsZU5hbWV9LmpzYFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZHNDb3VudCA+IDApIHtcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImJlbG9uZ3NUb1wiIHx8IHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICAgIGxldCBtb2RlbEZpbGVQYXRoXG5cbiAgICAgICAgICBpZiAoZnVsbEZpbGVQYXRoICYmIGF3YWl0IGZpbGVFeGlzdHMoZnVsbEZpbGVQYXRoKSkge1xuICAgICAgICAgICAgbW9kZWxGaWxlUGF0aCA9IGAuLi9tb2RlbHMvJHtmaWxlTmFtZX0uanNgXG4gICAgICAgICAgfSBlbHNlIGlmIChiYXNlRnVsbEZpbGVQYXRoICYmIGF3YWl0IGZpbGVFeGlzdHMoYmFzZUZ1bGxGaWxlUGF0aCkpIHtcbiAgICAgICAgICAgIG1vZGVsRmlsZVBhdGggPSBiYXNlRmlsZVBhdGhcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWxGaWxlUGF0aCA9IFwidmVsb2Npb3VzL2J1aWxkL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHtpbXBvcnQoXCIke21vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHR9XFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7cmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0oKSB7IHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIiR7bW9kZWxGaWxlUGF0aH1cIikuZGVmYXVsdH0gKi8gKHRoaXMuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKFwiJHtyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfVwiKS5sb2FkZWQoKSkgfVxcbmBcblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQGFic3RyYWN0XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbYXR0cmlidXRlc11cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHtpbXBvcnQoXCIke21vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHR9XFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGJ1aWxkJHtpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpfShhdHRyaWJ1dGVzKSB7IHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcXG5gXG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEBhYnN0cmFjdFxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgbG9hZCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpKX0oKSB7IHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKSB9XFxuYFxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAYWJzdHJhY3RcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBwYXJhbSB7aW1wb3J0KFwiJHttb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0fSBuZXdNb2RlbFxcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7dm9pZH1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgc2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpfShuZXdNb2RlbCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuYFxuICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgICBsZXQgcmVjb3JkSW1wb3J0XG5cbiAgICAgICAgICBpZiAoZnVsbEZpbGVQYXRoICYmIGF3YWl0IGZpbGVFeGlzdHMoZnVsbEZpbGVQYXRoKSkge1xuICAgICAgICAgICAgcmVjb3JkSW1wb3J0ID0gYC4uL21vZGVscy8ke2ZpbGVOYW1lfS5qc2BcbiAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VGdWxsRmlsZVBhdGggJiYgYXdhaXQgZmlsZUV4aXN0cyhiYXNlRnVsbEZpbGVQYXRoKSkge1xuICAgICAgICAgICAgcmVjb3JkSW1wb3J0ID0gYC4uL21vZGVsLWJhc2VzLyR7ZmlsZU5hbWV9LmpzYFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWNvcmRJbXBvcnQgPSBgJHt2ZWxvY2lvdXNQYXRofS9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNgXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2ltcG9ydChcIiR7aGFzTWFueVJlbGF0aW9uRmlsZVBhdGh9XCIpLmRlZmF1bHQ8dHlwZW9mIGltcG9ydChcIiR7c291cmNlTW9kZWxGaWxlUGF0aH1cIikuZGVmYXVsdCwgdHlwZW9mIGltcG9ydChcIiR7cmVjb3JkSW1wb3J0fVwiKS5kZWZhdWx0Pn1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfSgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiJHtoYXNNYW55UmVsYXRpb25GaWxlUGF0aH1cIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiJHtzb3VyY2VNb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0LCB0eXBlb2YgaW1wb3J0KFwiJHtyZWNvcmRJbXBvcnR9XCIpLmRlZmF1bHQ+fSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoXCIke3JlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9XCIpKSB9XFxuYFxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHtBcnJheTxpbXBvcnQoXCIke3JlY29yZEltcG9ydH1cIikuZGVmYXVsdD59XFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7cmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX1Mb2FkZWQoKSB7IHJldHVybiAvKiogQHR5cGUge0FycmF5PGltcG9ydChcIiR7cmVjb3JkSW1wb3J0fVwiKS5kZWZhdWx0Pn0gKi8gKHRoaXMuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKFwiJHtyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfVwiKS5sb2FkZWQoKSkgfVxcbmBcblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQGFic3RyYWN0XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICBsb2FkJHtpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpfSgpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpIH1cXG5gXG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEBhYnN0cmFjdFxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHBhcmFtIHtBcnJheTxpbXBvcnQoXCIke3JlY29yZEltcG9ydH1cIikuZGVmYXVsdD59IG5ld01vZGVsc1xcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHJldHVybnMge3ZvaWR9XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICBzZXQke2luZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSl9KG5ld01vZGVscykgeyB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHtyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpfWApXG4gICAgICAgIH1cblxuICAgICAgICBtZXRob2RzQ291bnQrK1xuICAgICAgfVxuXG4gICAgICBmaWxlQ29udGVudCArPSBcIn1cXG5cIlxuXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShtb2RlbFBhdGgsIGZpbGVDb250ZW50KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi8uLi8uLi8uLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UtY29sdW1uLmpzXCIpLmRlZmF1bHR9IGNvbHVtbiAtIENvbHVtbi5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUganMgZG9jIHR5cGUgZnJvbSBjb2x1bW4uXG4gICAqL1xuICBqc0RvY1R5cGVGcm9tQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IHR5cGUgPSBjb2x1bW4uZ2V0VHlwZSgpXG5cbiAgICBpZiAodHlwZSA9PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiYm9vbGVhblwiXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwianNvblwiKSB7XG4gICAgICByZXR1cm4gXCJSZWNvcmQ8c3RyaW5nLCBhbnk+XCJcbiAgICB9IGVsc2UgaWYgKFtcImJsb2JcIiwgXCJjaGFyXCIsIFwibnZhcmNoYXJcIiwgXCJ2YXJjaGFyXCIsIFwidGV4dFwiLCBcImxvbmd0ZXh0XCIsIFwidXVpZFwiLCBcImNoYXJhY3RlciB2YXJ5aW5nXCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgIH0gZWxzZSBpZiAoW1wiYml0XCIsIFwiYmlnaW50XCIsIFwiZmxvYXRcIiwgXCJpbnRcIiwgXCJpbnRlZ2VyXCIsIFwic21hbGxpbnRcIiwgXCJ0aW55aW50XCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgIH0gZWxzZSBpZiAoW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwidGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lXCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJEYXRlXCJcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb2x1bW4gdHlwZTogJHt0eXBlfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vLi4vLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLWNvbHVtbi5qc1wiKS5kZWZhdWx0fSBjb2x1bW4gLSBDb2x1bW4uXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGpzIGRvYyBzZXR0ZXIgdHlwZSBmcm9tIGNvbHVtbi5cbiAgICovXG4gIGpzRG9jU2V0dGVyVHlwZUZyb21Db2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi5nZXRUeXBlKClcblxuICAgIGlmIChbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJ0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVcIl0uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIHJldHVybiBcIkRhdGUgfCBzdHJpbmdcIlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmpzRG9jVHlwZUZyb21Db2x1bW4oY29sdW1uKVxuICB9XG59XG4iXX0=
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnQtaGFuZGxlcnMvbm9kZS9jbGkvY29tbWFuZHMvZ2VuZXJhdGUvYmFzZS1tb2RlbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0sb0NBQW9DLENBQUE7QUFDNUQsT0FBTyxVQUFVLE1BQU0scUNBQXFDLENBQUE7QUFDNUQsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBRXhDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBQ3RELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRWhELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsYUFBYSxDQUFBO1FBQy9DLE1BQU0sYUFBYSxHQUFHLEdBQUcsYUFBYSxrQkFBa0IsQ0FBQTtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7UUFFbkIsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGdC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QU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sZUFBZSxDQUFBO1FBQ3hCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUNvbW1hbmQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIlxuaW1wb3J0IGZpbGVFeGlzdHMgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3V0aWxzL2ZpbGUtZXhpc3RzLmpzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERiR2VuZXJhdGVNb2RlbCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5pbml0aWFsaXplTW9kZWxzKClcblxuICAgIGNvbnN0IHJvb3REaXJlY3RvcnkgPSB0aGlzLmRpcmVjdG9yeSgpXG4gICAgY29uc3QgbW9kZWxzRGlyID0gYCR7cm9vdERpcmVjdG9yeX0vc3JjL21vZGVsc2BcbiAgICBjb25zdCBiYXNlTW9kZWxzRGlyID0gYCR7cm9vdERpcmVjdG9yeX0vc3JjL21vZGVsLWJhc2VzYFxuICAgIGNvbnN0IG1vZGVsQ2xhc3NlcyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldE1vZGVsQ2xhc3NlcygpXG4gICAgbGV0IGRldk1vZGUgPSBmYWxzZVxuXG4gICAgaWYgKGJhc2VNb2RlbHNEaXIuaW5jbHVkZXMoXCIvc3BlYy9kdW1teS9zcmMvbW9kZWwtYmFzZXNcIikpIHtcbiAgICAgIGRldk1vZGUgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmaWxlRXhpc3RzKGJhc2VNb2RlbHNEaXIpKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihiYXNlTW9kZWxzRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSlcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3NOYW1lIGluIG1vZGVsQ2xhc3Nlcykge1xuICAgICAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxDbGFzc2VzW21vZGVsQ2xhc3NOYW1lXVxuICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSBpbmZsZWN0aW9uLmRhc2hlcml6ZShtb2RlbENsYXNzTmFtZSlcbiAgICAgICAgY29uc3QgbW9kZWxOYW1lQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtb2RlbE5hbWUucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpKVxuICAgICAgICBjb25zdCBtb2RlbEJhc2VGaWxlTmFtZSA9IGAke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKX0uanNgXG4gICAgICAgIGNvbnN0IG1vZGVsUGF0aCA9IGAke2Jhc2VNb2RlbHNEaXJ9LyR7bW9kZWxCYXNlRmlsZU5hbWV9YFxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBjcmVhdGUgc3JjL21vZGVsLWJhc2VzLyR7bW9kZWxCYXNlRmlsZU5hbWV9YClcblxuICAgICAgICBjb25zdCBzb3VyY2VNb2RlbEZ1bGxGaWxlUGF0aCA9IGAke21vZGVsc0Rpcn0vJHttb2RlbEJhc2VGaWxlTmFtZX1gXG4gICAgICAgIGxldCBzb3VyY2VNb2RlbEZpbGVQYXRoXG5cbiAgICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoc291cmNlTW9kZWxGdWxsRmlsZVBhdGgpKSB7XG4gICAgICAgICAgc291cmNlTW9kZWxGaWxlUGF0aCA9IGAuLi9tb2RlbHMvJHttb2RlbEJhc2VGaWxlTmFtZX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc291cmNlTW9kZWxGaWxlUGF0aCA9IFwidmVsb2Npb3VzL2J1aWxkL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIlxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gXCJcIlxuICAgICAgICBsZXQgdmVsb2Npb3VzUGF0aFxuXG4gICAgICAgIGlmIChkZXZNb2RlKSB7XG4gICAgICAgICAgdmVsb2Npb3VzUGF0aCA9IFwiLi4vLi4vLi4vLi4vc3JjXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2ZWxvY2lvdXNQYXRoID0gXCJ2ZWxvY2lvdXMvYnVpbGQvc3JjXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGBpbXBvcnQgRGF0YWJhc2VSZWNvcmQgZnJvbSBcIiR7dmVsb2Npb3VzUGF0aH0vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCJcXG5cXG5gXG5cbiAgICAgICAgY29uc3QgaGFzTWFueVJlbGF0aW9uRmlsZVBhdGggPSBgJHt2ZWxvY2lvdXNQYXRofS9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9oYXMtbWFueS5qc2BcblxuICAgICAgICBmaWxlQ29udGVudCArPSBgZXhwb3J0IGRlZmF1bHQgY2xhc3MgJHttb2RlbE5hbWVDYW1lbGl6ZWR9QmFzZSBleHRlbmRzIERhdGFiYXNlUmVjb3JkIHtcXG5gXG5cbiAgICAgIC8vIC0tLSBnZXRNb2RlbENsYXNzKCkgb3ZlcnJpZGUgKGZpeGVzIHBvbHltb3JwaGljIHR5cGluZyBpbiBKUy9KU0RvYykgLS0tXG4gICAgICBpZiAoYXdhaXQgZmlsZUV4aXN0cyhzb3VyY2VNb2RlbEZ1bGxGaWxlUGF0aCkpIHtcbiAgICAgICAgLy8gTW9kZWwgZmlsZSBleGlzdHMgKGUuZy4gc3JjL21vZGVscy90aWNrZXQuanMpIOKGkiByZXR1cm4gdHlwZW9mIFRpY2tldFxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIke3NvdXJjZU1vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHR9XFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8vIEB0cy1pZ25vcmUgLSBvdmVycmlkZSBuYXJyb3dzIHJldHVybiB0eXBlIGZvciBiZXR0ZXIgSW50ZWxsaVNlbnNlIGluIGdlbmVyYXRlZCBtb2RlbCBiYXNlc1xcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGdldE1vZGVsQ2xhc3MoKSB7IHJldHVybiAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIke3NvdXJjZU1vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHR9ICovICh0aGlzLmNvbnN0cnVjdG9yKSB9XFxuXFxuYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gbW9kZWwgZmlsZSB5ZXQg4oaSIGZhbGwgYmFjayB0byB0eXBlb2YgVGlja2V0QmFzZVxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge3R5cGVvZiAke21vZGVsTmFtZUNhbWVsaXplZH1CYXNlfVxcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvLyBAdHMtaWdub3JlIC0gb3ZlcnJpZGUgbmFycm93cyByZXR1cm4gdHlwZSBmb3IgYmV0dGVyIEludGVsbGlTZW5zZSBpbiBnZW5lcmF0ZWQgbW9kZWwgYmFzZXNcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBnZXRNb2RlbENsYXNzKCkgeyByZXR1cm4gLyoqIEB0eXBlIHt0eXBlb2YgJHttb2RlbE5hbWVDYW1lbGl6ZWR9QmFzZX0gKi8gKHRoaXMuY29uc3RydWN0b3IpIH1cXG5cXG5gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgbW9kZWxDbGFzcy5jb25uZWN0aW9uKCkuZ2V0VGFibGVCeU5hbWUobW9kZWxDbGFzcy50YWJsZU5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZSkgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0YWJsZSBmb3IgbW9kZWwgJyR7bW9kZWxDbGFzcy5uYW1lfSdgKVxuXG4gICAgICBjb25zdCBjb2x1bW5zID0gYXdhaXQgdGFibGUuZ2V0Q29sdW1ucygpXG4gICAgICBsZXQgbWV0aG9kc0NvdW50ID0gMFxuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGNhbWVsaXplZENvbHVtbk5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGNvbHVtbi5nZXROYW1lKCksIHRydWUpXG4gICAgICAgIGNvbnN0IGNhbWVsaXplZENvbHVtbk5hbWVCaWdGaXJzdCA9IGluZmxlY3Rpb24uY2FtZWxpemUoY29sdW1uLmdldE5hbWUoKSlcbiAgICAgICAgY29uc3QganNkb2NUeXBlID0gdGhpcy5qc0RvY1R5cGVGcm9tQ29sdW1uKGNvbHVtbilcblxuICAgICAgICBpZiAobWV0aG9kc0NvdW50ID4gMCkge1xuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc2RvY1R5cGUpIHtcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7JHtqc2RvY1R5cGV9JHtjb2x1bW4uZ2V0TnVsbCgpID8gXCIgfCBudWxsXCIgOiBcIlwifX1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIH1cblxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAke2NhbWVsaXplZENvbHVtbk5hbWV9KCkgeyByZXR1cm4gdGhpcy5yZWFkQXR0cmlidXRlKFwiJHtjYW1lbGl6ZWRDb2x1bW5OYW1lfVwiKSB9XFxuXFxuYFxuXG4gICAgICAgIGNvbnN0IHNldHRlckpzZG9jVHlwZSA9IHRoaXMuanNEb2NTZXR0ZXJUeXBlRnJvbUNvbHVtbihjb2x1bW4pXG5cbiAgICAgICAgaWYgKHNldHRlckpzZG9jVHlwZSkge1xuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBwYXJhbSB7JHtzZXR0ZXJKc2RvY1R5cGV9JHtjb2x1bW4uZ2V0TnVsbCgpID8gXCIgfCBudWxsXCIgOiBcIlwifX0gbmV3VmFsdWVcXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEByZXR1cm5zIHt2b2lkfVxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIH1cblxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBzZXQke2NhbWVsaXplZENvbHVtbk5hbWVCaWdGaXJzdH0obmV3VmFsdWUpIHsgcmV0dXJuIHRoaXMuX3NldENvbHVtbkF0dHJpYnV0ZShcIiR7Y2FtZWxpemVkQ29sdW1uTmFtZX1cIiwgbmV3VmFsdWUpIH1cXG5cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgaGFzJHtjYW1lbGl6ZWRDb2x1bW5OYW1lQmlnRmlyc3R9KCkgeyByZXR1cm4gdGhpcy5faGFzQXR0cmlidXRlKHRoaXMuJHtjYW1lbGl6ZWRDb2x1bW5OYW1lfSgpKSB9XFxuYFxuXG4gICAgICAgIG1ldGhvZHNDb3VudCsrXG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlbENsYXNzLl90cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgVHJhbnNsYXRpb25DbGFzcyA9IG1vZGVsQ2xhc3MuZ2V0VHJhbnNsYXRpb25DbGFzcygpXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uQ29sdW1ucyA9IFRyYW5zbGF0aW9uQ2xhc3MuZ2V0Q29sdW1ucygpXG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIG1vZGVsQ2xhc3MuX3RyYW5zbGF0aW9ucykge1xuICAgICAgICAgIGNvbnN0IG5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG5hbWUpXG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdHJhbnNsYXRpb25Db2x1bW5zLmZpbmQoKHRyYW5zbGF0aW9uQ29sdW1uKSA9PiB0cmFuc2xhdGlvbkNvbHVtbi5nZXROYW1lKCkgPT09IG5hbWVVbmRlcnNjb3JlKVxuICAgICAgICAgIGxldCB0cmFuc2xhdGlvbkpzZG9jVHlwZVxuXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgdHJhbnNsYXRpb25Kc2RvY1R5cGUgPSB0aGlzLmpzRG9jVHlwZUZyb21Db2x1bW4oY29sdW1uKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0cmFuc2xhdGlvbkpzZG9jVHlwZSAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGBcXG5gXG4gICAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHske3RyYW5zbGF0aW9uSnNkb2NUeXBlfSR7Y29sdW1uLmdldE51bGwoKSA/IFwiIHwgbnVsbFwiIDogXCJcIn19XFxuYFxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtuYW1lfSgpIHsgcmV0dXJuIHRoaXMuX2dldFRyYW5zbGF0ZWRBdHRyaWJ1dGVXaXRoRmFsbGJhY2soXCIke25hbWV9XCIsIHRoaXMuX2dldENvbmZpZ3VyYXRpb24oKS5nZXRMb2NhbGUoKSkgPz8gbnVsbCB9XFxuYFxuICAgICAgICAgIG1ldGhvZHNDb3VudCsrXG5cbiAgICAgICAgICBjb25zdCBoYXNOYW1lID0gYGhhcyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lKX1gXG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgXFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBhYnN0cmFjdFxcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtoYXNOYW1lfSgpIHsgdGhyb3cgbmV3IEVycm9yKFwiJHtoYXNOYW1lfSBub3QgaW1wbGVtZW50ZWRcIikgfVxcbmBcbiAgICAgICAgICBtZXRob2RzQ291bnQrK1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsb2NhbGUgb2YgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0TG9jYWxlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGVNZXRob2ROYW1lID0gYCR7bmFtZX0ke2luZmxlY3Rpb24uY2FtZWxpemUobG9jYWxlKX1gXG5cbiAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbkpzZG9jVHlwZSAmJiBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYFxcbmBcbiAgICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHske3RyYW5zbGF0aW9uSnNkb2NUeXBlfSR7Y29sdW1uLmdldE51bGwoKSA/IFwiIHwgbnVsbFwiIDogXCJcIn19XFxuYFxuICAgICAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtsb2NhbGVNZXRob2ROYW1lfSgpIHsgcmV0dXJuIHRoaXMuX2dldFRyYW5zbGF0ZWRBdHRyaWJ1dGVXaXRoRmFsbGJhY2soXCIke25hbWV9XCIsIFwiJHtsb2NhbGV9XCIpID8/IG51bGwgfVxcbmBcbiAgICAgICAgICAgIG1ldGhvZHNDb3VudCsrXG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsZUhhc05hbWUgPSBgaGFzJHtpbmZsZWN0aW9uLmNhbWVsaXplKGxvY2FsZU1ldGhvZE5hbWUpfWBcblxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYFxcbmBcbiAgICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQGFic3RyYWN0XFxuYFxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2Jvb2xlYW59XFxuYFxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAke2xvY2FsZUhhc05hbWV9KCkgeyB0aHJvdyBuZXcgRXJyb3IoXCIke2xvY2FsZUhhc05hbWV9IG5vdCBpbXBsZW1lbnRlZFwiKSB9XFxuYFxuICAgICAgICAgICAgbWV0aG9kc0NvdW50KytcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXAgb2YgbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzKCkpIHtcbiAgICAgICAgbGV0IGJhc2VGaWxlUGF0aCwgYmFzZUZ1bGxGaWxlUGF0aCwgZmlsZU5hbWUsIGZ1bGxGaWxlUGF0aFxuXG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgICAgIGZpbGVOYW1lID0gXCJ2ZWxvY2lvdXMvYnVpbGQvc3JjL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0nIG9uICcke21vZGVsQ2xhc3MubmFtZX0nIGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuXG4gICAgICAgICAgZmlsZU5hbWUgPSBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGFyZ2V0TW9kZWxDbGFzcy5uYW1lKSlcbiAgICAgICAgICBmdWxsRmlsZVBhdGggPSBgc3JjL21vZGVscy8ke2ZpbGVOYW1lfS5qc2BcbiAgICAgICAgICBiYXNlRmlsZVBhdGggPSBgLi4vbW9kZWwtYmFzZXMvJHtmaWxlTmFtZX0uanNgXG4gICAgICAgICAgYmFzZUZ1bGxGaWxlUGF0aCA9IGBzcmMvbW9kZWwtYmFzZXMvJHtmaWxlTmFtZX0uanNgXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kc0NvdW50ID4gMCkge1xuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpID09IFwiYmVsb25nc1RvXCIgfHwgcmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImhhc09uZVwiKSB7XG4gICAgICAgICAgbGV0IG1vZGVsRmlsZVBhdGhcblxuICAgICAgICAgIGlmIChmdWxsRmlsZVBhdGggJiYgYXdhaXQgZmlsZUV4aXN0cyhmdWxsRmlsZVBhdGgpKSB7XG4gICAgICAgICAgICBtb2RlbEZpbGVQYXRoID0gYC4uL21vZGVscy8ke2ZpbGVOYW1lfS5qc2BcbiAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VGdWxsRmlsZVBhdGggJiYgYXdhaXQgZmlsZUV4aXN0cyhiYXNlRnVsbEZpbGVQYXRoKSkge1xuICAgICAgICAgICAgbW9kZWxGaWxlUGF0aCA9IGJhc2VGaWxlUGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbEZpbGVQYXRoID0gXCJ2ZWxvY2lvdXMvYnVpbGQvc3JjL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2ltcG9ydChcIiR7bW9kZWxGaWxlUGF0aH1cIikuZGVmYXVsdH1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfSgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiJHttb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0fSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoXCIke3JlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9XCIpLmxvYWRlZCgpKSB9XFxuYFxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAYWJzdHJhY3RcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthdHRyaWJ1dGVzXVxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2ltcG9ydChcIiR7bW9kZWxGaWxlUGF0aH1cIikuZGVmYXVsdH1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgYnVpbGQke2luZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSl9KGF0dHJpYnV0ZXMpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xcbmBcblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQGFic3RyYWN0XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICBsb2FkJHtpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpfSgpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpIH1cXG5gXG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEBhYnN0cmFjdFxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHBhcmFtIHtpbXBvcnQoXCIke21vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHR9IG5ld01vZGVsXFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHt2b2lkfVxcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICBzZXQke2luZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSl9KG5ld01vZGVsKSB7IHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcXG5gXG4gICAgICAgIH0gZWxzZSBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImhhc01hbnlcIikge1xuICAgICAgICAgIGxldCByZWNvcmRJbXBvcnRcblxuICAgICAgICAgIGlmIChmdWxsRmlsZVBhdGggJiYgYXdhaXQgZmlsZUV4aXN0cyhmdWxsRmlsZVBhdGgpKSB7XG4gICAgICAgICAgICByZWNvcmRJbXBvcnQgPSBgLi4vbW9kZWxzLyR7ZmlsZU5hbWV9LmpzYFxuICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZUZ1bGxGaWxlUGF0aCAmJiBhd2FpdCBmaWxlRXhpc3RzKGJhc2VGdWxsRmlsZVBhdGgpKSB7XG4gICAgICAgICAgICByZWNvcmRJbXBvcnQgPSBgLi4vbW9kZWwtYmFzZXMvJHtmaWxlTmFtZX0uanNgXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY29yZEltcG9ydCA9IGAke3ZlbG9jaW91c1BhdGh9L2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc2BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiJHtoYXNNYW55UmVsYXRpb25GaWxlUGF0aH1cIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiJHtzb3VyY2VNb2RlbEZpbGVQYXRofVwiKS5kZWZhdWx0LCB0eXBlb2YgaW1wb3J0KFwiJHtyZWNvcmRJbXBvcnR9XCIpLmRlZmF1bHQ+fVxcbmBcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAke3JlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9KCkgeyByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIke2hhc01hbnlSZWxhdGlvbkZpbGVQYXRofVwiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIke3NvdXJjZU1vZGVsRmlsZVBhdGh9XCIpLmRlZmF1bHQsIHR5cGVvZiBpbXBvcnQoXCIke3JlY29yZEltcG9ydH1cIikuZGVmYXVsdD59ICovICh0aGlzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShcIiR7cmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX1cIikpIH1cXG5gXG5cbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge0FycmF5PGltcG9ydChcIiR7cmVjb3JkSW1wb3J0fVwiKS5kZWZhdWx0Pn1cXG5gXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfUxvYWRlZCgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7QXJyYXk8aW1wb3J0KFwiJHtyZWNvcmRJbXBvcnR9XCIpLmRlZmF1bHQ+fSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoXCIke3JlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9XCIpLmxvYWRlZCgpKSB9XFxuYFxuXG4gICAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAYWJzdHJhY3RcXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGxvYWQke2luZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSl9KCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIikgfVxcbmBcblxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQGFic3RyYWN0XFxuXCJcbiAgICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcGFyYW0ge0FycmF5PGltcG9ydChcIiR7cmVjb3JkSW1wb3J0fVwiKS5kZWZhdWx0Pn0gbmV3TW9kZWxzXFxuYFxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcmV0dXJucyB7dm9pZH1cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICAgIGZpbGVDb250ZW50ICs9IGAgIHNldCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShyZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpKX0obmV3TW9kZWxzKSB7IHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcXG5gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbGF0aW9uc2hpcCB0eXBlOiAke3JlbGF0aW9uc2hpcC5nZXRUeXBlKCl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGhvZHNDb3VudCsrXG4gICAgICB9XG5cbiAgICAgIGZpbGVDb250ZW50ICs9IFwifVxcblwiXG5cbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKG1vZGVsUGF0aCwgZmlsZUNvbnRlbnQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdH0gY29sdW1uIC0gQ29sdW1uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBqcyBkb2MgdHlwZSBmcm9tIGNvbHVtbi5cbiAgICovXG4gIGpzRG9jVHlwZUZyb21Db2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi5nZXRUeXBlKClcblxuICAgIGlmICh0eXBlID09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJqc29uXCIpIHtcbiAgICAgIHJldHVybiBcIlJlY29yZDxzdHJpbmcsIGFueT5cIlxuICAgIH0gZWxzZSBpZiAoW1wiYmxvYlwiLCBcImNoYXJcIiwgXCJudmFyY2hhclwiLCBcInZhcmNoYXJcIiwgXCJ0ZXh0XCIsIFwibG9uZ3RleHRcIiwgXCJ1dWlkXCIsIFwiY2hhcmFjdGVyIHZhcnlpbmdcIl0uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgfSBlbHNlIGlmIChbXCJiaXRcIiwgXCJiaWdpbnRcIiwgXCJkZWNpbWFsXCIsIFwiZmxvYXRcIiwgXCJpbnRcIiwgXCJpbnRlZ2VyXCIsIFwibnVtZXJpY1wiLCBcInNtYWxsaW50XCIsIFwidGlueWludFwiXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCJcbiAgICB9IGVsc2UgaWYgKFtcImRhdGVcIiwgXCJkYXRldGltZVwiLCBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIFwiRGF0ZVwiXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gY29sdW1uIHR5cGU6ICR7dHlwZX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdH0gY29sdW1uIC0gQ29sdW1uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBqcyBkb2Mgc2V0dGVyIHR5cGUgZnJvbSBjb2x1bW4uXG4gICAqL1xuICBqc0RvY1NldHRlclR5cGVGcm9tQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IHR5cGUgPSBjb2x1bW4uZ2V0VHlwZSgpXG5cbiAgICBpZiAoW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwidGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lXCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJEYXRlIHwgc3RyaW5nXCJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qc0RvY1R5cGVGcm9tQ29sdW1uKGNvbHVtbilcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.267",
6
+ "version": "1.0.270",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [