tedious 16.5.0 → 16.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/lib/connection.js +4 -4
  2. package/lib/connection.js.map +1 -1
  3. package/lib/data-types/date.js +2 -2
  4. package/lib/data-types/date.js.map +1 -1
  5. package/lib/message-io.js +2 -2
  6. package/lib/message-io.js.map +1 -1
  7. package/lib/metadata-parser.js +361 -241
  8. package/lib/metadata-parser.js.map +1 -1
  9. package/lib/request.js +3 -3
  10. package/lib/request.js.map +1 -1
  11. package/lib/token/colmetadata-token-parser.js +103 -74
  12. package/lib/token/colmetadata-token-parser.js.map +1 -1
  13. package/lib/token/done-token-parser.js +52 -40
  14. package/lib/token/done-token-parser.js.map +1 -1
  15. package/lib/token/env-change-token-parser.js +110 -81
  16. package/lib/token/env-change-token-parser.js.map +1 -1
  17. package/lib/token/feature-ext-ack-parser.js +30 -22
  18. package/lib/token/feature-ext-ack-parser.js.map +1 -1
  19. package/lib/token/fedauth-info-parser.js +47 -30
  20. package/lib/token/fedauth-info-parser.js.map +1 -1
  21. package/lib/token/helpers.js +205 -0
  22. package/lib/token/helpers.js.map +1 -0
  23. package/lib/token/infoerror-token-parser.js +69 -36
  24. package/lib/token/infoerror-token-parser.js.map +1 -1
  25. package/lib/token/loginack-token-parser.js +59 -31
  26. package/lib/token/loginack-token-parser.js.map +1 -1
  27. package/lib/token/nbcrow-token-parser.js +60 -23
  28. package/lib/token/nbcrow-token-parser.js.map +1 -1
  29. package/lib/token/order-token-parser.js +22 -20
  30. package/lib/token/order-token-parser.js.map +1 -1
  31. package/lib/token/returnstatus-token-parser.js +9 -5
  32. package/lib/token/returnstatus-token-parser.js.map +1 -1
  33. package/lib/token/returnvalue-token-parser.js +79 -22
  34. package/lib/token/returnvalue-token-parser.js.map +1 -1
  35. package/lib/token/row-token-parser.js +50 -20
  36. package/lib/token/row-token-parser.js.map +1 -1
  37. package/lib/token/sspi-token-parser.js +14 -5
  38. package/lib/token/sspi-token-parser.js.map +1 -1
  39. package/lib/token/stream-parser.js +292 -324
  40. package/lib/token/stream-parser.js.map +1 -1
  41. package/lib/token/token.js +1 -1
  42. package/lib/token/token.js.map +1 -1
  43. package/lib/value-parser.js +655 -438
  44. package/lib/value-parser.js.map +1 -1
  45. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-parser.js","names":["_collation","require","_dataType","_sprintfJs","readCollation","parser","callback","readBuffer","collationData","Collation","fromBuffer","readSchema","readUInt8","schemaPresent","readBVarChar","dbname","owningSchema","readUsVarChar","xmlSchemaCollection","undefined","readUDTInfo","readUInt16LE","maxByteSize","typeName","assemblyName","metadataParse","options","tdsVersion","readUInt32LE","call","userType","flags","typeNumber","type","TYPE","Error","sprintf","name","collation","precision","scale","dataLength","schema","udtInfo","_default","exports","default","module"],"sources":["../src/metadata-parser.ts"],"sourcesContent":["import { Collation } from './collation';\nimport Parser, { type ParserOptions } from './token/stream-parser';\nimport { TYPE, type DataType } from './data-type';\nimport { type CryptoMetadata } from './always-encrypted/types';\n\nimport { sprintf } from 'sprintf-js';\n\ninterface XmlSchema {\n dbname: string;\n owningSchema: string;\n xmlSchemaCollection: string;\n}\n\ninterface UdtInfo {\n maxByteSize: number;\n dbname: string;\n owningSchema: string;\n typeName: string;\n assemblyName: string;\n}\n\nexport type BaseMetadata = {\n userType: number;\n\n flags: number;\n /**\n * The column's type, such as VarChar, Int or Binary.\n */\n type: DataType;\n\n collation: Collation | undefined;\n /**\n * The precision. Only applicable to numeric and decimal.\n */\n precision: number | undefined;\n\n /**\n * The scale. Only applicable to numeric, decimal, time, datetime2 and datetimeoffset.\n */\n scale: number | undefined;\n\n /**\n * The length, for char, varchar, nvarchar and varbinary.\n */\n dataLength: number | undefined;\n\n schema: XmlSchema | undefined;\n\n udtInfo: UdtInfo | undefined;\n}\n\nexport type Metadata = {\n cryptoMetadata?: CryptoMetadata;\n} & BaseMetadata;\n\n\nfunction readCollation(parser: Parser, callback: (collation: Collation) => void) {\n // s2.2.5.1.2\n parser.readBuffer(5, (collationData) => {\n callback(Collation.fromBuffer(collationData));\n });\n}\n\nfunction readSchema(parser: Parser, callback: (schema: XmlSchema | undefined) => void) {\n // s2.2.5.5.3\n parser.readUInt8((schemaPresent) => {\n if (schemaPresent === 0x01) {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readUsVarChar((xmlSchemaCollection) => {\n callback({\n dbname: dbname,\n owningSchema: owningSchema,\n xmlSchemaCollection: xmlSchemaCollection\n });\n });\n });\n });\n } else {\n callback(undefined);\n }\n });\n}\n\nfunction readUDTInfo(parser: Parser, callback: (udtInfo: UdtInfo | undefined) => void) {\n parser.readUInt16LE((maxByteSize) => {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readBVarChar((typeName) => {\n parser.readUsVarChar((assemblyName) => {\n callback({\n maxByteSize: maxByteSize,\n dbname: dbname,\n owningSchema: owningSchema,\n typeName: typeName,\n assemblyName: assemblyName\n });\n });\n });\n });\n });\n });\n}\n\nfunction metadataParse(parser: Parser, options: ParserOptions, callback: (metadata: Metadata) => void) {\n (options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, (userType) => {\n parser.readUInt16LE((flags) => {\n parser.readUInt8((typeNumber) => {\n const type: DataType = TYPE[typeNumber];\n\n if (!type) {\n throw new Error(sprintf('Unrecognised data type 0x%02X', typeNumber));\n }\n\n switch (type.name) {\n case 'Null':\n case 'TinyInt':\n case 'SmallInt':\n case 'Int':\n case 'BigInt':\n case 'Real':\n case 'Float':\n case 'SmallMoney':\n case 'Money':\n case 'Bit':\n case 'SmallDateTime':\n case 'DateTime':\n case 'Date':\n return callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n\n case 'IntN':\n case 'FloatN':\n case 'MoneyN':\n case 'BitN':\n case 'UniqueIdentifier':\n case 'DateTimeN':\n return parser.readUInt8((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Variant':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'VarChar':\n case 'Char':\n case 'NVarChar':\n case 'NChar':\n return parser.readUInt16LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'Text':\n case 'NText':\n return parser.readUInt32LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'VarBinary':\n case 'Binary':\n return parser.readUInt16LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Image':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Xml':\n return readSchema(parser, (schema) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: schema,\n udtInfo: undefined\n });\n });\n\n case 'Time':\n case 'DateTime2':\n case 'DateTimeOffset':\n return parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: scale,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'NumericN':\n case 'DecimalN':\n return parser.readUInt8((dataLength) => {\n parser.readUInt8((precision) => {\n parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: precision,\n scale: scale,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n });\n\n case 'UDT':\n return readUDTInfo(parser, (udtInfo) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: udtInfo\n });\n });\n\n default:\n throw new Error(sprintf('Unrecognised type %s', type.name));\n }\n });\n });\n });\n}\n\nexport default metadataParse;\nexport { readCollation };\n\nmodule.exports = metadataParse;\nmodule.exports.readCollation = readCollation;\n"],"mappings":"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"}
1
+ {"version":3,"file":"metadata-parser.js","names":["_collation","require","_dataType","_sprintfJs","_helpers","readCollation","buf","offset","length","NotEnoughDataError","collation","Collation","fromBuffer","slice","Result","readSchema","schemaPresent","value","readUInt8","undefined","dbname","readBVarChar","owningSchema","xmlSchemaCollection","readUsVarChar","readUDTInfo","maxByteSize","readUInt16LE","typeName","assemblyName","readMetadata","options","userType","tdsVersion","readUInt32LE","flags","typeNumber","type","TYPE","Error","sprintf","name","precision","scale","dataLength","schema","udtInfo","metadataParse","parser","callback","result","buffer","position","err","waitForChunk","_default","exports","default","module"],"sources":["../src/metadata-parser.ts"],"sourcesContent":["import { Collation } from './collation';\nimport Parser, { type ParserOptions } from './token/stream-parser';\nimport { TYPE, type DataType } from './data-type';\nimport { type CryptoMetadata } from './always-encrypted/types';\n\nimport { sprintf } from 'sprintf-js';\n\nimport { Result, NotEnoughDataError, readUInt8, readBVarChar, readUsVarChar, readUInt16LE, readUInt32LE } from './token/helpers';\n\ninterface XmlSchema {\n dbname: string;\n owningSchema: string;\n xmlSchemaCollection: string;\n}\n\ninterface UdtInfo {\n maxByteSize: number;\n dbname: string;\n owningSchema: string;\n typeName: string;\n assemblyName: string;\n}\n\nexport type BaseMetadata = {\n userType: number;\n\n flags: number;\n /**\n * The column's type, such as VarChar, Int or Binary.\n */\n type: DataType;\n\n collation: Collation | undefined;\n /**\n * The precision. Only applicable to numeric and decimal.\n */\n precision: number | undefined;\n\n /**\n * The scale. Only applicable to numeric, decimal, time, datetime2 and datetimeoffset.\n */\n scale: number | undefined;\n\n /**\n * The length, for char, varchar, nvarchar and varbinary.\n */\n dataLength: number | undefined;\n\n schema: XmlSchema | undefined;\n\n udtInfo: UdtInfo | undefined;\n}\n\nexport type Metadata = {\n cryptoMetadata?: CryptoMetadata;\n} & BaseMetadata;\n\nfunction readCollation(buf: Buffer, offset: number): Result<Collation> {\n offset = +offset;\n\n if (buf.length < offset + 5) {\n throw new NotEnoughDataError(offset + 5);\n }\n\n const collation = Collation.fromBuffer(buf.slice(offset, offset + 5));\n return new Result(collation, offset + 5);\n}\n\nfunction readSchema(buf: Buffer, offset: number): Result<XmlSchema | undefined> {\n offset = +offset;\n\n let schemaPresent;\n ({ offset, value: schemaPresent } = readUInt8(buf, offset));\n\n if (schemaPresent !== 0x01) {\n return new Result(undefined, offset);\n }\n\n let dbname;\n ({ offset, value: dbname } = readBVarChar(buf, offset));\n\n let owningSchema;\n ({ offset, value: owningSchema } = readBVarChar(buf, offset));\n\n let xmlSchemaCollection;\n ({ offset, value: xmlSchemaCollection } = readUsVarChar(buf, offset));\n\n return new Result({ dbname, owningSchema, xmlSchemaCollection }, offset);\n}\n\nfunction readUDTInfo(buf: Buffer, offset: number): Result<UdtInfo> {\n let maxByteSize;\n ({ offset, value: maxByteSize } = readUInt16LE(buf, offset));\n\n let dbname;\n ({ offset, value: dbname } = readBVarChar(buf, offset));\n\n let owningSchema;\n ({ offset, value: owningSchema } = readBVarChar(buf, offset));\n\n let typeName;\n ({ offset, value: typeName } = readBVarChar(buf, offset));\n\n let assemblyName;\n ({ offset, value: assemblyName } = readUsVarChar(buf, offset));\n\n return new Result({\n maxByteSize: maxByteSize,\n dbname: dbname,\n owningSchema: owningSchema,\n typeName: typeName,\n assemblyName: assemblyName\n }, offset);\n}\n\nfunction readMetadata(buf: Buffer, offset: number, options: ParserOptions): Result<Metadata> {\n let userType;\n ({ offset, value: userType } = (options.tdsVersion < '7_2' ? readUInt16LE : readUInt32LE)(buf, offset));\n\n let flags;\n ({ offset, value: flags } = readUInt16LE(buf, offset));\n\n let typeNumber;\n ({ offset, value: typeNumber } = readUInt8(buf, offset));\n\n const type: DataType = TYPE[typeNumber];\n if (!type) {\n throw new Error(sprintf('Unrecognised data type 0x%02X', typeNumber));\n }\n\n switch (type.name) {\n case 'Null':\n case 'TinyInt':\n case 'SmallInt':\n case 'Int':\n case 'BigInt':\n case 'Real':\n case 'Float':\n case 'SmallMoney':\n case 'Money':\n case 'Bit':\n case 'SmallDateTime':\n case 'DateTime':\n case 'Date':\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n\n case 'IntN':\n case 'FloatN':\n case 'MoneyN':\n case 'BitN':\n case 'UniqueIdentifier':\n case 'DateTimeN': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Variant': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'VarChar':\n case 'Char':\n case 'NVarChar':\n case 'NChar': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt16LE(buf, offset));\n\n let collation;\n ({ offset, value: collation } = readCollation(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Text':\n case 'NText': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n let collation;\n ({ offset, value: collation } = readCollation(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'VarBinary':\n case 'Binary': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt16LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Image': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Xml': {\n let schema;\n ({ offset, value: schema } = readSchema(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: schema,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Time':\n case 'DateTime2':\n case 'DateTimeOffset': {\n let scale;\n ({ offset, value: scale } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: scale,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'NumericN':\n case 'DecimalN': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt8(buf, offset));\n\n let precision;\n ({ offset, value: precision } = readUInt8(buf, offset));\n\n let scale;\n ({ offset, value: scale } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: precision,\n scale: scale,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'UDT': {\n let udtInfo;\n ({ offset, value: udtInfo } = readUDTInfo(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: udtInfo\n }, offset);\n }\n\n default:\n throw new Error(sprintf('Unrecognised type %s', type.name));\n }\n}\n\nfunction metadataParse(parser: Parser, options: ParserOptions, callback: (metadata: Metadata) => void) {\n (async () => {\n while (true) {\n let result;\n try {\n result = readMetadata(parser.buffer, parser.position, options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n await parser.waitForChunk();\n continue;\n }\n\n throw err;\n }\n\n parser.position = result.offset;\n return callback(result.value);\n }\n })();\n}\n\nexport default metadataParse;\nexport { readCollation, readMetadata };\n\nmodule.exports = metadataParse;\nmodule.exports.readCollation = readCollation;\nmodule.exports.readMetadata = readMetadata;\n"],"mappings":"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"}
package/lib/request.js CHANGED
@@ -89,7 +89,7 @@ class Request extends _events.EventEmitter {
89
89
 
90
90
  /**
91
91
  * This event, describing result set columns, will be emitted before row
92
- * events are emitted. This event may be emited multiple times when more
92
+ * events are emitted. This event may be emitted multiple times when more
93
93
  * than one recordset is produced by the statement.
94
94
  *
95
95
  * An array like object, where the columns can be accessed either by index
@@ -114,7 +114,7 @@ class Request extends _events.EventEmitter {
114
114
  *
115
115
  * This token is used to indicate the completion of a SQL statement.
116
116
  * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.
117
- * An `done` event is emited for each SQL statement in the SQL batch except variable declarations.
117
+ * An `done` event is emitted for each SQL statement in the SQL batch except variable declarations.
118
118
  * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.
119
119
  *
120
120
  * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.
@@ -383,4 +383,4 @@ class Request extends _events.EventEmitter {
383
383
  var _default = Request;
384
384
  exports.default = _default;
385
385
  module.exports = Request;
386
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInZhbGlkYXRlIiwiUmVxdWVzdEVycm9yIiwibWVzc2FnZSIsInBhdXNlIiwicmVzdW1lIiwiY2FuY2VsIiwic2V0VGltZW91dCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgdHlwZSBQYXJhbWV0ZXIsIHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJlZCwgYW4gZXJyb3Igb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICogICBUaGUgbnVtYmVyIG9mIHJvd3MgZW1pdHRlZCBhcyByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcm93c1xuICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbl1dIGlzIGB0cnVlYC5cbiAgICovXG4gIC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIHR5cGUgdGhlIGByb3dzYCBwYXJhbWV0ZXIgaGVyZS5cbiAgKGVycm9yOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlck9wdGlvbnMge1xuICBvdXRwdXQ/OiBib29sZWFuO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIHN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nPzogU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc7XG59XG5cbi8qKlxuICogYGBganNcbiAqIGNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgndGVkaW91cycpO1xuICogY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KFwic2VsZWN0IDQyLCAnaGVsbG8gd29ybGQnXCIsIChlcnIsIHJvd0NvdW50KSB7XG4gKiAgIC8vIFJlcXVlc3QgY29tcGxldGlvbiBjYWxsYmFjay4uLlxuICogfSk7XG4gKiBjb25uZWN0aW9uLmV4ZWNTcWwocmVxdWVzdCk7XG4gKiBgYGBcbiAqL1xuY2xhc3MgUmVxdWVzdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcGFyYW1ldGVyc0J5TmFtZTogeyBba2V5OiBzdHJpbmddOiBQYXJhbWV0ZXIgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHByZXBhcmluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcGF1c2VkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdXNlckNhbGxiYWNrOiBDb21wbGV0aW9uQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBoYW5kbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd3M/OiBBcnJheTxhbnk+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcnN0PzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuXG5cbiAgZGVjbGFyZSBzaG91bGRIb25vckFFPzogYm9vbGVhbjtcbiAgZGVjbGFyZSBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc7XG4gIGRlY2xhcmUgY3J5cHRvTWV0YWRhdGFMb2FkZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQsIGRlc2NyaWJpbmcgcmVzdWx0IHNldCBjb2x1bW5zLCB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIHJvd1xuICAgKiBldmVudHMgYXJlIGVtaXR0ZWQuIFRoaXMgZXZlbnQgbWF5IGJlIGVtaXRlZCBtdWx0aXBsZSB0aW1lcyB3aGVuIG1vcmVcbiAgICogdGhhbiBvbmUgcmVjb3Jkc2V0IGlzIHByb2R1Y2VkIGJ5IHRoZSBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEFuIGFycmF5IGxpa2Ugb2JqZWN0LCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgZWl0aGVyIGJ5IGluZGV4XG4gICAqIG9yIG5hbWUuIENvbHVtbnMgd2l0aCBhIG5hbWUgdGhhdCBpcyBhbiBpbnRlZ2VyIGFyZSBub3QgYWNjZXNzaWJsZSBieSBuYW1lLFxuICAgKiBhcyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbiBhcnJheSBpbmRleC5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29sdW1uTWV0YWRhdGEnLFxuICAgIGxpc3RlbmVyOlxuICAgIChjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdIHwgeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9KSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJlcGFyZWQgYW5kIGNhbiBiZSB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG8gZXhlY3V0ZSBhbmQgdW5wcmVwYXJlLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdwcmVwYXJlZCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBlbmNvdW50ZXJlZCBhbiBlcnJvciBhbmQgaGFzIG5vdCBiZWVuIHByZXBhcmVkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlcnJvcicsIGxpc3RlbmVyOiAoZXJyOiBFcnJvcikgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogQSByb3cgcmVzdWx0aW5nIGZyb20gZXhlY3V0aW9uIG9mIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdyb3cnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvciBvYmplY3QgKGRlcGVuZHMgb24gW1tDb25uZWN0aW9uT3B0aW9ucy51c2VDb2x1bW5OYW1lc11dKSwgd2hlcmUgdGhlIGNvbHVtbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluZGV4L25hbWUuXG4gICAgICAgKiBFYWNoIGNvbHVtbiBoYXMgdHdvIHByb3BlcnRpZXMsIGBtZXRhZGF0YWAgYW5kIGB2YWx1ZWDvvJpcbiAgICAgICAqXG4gICAgICAgKiAqIGBtZXRhZGF0YWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFkYXRhYCBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiAqIGB2YWx1ZWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgY29sdW1uJ3MgdmFsdWUuIEl0IHdpbGwgYmUgYG51bGxgIGZvciBhIGBOVUxMYC5cbiAgICAgICAqICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlbiB0aGlzIHdpbGwgYmUgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcy5cbiAgICAgICAqL1xuICAgICAgKGNvbHVtbnM6IGFueSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIHRva2VuIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGNvbXBsZXRpb24gb2YgYSBTUUwgc3RhdGVtZW50LlxuICAgKiBBcyBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyBjYW4gYmUgc2VudCB0byB0aGUgc2VydmVyIGluIGEgc2luZ2xlIFNRTCBiYXRjaCwgbXVsdGlwbGUgYGRvbmVgIGNhbiBiZSBnZW5lcmF0ZWQuXG4gICAqIEFuIGBkb25lYCBldmVudCBpcyBlbWl0ZWQgZm9yIGVhY2ggU1FMIHN0YXRlbWVudCBpbiB0aGUgU1FMIGJhdGNoIGV4Y2VwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAqIEZvciBleGVjdXRpb24gb2YgU1FMIHN0YXRlbWVudHMgd2l0aGluIHN0b3JlZCBwcm9jZWR1cmVzLCBgZG9uZVByb2NgIGFuZCBgZG9uZUluUHJvY2AgZXZlbnRzIGFyZSB1c2VkIGluIHBsYWNlIG9mIGBkb25lYC5cbiAgICpcbiAgICogSWYgeW91IGFyZSB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dIHRoZW4gU1FMIHNlcnZlciBtYXkgdHJlYXQgdGhlIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgYXMgYSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKiBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBtYXkgYmUgZW1pdHRlZCBpbnN0ZWFkLiBZb3UgbXVzdCBoYW5kbGUgYm90aCBldmVudHMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBgcmVxdWVzdC5vbignZG9uZUluUHJvYycsIGZ1bmN0aW9uIChyb3dDb3VudCwgbW9yZSwgcm93cykgeyB9KTtgXG4gICAqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBTUUwgc3RhdGVtZW50IHdpdGhpbiBhIHN0b3JlZCBwcm9jZWR1cmUuIEFsbCByb3dzIGZyb20gYSBzdGF0ZW1lbnRcbiAgICogaW4gYSBzdG9yZWQgcHJvY2VkdXJlIGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIGV2ZW50IG1heSBhbHNvIG9jY3VyIHdoZW4gZXhlY3V0aW5nIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgdXNpbmcgW1tleGVjU3FsXV0uXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ2RvbmVJblByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBzdG9yZWQgcHJvY2VkdXJlLiBUaGlzIGlzIGFsc28gZ2VuZXJhdGVkIGZvciBzdG9yZWQgcHJvY2VkdXJlc1xuICAgKiBleGVjdXRlZCB0aHJvdWdoIFNRTCBzdGF0ZW1lbnRzLlxcXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZVByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IG51bWJlciwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGZvciBhbiBvdXRwdXQgcGFyYW1ldGVyICh0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aXRoIFtbYWRkT3V0cHV0UGFyYW1ldGVyXV0pLlxuICAgKiBTZWUgYWxzbyBgVXNpbmcgUGFyYW1ldGVyc2AuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JldHVyblZhbHVlJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHBhcmFtZXRlck5hbWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiAoRG9lcyBub3Qgc3RhcnQgd2l0aCAnQCcuKVxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAgICogICBUaGUgcGFyYW1ldGVyJ3Mgb3V0cHV0IHZhbHVlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVxuICAgICAgICogICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFEYXRhYCBldmVudC5cbiAgICAgICAqL1xuICAgICAgKHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2l2ZXMgdGhlIGNvbHVtbnMgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLCBpZiBgT1JERVIgQllgIGNsYXVzZSBpcyBleGVjdXRlZCBpbiBTUUwgU2VydmVyLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdvcmRlcicsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBvcmRlckNvbHVtbnNcbiAgICAgICAqICAgQW4gYXJyYXkgb2YgY29sdW1uIG51bWJlcnMgaW4gdGhlIHJlc3VsdCBzZXQgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLlxuICAgICAgICovXG4gICAgICAob3JkZXJDb2x1bW5zOiBudW1iZXJbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXF1ZXN0Q29tcGxldGVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdjYW5jZWwnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3BhdXNlJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXN1bWUnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3ByZXBhcmVkJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnI6IEVycm9yKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb3cnLCBjb2x1bW5zOiBhbnkpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmUnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZUluUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHByb2NSZXR1cm5TdGF0dXNWYWx1ZTogbnVtYmVyLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0dXJuVmFsdWUnLCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjYW5jZWwnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdwYXVzZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc3VtZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ29yZGVyJywgb3JkZXJDb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICBpZiAodGhpcy5wcmVwYXJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgncHJlcGFyZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyQ2FsbGJhY2soZXJyLCByb3dDb3VudCwgcm93cyk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVxdWVzdENvbXBsZXRlZCcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWVcbiAgICogICBUaGUgcGFyYW1ldGVyIG5hbWUuIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwYXJhbWV0ZXIgaW4gdGhlIFNRTCxcbiAgICogICBvciBhIHBhcmFtZXRlciB0aGF0IGEgY2FsbGVkIHByb2NlZHVyZSBleHBlY3RzLiBUaGUgbmFtZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYEBgLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiAgIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiAgIFRoZSB2YWx1ZSB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgZ2l2ZW4uIFRoZSBKYXZhc2NyaXB0IHR5cGUgb2YgdGhlXG4gICAqICAgYXJndW1lbnQgc2hvdWxkIG1hdGNoIHRoYXQgZG9jdW1lbnRlZCBmb3IgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICAvLyBUT0RPOiBgdHlwZWAgbXVzdCBiZSBhIHZhbGlkIFREUyB2YWx1ZSB0eXBlXG4gIGFkZFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB2YWx1ZT86IHVua25vd24sIG9wdGlvbnM/OiBSZWFkb25seTxQYXJhbWV0ZXJPcHRpb25zPiB8IG51bGwpIHtcbiAgICBjb25zdCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbWV0ZXI6IFBhcmFtZXRlciA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlXG4gICAgfTtcblxuICAgIHRoaXMucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgdGhpcy5wYXJhbWV0ZXJzQnlOYW1lW25hbWVdID0gcGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICBhZGRPdXRwdXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgdGhpcy5hZGRQYXJhbWV0ZXIobmFtZSwgdHlwZSwgdmFsdWUsIHsgLi4ub3B0aW9ucywgb3V0cHV0OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUGFyYW1zUGFyYW1ldGVyKHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdKSB7XG4gICAgbGV0IHBhcmFtc1BhcmFtZXRlciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldO1xuICAgICAgaWYgKHBhcmFtc1BhcmFtZXRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnLCAnO1xuICAgICAgfVxuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICdAJyArIHBhcmFtZXRlci5uYW1lICsgJyAnO1xuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9IHBhcmFtZXRlci50eXBlLmRlY2xhcmF0aW9uKHBhcmFtZXRlcik7XG4gICAgICBpZiAocGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJyBPVVRQVVQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zUGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YWxpZGF0ZVBhcmFtZXRlcnMoY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLnBhcmFtZXRlcnNbaV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IHBhcmFtZXRlci50eXBlLnZhbGlkYXRlKHBhcmFtZXRlci52YWx1ZSwgY29sbGF0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBhcmFtZXRlciBcXCcnICsgcGFyYW1ldGVyLm5hbWUgKyAnXFwnLiAnICsgZXJyb3IubWVzc2FnZSwgJ0VQQVJBTScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBzdXNwZW5kcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLiBObyBtb3JlIGByb3dgIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWQgdW50aWwgW1tyZXN1bWVdIGlzIGNhbGxlZC5cbiAgICogSWYgdGhpcyByZXF1ZXN0IGlzIGFscmVhZHkgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1twYXVzZV1dIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1tyZXN1bWVdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSByZXF1ZXN0IHdoaWxlIHdhaXRpbmcgZm9yIGEgc2VydmVyIHJlc3BvbnNlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dFxuICAgKiAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCxcbiAgICogICBvciBgMGAgZm9yIG5vIHRpbWVvdXQuIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LFxuICAgKiAgIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIFtbQ29ubmVjdGlvbl1dIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsT0FBTyxTQUFTQyxvQkFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFD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
386
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInZhbGlkYXRlIiwiUmVxdWVzdEVycm9yIiwibWVzc2FnZSIsInBhdXNlIiwicmVzdW1lIiwiY2FuY2VsIiwic2V0VGltZW91dCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgdHlwZSBQYXJhbWV0ZXIsIHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIGVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50XG4gICAqICAgVGhlIG51bWJlciBvZiByb3dzIGVtaXR0ZWQgYXMgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NcbiAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25dXSBpcyBgdHJ1ZWAuXG4gICAqL1xuICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byB0eXBlIHRoZSBgcm93c2AgcGFyYW1ldGVyIGhlcmUuXG4gIChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZz86IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBjb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAqIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChcInNlbGVjdCA0MiwgJ2hlbGxvIHdvcmxkJ1wiLCAoZXJyLCByb3dDb3VudCkge1xuICogICAvLyBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suLi5cbiAqIH0pO1xuICogY29ubmVjdGlvbi5leGVjU3FsKHJlcXVlc3QpO1xuICogYGBgXG4gKi9cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc3FsVGV4dE9yUHJvY2VkdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnNCeU5hbWU6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldGVyIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwcmVwYXJpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHVzZXJDYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaGFuZGxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzPzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdD86IEFycmF5PGFueT47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcblxuXG4gIGRlY2xhcmUgc2hvdWxkSG9ub3JBRT86IGJvb2xlYW47XG4gIGRlY2xhcmUgc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc6IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xuICBkZWNsYXJlIGNyeXB0b01ldGFkYXRhTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50LCBkZXNjcmliaW5nIHJlc3VsdCBzZXQgY29sdW1ucywgd2lsbCBiZSBlbWl0dGVkIGJlZm9yZSByb3dcbiAgICogZXZlbnRzIGFyZSBlbWl0dGVkLiBUaGlzIGV2ZW50IG1heSBiZSBlbWl0dGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSByZWNvcmRzZXQgaXMgcHJvZHVjZWQgYnkgdGhlIHN0YXRlbWVudC5cbiAgICpcbiAgICogQW4gYXJyYXkgbGlrZSBvYmplY3QsIHdoZXJlIHRoZSBjb2x1bW5zIGNhbiBiZSBhY2Nlc3NlZCBlaXRoZXIgYnkgaW5kZXhcbiAgICogb3IgbmFtZS4gQ29sdW1ucyB3aXRoIGEgbmFtZSB0aGF0IGlzIGFuIGludGVnZXIgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IG5hbWUsXG4gICAqIGFzIGl0IHdvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIGFycmF5IGluZGV4LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsXG4gICAgbGlzdGVuZXI6XG4gICAgKGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBoYXMgYmVlbiBwcmVwYXJlZCBhbmQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBjYWxscyB0byBleGVjdXRlIGFuZCB1bnByZXBhcmUuXG4gICAqL1xuICBvbihldmVudDogJ3ByZXBhcmVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBoYXMgbm90IGJlZW4gcHJlcGFyZWQuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHJvdyByZXN1bHRpbmcgZnJvbSBleGVjdXRpb24gb2YgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JvdycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9yIG9iamVjdCAoZGVwZW5kcyBvbiBbW0Nvbm5lY3Rpb25PcHRpb25zLnVzZUNvbHVtbk5hbWVzXV0pLCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXgvbmFtZS5cbiAgICAgICAqIEVhY2ggY29sdW1uIGhhcyB0d28gcHJvcGVydGllcywgYG1ldGFkYXRhYCBhbmQgYHZhbHVlYO+8mlxuICAgICAgICpcbiAgICAgICAqICogYG1ldGFkYXRhYFxuICAgICAgICpcbiAgICAgICAqICAgIFRoZSBzYW1lIGRhdGEgdGhhdCBpcyBleHBvc2VkIGluIHRoZSBgY29sdW1uTWV0YWRhdGFgIGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqICogYHZhbHVlYFxuICAgICAgICpcbiAgICAgICAqICAgIFRoZSBjb2x1bW4ncyB2YWx1ZS4gSXQgd2lsbCBiZSBgbnVsbGAgZm9yIGEgYE5VTExgLlxuICAgICAgICogICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGVuIHRoaXMgd2lsbCBiZSBhbiBhcnJheSBvZiB0aGUgdmFsdWVzLlxuICAgICAgICovXG4gICAgICAoY29sdW1uczogYW55KSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogQWxsIHJvd3MgZnJvbSBhIHJlc3VsdCBzZXQgaGF2ZSBiZWVuIHByb3ZpZGVkICh0aHJvdWdoIGByb3dgIGV2ZW50cykuXG4gICAqXG4gICAqIFRoaXMgdG9rZW4gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY29tcGxldGlvbiBvZiBhIFNRTCBzdGF0ZW1lbnQuXG4gICAqIEFzIG11bHRpcGxlIFNRTCBzdGF0ZW1lbnRzIGNhbiBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgaW4gYSBzaW5nbGUgU1FMIGJhdGNoLCBtdWx0aXBsZSBgZG9uZWAgY2FuIGJlIGdlbmVyYXRlZC5cbiAgICogQW4gYGRvbmVgIGV2ZW50IGlzIGVtaXR0ZWQgZm9yIGVhY2ggU1FMIHN0YXRlbWVudCBpbiB0aGUgU1FMIGJhdGNoIGV4Y2VwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAqIEZvciBleGVjdXRpb24gb2YgU1FMIHN0YXRlbWVudHMgd2l0aGluIHN0b3JlZCBwcm9jZWR1cmVzLCBgZG9uZVByb2NgIGFuZCBgZG9uZUluUHJvY2AgZXZlbnRzIGFyZSB1c2VkIGluIHBsYWNlIG9mIGBkb25lYC5cbiAgICpcbiAgICogSWYgeW91IGFyZSB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dIHRoZW4gU1FMIHNlcnZlciBtYXkgdHJlYXQgdGhlIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgYXMgYSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKiBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBtYXkgYmUgZW1pdHRlZCBpbnN0ZWFkLiBZb3UgbXVzdCBoYW5kbGUgYm90aCBldmVudHMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgQ29ubmVjdGlvbidzIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZV1dIGlzIGB0cnVlYC5cbiAgICAgICAqL1xuICAgICAgKHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogYHJlcXVlc3Qub24oJ2RvbmVJblByb2MnLCBmdW5jdGlvbiAocm93Q291bnQsIG1vcmUsIHJvd3MpIHsgfSk7YFxuICAgKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mIGEgU1FMIHN0YXRlbWVudCB3aXRoaW4gYSBzdG9yZWQgcHJvY2VkdXJlLiBBbGwgcm93cyBmcm9tIGEgc3RhdGVtZW50XG4gICAqIGluIGEgc3RvcmVkIHByb2NlZHVyZSBoYXZlIGJlZW4gcHJvdmlkZWQgKHRocm91Z2ggYHJvd2AgZXZlbnRzKS5cbiAgICpcbiAgICogVGhpcyBldmVudCBtYXkgYWxzbyBvY2N1ciB3aGVuIGV4ZWN1dGluZyBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IHVzaW5nIFtbZXhlY1NxbF1dLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lSW5Qcm9jJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgQ29ubmVjdGlvbidzIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZV1dIGlzIGB0cnVlYC5cbiAgICAgICAqL1xuICAgICAgKHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiBhIHN0b3JlZCBwcm9jZWR1cmUuIFRoaXMgaXMgYWxzbyBnZW5lcmF0ZWQgZm9yIHN0b3JlZCBwcm9jZWR1cmVzXG4gICAqIGV4ZWN1dGVkIHRocm91Z2ggU1FMIHN0YXRlbWVudHMuXFxcbiAgICogVGhpcyBldmVudCBtYXkgYWxzbyBvY2N1ciB3aGVuIGV4ZWN1dGluZyBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IHVzaW5nIFtbZXhlY1NxbF1dLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lUHJvYycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IG51bWJlciwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGZvciBhbiBvdXRwdXQgcGFyYW1ldGVyICh0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aXRoIFtbYWRkT3V0cHV0UGFyYW1ldGVyXV0pLlxuICAgKiBTZWUgYWxzbyBgVXNpbmcgUGFyYW1ldGVyc2AuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JldHVyblZhbHVlJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHBhcmFtZXRlck5hbWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiAoRG9lcyBub3Qgc3RhcnQgd2l0aCAnQCcuKVxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAgICogICBUaGUgcGFyYW1ldGVyJ3Mgb3V0cHV0IHZhbHVlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVxuICAgICAgICogICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFEYXRhYCBldmVudC5cbiAgICAgICAqL1xuICAgICAgKHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2l2ZXMgdGhlIGNvbHVtbnMgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLCBpZiBgT1JERVIgQllgIGNsYXVzZSBpcyBleGVjdXRlZCBpbiBTUUwgU2VydmVyLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdvcmRlcicsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBvcmRlckNvbHVtbnNcbiAgICAgICAqICAgQW4gYXJyYXkgb2YgY29sdW1uIG51bWJlcnMgaW4gdGhlIHJlc3VsdCBzZXQgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLlxuICAgICAgICovXG4gICAgICAob3JkZXJDb2x1bW5zOiBudW1iZXJbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXF1ZXN0Q29tcGxldGVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdjYW5jZWwnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3BhdXNlJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXN1bWUnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3ByZXBhcmVkJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnI6IEVycm9yKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb3cnLCBjb2x1bW5zOiBhbnkpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmUnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZUluUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHByb2NSZXR1cm5TdGF0dXNWYWx1ZTogbnVtYmVyLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0dXJuVmFsdWUnLCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjYW5jZWwnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdwYXVzZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc3VtZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ29yZGVyJywgb3JkZXJDb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICBpZiAodGhpcy5wcmVwYXJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgncHJlcGFyZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyQ2FsbGJhY2soZXJyLCByb3dDb3VudCwgcm93cyk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVxdWVzdENvbXBsZXRlZCcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWVcbiAgICogICBUaGUgcGFyYW1ldGVyIG5hbWUuIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwYXJhbWV0ZXIgaW4gdGhlIFNRTCxcbiAgICogICBvciBhIHBhcmFtZXRlciB0aGF0IGEgY2FsbGVkIHByb2NlZHVyZSBleHBlY3RzLiBUaGUgbmFtZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYEBgLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiAgIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiAgIFRoZSB2YWx1ZSB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgZ2l2ZW4uIFRoZSBKYXZhc2NyaXB0IHR5cGUgb2YgdGhlXG4gICAqICAgYXJndW1lbnQgc2hvdWxkIG1hdGNoIHRoYXQgZG9jdW1lbnRlZCBmb3IgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICAvLyBUT0RPOiBgdHlwZWAgbXVzdCBiZSBhIHZhbGlkIFREUyB2YWx1ZSB0eXBlXG4gIGFkZFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB2YWx1ZT86IHVua25vd24sIG9wdGlvbnM/OiBSZWFkb25seTxQYXJhbWV0ZXJPcHRpb25zPiB8IG51bGwpIHtcbiAgICBjb25zdCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbWV0ZXI6IFBhcmFtZXRlciA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlXG4gICAgfTtcblxuICAgIHRoaXMucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgdGhpcy5wYXJhbWV0ZXJzQnlOYW1lW25hbWVdID0gcGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICBhZGRPdXRwdXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgdGhpcy5hZGRQYXJhbWV0ZXIobmFtZSwgdHlwZSwgdmFsdWUsIHsgLi4ub3B0aW9ucywgb3V0cHV0OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUGFyYW1zUGFyYW1ldGVyKHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdKSB7XG4gICAgbGV0IHBhcmFtc1BhcmFtZXRlciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldO1xuICAgICAgaWYgKHBhcmFtc1BhcmFtZXRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnLCAnO1xuICAgICAgfVxuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICdAJyArIHBhcmFtZXRlci5uYW1lICsgJyAnO1xuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9IHBhcmFtZXRlci50eXBlLmRlY2xhcmF0aW9uKHBhcmFtZXRlcik7XG4gICAgICBpZiAocGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJyBPVVRQVVQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zUGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YWxpZGF0ZVBhcmFtZXRlcnMoY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLnBhcmFtZXRlcnNbaV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IHBhcmFtZXRlci50eXBlLnZhbGlkYXRlKHBhcmFtZXRlci52YWx1ZSwgY29sbGF0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBhcmFtZXRlciBcXCcnICsgcGFyYW1ldGVyLm5hbWUgKyAnXFwnLiAnICsgZXJyb3IubWVzc2FnZSwgJ0VQQVJBTScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBzdXNwZW5kcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLiBObyBtb3JlIGByb3dgIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWQgdW50aWwgW1tyZXN1bWVdIGlzIGNhbGxlZC5cbiAgICogSWYgdGhpcyByZXF1ZXN0IGlzIGFscmVhZHkgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1twYXVzZV1dIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1tyZXN1bWVdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSByZXF1ZXN0IHdoaWxlIHdhaXRpbmcgZm9yIGEgc2VydmVyIHJlc3BvbnNlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dFxuICAgKiAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCxcbiAgICogICBvciBgMGAgZm9yIG5vIHRpbWVvdXQuIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LFxuICAgKiAgIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIFtbQ29ubmVjdGlvbl1dIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsT0FBTyxTQUFTQyxvQkFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQVFFO0FBQ0Y7QUFDQTtBQUNBO0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","names":["_events","require","_errors","_types","Request","EventEmitter","on","event","listener","emit","args","constructor","sqlTextOrProcedure","callback","options","parameters","parametersByName","preparing","handle","undefined","canceled","paused","error","connection","timeout","userCallback","statementColumnEncryptionSetting","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","cryptoMetadataLoaded","err","rowCount","rows","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","validate","RequestError","message","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occured, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n declare sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n declare parameters: Parameter[];\n /**\n * @private\n */\n declare parametersByName: { [key: string]: Parameter };\n /**\n * @private\n */\n declare preparing: boolean;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare paused: boolean;\n /**\n * @private\n */\n declare userCallback: CompletionCallback;\n /**\n * @private\n */\n declare handle: number | undefined;\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare rows?: Array<any>;\n /**\n * @private\n */\n declare rst?: Array<any>;\n /**\n * @private\n */\n declare rowCount?: number;\n\n /**\n * @private\n */\n declare callback: CompletionCallback;\n\n\n declare shouldHonorAE?: boolean;\n declare statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n declare cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emited multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emited for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetaData` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined) {\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n try {\n parameter.value = parameter.type.validate(parameter.value, collation);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM');\n }\n }\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAmBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEEC,IAAIA,CAACF,KAAsB,EAAE,GAAGG,IAAW,EAAE;IAC3C,OAAO,KAAK,CAACD,IAAI,CAACF,KAAK,EAAE,GAAGG,IAAI,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,kBAAsC,EAAEC,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"}
1
+ {"version":3,"file":"request.js","names":["_events","require","_errors","_types","Request","EventEmitter","on","event","listener","emit","args","constructor","sqlTextOrProcedure","callback","options","parameters","parametersByName","preparing","handle","undefined","canceled","paused","error","connection","timeout","userCallback","statementColumnEncryptionSetting","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","cryptoMetadataLoaded","err","rowCount","rows","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","validate","RequestError","message","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occurred, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n declare sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n declare parameters: Parameter[];\n /**\n * @private\n */\n declare parametersByName: { [key: string]: Parameter };\n /**\n * @private\n */\n declare preparing: boolean;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare paused: boolean;\n /**\n * @private\n */\n declare userCallback: CompletionCallback;\n /**\n * @private\n */\n declare handle: number | undefined;\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare rows?: Array<any>;\n /**\n * @private\n */\n declare rst?: Array<any>;\n /**\n * @private\n */\n declare rowCount?: number;\n\n /**\n * @private\n */\n declare callback: CompletionCallback;\n\n\n declare shouldHonorAE?: boolean;\n declare statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n declare cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emitted multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emitted for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetaData` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined) {\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n try {\n parameter.value = parameter.type.validate(parameter.value, collation);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM');\n }\n }\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAmBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEEC,IAAIA,CAACF,KAAsB,EAAE,GAAGG,IAAW,EAAE;IAC3C,OAAO,KAAK,CAACD,IAAI,CAACF,KAAK,EAAE,GAAGG,IAAI,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,kBAAsC,EAAEC,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"}
@@ -4,93 +4,122 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _metadataParser = _interopRequireDefault(require("../metadata-parser"));
7
+ var _metadataParser = require("../metadata-parser");
8
8
  var _token = require("./token");
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- function readTableName(parser, options, metadata, callback) {
11
- if (metadata.type.hasTableName) {
12
- if (options.tdsVersion >= '7_2') {
13
- parser.readUInt8(numberOfTableNameParts => {
14
- const tableName = [];
15
- let i = 0;
16
- function next(done) {
17
- if (numberOfTableNameParts === i) {
18
- return done();
19
- }
20
- parser.readUsVarChar(part => {
21
- tableName.push(part);
22
- i++;
23
- next(done);
24
- });
25
- }
26
- next(() => {
27
- callback(tableName);
28
- });
29
- });
30
- } else {
31
- parser.readUsVarChar(callback);
32
- }
33
- } else {
34
- callback(undefined);
9
+ var _helpers = require("./helpers");
10
+ function readTableName(buf, offset, metadata, options) {
11
+ if (!metadata.type.hasTableName) {
12
+ return new _helpers.Result(undefined, offset);
13
+ }
14
+ if (options.tdsVersion < '7_2') {
15
+ return (0, _helpers.readUsVarChar)(buf, offset);
16
+ }
17
+ let numberOfTableNameParts;
18
+ ({
19
+ offset,
20
+ value: numberOfTableNameParts
21
+ } = (0, _helpers.readUInt8)(buf, offset));
22
+ const tableName = [];
23
+ for (let i = 0; i < numberOfTableNameParts; i++) {
24
+ let tableNamePart;
25
+ ({
26
+ offset,
27
+ value: tableNamePart
28
+ } = (0, _helpers.readUsVarChar)(buf, offset));
29
+ tableName.push(tableNamePart);
35
30
  }
31
+ return new _helpers.Result(tableName, offset);
36
32
  }
37
- function readColumnName(parser, options, index, metadata, callback) {
38
- parser.readBVarChar(colName => {
39
- if (options.columnNameReplacer) {
40
- callback(options.columnNameReplacer(colName, index, metadata));
41
- } else if (options.camelCaseColumns) {
42
- callback(colName.replace(/^[A-Z]/, function (s) {
43
- return s.toLowerCase();
44
- }));
45
- } else {
46
- callback(colName);
47
- }
48
- });
33
+ function readColumnName(buf, offset, index, metadata, options) {
34
+ let colName;
35
+ ({
36
+ offset,
37
+ value: colName
38
+ } = (0, _helpers.readBVarChar)(buf, offset));
39
+ if (options.columnNameReplacer) {
40
+ return new _helpers.Result(options.columnNameReplacer(colName, index, metadata), offset);
41
+ } else if (options.camelCaseColumns) {
42
+ return new _helpers.Result(colName.replace(/^[A-Z]/, function (s) {
43
+ return s.toLowerCase();
44
+ }), offset);
45
+ } else {
46
+ return new _helpers.Result(colName, offset);
47
+ }
49
48
  }
50
- function readColumn(parser, options, index, callback) {
51
- (0, _metadataParser.default)(parser, options, metadata => {
52
- readTableName(parser, options, metadata, tableName => {
53
- readColumnName(parser, options, index, metadata, colName => {
54
- callback({
55
- userType: metadata.userType,
56
- flags: metadata.flags,
57
- type: metadata.type,
58
- collation: metadata.collation,
59
- precision: metadata.precision,
60
- scale: metadata.scale,
61
- udtInfo: metadata.udtInfo,
62
- dataLength: metadata.dataLength,
63
- schema: metadata.schema,
64
- colName: colName,
65
- tableName: tableName
66
- });
67
- });
68
- });
69
- });
49
+ function readColumn(buf, offset, options, index) {
50
+ let metadata;
51
+ ({
52
+ offset,
53
+ value: metadata
54
+ } = (0, _metadataParser.readMetadata)(buf, offset, options));
55
+ let tableName;
56
+ ({
57
+ offset,
58
+ value: tableName
59
+ } = readTableName(buf, offset, metadata, options));
60
+ let colName;
61
+ ({
62
+ offset,
63
+ value: colName
64
+ } = readColumnName(buf, offset, index, metadata, options));
65
+ return new _helpers.Result({
66
+ userType: metadata.userType,
67
+ flags: metadata.flags,
68
+ type: metadata.type,
69
+ collation: metadata.collation,
70
+ precision: metadata.precision,
71
+ scale: metadata.scale,
72
+ udtInfo: metadata.udtInfo,
73
+ dataLength: metadata.dataLength,
74
+ schema: metadata.schema,
75
+ colName: colName,
76
+ tableName: tableName
77
+ }, offset);
70
78
  }
71
79
  async function colMetadataParser(parser) {
72
- while (parser.buffer.length - parser.position < 2) {
73
- await parser.streamBuffer.waitForChunk();
80
+ let columnCount;
81
+ while (true) {
82
+ let offset;
83
+ try {
84
+ ({
85
+ offset,
86
+ value: columnCount
87
+ } = (0, _helpers.readUInt16LE)(parser.buffer, parser.position));
88
+ } catch (err) {
89
+ if (err instanceof _helpers.NotEnoughDataError) {
90
+ await parser.waitForChunk();
91
+ continue;
92
+ }
93
+ throw err;
94
+ }
95
+ parser.position = offset;
96
+ break;
74
97
  }
75
- const columnCount = parser.buffer.readUInt16LE(parser.position);
76
- parser.position += 2;
77
98
  const columns = [];
78
99
  for (let i = 0; i < columnCount; i++) {
79
- let column;
80
- readColumn(parser, parser.options, i, c => {
81
- column = c;
82
- });
83
- while (parser.suspended) {
84
- await parser.streamBuffer.waitForChunk();
85
- parser.suspended = false;
86
- const next = parser.next;
87
- next();
100
+ while (true) {
101
+ let column;
102
+ let offset;
103
+ try {
104
+ ({
105
+ offset,
106
+ value: column
107
+ } = readColumn(parser.buffer, parser.position, parser.options, i));
108
+ } catch (err) {
109
+ if (err instanceof _helpers.NotEnoughDataError) {
110
+ await parser.waitForChunk();
111
+ continue;
112
+ }
113
+ throw err;
114
+ }
115
+ parser.position = offset;
116
+ columns.push(column);
117
+ break;
88
118
  }
89
- columns.push(column);
90
119
  }
91
120
  return new _token.ColMetadataToken(columns);
92
121
  }
93
122
  var _default = colMetadataParser;
94
123
  exports.default = _default;
95
124
  module.exports = colMetadataParser;
96
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90b2tlbiIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicmVhZFRhYmxlTmFtZSIsInBhcnNlciIsIm9wdGlvbnMiLCJtZXRhZGF0YSIsImNhbGxiYWNrIiwidHlwZSIsImhhc1RhYmxlTmFtZSIsInRkc1ZlcnNpb24iLCJyZWFkVUludDgiLCJudW1iZXJPZlRhYmxlTmFtZVBhcnRzIiwidGFibGVOYW1lIiwiaSIsIm5leHQiLCJkb25lIiwicmVhZFVzVmFyQ2hhciIsInBhcnQiLCJwdXNoIiwidW5kZWZpbmVkIiwicmVhZENvbHVtbk5hbWUiLCJpbmRleCIsInJlYWRCVmFyQ2hhciIsImNvbE5hbWUiLCJjb2x1bW5OYW1lUmVwbGFjZXIiLCJjYW1lbENhc2VDb2x1bW5zIiwicmVwbGFjZSIsInMiLCJ0b0xvd2VyQ2FzZSIsInJlYWRDb2x1bW4iLCJtZXRhZGF0YVBhcnNlIiwidXNlclR5cGUiLCJmbGFncyIsImNvbGxhdGlvbiIsInByZWNpc2lvbiIsInNjYWxlIiwidWR0SW5mbyIsImRhdGFMZW5ndGgiLCJzY2hlbWEiLCJjb2xNZXRhZGF0YVBhcnNlciIsImJ1ZmZlciIsImxlbmd0aCIsInBvc2l0aW9uIiwic3RyZWFtQnVmZmVyIiwid2FpdEZvckNodW5rIiwiY29sdW1uQ291bnQiLCJyZWFkVUludDE2TEUiLCJjb2x1bW5zIiwiY29sdW1uIiwiYyIsInN1c3BlbmRlZCIsIkNvbE1ldGFkYXRhVG9rZW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXRhZGF0YVBhcnNlLCB7IHR5cGUgTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS1wYXJzZXInO1xuXG5pbXBvcnQgUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyBDb2xNZXRhZGF0YVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uTWV0YWRhdGEgZXh0ZW5kcyBNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uJ3MgbmFtZeOAglxuICAgKi9cbiAgY29sTmFtZTogc3RyaW5nO1xuXG4gIHRhYmxlTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFibGVOYW1lKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBtZXRhZGF0YTogTWV0YWRhdGEsIGNhbGxiYWNrOiAodGFibGVOYW1lPzogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQpIHtcbiAgaWYgKG1ldGFkYXRhLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgaWYgKG9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgcGFyc2VyLnJlYWRVSW50OCgobnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cykgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZU5hbWU6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KGRvbmU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICBpZiAobnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cyA9PT0gaSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJzZXIucmVhZFVzVmFyQ2hhcigocGFydCkgPT4ge1xuICAgICAgICAgICAgdGFibGVOYW1lLnB1c2gocGFydCk7XG5cbiAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgbmV4dChkb25lKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKHRhYmxlTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlci5yZWFkVXNWYXJDaGFyKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkQ29sdW1uTmFtZShwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgaW5kZXg6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBjYWxsYmFjazogKGNvbE5hbWU6IHN0cmluZykgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJWYXJDaGFyKChjb2xOYW1lKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyKSB7XG4gICAgICBjYWxsYmFjayhvcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcihjb2xOYW1lLCBpbmRleCwgbWV0YWRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucykge1xuICAgICAgY2FsbGJhY2soY29sTmFtZS5yZXBsYWNlKC9eW0EtWl0vLCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGNvbE5hbWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2x1bW4ocGFyc2VyOiBQYXJzZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMsIGluZGV4OiBudW1iZXIsIGNhbGxiYWNrOiAoY29sdW1uOiBDb2x1bW5NZXRhZGF0YSkgPT4gdm9pZCkge1xuICBtZXRhZGF0YVBhcnNlKHBhcnNlciwgb3B0aW9ucywgKG1ldGFkYXRhKSA9PiB7XG4gICAgcmVhZFRhYmxlTmFtZShwYXJzZXIsIG9wdGlvbnMsIG1ldGFkYXRhLCAodGFibGVOYW1lKSA9PiB7XG4gICAgICByZWFkQ29sdW1uTmFtZShwYXJzZXIsIG9wdGlvbnMsIGluZGV4LCBtZXRhZGF0YSwgKGNvbE5hbWUpID0+IHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHVzZXJUeXBlOiBtZXRhZGF0YS51c2VyVHlwZSxcbiAgICAgICAgICBmbGFnczogbWV0YWRhdGEuZmxhZ3MsXG4gICAgICAgICAgdHlwZTogbWV0YWRhdGEudHlwZSxcbiAgICAgICAgICBjb2xsYXRpb246IG1ldGFkYXRhLmNvbGxhdGlvbixcbiAgICAgICAgICBwcmVjaXNpb246IG1ldGFkYXRhLnByZWNpc2lvbixcbiAgICAgICAgICBzY2FsZTogbWV0YWRhdGEuc2NhbGUsXG4gICAgICAgICAgdWR0SW5mbzogbWV0YWRhdGEudWR0SW5mbyxcbiAgICAgICAgICBkYXRhTGVuZ3RoOiBtZXRhZGF0YS5kYXRhTGVuZ3RoLFxuICAgICAgICAgIHNjaGVtYTogbWV0YWRhdGEuc2NoZW1hLFxuICAgICAgICAgIGNvbE5hbWU6IGNvbE5hbWUsXG4gICAgICAgICAgdGFibGVOYW1lOiB0YWJsZU5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcjogUGFyc2VyKTogUHJvbWlzZTxDb2xNZXRhZGF0YVRva2VuPiB7XG4gIHdoaWxlIChwYXJzZXIuYnVmZmVyLmxlbmd0aCAtIHBhcnNlci5wb3NpdGlvbiA8IDIpIHtcbiAgICBhd2FpdCBwYXJzZXIuc3RyZWFtQnVmZmVyLndhaXRGb3JDaHVuaygpO1xuICB9XG5cbiAgY29uc3QgY29sdW1uQ291bnQgPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50MTZMRShwYXJzZXIucG9zaXRpb24pO1xuICBwYXJzZXIucG9zaXRpb24gKz0gMjtcblxuICBjb25zdCBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgIGxldCBjb2x1bW46IENvbHVtbk1ldGFkYXRhO1xuXG4gICAgcmVhZENvbHVtbihwYXJzZXIsIHBhcnNlci5vcHRpb25zLCBpLCAoYykgPT4ge1xuICAgICAgY29sdW1uID0gYztcbiAgICB9KTtcblxuICAgIHdoaWxlIChwYXJzZXIuc3VzcGVuZGVkKSB7XG4gICAgICBhd2FpdCBwYXJzZXIuc3RyZWFtQnVmZmVyLndhaXRGb3JDaHVuaygpO1xuXG4gICAgICBwYXJzZXIuc3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBuZXh0ID0gcGFyc2VyLm5leHQhO1xuXG4gICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgY29sdW1ucy5wdXNoKGNvbHVtbiEpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDb2xNZXRhZGF0YVRva2VuKGNvbHVtbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb2xNZXRhZGF0YVBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gY29sTWV0YWRhdGFQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUEyQyxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQVczQyxTQUFTRyxhQUFhQSxDQUFDQyxNQUFjLEVBQUVDLE9BQXNCLEVBQUVDLFFBQWtCLEVBQUVDLFFBQWlELEVBQUU7RUFDcEksSUFBSUQsUUFBUSxDQUFDRSxJQUFJLENBQUNDLFlBQVksRUFBRTtJQUM5QixJQUFJSixPQUFPLENBQUNLLFVBQVUsSUFBSSxLQUFLLEVBQUU7TUFDL0JOLE1BQU0sQ0FBQ08sU0FBUyxDQUFFQyxzQkFBc0IsSUFBSztRQUMzQyxNQUFNQyxTQUFtQixHQUFHLEVBQUU7UUFFOUIsSUFBSUMsQ0FBQyxHQUFHLENBQUM7UUFDVCxTQUFTQyxJQUFJQSxDQUFDQyxJQUFn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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX3Rva2VuIiwiX2hlbHBlcnMiLCJyZWFkVGFibGVOYW1lIiwiYnVmIiwib2Zmc2V0IiwibWV0YWRhdGEiLCJvcHRpb25zIiwidHlwZSIsImhhc1RhYmxlTmFtZSIsIlJlc3VsdCIsInVuZGVmaW5lZCIsInRkc1ZlcnNpb24iLCJyZWFkVXNWYXJDaGFyIiwibnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cyIsInZhbHVlIiwicmVhZFVJbnQ4IiwidGFibGVOYW1lIiwiaSIsInRhYmxlTmFtZVBhcnQiLCJwdXNoIiwicmVhZENvbHVtbk5hbWUiLCJpbmRleCIsImNvbE5hbWUiLCJyZWFkQlZhckNoYXIiLCJjb2x1bW5OYW1lUmVwbGFjZXIiLCJjYW1lbENhc2VDb2x1bW5zIiwicmVwbGFjZSIsInMiLCJ0b0xvd2VyQ2FzZSIsInJlYWRDb2x1bW4iLCJyZWFkTWV0YWRhdGEiLCJ1c2VyVHlwZSIsImZsYWdzIiwiY29sbGF0aW9uIiwicHJlY2lzaW9uIiwic2NhbGUiLCJ1ZHRJbmZvIiwiZGF0YUxlbmd0aCIsInNjaGVtYSIsImNvbE1ldGFkYXRhUGFyc2VyIiwicGFyc2VyIiwiY29sdW1uQ291bnQiLCJyZWFkVUludDE2TEUiLCJidWZmZXIiLCJwb3NpdGlvbiIsImVyciIsIk5vdEVub3VnaERhdGFFcnJvciIsIndhaXRGb3JDaHVuayIsImNvbHVtbnMiLCJjb2x1bW4iLCJDb2xNZXRhZGF0YVRva2VuIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZE1ldGFkYXRhLCB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi4vbWV0YWRhdGEtcGFyc2VyJztcblxuaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgQ29sTWV0YWRhdGFUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCBSZXN1bHQsIHJlYWRCVmFyQ2hhciwgcmVhZFVJbnQxNkxFLCByZWFkVUludDgsIHJlYWRVc1ZhckNoYXIgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbk1ldGFkYXRhIGV4dGVuZHMgTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGNvbHVtbidzIG5hbWXjgIJcbiAgICovXG4gIGNvbE5hbWU6IHN0cmluZztcblxuICB0YWJsZU5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhYmxlTmFtZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIW1ldGFkYXRhLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodW5kZWZpbmVkLCBvZmZzZXQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgcmV0dXJuIHJlYWRVc1ZhckNoYXIoYnVmLCBvZmZzZXQpO1xuICB9XG5cbiAgbGV0IG51bWJlck9mVGFibGVOYW1lUGFydHM7XG4gICh7IG9mZnNldCwgdmFsdWU6IG51bWJlck9mVGFibGVOYW1lUGFydHMgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IHRhYmxlTmFtZTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlRhYmxlTmFtZVBhcnRzOyBpKyspIHtcbiAgICBsZXQgdGFibGVOYW1lUGFydDtcbiAgICAoeyBvZmZzZXQsIHZhbHVlOiB0YWJsZU5hbWVQYXJ0IH0gPSByZWFkVXNWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICB0YWJsZU5hbWUucHVzaCh0YWJsZU5hbWVQYXJ0KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KHRhYmxlTmFtZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZENvbHVtbk5hbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGxldCBjb2xOYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBjb2xOYW1lIH0gPSByZWFkQlZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAob3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChvcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcihjb2xOYW1lLCBpbmRleCwgbWV0YWRhdGEpLCBvZmZzZXQpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucykge1xuICAgIHJldHVybiBuZXcgUmVzdWx0KGNvbE5hbWUucmVwbGFjZSgvXltBLVpdLywgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHMudG9Mb3dlckNhc2UoKTtcbiAgICB9KSwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChjb2xOYW1lLCBvZmZzZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2x1bW4oYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gIGxldCBtZXRhZGF0YTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbWV0YWRhdGEgfSA9IHJlYWRNZXRhZGF0YShidWYsIG9mZnNldCwgb3B0aW9ucykpO1xuXG4gIGxldCB0YWJsZU5hbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRhYmxlTmFtZSB9ID0gcmVhZFRhYmxlTmFtZShidWYsIG9mZnNldCwgbWV0YWRhdGEsIG9wdGlvbnMpKTtcblxuICBsZXQgY29sTmFtZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sTmFtZSB9ID0gcmVhZENvbHVtbk5hbWUoYnVmLCBvZmZzZXQsIGluZGV4LCBtZXRhZGF0YSwgb3B0aW9ucykpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICB1c2VyVHlwZTogbWV0YWRhdGEudXNlclR5cGUsXG4gICAgZmxhZ3M6IG1ldGFkYXRhLmZsYWdzLFxuICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgY29sbGF0aW9uOiBtZXRhZGF0YS5jb2xsYXRpb24sXG4gICAgcHJlY2lzaW9uOiBtZXRhZGF0YS5wcmVjaXNpb24sXG4gICAgc2NhbGU6IG1ldGFkYXRhLnNjYWxlLFxuICAgIHVkdEluZm86IG1ldGFkYXRhLnVkdEluZm8sXG4gICAgZGF0YUxlbmd0aDogbWV0YWRhdGEuZGF0YUxlbmd0aCxcbiAgICBzY2hlbWE6IG1ldGFkYXRhLnNjaGVtYSxcbiAgICBjb2xOYW1lOiBjb2xOYW1lLFxuICAgIHRhYmxlTmFtZTogdGFibGVOYW1lXG4gIH0sIG9mZnNldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcjogUGFyc2VyKTogUHJvbWlzZTxDb2xNZXRhZGF0YVRva2VuPiB7XG4gIGxldCBjb2x1bW5Db3VudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGxldCBvZmZzZXQ7XG5cbiAgICB0cnkge1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sdW1uQ291bnQgfSA9IHJlYWRVSW50MTZMRShwYXJzZXIuYnVmZmVyLCBwYXJzZXIucG9zaXRpb24pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHBhcnNlci5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBjb2x1bW46IENvbHVtbk1ldGFkYXRhO1xuICAgICAgbGV0IG9mZnNldDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sdW1uIH0gPSByZWFkQ29sdW1uKHBhcnNlci5idWZmZXIsIHBhcnNlci5wb3NpdGlvbiwgcGFyc2VyLm9wdGlvbnMsIGkpKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCBwYXJzZXIud2FpdEZvckNodW5rKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENvbE1ldGFkYXRhVG9rZW4oY29sdW1ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbE1ldGFkYXRhUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBjb2xNZXRhZGF0YVBhcnNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxPQUFBO0FBR0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBV0EsU0FBU0csYUFBYUEsQ0FBQ0MsR0FBVyxF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