tedious 20.0.4 → 20.0.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["Result","constructor","value","offset","exports","NotEnoughDataError","Error","byteCount","readUInt8","buf","length","readUInt16LE","readInt16LE","readUInt24LE","readUIntLE","readUInt32LE","readUInt32BE","readUInt40LE","readInt32LE","readBigUInt64LE","readBigInt64LE","readFloatLE","readDoubleLE","readBVarChar","charCount","byteLength","toString","readBVarByte","slice","readUsVarChar","readUsVarByte","readUNumeric64LE","low","high","readUNumeric96LE","dword1","dword2","dword3","readUNumeric128LE","dword4"],"sources":["../../src/token/helpers.ts"],"sourcesContent":["export class Result<T> {\n declare value: T;\n declare offset: number;\n\n constructor(value: T, offset: number) {\n this.value = value;\n this.offset = offset;\n }\n}\n\nexport class NotEnoughDataError extends Error {\n byteCount: number;\n\n constructor(byteCount: number) {\n super();\n\n this.byteCount = byteCount;\n }\n}\n\nexport function readUInt8(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 1) {\n throw new NotEnoughDataError(offset + 1);\n }\n\n return new Result(buf.readUInt8(offset), offset + 1);\n}\n\nexport function readUInt16LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 2) {\n throw new NotEnoughDataError(offset + 2);\n }\n\n return new Result(buf.readUInt16LE(offset), offset + 2);\n}\n\nexport function readInt16LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 2) {\n throw new NotEnoughDataError(offset + 2);\n }\n\n return new Result(buf.readInt16LE(offset), offset + 2);\n}\n\nexport function readUInt24LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 3) {\n throw new NotEnoughDataError(offset + 3);\n }\n\n return new Result(buf.readUIntLE(offset, 3), offset + 3);\n}\n\nexport function readUInt32LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readUInt32LE(offset), offset + 4);\n}\n\nexport function readUInt32BE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readUInt32BE(offset), offset + 4);\n}\n\nexport function readUInt40LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 5) {\n throw new NotEnoughDataError(offset + 5);\n }\n\n return new Result(buf.readUIntLE(offset, 5), offset + 5);\n}\nexport function readInt32LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readInt32LE(offset), offset + 4);\n}\n\nexport function readBigUInt64LE(buf: Buffer, offset: number): Result<bigint> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readBigUInt64LE(offset), offset + 8);\n}\n\nexport function readBigInt64LE(buf: Buffer, offset: number): Result<bigint> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readBigInt64LE(offset), offset + 8);\n}\n\nexport function readFloatLE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readFloatLE(offset), offset + 4);\n}\n\nexport function readDoubleLE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readDoubleLE(offset), offset + 8);\n}\n\nexport function readBVarChar(buf: Buffer, offset: number): Result<string> {\n offset = +offset;\n\n let charCount;\n ({ offset, value: charCount } = readUInt8(buf, offset));\n\n const byteLength = charCount * 2;\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.toString('ucs2', offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readBVarByte(buf: Buffer, offset: number): Result<Buffer> {\n offset = +offset;\n\n let byteLength;\n ({ offset, value: byteLength } = readUInt8(buf, offset));\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.slice(offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUsVarChar(buf: Buffer, offset: number): Result<string> {\n offset = +offset;\n\n let charCount;\n ({ offset, value: charCount } = readUInt16LE(buf, offset));\n\n const byteLength = charCount * 2;\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.toString('ucs2', offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUsVarByte(buf: Buffer, offset: number): Result<Buffer> {\n offset = +offset;\n\n let byteLength;\n ({ offset, value: byteLength } = readUInt16LE(buf, offset));\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.slice(offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUNumeric64LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n const low = buf.readUInt32LE(offset);\n const high = buf.readUInt32LE(offset + 4);\n\n return new Result((0x100000000 * high) + low, offset + 8);\n}\n\nexport function readUNumeric96LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 12) {\n throw new NotEnoughDataError(offset + 12);\n }\n\n const dword1 = buf.readUInt32LE(offset);\n const dword2 = buf.readUInt32LE(offset + 4);\n const dword3 = buf.readUInt32LE(offset + 8);\n\n return new Result(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3), offset + 12);\n}\n\nexport function readUNumeric128LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 16) {\n throw new NotEnoughDataError(offset + 16);\n }\n\n const dword1 = buf.readUInt32LE(offset);\n const dword2 = buf.readUInt32LE(offset + 4);\n const dword3 = buf.readUInt32LE(offset + 8);\n const dword4 = buf.readUInt32LE(offset + 12);\n\n return new Result(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3) + (0x100000000 * 0x100000000 * 0x100000000 * dword4), offset + 16);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["Result","constructor","value","offset","exports","NotEnoughDataError","byteCount","readUInt8","buf","length","readUInt16LE","readInt16LE","readUInt24LE","readUIntLE","readUInt32LE","readUInt32BE","readUInt40LE","readInt32LE","readBigUInt64LE","readBigInt64LE","readFloatLE","readDoubleLE","readBVarChar","charCount","byteLength","toString","readBVarByte","slice","readUsVarChar","readUsVarByte","readUNumeric64LE","low","high","readUNumeric96LE","dword1","dword2","dword3","readUNumeric128LE","dword4"],"sources":["../../src/token/helpers.ts"],"sourcesContent":["export class Result<T> {\n declare value: T;\n declare offset: number;\n\n constructor(value: T, offset: number) {\n this.value = value;\n this.offset = offset;\n }\n}\n\n// This error is thrown and caught as part of normal parsing control flow:\n// whenever a parser encounters an incomplete value, it throws this error,\n// and the caller waits for more data to arrive before retrying.\n//\n// It deliberately does not extend `Error` - capturing a stack trace on\n// every construction is expensive, and the stack is never used as this\n// error never escapes the parsing internals.\nexport class NotEnoughDataError {\n declare byteCount: number;\n\n constructor(byteCount: number) {\n this.byteCount = byteCount;\n }\n}\n\nexport function readUInt8(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 1) {\n throw new NotEnoughDataError(offset + 1);\n }\n\n return new Result(buf.readUInt8(offset), offset + 1);\n}\n\nexport function readUInt16LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 2) {\n throw new NotEnoughDataError(offset + 2);\n }\n\n return new Result(buf.readUInt16LE(offset), offset + 2);\n}\n\nexport function readInt16LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 2) {\n throw new NotEnoughDataError(offset + 2);\n }\n\n return new Result(buf.readInt16LE(offset), offset + 2);\n}\n\nexport function readUInt24LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 3) {\n throw new NotEnoughDataError(offset + 3);\n }\n\n return new Result(buf.readUIntLE(offset, 3), offset + 3);\n}\n\nexport function readUInt32LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readUInt32LE(offset), offset + 4);\n}\n\nexport function readUInt32BE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readUInt32BE(offset), offset + 4);\n}\n\nexport function readUInt40LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 5) {\n throw new NotEnoughDataError(offset + 5);\n }\n\n return new Result(buf.readUIntLE(offset, 5), offset + 5);\n}\nexport function readInt32LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readInt32LE(offset), offset + 4);\n}\n\nexport function readBigUInt64LE(buf: Buffer, offset: number): Result<bigint> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readBigUInt64LE(offset), offset + 8);\n}\n\nexport function readBigInt64LE(buf: Buffer, offset: number): Result<bigint> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readBigInt64LE(offset), offset + 8);\n}\n\nexport function readFloatLE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 4) {\n throw new NotEnoughDataError(offset + 4);\n }\n\n return new Result(buf.readFloatLE(offset), offset + 4);\n}\n\nexport function readDoubleLE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n return new Result(buf.readDoubleLE(offset), offset + 8);\n}\n\nexport function readBVarChar(buf: Buffer, offset: number): Result<string> {\n offset = +offset;\n\n let charCount;\n ({ offset, value: charCount } = readUInt8(buf, offset));\n\n const byteLength = charCount * 2;\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.toString('ucs2', offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readBVarByte(buf: Buffer, offset: number): Result<Buffer> {\n offset = +offset;\n\n let byteLength;\n ({ offset, value: byteLength } = readUInt8(buf, offset));\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.slice(offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUsVarChar(buf: Buffer, offset: number): Result<string> {\n offset = +offset;\n\n let charCount;\n ({ offset, value: charCount } = readUInt16LE(buf, offset));\n\n const byteLength = charCount * 2;\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.toString('ucs2', offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUsVarByte(buf: Buffer, offset: number): Result<Buffer> {\n offset = +offset;\n\n let byteLength;\n ({ offset, value: byteLength } = readUInt16LE(buf, offset));\n\n if (buf.length < offset + byteLength) {\n throw new NotEnoughDataError(offset + byteLength);\n }\n\n return new Result(buf.slice(offset, offset + byteLength), offset + byteLength);\n}\n\nexport function readUNumeric64LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 8) {\n throw new NotEnoughDataError(offset + 8);\n }\n\n const low = buf.readUInt32LE(offset);\n const high = buf.readUInt32LE(offset + 4);\n\n return new Result((0x100000000 * high) + low, offset + 8);\n}\n\nexport function readUNumeric96LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 12) {\n throw new NotEnoughDataError(offset + 12);\n }\n\n const dword1 = buf.readUInt32LE(offset);\n const dword2 = buf.readUInt32LE(offset + 4);\n const dword3 = buf.readUInt32LE(offset + 8);\n\n return new Result(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3), offset + 12);\n}\n\nexport function readUNumeric128LE(buf: Buffer, offset: number): Result<number> {\n offset = +offset;\n\n if (buf.length < offset + 16) {\n throw new NotEnoughDataError(offset + 16);\n }\n\n const dword1 = buf.readUInt32LE(offset);\n const dword2 = buf.readUInt32LE(offset + 4);\n const dword3 = buf.readUInt32LE(offset + 8);\n const dword4 = buf.readUInt32LE(offset + 12);\n\n return new Result(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3) + (0x100000000 * 0x100000000 * 0x100000000 * dword4), offset + 16);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,MAAM,CAAI;EAIrBC,WAAWA,CAACC,KAAQ,EAAEC,MAAc,EAAE;IACpC,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,MAAM,GAAGA,MAAM;EACtB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAAC,OAAA,CAAAJ,MAAA,GAAAA,MAAA;AACO,MAAMK,kBAAkB,CAAC;EAG9BJ,WAAWA,CAACK,SAAiB,EAAE;IAC7B,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;AACF;AAACF,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAEM,SAASE,SAASA,CAACC,GAAW,EAAEL,MAAc,EAAkB;EACrEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACD,SAAS,CAACJ,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACtD;AAEO,SAASO,YAAYA,CAACF,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACE,YAAY,CAACP,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACzD;AAEO,SAASQ,WAAWA,CAACH,GAAW,EAAEL,MAAc,EAAkB;EACvEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACG,WAAW,CAACR,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACxD;AAEO,SAASS,YAAYA,CAACJ,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACK,UAAU,CAACV,MAAM,EAAE,CAAC,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AAC1D;AAEO,SAASW,YAAYA,CAACN,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACM,YAAY,CAACX,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACzD;AAEO,SAASY,YAAYA,CAACP,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACO,YAAY,CAACZ,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACzD;AAEO,SAASa,YAAYA,CAACR,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACK,UAAU,CAACV,MAAM,EAAE,CAAC,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AAC1D;AACO,SAASc,WAAWA,CAACT,GAAW,EAAEL,MAAc,EAAkB;EACvEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACS,WAAW,CAACd,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACxD;AAEO,SAASe,eAAeA,CAACV,GAAW,EAAEL,MAAc,EAAkB;EAC3EA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACU,eAAe,CAACf,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AAC5D;AAEO,SAASgB,cAAcA,CAACX,GAAW,EAAEL,MAAc,EAAkB;EAC1EA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACW,cAAc,CAAChB,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AAC3D;AAEO,SAASiB,WAAWA,CAACZ,GAAW,EAAEL,MAAc,EAAkB;EACvEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACY,WAAW,CAACjB,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACxD;AAEO,SAASkB,YAAYA,CAACb,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,OAAO,IAAIH,MAAM,CAACQ,GAAG,CAACa,YAAY,CAAClB,MAAM,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;AACzD;AAEO,SAASmB,YAAYA,CAACd,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIoB,SAAS;EACb,CAAC;IAAEpB,MAAM;IAAED,KAAK,EAAEqB;EAAU,CAAC,GAAGhB,SAAS,CAACC,GAAG,EAAEL,MAAM,CAAC;EAEtD,MAAMqB,UAAU,GAAGD,SAAS,GAAG,CAAC;EAEhC,IAAIf,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAGqB,UAAU,EAAE;IACpC,MAAM,IAAInB,kBAAkB,CAACF,MAAM,GAAGqB,UAAU,CAAC;EACnD;EAEA,OAAO,IAAIxB,MAAM,CAACQ,GAAG,CAACiB,QAAQ,CAAC,MAAM,EAAEtB,MAAM,EAAEA,MAAM,GAAGqB,UAAU,CAAC,EAAErB,MAAM,GAAGqB,UAAU,CAAC;AAC3F;AAEO,SAASE,YAAYA,CAAClB,GAAW,EAAEL,MAAc,EAAkB;EACxEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIqB,UAAU;EACd,CAAC;IAAErB,MAAM;IAAED,KAAK,EAAEsB;EAAW,CAAC,GAAGjB,SAAS,CAACC,GAAG,EAAEL,MAAM,CAAC;EAEvD,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAGqB,UAAU,EAAE;IACpC,MAAM,IAAInB,kBAAkB,CAACF,MAAM,GAAGqB,UAAU,CAAC;EACnD;EAEA,OAAO,IAAIxB,MAAM,CAACQ,GAAG,CAACmB,KAAK,CAACxB,MAAM,EAAEA,MAAM,GAAGqB,UAAU,CAAC,EAAErB,MAAM,GAAGqB,UAAU,CAAC;AAChF;AAEO,SAASI,aAAaA,CAACpB,GAAW,EAAEL,MAAc,EAAkB;EACzEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIoB,SAAS;EACb,CAAC;IAAEpB,MAAM;IAAED,KAAK,EAAEqB;EAAU,CAAC,GAAGb,YAAY,CAACF,GAAG,EAAEL,MAAM,CAAC;EAEzD,MAAMqB,UAAU,GAAGD,SAAS,GAAG,CAAC;EAEhC,IAAIf,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAGqB,UAAU,EAAE;IACpC,MAAM,IAAInB,kBAAkB,CAACF,MAAM,GAAGqB,UAAU,CAAC;EACnD;EAEA,OAAO,IAAIxB,MAAM,CAACQ,GAAG,CAACiB,QAAQ,CAAC,MAAM,EAAEtB,MAAM,EAAEA,MAAM,GAAGqB,UAAU,CAAC,EAAErB,MAAM,GAAGqB,UAAU,CAAC;AAC3F;AAEO,SAASK,aAAaA,CAACrB,GAAW,EAAEL,MAAc,EAAkB;EACzEA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIqB,UAAU;EACd,CAAC;IAAErB,MAAM;IAAED,KAAK,EAAEsB;EAAW,CAAC,GAAGd,YAAY,CAACF,GAAG,EAAEL,MAAM,CAAC;EAE1D,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAGqB,UAAU,EAAE;IACpC,MAAM,IAAInB,kBAAkB,CAACF,MAAM,GAAGqB,UAAU,CAAC;EACnD;EAEA,OAAO,IAAIxB,MAAM,CAACQ,GAAG,CAACmB,KAAK,CAACxB,MAAM,EAAEA,MAAM,GAAGqB,UAAU,CAAC,EAAErB,MAAM,GAAGqB,UAAU,CAAC;AAChF;AAEO,SAASM,gBAAgBA,CAACtB,GAAW,EAAEL,MAAc,EAAkB;EAC5EA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,CAAC,CAAC;EAC1C;EAEA,MAAM4B,GAAG,GAAGvB,GAAG,CAACM,YAAY,CAACX,MAAM,CAAC;EACpC,MAAM6B,IAAI,GAAGxB,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,CAAC,CAAC;EAEzC,OAAO,IAAIH,MAAM,CAAE,WAAW,GAAGgC,IAAI,GAAID,GAAG,EAAE5B,MAAM,GAAG,CAAC,CAAC;AAC3D;AAEO,SAAS8B,gBAAgBA,CAACzB,GAAW,EAAEL,MAAc,EAAkB;EAC5EA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,EAAE,EAAE;IAC5B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,EAAE,CAAC;EAC3C;EAEA,MAAM+B,MAAM,GAAG1B,GAAG,CAACM,YAAY,CAACX,MAAM,CAAC;EACvC,MAAMgC,MAAM,GAAG3B,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,CAAC,CAAC;EAC3C,MAAMiC,MAAM,GAAG5B,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,CAAC,CAAC;EAE3C,OAAO,IAAIH,MAAM,CAACkC,MAAM,GAAI,WAAW,GAAGC,MAAO,GAAI,WAAW,GAAG,WAAW,GAAGC,MAAO,EAAEjC,MAAM,GAAG,EAAE,CAAC;AACxG;AAEO,SAASkC,iBAAiBA,CAAC7B,GAAW,EAAEL,MAAc,EAAkB;EAC7EA,MAAM,GAAG,CAACA,MAAM;EAEhB,IAAIK,GAAG,CAACC,MAAM,GAAGN,MAAM,GAAG,EAAE,EAAE;IAC5B,MAAM,IAAIE,kBAAkB,CAACF,MAAM,GAAG,EAAE,CAAC;EAC3C;EAEA,MAAM+B,MAAM,GAAG1B,GAAG,CAACM,YAAY,CAACX,MAAM,CAAC;EACvC,MAAMgC,MAAM,GAAG3B,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,CAAC,CAAC;EAC3C,MAAMiC,MAAM,GAAG5B,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,CAAC,CAAC;EAC3C,MAAMmC,MAAM,GAAG9B,GAAG,CAACM,YAAY,CAACX,MAAM,GAAG,EAAE,CAAC;EAE5C,OAAO,IAAIH,MAAM,CAACkC,MAAM,GAAI,WAAW,GAAGC,MAAO,GAAI,WAAW,GAAG,WAAW,GAAGC,MAAO,GAAI,WAAW,GAAG,WAAW,GAAG,WAAW,GAAGE,MAAO,EAAEnC,MAAM,GAAG,EAAE,CAAC;AAC7J","ignoreList":[]}
@@ -661,6 +661,19 @@ async function readPLPStream(parser) {
661
661
  }
662
662
  return chunks;
663
663
  }
664
+
665
+ // Epoch offsets for building UTC `Date` values via plain arithmetic, which
666
+ // avoids the (comparatively slow) `Date.UTC` calendar calculations.
667
+ //
668
+ // Note that the day constants in the UTC and local time branches below differ
669
+ // by one, even though both branches describe the same date: `days` arrives as
670
+ // the wire-format day count since 0001-01-01 (e.g. 2000-01-01 is 730119). The
671
+ // local time branches pass `days - 730118` as the *1-based* day-of-month
672
+ // argument of `new Date(2000, 0, ...)`, while the UTC branches multiply
673
+ // `days - 730119` as a *0-based* day offset from `UTC_EPOCH_2000`.
674
+ const UTC_EPOCH_1900 = Date.UTC(1900, 0, 1);
675
+ const UTC_EPOCH_2000 = Date.UTC(2000, 0, 1);
676
+ const MILLISECONDS_PER_DAY = 86400000;
664
677
  function readSmallDateTime(buf, offset, useUTC) {
665
678
  let days;
666
679
  ({
@@ -674,7 +687,7 @@ function readSmallDateTime(buf, offset, useUTC) {
674
687
  } = (0, _helpers.readUInt16LE)(buf, offset));
675
688
  let value;
676
689
  if (useUTC) {
677
- value = new Date(Date.UTC(1900, 0, 1 + days, 0, minutes));
690
+ value = new Date(UTC_EPOCH_1900 + days * MILLISECONDS_PER_DAY + minutes * 60000);
678
691
  } else {
679
692
  value = new Date(1900, 0, 1 + days, 0, minutes);
680
693
  }
@@ -694,13 +707,14 @@ function readDateTime(buf, offset, useUTC) {
694
707
  const milliseconds = Math.round(threeHundredthsOfSecond * THREE_AND_A_THIRD);
695
708
  let value;
696
709
  if (useUTC) {
697
- value = new Date(Date.UTC(1900, 0, 1 + days, 0, 0, 0, milliseconds));
710
+ value = new Date(UTC_EPOCH_1900 + days * MILLISECONDS_PER_DAY + milliseconds);
698
711
  } else {
699
712
  value = new Date(1900, 0, 1 + days, 0, 0, 0, milliseconds);
700
713
  }
701
714
  return new _helpers.Result(value, offset);
702
715
  }
703
- function readTime(buf, offset, dataLength, scale, useUTC) {
716
+ // Reads a `time` value, returned in units of 100 nanoseconds since midnight.
717
+ function readTimeValue(buf, offset, dataLength, scale) {
704
718
  let value;
705
719
  switch (dataLength) {
706
720
  case 3:
@@ -737,15 +751,23 @@ function readTime(buf, offset, dataLength, scale, useUTC) {
737
751
  value *= 10;
738
752
  }
739
753
  }
754
+ return new _helpers.Result(value, offset);
755
+ }
756
+ function readTime(buf, offset, dataLength, scale, useUTC) {
757
+ let value;
758
+ ({
759
+ offset,
760
+ value
761
+ } = readTimeValue(buf, offset, dataLength, scale));
740
762
  let date;
741
763
  if (useUTC) {
742
- date = new Date(Date.UTC(1970, 0, 1, 0, 0, 0, value / 10000));
764
+ date = new Date(value / 10000);
743
765
  } else {
744
766
  date = new Date(1970, 0, 1, 0, 0, 0, value / 10000);
745
767
  }
746
768
  Object.defineProperty(date, 'nanosecondsDelta', {
747
769
  enumerable: false,
748
- value: value % 10000 / Math.pow(10, 7)
770
+ value: value % 10000 / 1e7
749
771
  });
750
772
  return new _helpers.Result(date, offset);
751
773
  }
@@ -756,7 +778,7 @@ function readDate(buf, offset, useUTC) {
756
778
  value: days
757
779
  } = (0, _helpers.readUInt24LE)(buf, offset));
758
780
  if (useUTC) {
759
- return new _helpers.Result(new Date(Date.UTC(2000, 0, days - 730118)), offset);
781
+ return new _helpers.Result(new Date(UTC_EPOCH_2000 + (days - 730119) * MILLISECONDS_PER_DAY), offset);
760
782
  } else {
761
783
  return new _helpers.Result(new Date(2000, 0, days - 730118), offset);
762
784
  }
@@ -766,7 +788,7 @@ function readDateTime2(buf, offset, dataLength, scale, useUTC) {
766
788
  ({
767
789
  offset,
768
790
  value: time
769
- } = readTime(buf, offset, dataLength - 3, scale, useUTC));
791
+ } = readTimeValue(buf, offset, dataLength - 3, scale));
770
792
  let days;
771
793
  ({
772
794
  offset,
@@ -774,13 +796,13 @@ function readDateTime2(buf, offset, dataLength, scale, useUTC) {
774
796
  } = (0, _helpers.readUInt24LE)(buf, offset));
775
797
  let date;
776
798
  if (useUTC) {
777
- date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
799
+ date = new Date(UTC_EPOCH_2000 + (days - 730119) * MILLISECONDS_PER_DAY + Math.trunc(time / 10000));
778
800
  } else {
779
- date = new Date(2000, 0, days - 730118, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
801
+ date = new Date(2000, 0, days - 730118, 0, 0, 0, time / 10000);
780
802
  }
781
803
  Object.defineProperty(date, 'nanosecondsDelta', {
782
804
  enumerable: false,
783
- value: time.nanosecondsDelta
805
+ value: time % 10000 / 1e7
784
806
  });
785
807
  return new _helpers.Result(date, offset);
786
808
  }
@@ -789,7 +811,7 @@ function readDateTimeOffset(buf, offset, dataLength, scale) {
789
811
  ({
790
812
  offset,
791
813
  value: time
792
- } = readTime(buf, offset, dataLength - 5, scale, true));
814
+ } = readTimeValue(buf, offset, dataLength - 5, scale));
793
815
  let days;
794
816
  ({
795
817
  offset,
@@ -800,14 +822,14 @@ function readDateTimeOffset(buf, offset, dataLength, scale) {
800
822
  ({
801
823
  offset
802
824
  } = (0, _helpers.readUInt16LE)(buf, offset));
803
- const date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
825
+ const date = new Date(UTC_EPOCH_2000 + (days - 730119) * MILLISECONDS_PER_DAY + Math.trunc(time / 10000));
804
826
  Object.defineProperty(date, 'nanosecondsDelta', {
805
827
  enumerable: false,
806
- value: time.nanosecondsDelta
828
+ value: time % 10000 / 1e7
807
829
  });
808
830
  return new _helpers.Result(date, offset);
809
831
  }
810
832
  module.exports.readValue = readValue;
811
833
  module.exports.isPLPStream = isPLPStream;
812
834
  module.exports.readPLPStream = readPLPStream;
813
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJfaGVscGVycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIlVOS05PV05fUExQX0xFTiIsIkRFRkFVTFRfRU5DT0RJTkciLCJyZWFkVGlueUludCIsImJ1ZiIsIm9mZnNldCIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInZhbHVlIiwicmVhZEJpZ0ludDY0TEUiLCJSZXN1bHQiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJsb3ciLCJyZWFkVUludDMyTEUiLCJyZWFkQml0IiwicmVhZFZhbHVlIiwibWV0YWRhdGEiLCJvcHRpb25zIiwidHlwZSIsIm5hbWUiLCJkYXRhTGVuZ3RoIiwiRXJyb3IiLCJjb2RlcGFnZSIsImNvbGxhdGlvbiIsInJlYWRVSW50MTZMRSIsInJlYWRDaGFycyIsInJlYWROQ2hhcnMiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkU21hbGxEYXRlVGltZSIsInVzZVVUQyIsInJlYWREYXRlVGltZSIsInJlYWRUaW1lIiwic2NhbGUiLCJyZWFkRGF0ZSIsInJlYWREYXRlVGltZTIiLCJyZWFkRGF0ZVRpbWVPZmZzZXQiLCJyZWFkTnVtZXJpYyIsInByZWNpc2lvbiIsInJlYWRVbmlxdWVJZGVudGlmaWVyIiwic3ByaW50ZiIsInJlYWRWYXJpYW50IiwiaXNQTFBTdHJlYW0iLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJNYXRoIiwicG93IiwiYmFzZVR5cGUiLCJUWVBFIiwicHJvcEJ5dGVzIiwicmVhZENvbGxhdGlvbiIsImxlbmd0aCIsIk5vdEVub3VnaERhdGFFcnJvciIsInNsaWNlIiwiaWNvbnYiLCJkZWNvZGUiLCJyZWFkUExQU3RyZWFtIiwicGFyc2VyIiwiYnVmZmVyIiwicG9zaXRpb24iLCJ3YWl0Rm9yQ2h1bmsiLCJleHBlY3RlZExlbmd0aCIsInJlYWRCaWdVSW50NjRMRSIsImNodW5rcyIsImN1cnJlbnRMZW5ndGgiLCJjaHVua0xlbmd0aCIsInB1c2giLCJOdW1iZXIiLCJkYXlzIiwibWludXRlcyIsIkRhdGUiLCJVVEMiLCJ0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCIsIm1pbGxpc2Vjb25kcyIsInJvdW5kIiwicmVhZFVJbnQyNExFIiwicmVhZFVJbnQ0MExFIiwiaSIsImRhdGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJ0aW1lIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsIm5hbm9zZWNvbmRzRGVsdGEiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3ZhbHVlLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vdG9rZW4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhLCByZWFkQ29sbGF0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vZGF0YS10eXBlJztcblxuaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuaW1wb3J0IHsgYnVmZmVyVG9Mb3dlckNhc2VHdWlkLCBidWZmZXJUb1VwcGVyQ2FzZUd1aWQgfSBmcm9tICcuL2d1aWQtcGFyc2VyJztcbmltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciwgUmVzdWx0LCByZWFkQmlnSW50NjRMRSwgcmVhZERvdWJsZUxFLCByZWFkRmxvYXRMRSwgcmVhZEludDE2TEUsIHJlYWRJbnQzMkxFLCByZWFkVUludDE2TEUsIHJlYWRVSW50MzJMRSwgcmVhZFVJbnQ4LCByZWFkVUludDI0TEUsIHJlYWRVSW50NDBMRSwgcmVhZFVOdW1lcmljNjRMRSwgcmVhZFVOdW1lcmljOTZMRSwgcmVhZFVOdW1lcmljMTI4TEUgfSBmcm9tICcuL3Rva2VuL2hlbHBlcnMnO1xuXG5jb25zdCBOVUxMID0gKDEgPDwgMTYpIC0gMTtcbmNvbnN0IE1BWCA9ICgxIDw8IDE2KSAtIDE7XG5jb25zdCBUSFJFRV9BTkRfQV9USElSRCA9IDMgKyAoMSAvIDMpO1xuY29uc3QgTU9ORVlfRElWSVNPUiA9IDEwMDAwO1xuY29uc3QgUExQX05VTEwgPSAweEZGRkZGRkZGRkZGRkZGRkZuO1xuY29uc3QgVU5LTk9XTl9QTFBfTEVOID0gMHhGRkZGRkZGRkZGRkZGRkZFbjtcbmNvbnN0IERFRkFVTFRfRU5DT0RJTkcgPSAndXRmOCc7XG5cbmZ1bmN0aW9uIHJlYWRUaW55SW50KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgcmV0dXJuIHJlYWRVSW50OChidWYsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbEludChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIHJldHVybiByZWFkSW50MTZMRShidWYsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gcmVhZEludDMyTEUoYnVmLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkQmlnSW50KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxzdHJpbmc+IHtcbiAgbGV0IHZhbHVlO1xuICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkQmlnSW50NjRMRShidWYsIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KHZhbHVlLnRvU3RyaW5nKCksIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRSZWFsKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgcmV0dXJuIHJlYWRGbG9hdExFKGJ1Ziwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgcmV0dXJuIHJlYWREb3VibGVMRShidWYsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbE1vbmV5KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgbGV0IHZhbHVlO1xuICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KHZhbHVlIC8gTU9ORVlfRElWSVNPUiwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1vbmV5KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgbGV0IGhpZ2g7XG4gICh7IG9mZnNldCwgdmFsdWU6IGhpZ2ggfSA9IHJlYWRJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IGxvdztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbG93IH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCgobG93ICsgKDB4MTAwMDAwMDAwICogaGlnaCkpIC8gTU9ORVlfRElWSVNPUiwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpdChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8Ym9vbGVhbj4ge1xuICBsZXQgdmFsdWU7XG4gICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KCEhdmFsdWUsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYWx1ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDx1bmtub3duPiB7XG4gIGNvbnN0IHR5cGUgPSBtZXRhZGF0YS50eXBlO1xuXG4gIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnTnVsbCc6XG4gICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnVGlueUludCc6IHtcbiAgICAgIHJldHVybiByZWFkVGlueUludChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnU21hbGxJbnQnOiB7XG4gICAgICByZXR1cm4gcmVhZFNtYWxsSW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdJbnQnOiB7XG4gICAgICByZXR1cm4gcmVhZEludChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnQmlnSW50Jzoge1xuICAgICAgcmV0dXJuIHJlYWRCaWdJbnQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0ludE4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiByZWFkVGlueUludChidWYsIG9mZnNldCk7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByZWFkSW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KGJ1Ziwgb2Zmc2V0KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEludE4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdSZWFsJzoge1xuICAgICAgcmV0dXJuIHJlYWRSZWFsKGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdGbG9hdCc6IHtcbiAgICAgIHJldHVybiByZWFkRmxvYXQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0Zsb2F0Tic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHJlYWRSZWFsKGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiByZWFkRmxvYXQoYnVmLCBvZmZzZXQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRmxvYXROJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnU21hbGxNb25leSc6IHtcbiAgICAgIHJldHVybiByZWFkU21hbGxNb25leShidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRNb25leShidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdNb25leU4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxNb25leShidWYsIG9mZnNldCk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIE1vbmV5TicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ0JpdCc6IHtcbiAgICAgIHJldHVybiByZWFkQml0KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdCaXROJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpdChidWYsIG9mZnNldCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBCaXROJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyQ2hhcic6XG4gICAgY2FzZSAnQ2hhcic6IHtcbiAgICAgIGNvbnN0IGNvZGVwYWdlID0gbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSE7XG5cbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIGNvZGVwYWdlKTtcbiAgICB9XG5cbiAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgY2FzZSAnTkNoYXInOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZE5DaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIGxldCB0ZXh0UG9pbnRlckxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHRleHRQb2ludGVyTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRleHRwb2ludGVyXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIHRleHRQb2ludGVyTGVuZ3RoKSk7XG5cbiAgICAgIC8vIFRpbWVzdGFtcFxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCA4KSk7XG5cbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIG1ldGFkYXRhLmNvbGxhdGlvbiEuY29kZXBhZ2UhKTtcbiAgICB9XG5cbiAgICBjYXNlICdOVGV4dCc6IHtcbiAgICAgIGxldCB0ZXh0UG9pbnRlckxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHRleHRQb2ludGVyTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRleHRwb2ludGVyXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIHRleHRQb2ludGVyTGVuZ3RoKSk7XG5cbiAgICAgIC8vIFRpbWVzdGFtcFxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCA4KSk7XG5cbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkTkNoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjYXNlICdJbWFnZSc6IHtcbiAgICAgIGxldCB0ZXh0UG9pbnRlckxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHRleHRQb2ludGVyTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRleHRwb2ludGVyXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIHRleHRQb2ludGVyTGVuZ3RoKSk7XG5cbiAgICAgIC8vIFRpbWVzdGFtcFxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCA4KSk7XG5cbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjYXNlICdTbWFsbERhdGVUaW1lJzoge1xuICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWUnOiB7XG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWVOJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIERhdGVUaW1lTicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ1RpbWUnOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZFRpbWUoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGUnOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZERhdGUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZTInOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lMihidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWVPZmZzZXQnOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBtZXRhZGF0YS5zY2FsZSEpO1xuICAgIH1cblxuICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICBjYXNlICdEZWNpbWFsTic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkTnVtZXJpYyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgbWV0YWRhdGEucHJlY2lzaW9uISwgbWV0YWRhdGEuc2NhbGUhKTtcbiAgICB9XG5cbiAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgMHgxMDpcbiAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIoYnVmLCBvZmZzZXQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIGd1aWQgc2l6ZSAlZCcsIGRhdGFMZW5ndGghIC0gMSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ1ZhcmlhbnQnOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZFZhcmlhbnQoYnVmLCBvZmZzZXQsIG9wdGlvbnMsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIScpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BMUFN0cmVhbShtZXRhZGF0YTogTWV0YWRhdGEpIHtcbiAgc3dpdGNoIChtZXRhZGF0YS50eXBlLm5hbWUpIHtcbiAgICBjYXNlICdWYXJDaGFyJzpcbiAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgY2FzZSAnVmFyQmluYXJ5Jzoge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhLmRhdGFMZW5ndGggPT09IE1BWDtcbiAgICB9XG5cbiAgICBjYXNlICdYbWwnOiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjYXNlICdVRFQnOiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFVuaXF1ZUlkZW50aWZpZXIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKTogUmVzdWx0PHN0cmluZz4ge1xuICBsZXQgZGF0YTtcbiAgKHsgdmFsdWU6IGRhdGEsIG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgMHgxMCkpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KG9wdGlvbnMubG93ZXJDYXNlR3VpZHMgPyBidWZmZXJUb0xvd2VyQ2FzZUd1aWQoZGF0YSkgOiBidWZmZXJUb1VwcGVyQ2FzZUd1aWQoZGF0YSksIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWROdW1lcmljKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBfcHJlY2lzaW9uOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIGxldCBzaWduO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBzaWduIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICBzaWduID0gc2lnbiA9PT0gMSA/IDEgOiAtMTtcblxuICBsZXQgdmFsdWU7XG4gIGlmIChkYXRhTGVuZ3RoID09PSA1KSB7XG4gICAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG4gIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gOSkge1xuICAgICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRVTnVtZXJpYzY0TEUoYnVmLCBvZmZzZXQpKTtcbiAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAxMykge1xuICAgICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRVTnVtZXJpYzk2TEUoYnVmLCBvZmZzZXQpKTtcbiAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAxNykge1xuICAgICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRVTnVtZXJpYzEyOExFKGJ1Ziwgb2Zmc2V0KSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIG51bWVyaWMgZGF0YUxlbmd0aCAlZCcsIGRhdGFMZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KCh2YWx1ZSAqIHNpZ24pIC8gTWF0aC5wb3coMTAsIHNjYWxlKSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhcmlhbnQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBkYXRhTGVuZ3RoOiBudW1iZXIpOiBSZXN1bHQ8dW5rbm93bj4ge1xuICBsZXQgYmFzZVR5cGU7XG4gICh7IHZhbHVlOiBiYXNlVHlwZSwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICBjb25zdCB0eXBlID0gVFlQRVtiYXNlVHlwZV07XG5cbiAgbGV0IHByb3BCeXRlcztcbiAgKHsgdmFsdWU6IHByb3BCeXRlcywgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICBkYXRhTGVuZ3RoID0gZGF0YUxlbmd0aCAtIHByb3BCeXRlcyAtIDI7XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiByZWFkVW5pcXVlSWRlbnRpZmllcihidWYsIG9mZnNldCwgb3B0aW9ucyk7XG5cbiAgICBjYXNlICdCaXQnOlxuICAgICAgcmV0dXJuIHJlYWRCaXQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnVGlueUludCc6XG4gICAgICByZXR1cm4gcmVhZFRpbnlJbnQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnU21hbGxJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbEludChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRJbnQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnQmlnSW50JzpcbiAgICAgIHJldHVybiByZWFkQmlnSW50KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG5cbiAgICBjYXNlICdEYXRlVGltZSc6XG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG5cbiAgICBjYXNlICdSZWFsJzpcbiAgICAgIHJldHVybiByZWFkUmVhbChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdGbG9hdCc6XG4gICAgICByZXR1cm4gcmVhZEZsb2F0KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ1NtYWxsTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgIHJldHVybiByZWFkTW9uZXkoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnRGF0ZSc6XG4gICAgICByZXR1cm4gcmVhZERhdGUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcblxuICAgIGNhc2UgJ1RpbWUnOiB7XG4gICAgICBsZXQgc2NhbGU7XG4gICAgICAoeyB2YWx1ZTogc2NhbGUsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkVGltZShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgc2NhbGUsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZTInOiB7XG4gICAgICBsZXQgc2NhbGU7XG4gICAgICAoeyB2YWx1ZTogc2NhbGUsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUyKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0Jzoge1xuICAgICAgbGV0IHNjYWxlO1xuICAgICAgKHsgdmFsdWU6IHNjYWxlLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBzY2FsZSk7XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOiB7XG4gICAgICAvLyBtYXhMZW5ndGggKHVudXNlZD8pXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2FzZSAnTnVtZXJpY04nOlxuICAgIGNhc2UgJ0RlY2ltYWxOJzoge1xuICAgICAgbGV0IHByZWNpc2lvbjtcbiAgICAgICh7IHZhbHVlOiBwcmVjaXNpb24sIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBzY2FsZTtcbiAgICAgICh7IHZhbHVlOiBzY2FsZSwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWROdW1lcmljKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlKTtcbiAgICB9XG5cbiAgICBjYXNlICdWYXJDaGFyJzpcbiAgICBjYXNlICdDaGFyJzoge1xuICAgICAgLy8gbWF4TGVuZ3RoICh1bnVzZWQ/KVxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgbGV0IGNvbGxhdGlvbjtcbiAgICAgICh7IHZhbHVlOiBjb2xsYXRpb24sIG9mZnNldCB9ID0gcmVhZENvbGxhdGlvbihidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZENoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBjb2xsYXRpb24uY29kZXBhZ2UhKTtcbiAgICB9XG5cbiAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgY2FzZSAnTkNoYXInOiB7XG4gICAgICAvLyBtYXhMZW5ndGggKHVudXNlZD8pXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICAvLyBjb2xsYXRpb24gKHVudXNlZD8pXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRDb2xsYXRpb24oYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWROQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHlwZSEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkQmluYXJ5KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKTogUmVzdWx0PEJ1ZmZlcj4ge1xuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIGRhdGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTm90RW5vdWdoRGF0YUVycm9yKG9mZnNldCArIGRhdGFMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoYnVmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZGF0YUxlbmd0aCksIG9mZnNldCArIGRhdGFMZW5ndGgpO1xufVxuXG5mdW5jdGlvbiByZWFkQ2hhcnMoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNvZGVwYWdlOiBzdHJpbmcpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGlmIChidWYubGVuZ3RoIDwgb2Zmc2V0ICsgZGF0YUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBOb3RFbm91Z2hEYXRhRXJyb3Iob2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3VsdChpY29udi5kZWNvZGUoYnVmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZGF0YUxlbmd0aCksIGNvZGVwYWdlID8/IERFRkFVTFRfRU5DT0RJTkcpLCBvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gcmVhZE5DaGFycyhidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlcik6IFJlc3VsdDxzdHJpbmc+IHtcbiAgaWYgKGJ1Zi5sZW5ndGggPCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KGJ1Zi50b1N0cmluZygndWNzMicsIG9mZnNldCwgb2Zmc2V0ICsgZGF0YUxlbmd0aCksIG9mZnNldCArIGRhdGFMZW5ndGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUExQU3RyZWFtKHBhcnNlcjogUGFyc2VyKTogUHJvbWlzZTxudWxsIHwgQnVmZmVyW10+IHtcbiAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoIDwgcGFyc2VyLnBvc2l0aW9uICsgOCkge1xuICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgfVxuXG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gcGFyc2VyLmJ1ZmZlci5yZWFkQmlnVUludDY0TEUocGFyc2VyLnBvc2l0aW9uKTtcbiAgcGFyc2VyLnBvc2l0aW9uICs9IDg7XG5cbiAgaWYgKGV4cGVjdGVkTGVuZ3RoID09PSBQTFBfTlVMTCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB3aGlsZSAocGFyc2VyLmJ1ZmZlci5sZW5ndGggPCBwYXJzZXIucG9zaXRpb24gKyA0KSB7XG4gICAgICBhd2FpdCBwYXJzZXIud2FpdEZvckNodW5rKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmtMZW5ndGggPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50MzJMRShwYXJzZXIucG9zaXRpb24pO1xuICAgIHBhcnNlci5wb3NpdGlvbiArPSA0O1xuXG4gICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoIDwgcGFyc2VyLnBvc2l0aW9uICsgY2h1bmtMZW5ndGgpIHtcbiAgICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICB9XG5cbiAgICBjaHVua3MucHVzaChwYXJzZXIuYnVmZmVyLnNsaWNlKHBhcnNlci5wb3NpdGlvbiwgcGFyc2VyLnBvc2l0aW9uICsgY2h1bmtMZW5ndGgpKTtcbiAgICBwYXJzZXIucG9zaXRpb24gKz0gY2h1bmtMZW5ndGg7XG4gICAgY3VycmVudExlbmd0aCArPSBjaHVua0xlbmd0aDtcbiAgfVxuXG4gIGlmIChleHBlY3RlZExlbmd0aCAhPT0gVU5LTk9XTl9QTFBfTEVOKSB7XG4gICAgaWYgKGN1cnJlbnRMZW5ndGggIT09IE51bWJlcihleHBlY3RlZExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGlhbGx5IExlbmd0aC1wcmVmaXhlZCBCeXRlcyB1bm1hdGNoZWQgbGVuZ3RocyA6IGV4cGVjdGVkICcgKyBleHBlY3RlZExlbmd0aCArICcsIGJ1dCBnb3QgJyArIGN1cnJlbnRMZW5ndGggKyAnIGJ5dGVzJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcztcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsRGF0ZVRpbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZT4ge1xuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IG1pbnV0ZXM7XG4gICh7IG9mZnNldCwgdmFsdWU6IG1pbnV0ZXMgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCB2YWx1ZTtcbiAgaWYgKHVzZVVUQykge1xuICAgIHZhbHVlID0gbmV3IERhdGUoRGF0ZS5VVEMoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpKTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCBtaW51dGVzKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KHZhbHVlLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZT4ge1xuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZEludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgdGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQ7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRocmVlSHVuZHJlZHRoc09mU2Vjb25kIH0gPSByZWFkSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IG1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQgKiBUSFJFRV9BTkRfQV9USElSRCk7XG5cbiAgbGV0IHZhbHVlO1xuICBpZiAodXNlVVRDKSB7XG4gICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgMCwgMCwgbWlsbGlzZWNvbmRzKSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxICsgZGF5cywgMCwgMCwgMCwgbWlsbGlzZWNvbmRzKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KHZhbHVlLCBvZmZzZXQpO1xufVxuXG5pbnRlcmZhY2UgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhIGV4dGVuZHMgRGF0ZSB7XG4gIG5hbm9zZWNvbmRzRGVsdGE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE+IHtcbiAgbGV0IHZhbHVlO1xuXG4gIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgIGNhc2UgMzoge1xuICAgICAgKHsgdmFsdWUsIG9mZnNldCB9ID0gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0KSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIDQ6IHtcbiAgICAgICh7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSA1OiB7XG4gICAgICAoeyB2YWx1ZSwgb2Zmc2V0IH0gPSByZWFkVUludDQwTEUoYnVmLCBvZmZzZXQpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWFjaGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NhbGUgPCA3KSB7XG4gICAgZm9yIChsZXQgaSA9IHNjYWxlOyBpIDwgNzsgaSsrKSB7XG4gICAgICB2YWx1ZSAqPSAxMDtcbiAgICB9XG4gIH1cblxuICBsZXQgZGF0ZTtcbiAgaWYgKHVzZVVUQykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTcwLCAwLCAxLCAwLCAwLCAwLCB2YWx1ZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICB9IGVsc2Uge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCAwLCAxLCAwLCAwLCAwLCB2YWx1ZSAvIDEwMDAwKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiAodmFsdWUgJSAxMDAwMCkgLyBNYXRoLnBvdygxMCwgNylcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoZGF0ZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZT4ge1xuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgaWYgKHVzZVVUQykge1xuICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKSwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgRGF0ZSgyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSwgb2Zmc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUyKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhPiB7XG4gIGxldCB0aW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiB0aW1lIH0gPSByZWFkVGltZShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCAtIDMsIHNjYWxlLCB1c2VVVEMpKTtcblxuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IGRhdGU7XG4gIGlmICh1c2VVVEMpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgMCwgMCwgMCwgK3RpbWUpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gIH0gZWxzZSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIHRpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpLCB0aW1lLmdldE1pbGxpc2Vjb25kcygpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoZGF0ZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lT2Zmc2V0KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogUmVzdWx0PERhdGVXaXRoTmFub3NlY29uZHNEZWx0YT4ge1xuICBsZXQgdGltZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdGltZSB9ID0gcmVhZFRpbWUoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGggLSA1LCBzY2FsZSwgdHJ1ZSkpO1xuXG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQpKTtcblxuICAvLyB0aW1lIG9mZnNldD9cbiAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgMCwgMCwgMCwgK3RpbWUpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRlLCAnbmFub3NlY29uZHNEZWx0YScsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogdGltZS5uYW5vc2Vjb25kc0RlbHRhXG4gIH0pO1xuICByZXR1cm4gbmV3IFJlc3VsdChkYXRlLCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yZWFkVmFsdWUgPSByZWFkVmFsdWU7XG5tb2R1bGUuZXhwb3J0cy5pc1BMUFN0cmVhbSA9IGlzUExQU3RyZWFtO1xubW9kdWxlLmV4cG9ydHMucmVhZFBMUFN0cmVhbSA9IHJlYWRQTFBTdHJlYW07XG5cbmV4cG9ydCB7IHJlYWRWYWx1ZSwgaXNQTFBTdHJlYW0sIHJlYWRQTFBTdHJlYW0gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQSxJQUFBQSxlQUFBLEdBQUFDLE9BQUE7QUFDQSxJ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
835
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJfaGVscGVycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIlVOS05PV05fUExQX0xFTiIsIkRFRkFVTFRfRU5DT0RJTkciLCJyZWFkVGlueUludCIsImJ1ZiIsIm9mZnNldCIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInZhbHVlIiwicmVhZEJpZ0ludDY0TEUiLCJSZXN1bHQiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJsb3ciLCJyZWFkVUludDMyTEUiLCJyZWFkQml0IiwicmVhZFZhbHVlIiwibWV0YWRhdGEiLCJvcHRpb25zIiwidHlwZSIsIm5hbWUiLCJkYXRhTGVuZ3RoIiwiRXJyb3IiLCJjb2RlcGFnZSIsImNvbGxhdGlvbiIsInJlYWRVSW50MTZMRSIsInJlYWRDaGFycyIsInJlYWROQ2hhcnMiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkU21hbGxEYXRlVGltZSIsInVzZVVUQyIsInJlYWREYXRlVGltZSIsInJlYWRUaW1lIiwic2NhbGUiLCJyZWFkRGF0ZSIsInJlYWREYXRlVGltZTIiLCJyZWFkRGF0ZVRpbWVPZmZzZXQiLCJyZWFkTnVtZXJpYyIsInByZWNpc2lvbiIsInJlYWRVbmlxdWVJZGVudGlmaWVyIiwic3ByaW50ZiIsInJlYWRWYXJpYW50IiwiaXNQTFBTdHJlYW0iLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJNYXRoIiwicG93IiwiYmFzZVR5cGUiLCJUWVBFIiwicHJvcEJ5dGVzIiwicmVhZENvbGxhdGlvbiIsImxlbmd0aCIsIk5vdEVub3VnaERhdGFFcnJvciIsInNsaWNlIiwiaWNvbnYiLCJkZWNvZGUiLCJyZWFkUExQU3RyZWFtIiwicGFyc2VyIiwiYnVmZmVyIiwicG9zaXRpb24iLCJ3YWl0Rm9yQ2h1bmsiLCJleHBlY3RlZExlbmd0aCIsInJlYWRCaWdVSW50NjRMRSIsImNodW5rcyIsImN1cnJlbnRMZW5ndGgiLCJjaHVua0xlbmd0aCIsInB1c2giLCJOdW1iZXIiLCJVVENfRVBPQ0hfMTkwMCIsIkRhdGUiLCJVVEMiLCJVVENfRVBPQ0hfMjAwMCIsIk1JTExJU0VDT05EU19QRVJfREFZIiwiZGF5cyIsIm1pbnV0ZXMiLCJ0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCIsIm1pbGxpc2Vjb25kcyIsInJvdW5kIiwicmVhZFRpbWVWYWx1ZSIsInJlYWRVSW50MjRMRSIsInJlYWRVSW50NDBMRSIsImkiLCJkYXRlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwidGltZSIsInRydW5jIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3Rva2VuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSwgcmVhZENvbGxhdGlvbiB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5cbmltcG9ydCBpY29udiBmcm9tICdpY29udi1saXRlJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcbmltcG9ydCB7IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZCwgYnVmZmVyVG9VcHBlckNhc2VHdWlkIH0gZnJvbSAnLi9ndWlkLXBhcnNlcic7XG5pbXBvcnQgeyBOb3RFbm91Z2hEYXRhRXJyb3IsIFJlc3VsdCwgcmVhZEJpZ0ludDY0TEUsIHJlYWREb3VibGVMRSwgcmVhZEZsb2F0TEUsIHJlYWRJbnQxNkxFLCByZWFkSW50MzJMRSwgcmVhZFVJbnQxNkxFLCByZWFkVUludDMyTEUsIHJlYWRVSW50OCwgcmVhZFVJbnQyNExFLCByZWFkVUludDQwTEUsIHJlYWRVTnVtZXJpYzY0TEUsIHJlYWRVTnVtZXJpYzk2TEUsIHJlYWRVTnVtZXJpYzEyOExFIH0gZnJvbSAnLi90b2tlbi9oZWxwZXJzJztcblxuY29uc3QgTlVMTCA9ICgxIDw8IDE2KSAtIDE7XG5jb25zdCBNQVggPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgVEhSRUVfQU5EX0FfVEhJUkQgPSAzICsgKDEgLyAzKTtcbmNvbnN0IE1PTkVZX0RJVklTT1IgPSAxMDAwMDtcbmNvbnN0IFBMUF9OVUxMID0gMHhGRkZGRkZGRkZGRkZGRkZGbjtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IDB4RkZGRkZGRkZGRkZGRkZGRW47XG5jb25zdCBERUZBVUxUX0VOQ09ESU5HID0gJ3V0ZjgnO1xuXG5mdW5jdGlvbiByZWFkVGlueUludChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIHJldHVybiByZWFkVUludDgoYnVmLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxJbnQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gcmVhZEludDE2TEUoYnVmLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkSW50KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgcmV0dXJuIHJlYWRJbnQzMkxFKGJ1Ziwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpZ0ludChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGxldCB2YWx1ZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZEJpZ0ludDY0TEUoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh2YWx1ZS50b1N0cmluZygpLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkUmVhbChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIHJldHVybiByZWFkRmxvYXRMRShidWYsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIHJldHVybiByZWFkRG91YmxlTEUoYnVmLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxNb25leShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIGxldCB2YWx1ZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZEludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh2YWx1ZSAvIE1PTkVZX0RJVklTT1IsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNb25leShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIGxldCBoaWdoO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBoaWdoIH0gPSByZWFkSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCBsb3c7XG4gICh7IG9mZnNldCwgdmFsdWU6IGxvdyB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoKGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpKSAvIE1PTkVZX0RJVklTT1IsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaXQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PGJvb2xlYW4+IHtcbiAgbGV0IHZhbHVlO1xuICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCghIXZhbHVlLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkVmFsdWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8dW5rbm93bj4ge1xuICBjb25zdCB0eXBlID0gbWV0YWRhdGEudHlwZTtcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ051bGwnOlxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ1RpbnlJbnQnOiB7XG4gICAgICByZXR1cm4gcmVhZFRpbnlJbnQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ1NtYWxsSW50Jzoge1xuICAgICAgcmV0dXJuIHJlYWRTbWFsbEludChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnSW50Jzoge1xuICAgICAgcmV0dXJuIHJlYWRJbnQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0JpZ0ludCc6IHtcbiAgICAgIHJldHVybiByZWFkQmlnSW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdJbnROJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQoYnVmLCBvZmZzZXQpO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbEludChidWYsIG9mZnNldCk7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcmVhZEludChidWYsIG9mZnNldCk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpZ0ludChidWYsIG9mZnNldCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBJbnROJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnUmVhbCc6IHtcbiAgICAgIHJldHVybiByZWFkUmVhbChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnRmxvYXQnOiB7XG4gICAgICByZXR1cm4gcmVhZEZsb2F0KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdGbG9hdE4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByZWFkUmVhbChidWYsIG9mZnNldCk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gcmVhZEZsb2F0KGJ1Ziwgb2Zmc2V0KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEZsb2F0TicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ1NtYWxsTW9uZXknOiB7XG4gICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgIHJldHVybiByZWFkTW9uZXkoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnTW9uZXlOJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkoYnVmLCBvZmZzZXQpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRNb25leShidWYsIG9mZnNldCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBNb25leU4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdCaXQnOiB7XG4gICAgICByZXR1cm4gcmVhZEJpdChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnQml0Tic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIHJlYWRCaXQoYnVmLCBvZmZzZXQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgQml0TicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOiB7XG4gICAgICBjb25zdCBjb2RlcGFnZSA9IG1ldGFkYXRhLmNvbGxhdGlvbiEuY29kZXBhZ2UhO1xuXG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZENoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBjb2RlcGFnZSk7XG4gICAgfVxuXG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ05DaGFyJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWROQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgY2FzZSAnQmluYXJ5Jzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGNhc2UgJ1RleHQnOiB7XG4gICAgICBsZXQgdGV4dFBvaW50ZXJMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiB0ZXh0UG9pbnRlckxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUZXh0cG9pbnRlclxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCB0ZXh0UG9pbnRlckxlbmd0aCkpO1xuXG4gICAgICAvLyBUaW1lc3RhbXBcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgOCkpO1xuXG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZENoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlISk7XG4gICAgfVxuXG4gICAgY2FzZSAnTlRleHQnOiB7XG4gICAgICBsZXQgdGV4dFBvaW50ZXJMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiB0ZXh0UG9pbnRlckxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUZXh0cG9pbnRlclxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCB0ZXh0UG9pbnRlckxlbmd0aCkpO1xuXG4gICAgICAvLyBUaW1lc3RhbXBcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgOCkpO1xuXG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZE5DaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2FzZSAnSW1hZ2UnOiB7XG4gICAgICBsZXQgdGV4dFBvaW50ZXJMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiB0ZXh0UG9pbnRlckxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUZXh0cG9pbnRlclxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCB0ZXh0UG9pbnRlckxlbmd0aCkpO1xuXG4gICAgICAvLyBUaW1lc3RhbXBcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgOCkpO1xuXG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY2FzZSAnU21hbGxEYXRlVGltZSc6IHtcbiAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lJzoge1xuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lTic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBEYXRlVGltZU4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdUaW1lJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWRUaW1lKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBtZXRhZGF0YS5zY2FsZSEsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWREYXRlKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWUyJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0Jzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZU9mZnNldChidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgbWV0YWRhdGEuc2NhbGUhKTtcbiAgICB9XG5cbiAgICBjYXNlICdOdW1lcmljTic6XG4gICAgY2FzZSAnRGVjaW1hbE4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZE51bWVyaWMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIG1ldGFkYXRhLnByZWNpc2lvbiEsIG1ldGFkYXRhLnNjYWxlISk7XG4gICAgfVxuXG4gICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDB4MTA6XG4gICAgICAgICAgcmV0dXJuIHJlYWRVbmlxdWVJZGVudGlmaWVyKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnN1cHBvcnRlZCBndWlkIHNpemUgJWQnLCBkYXRhTGVuZ3RoISAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdWYXJpYW50Jzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWRWYXJpYW50KGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHlwZSEnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQTFBTdHJlYW0obWV0YWRhdGE6IE1ldGFkYXRhKSB7XG4gIHN3aXRjaCAobWV0YWRhdGEudHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnVmFyQ2hhcic6XG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ1ZhckJpbmFyeSc6IHtcbiAgICAgIHJldHVybiBtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVg7XG4gICAgfVxuXG4gICAgY2FzZSAnWG1sJzoge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY2FzZSAnVURUJzoge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxzdHJpbmc+IHtcbiAgbGV0IGRhdGE7XG4gICh7IHZhbHVlOiBkYXRhLCBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIDB4MTApKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdChvcHRpb25zLmxvd2VyQ2FzZUd1aWRzID8gYnVmZmVyVG9Mb3dlckNhc2VHdWlkKGRhdGEpIDogYnVmZmVyVG9VcHBlckNhc2VHdWlkKGRhdGEpLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkTnVtZXJpYyhidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgX3ByZWNpc2lvbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICBsZXQgc2lnbjtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogc2lnbiB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgc2lnbiA9IHNpZ24gPT09IDEgPyAxIDogLTE7XG5cbiAgbGV0IHZhbHVlO1xuICBpZiAoZGF0YUxlbmd0aCA9PT0gNSkge1xuICAgICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDkpIHtcbiAgICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVU51bWVyaWM2NExFKGJ1Ziwgb2Zmc2V0KSk7XG4gIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTMpIHtcbiAgICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVU51bWVyaWM5NkxFKGJ1Ziwgb2Zmc2V0KSk7XG4gIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTcpIHtcbiAgICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVU51bWVyaWMxMjhMRShidWYsIG9mZnNldCkpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnN1cHBvcnRlZCBudW1lcmljIGRhdGFMZW5ndGggJWQnLCBkYXRhTGVuZ3RoKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3VsdCgodmFsdWUgKiBzaWduKSAvIE1hdGgucG93KDEwLCBzY2FsZSksIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYXJpYW50KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgZGF0YUxlbmd0aDogbnVtYmVyKTogUmVzdWx0PHVua25vd24+IHtcbiAgbGV0IGJhc2VUeXBlO1xuICAoeyB2YWx1ZTogYmFzZVR5cGUsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgdHlwZSA9IFRZUEVbYmFzZVR5cGVdO1xuXG4gIGxldCBwcm9wQnl0ZXM7XG4gICh7IHZhbHVlOiBwcm9wQnl0ZXMsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgZGF0YUxlbmd0aCA9IGRhdGFMZW5ndGggLSBwcm9wQnl0ZXMgLSAyO1xuXG4gIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIoYnVmLCBvZmZzZXQsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSAnQml0JzpcbiAgICAgIHJldHVybiByZWFkQml0KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ1RpbnlJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRUaW55SW50KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgIHJldHVybiByZWFkU21hbGxJbnQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnSW50JzpcbiAgICAgIHJldHVybiByZWFkSW50KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ0JpZ0ludCc6XG4gICAgICByZXR1cm4gcmVhZEJpZ0ludChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWUnOlxuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuXG4gICAgY2FzZSAnUmVhbCc6XG4gICAgICByZXR1cm4gcmVhZFJlYWwoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnRmxvYXQnOlxuICAgICAgcmV0dXJuIHJlYWRGbG9hdChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgIHJldHVybiByZWFkU21hbGxNb25leShidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdNb25leSc6XG4gICAgICByZXR1cm4gcmVhZE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuIHJlYWREYXRlKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zLnVzZVVUQyk7XG5cbiAgICBjYXNlICdUaW1lJzoge1xuICAgICAgbGV0IHNjYWxlO1xuICAgICAgKHsgdmFsdWU6IHNjYWxlLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZFRpbWUoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWUyJzoge1xuICAgICAgbGV0IHNjYWxlO1xuICAgICAgKHsgdmFsdWU6IHNjYWxlLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lMihidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgc2NhbGUsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6IHtcbiAgICAgIGxldCBzY2FsZTtcbiAgICAgICh7IHZhbHVlOiBzY2FsZSwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZU9mZnNldChidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgc2NhbGUpO1xuICAgIH1cblxuICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgY2FzZSAnQmluYXJ5Jzoge1xuICAgICAgLy8gbWF4TGVuZ3RoICh1bnVzZWQ/KVxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICBjYXNlICdEZWNpbWFsTic6IHtcbiAgICAgIGxldCBwcmVjaXNpb247XG4gICAgICAoeyB2YWx1ZTogcHJlY2lzaW9uLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgc2NhbGU7XG4gICAgICAoeyB2YWx1ZTogc2NhbGUsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkTnVtZXJpYyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSk7XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyQ2hhcic6XG4gICAgY2FzZSAnQ2hhcic6IHtcbiAgICAgIC8vIG1heExlbmd0aCAodW51c2VkPylcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBjb2xsYXRpb247XG4gICAgICAoeyB2YWx1ZTogY29sbGF0aW9uLCBvZmZzZXQgfSA9IHJlYWRDb2xsYXRpb24oYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWRDaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgY29sbGF0aW9uLmNvZGVwYWdlISk7XG4gICAgfVxuXG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ05DaGFyJzoge1xuICAgICAgLy8gbWF4TGVuZ3RoICh1bnVzZWQ/KVxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgLy8gY29sbGF0aW9uICh1bnVzZWQ/KVxuICAgICAgKHsgb2Zmc2V0IH0gPSByZWFkQ29sbGF0aW9uKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkTkNoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZEJpbmFyeShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlcik6IFJlc3VsdDxCdWZmZXI+IHtcbiAgaWYgKGJ1Zi5sZW5ndGggPCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIGRhdGFMZW5ndGgpLCBvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gcmVhZENoYXJzKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBjb2RlcGFnZTogc3RyaW5nKTogUmVzdWx0PHN0cmluZz4ge1xuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIGRhdGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTm90RW5vdWdoRGF0YUVycm9yKG9mZnNldCArIGRhdGFMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIGRhdGFMZW5ndGgpLCBjb2RlcGFnZSA/PyBERUZBVUxUX0VOQ09ESU5HKSwgb2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2hhcnMoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGlmIChidWYubGVuZ3RoIDwgb2Zmc2V0ICsgZGF0YUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBOb3RFbm91Z2hEYXRhRXJyb3Iob2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3VsdChidWYudG9TdHJpbmcoJ3VjczInLCBvZmZzZXQsIG9mZnNldCArIGRhdGFMZW5ndGgpLCBvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBMUFN0cmVhbShwYXJzZXI6IFBhcnNlcik6IFByb21pc2U8bnVsbCB8IEJ1ZmZlcltdPiB7XG4gIHdoaWxlIChwYXJzZXIuYnVmZmVyLmxlbmd0aCA8IHBhcnNlci5wb3NpdGlvbiArIDgpIHtcbiAgICBhd2FpdCBwYXJzZXIud2FpdEZvckNodW5rKCk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHBhcnNlci5idWZmZXIucmVhZEJpZ1VJbnQ2NExFKHBhcnNlci5wb3NpdGlvbik7XG4gIHBhcnNlci5wb3NpdGlvbiArPSA4O1xuXG4gIGlmIChleHBlY3RlZExlbmd0aCA9PT0gUExQX05VTEwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRMZW5ndGggPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoIDwgcGFyc2VyLnBvc2l0aW9uICsgNCkge1xuICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rTGVuZ3RoID0gcGFyc2VyLmJ1ZmZlci5yZWFkVUludDMyTEUocGFyc2VyLnBvc2l0aW9uKTtcbiAgICBwYXJzZXIucG9zaXRpb24gKz0gNDtcblxuICAgIGlmICghY2h1bmtMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdoaWxlIChwYXJzZXIuYnVmZmVyLmxlbmd0aCA8IHBhcnNlci5wb3NpdGlvbiArIGNodW5rTGVuZ3RoKSB7XG4gICAgICBhd2FpdCBwYXJzZXIud2FpdEZvckNodW5rKCk7XG4gICAgfVxuXG4gICAgY2h1bmtzLnB1c2gocGFyc2VyLmJ1ZmZlci5zbGljZShwYXJzZXIucG9zaXRpb24sIHBhcnNlci5wb3NpdGlvbiArIGNodW5rTGVuZ3RoKSk7XG4gICAgcGFyc2VyLnBvc2l0aW9uICs9IGNodW5rTGVuZ3RoO1xuICAgIGN1cnJlbnRMZW5ndGggKz0gY2h1bmtMZW5ndGg7XG4gIH1cblxuICBpZiAoZXhwZWN0ZWRMZW5ndGggIT09IFVOS05PV05fUExQX0xFTikge1xuICAgIGlmIChjdXJyZW50TGVuZ3RoICE9PSBOdW1iZXIoZXhwZWN0ZWRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnRpYWxseSBMZW5ndGgtcHJlZml4ZWQgQnl0ZXMgdW5tYXRjaGVkIGxlbmd0aHMgOiBleHBlY3RlZCAnICsgZXhwZWN0ZWRMZW5ndGggKyAnLCBidXQgZ290ICcgKyBjdXJyZW50TGVuZ3RoICsgJyBieXRlcycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaHVua3M7XG59XG5cbi8vIEVwb2NoIG9mZnNldHMgZm9yIGJ1aWxkaW5nIFVUQyBgRGF0ZWAgdmFsdWVzIHZpYSBwbGFpbiBhcml0aG1ldGljLCB3aGljaFxuLy8gYXZvaWRzIHRoZSAoY29tcGFyYXRpdmVseSBzbG93KSBgRGF0ZS5VVENgIGNhbGVuZGFyIGNhbGN1bGF0aW9ucy5cbi8vXG4vLyBOb3RlIHRoYXQgdGhlIGRheSBjb25zdGFudHMgaW4gdGhlIFVUQyBhbmQgbG9jYWwgdGltZSBicmFuY2hlcyBiZWxvdyBkaWZmZXJcbi8vIGJ5IG9uZSwgZXZlbiB0aG91Z2ggYm90aCBicmFuY2hlcyBkZXNjcmliZSB0aGUgc2FtZSBkYXRlOiBgZGF5c2AgYXJyaXZlcyBhc1xuLy8gdGhlIHdpcmUtZm9ybWF0IGRheSBjb3VudCBzaW5jZSAwMDAxLTAxLTAxIChlLmcuIDIwMDAtMDEtMDEgaXMgNzMwMTE5KS4gVGhlXG4vLyBsb2NhbCB0aW1lIGJyYW5jaGVzIHBhc3MgYGRheXMgLSA3MzAxMThgIGFzIHRoZSAqMS1iYXNlZCogZGF5LW9mLW1vbnRoXG4vLyBhcmd1bWVudCBvZiBgbmV3IERhdGUoMjAwMCwgMCwgLi4uKWAsIHdoaWxlIHRoZSBVVEMgYnJhbmNoZXMgbXVsdGlwbHlcbi8vIGBkYXlzIC0gNzMwMTE5YCBhcyBhICowLWJhc2VkKiBkYXkgb2Zmc2V0IGZyb20gYFVUQ19FUE9DSF8yMDAwYC5cbmNvbnN0IFVUQ19FUE9DSF8xOTAwID0gRGF0ZS5VVEMoMTkwMCwgMCwgMSk7XG5jb25zdCBVVENfRVBPQ0hfMjAwMCA9IERhdGUuVVRDKDIwMDAsIDAsIDEpO1xuY29uc3QgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSA4NjQwMDAwMDtcblxuZnVuY3Rpb24gcmVhZFNtYWxsRGF0ZVRpbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZT4ge1xuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IG1pbnV0ZXM7XG4gICh7IG9mZnNldCwgdmFsdWU6IG1pbnV0ZXMgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCB2YWx1ZTtcbiAgaWYgKHVzZVVUQykge1xuICAgIHZhbHVlID0gbmV3IERhdGUoVVRDX0VQT0NIXzE5MDAgKyBkYXlzICogTUlMTElTRUNPTkRTX1BFUl9EQVkgKyBtaW51dGVzICogNjAwMDApO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlVGltZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlPiB7XG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCB0aHJlZUh1bmRyZWR0aHNPZlNlY29uZDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQgfSA9IHJlYWRJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCAqIFRIUkVFX0FORF9BX1RISVJEKTtcblxuICBsZXQgdmFsdWU7XG4gIGlmICh1c2VVVEMpIHtcbiAgICB2YWx1ZSA9IG5ldyBEYXRlKFVUQ19FUE9DSF8xOTAwICsgZGF5cyAqIE1JTExJU0VDT05EU19QRVJfREFZICsgbWlsbGlzZWNvbmRzKTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUsIG9mZnNldCk7XG59XG5cbmludGVyZmFjZSBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEgZXh0ZW5kcyBEYXRlIHtcbiAgbmFub3NlY29uZHNEZWx0YTogbnVtYmVyO1xufVxuXG4vLyBSZWFkcyBhIGB0aW1lYCB2YWx1ZSwgcmV0dXJuZWQgaW4gdW5pdHMgb2YgMTAwIG5hbm9zZWNvbmRzIHNpbmNlIG1pZG5pZ2h0LlxuZnVuY3Rpb24gcmVhZFRpbWVWYWx1ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgbGV0IHZhbHVlO1xuXG4gIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgIGNhc2UgMzoge1xuICAgICAgKHsgdmFsdWUsIG9mZnNldCB9ID0gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0KSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIDQ6IHtcbiAgICAgICh7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSA1OiB7XG4gICAgICAoeyB2YWx1ZSwgb2Zmc2V0IH0gPSByZWFkVUludDQwTEUoYnVmLCBvZmZzZXQpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWFjaGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NhbGUgPCA3KSB7XG4gICAgZm9yIChsZXQgaSA9IHNjYWxlOyBpIDwgNzsgaSsrKSB7XG4gICAgICB2YWx1ZSAqPSAxMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3VsdCh2YWx1ZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE+IHtcbiAgbGV0IHZhbHVlO1xuICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVGltZVZhbHVlKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBzY2FsZSkpO1xuXG4gIGxldCBkYXRlO1xuICBpZiAodXNlVVRDKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlIC8gMTAwMDApIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRlLCAnbmFub3NlY29uZHNEZWx0YScsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogKHZhbHVlICUgMTAwMDApIC8gMWU3XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KGRhdGUsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgdXNlVVRDOiBib29sZWFuKTogUmVzdWx0PERhdGU+IHtcbiAgbGV0IGRheXM7XG4gICh7IG9mZnNldCwgdmFsdWU6IGRheXMgfSA9IHJlYWRVSW50MjRMRShidWYsIG9mZnNldCkpO1xuXG4gIGlmICh1c2VVVEMpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgRGF0ZShVVENfRVBPQ0hfMjAwMCArIChkYXlzIC0gNzMwMTE5KSAqIE1JTExJU0VDT05EU19QRVJfREFZKSwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgRGF0ZSgyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSwgb2Zmc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUyKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4pOiBSZXN1bHQ8RGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhPiB7XG4gIGxldCB0aW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiB0aW1lIH0gPSByZWFkVGltZVZhbHVlKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoIC0gMywgc2NhbGUpKTtcblxuICBsZXQgZGF5cztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF5cyB9ID0gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IGRhdGU7XG4gIGlmICh1c2VVVEMpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoVVRDX0VQT0NIXzIwMDAgKyAoZGF5cyAtIDczMDExOSkgKiBNSUxMSVNFQ09ORFNfUEVSX0RBWSArIE1hdGgudHJ1bmModGltZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICB9IGVsc2Uge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCAwLCBkYXlzIC0gNzMwMTE4LCAwLCAwLCAwLCB0aW1lIC8gMTAwMDApIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICh0aW1lICUgMTAwMDApIC8gMWU3XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KGRhdGUsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlVGltZU9mZnNldChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlcik6IFJlc3VsdDxEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE+IHtcbiAgbGV0IHRpbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRpbWUgfSA9IHJlYWRUaW1lVmFsdWUoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGggLSA1LCBzY2FsZSkpO1xuXG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQpKTtcblxuICAvLyB0aW1lIG9mZnNldD9cbiAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoVVRDX0VQT0NIXzIwMDAgKyAoZGF5cyAtIDczMDExOSkgKiBNSUxMSVNFQ09ORFNfUEVSX0RBWSArIE1hdGgudHJ1bmModGltZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICh0aW1lICUgMTAwMDApIC8gMWU3XG4gIH0pO1xuICByZXR1cm4gbmV3IFJlc3VsdChkYXRlLCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yZWFkVmFsdWUgPSByZWFkVmFsdWU7XG5tb2R1bGUuZXhwb3J0cy5pc1BMUFN0cmVhbSA9IGlzUExQU3RyZWFtO1xubW9kdWxlLmV4cG9ydHMucmVhZFBMUFN0cmVhbSA9IHJlYWRQTFBTdHJlYW07XG5cbmV4cG9ydCB7IHJlYWRWYWx1ZSwgaXNQTFBTdHJlYW0sIHJlYWRQTFBTdHJlYW0gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQSxJQUFBQSxlQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFBNFAsU0FBQUcsdUJBQUFJLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFNVAsTUFBTUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQzFCLE1BQU1DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUN6QixNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUU7QUFDckMsTUFBTUMsYUFBYSxHQUFHLEtBQUs7QUFDM0IsTUFBTUMsUUFBUSxHQUFHLG1CQUFtQjtBQUNwQyxNQUFNQyxlQUFlLEdBQUcsbUJBQW1CO0FBQzNDLE1BQU1DLGdCQUFnQixHQUFHLE1BQU07QUFFL0IsU0FBU0MsV0FBV0EsQ0FBQ0MsR0FBVyxFQUFFQyxNQUFjLEVBQWtCO0VBQ2hFLE9BQU8sSUFBQUMsa0JBQVMsRUFBQ0YsR0FBRyxFQUFFQyxNQUFNLENBQUM7QUFDL0I7QUFFQSxTQUFTRSxZQUFZQSxDQUFDSCxHQUFXLEVBQUVDLE1BQWMsRUFBa0I7RUFDakUsT0FBTyxJQUFBRyxvQkFBVyxFQUFDSixHQUFHLEVBQUVDLE1BQU0sQ0FBQztBQUNqQztBQUVBLFNBQVNJLE9BQU9B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