@rljson/io 0.0.36 → 0.0.37
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.
- package/dist/io-mem.d.ts +1 -0
- package/dist/io.d.ts +4 -0
- package/dist/io.js +6 -3
- package/package.json +2 -2
package/dist/io-mem.d.ts
CHANGED
package/dist/io.d.ts
CHANGED
|
@@ -32,6 +32,10 @@ export interface Io {
|
|
|
32
32
|
createOrExtendTable(request: {
|
|
33
33
|
tableCfg: TableCfg;
|
|
34
34
|
}): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns a json structure returning current table configurations
|
|
37
|
+
*/
|
|
38
|
+
rawTableCfgs(): Promise<TableCfg[]>;
|
|
35
39
|
/** Writes Rljson data into the database */
|
|
36
40
|
write(request: {
|
|
37
41
|
data: Rljson;
|
package/dist/io.js
CHANGED
|
@@ -93,8 +93,7 @@ const _IoTools = class _IoTools {
|
|
|
93
93
|
* @returns The table configuration of all tables
|
|
94
94
|
*/
|
|
95
95
|
async tableCfgs() {
|
|
96
|
-
const
|
|
97
|
-
const tables = tableCfgDump.tableCfgs._data;
|
|
96
|
+
const tables = await this.io.rawTableCfgs();
|
|
98
97
|
const newestVersion = {};
|
|
99
98
|
for (let i = tables.length - 1; i >= 0; i--) {
|
|
100
99
|
const table = tables[i];
|
|
@@ -331,6 +330,10 @@ const _IoMem = class _IoMem {
|
|
|
331
330
|
createOrExtendTable(request) {
|
|
332
331
|
return this._createOrExtendTable(request);
|
|
333
332
|
}
|
|
333
|
+
async rawTableCfgs() {
|
|
334
|
+
const tables = this._mem.tableCfgs._data;
|
|
335
|
+
return tables;
|
|
336
|
+
}
|
|
334
337
|
// ...........................................................................
|
|
335
338
|
async _init() {
|
|
336
339
|
this._ioTools = new IoTools(this);
|
|
@@ -595,4 +598,4 @@ export {
|
|
|
595
598
|
exampleIo,
|
|
596
599
|
exampleTestSetup
|
|
597
600
|
};
|
|
598
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG4gIHRocm93T25JbnZhbGlkVGFibGVDZmcsXG4gIHZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnLFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvTWVtIH0gZnJvbSAnLi9pby1tZW0udHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuLyoqXG4gKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIElvIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIElvVG9vbHMge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGlvIFRoZSBJbyBpbnRlcmZhY2UgdG8gdXNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW86IElvKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIHRoZSB0YWJsZUNmZ3MgdGFibGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0IHRhYmxlQ2Znc1RhYmxlQ2ZnKCkge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gaGlwPFRhYmxlQ2ZnPih7XG4gICAgICBfaGFzaDogJycsXG4gICAgICBrZXk6ICd0YWJsZUNmZ3MnLFxuICAgICAgdHlwZTogJ2luZ3JlZGllbnRzJyxcbiAgICAgIGlzSGVhZDogZmFsc2UsXG4gICAgICBpc1Jvb3Q6IGZhbHNlLFxuICAgICAgaXNTaGFyZWQ6IHRydWUsXG4gICAgICBwcmV2aW91czogJycsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBrZXk6ICdfaGFzaCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAna2V5JywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICd0eXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdpc0hlYWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdpc1Jvb3QnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdpc1NoYXJlZCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICB7IGtleTogJ3ByZXZpb3VzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdjb2x1bW5zJywgdHlwZTogJ2pzb25BcnJheScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFibGVDZmc7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJldmlzaW9ucyB0YWJsZS5cbiAgICovXG4gIGluaXRSZXZpc2lvbnNUYWJsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZzogVGFibGVDZmcgPSB7XG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxuICAgICAgdHlwZTogJ2luZ3JlZGllbnRzJyxcbiAgICAgIGlzSGVhZDogdHJ1ZSxcbiAgICAgIGlzUm9vdDogdHJ1ZSxcbiAgICAgIGlzU2hhcmVkOiBmYWxzZSxcblxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7IGtleTogJ19oYXNoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICd0YWJsZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAncHJlZGVjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3N1Y2Nlc3NvcicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndGltZXN0YW1wJywgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgeyBrZXk6ICdpZCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmlvLmNyZWF0ZU9yRXh0ZW5kVGFibGUoeyB0YWJsZUNmZyB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXhhbXBsZSBvYmplY3QgZm9yIHRlc3QgcHVycG9zZXNcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcbiAgICovXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xuICAgIGF3YWl0IGlvLmluaXQoKTtcbiAgICBhd2FpdCBpby5pc1JlYWR5KCk7XG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZSk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgYW55IG9mIHRoZSB0YWJsZXMgaW4gcmxqc29uIGRvIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlc0RvTm90RXhpc3Qocmxqc29uOiBSbGpzb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhybGpzb24sIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlS2V5KTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZUtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbWlzc2luZ1RhYmxlcyA9IChlIGFzIEFycmF5PGFueT4pLm1hcCgoZSkgPT4gZS50YWJsZUtleSk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgdGFibGVzIGRvIG5vdCBleGlzdDogJHttaXNzaW5nVGFibGVzLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgY2ZncyBvZiBhbGwgdGFibGVzXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcbiAgICovXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZ0R1bXAgPSBhd2FpdCB0aGlzLmlvLmR1bXBUYWJsZSh7IHRhYmxlOiAndGFibGVDZmdzJyB9KTtcbiAgICBjb25zdCB0YWJsZXMgPSB0YWJsZUNmZ0R1bXAudGFibGVDZmdzLl9kYXRhIGFzIFRhYmxlQ2ZnW107XG5cbiAgICAvLyBUYWtlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIHR5cGUga2V5XG4gICAgY29uc3QgbmV3ZXN0VmVyc2lvbjogUmVjb3JkPFRhYmxlS2V5LCBUYWJsZUNmZz4gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gdGFibGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRhYmxlc1tpXTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gbmV3ZXN0VmVyc2lvblt0YWJsZS5rZXldO1xuICAgICAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdERhdGEgPSBPYmplY3QudmFsdWVzKG5ld2VzdFZlcnNpb24pLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLmtleSA8IGIua2V5KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmtleSA+IGIua2V5KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDA7XG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdERhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgdGFibGUgbmFtZXNcbiAgICovXG4gIGFzeW5jIGFsbFRhYmxlS2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMudGFibGVDZmdzKCkpLm1hcCgoZSkgPT4gZS5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZyh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnPiB7XG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHRhYmxlKTtcbiAgICBpZiAoIXRhYmxlQ2ZnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVDZmchO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZSBvciBudWxsIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZ09yTnVsbCh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnIHwgbnVsbD4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZncyA9IGF3YWl0IHRoaXMudGFibGVDZmdzKCk7XG4gICAgY29uc3QgdGFibGVDZmcgPSB0YWJsZUNmZ3MuZmluZCgoZSkgPT4gZS5rZXkgPT09IHRhYmxlKTtcbiAgICByZXR1cm4gdGFibGVDZmcgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgY29sdW1uIG5hbWVzIG9mIGEgZ2l2ZW4gdGFibGVcbiAgICovXG4gIGFzeW5jIGFsbENvbHVtbktleXModGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGFibGVDZmcuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiBhIGdpdmVuIHRhYmxlXG4gICAqIEBwYXJhbSB0YWJsZSAtIFRoZSB0YWJsZSB0byBjaGVja1xuICAgKiBAcGFyYW0gY29sdW1ucyAtIFRoZSBjb2x1bW4gdG8gY2hlY2tcbiAgICovXG4gIGFzeW5jIHRocm93V2hlbkNvbHVtbkRvZXNOb3RFeGlzdChcbiAgICB0YWJsZTogVGFibGVLZXksXG4gICAgY29sdW1uczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZSk7XG4gICAgY29uc3QgY29sdW1uS2V5cyA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uKSA9PiAhY29sdW1uS2V5cy5pbmNsdWRlcyhjb2x1bW4pLFxuICAgICk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY29sdW1ucyBkbyBub3QgZXhpc3QgaW4gdGFibGUgXCIke3RhYmxlfVwiOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oXG4gICAgICAgICAgJywgJyxcbiAgICAgICAgKX0uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyB3aGVuIGEgdGFibGUgdXBkYXRlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdGFibGVcbiAgICogY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHVwZGF0ZTogVGFibGVDZmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXggPSBgSW52YWxpZCB1cGRhdGUgb2YgdGFibGUgYWJsZSBcIiR7dXBkYXRlLmtleX1cImA7XG5cbiAgICB0aHJvd09uSW52YWxpZFRhYmxlQ2ZnKHVwZGF0ZSk7XG5cbiAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgdGFibGVcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMudGFibGVDZmdPck51bGwodXBkYXRlLmtleSk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAvLyBIYXZlIGNvbHVtbnMgYmVlbiBkZWxldGVkP1xuICAgICAgaWYgKGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoID4gdXBkYXRlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5LZXlzID0gZXhpc3RpbmcuY29sdW1uc1xuICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gIXVwZGF0ZS5jb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KSxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoZGVsZXRlZENvbHVtbktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5zID0gZGVsZXRlZENvbHVtbktleXMuam9pbignLCAnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBDb2x1bW5zIG11c3Qgbm90IGJlIGRlbGV0ZWQuIGAgK1xuICAgICAgICAgICAgICBgRGVsZXRlZCBjb2x1bW5zOiAke2RlbGV0ZWRDb2x1bW5zfX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGF2ZSBjb2x1bW4ga2V5cyBjaGFuZ2VkP1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0ua2V5O1xuICAgICAgICBjb25zdCBhZnRlciA9IHVwZGF0ZS5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgaWYgKGJlZm9yZSAhPT0gYWZ0ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBgICtcbiAgICAgICAgICAgICAgYENvbHVtbiBrZXlzIG11c3Qgbm90IGNoYW5nZSEgYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4gXCIke2JlZm9yZX1cIiB3YXMgcmVuYW1lZCBpbnRvIFwiJHthZnRlcn1cIi5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGF2ZSBjb2x1bW4gdHlwZXMgY2hhbmdlZD9cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS50eXBlO1xuICAgICAgICBjb25zdCBhZnRlciA9IHVwZGF0ZS5jb2x1bW5zW2ldLnR5cGU7XG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4gdHlwZXMgbXVzdCBub3QgY2hhbmdlISBgICtcbiAgICAgICAgICAgICAgYFR5cGUgb2YgY29sdW1uIFwiJHtjb2x1bW59XCIgd2FzIGNoYW5nZWQgZnJvbSBcIiR7YmVmb3JlfVwiIHRvICR7YWZ0ZXJ9LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvIG5vdCBtYXRjaCB0aGUgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKGRhdGE6IFJsanNvbikge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGF3YWl0IGl0ZXJhdGVUYWJsZXMoZGF0YSwgYXN5bmMgKHRhYmxlS2V5KSA9PiB7XG4gICAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGVLZXkpO1xuICAgICAgY29uc3QgdGFibGUgPSBkYXRhW3RhYmxlS2V5XTtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnKHRhYmxlLl9kYXRhLCB0YWJsZUNmZykpO1xuICAgIH0pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYWJsZSBkYXRhIGRvZXMgbm90IG1hdGNoIHRoZSBjb25maWd1cmF0aW9uLlxcblxcbkVycm9yczpcXG4ke2Vycm9yc1xuICAgICAgICAgIC5tYXAoKGUpID0+IGAtICR7ZX1gKVxuICAgICAgICAgIC5qb2luKCdcXG4nKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIGRhdGEgb2YgYSB0YWJsZSBieSB0aGUgaGFzaCBhbmQgdXBkYXRlcyB0aGUgdGFibGUgaGFzaCBpbiBwbGFjZVxuICAgKi9cbiAgc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGFibGU6IFRhYmxlVHlwZSk6IHZvaWQge1xuICAgIHRhYmxlLl9kYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGhhc2hBID0gYS5faGFzaCBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBoYXNoQiA9IGIuX2hhc2ggYXMgc3RyaW5nO1xuICAgICAgaWYgKGhhc2hBIDwgaGFzaEIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGhhc2hBID4gaGFzaEIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMDtcbiAgICAgIC8qIHY4IGlnbm9yZSBlbmQgKi9cbiAgICB9KTtcblxuICAgIHRhYmxlLl9oYXNoID0gJyc7XG4gICAgaGlwKHRhYmxlLCB7XG4gICAgICB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UsXG4gICAgICB0aHJvd09uV3JvbmdIYXNoZXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xuaW1wb3J0IHsgSXNSZWFkeSB9IGZyb20gJ0BybGpzb24vaXMtcmVhZHknO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzLCBKc29uVmFsdWUgfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHtcbiAgaXRlcmF0ZVRhYmxlc1N5bmMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuaW1wb3J0IHsgSW9Ub29scyB9IGZyb20gJy4vaW8tdG9vbHMudHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuLyoqXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb01lbSBpbXBsZW1lbnRzIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIENvbnN0cnVjdG9yICYgZXhhbXBsZVxuXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgc3RhdGljIGV4YW1wbGUgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBJb01lbSgpO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG4gIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wKCk7XG4gIH1cblxuICBhc3luYyBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUm93c1xuXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZFJvd3MocmVxdWVzdCk7XG4gIH1cblxuICBhc3luYyByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICBpZiAoIXRhYmxlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGFibGVEYXRhLl9kYXRhLmxlbmd0aCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFRhYmxlIG1hbmFnZW1lbnRcbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcbiAgICByZXR1cm4gdGFibGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBjcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHsgdGFibGVDZmc6IFRhYmxlQ2ZnIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgLy8gUHJpdmF0ZVxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgcHJpdmF0ZSBfaW9Ub29scyE6IElvVG9vbHM7XG5cbiAgcHJpdmF0ZSBfaXNSZWFkeSA9IG5ldyBJc1JlYWR5KCk7XG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21lbTogUmxqc29uID0gaGlwKHt9IGFzIFJsanNvbik7XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2luaXQoKSB7XG4gICAgdGhpcy5faW9Ub29scyA9IG5ldyBJb1Rvb2xzKHRoaXMpO1xuICAgIHRoaXMuX2luaXRUYWJsZUNmZ3MoKTtcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy5pbml0UmV2aXNpb25zVGFibGUoKTtcbiAgICBoc2godGhpcy5fbWVtKTtcblxuICAgIHRoaXMuX2lzUmVhZHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgX2luaXRUYWJsZUNmZ3MgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVDZmcgPSBJb1Rvb2xzLnRhYmxlQ2Znc1RhYmxlQ2ZnO1xuXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2ZncyA9IGhpcCh7XG4gICAgICBfZGF0YTogW3RhYmxlQ2ZnXSxcbiAgICAgIF90YWJsZUNmZzogdGFibGVDZmcuX2hhc2ggYXMgc3RyaW5nLFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF91cGRhdGVHbG9iYWxIYXNoKCkge1xuICAgICh0aGlzLl9tZW0gYXMgYW55KS5faGFzaCA9ICcnO1xuICAgIGhpcCh0aGlzLl9tZW0sIHtcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF91cGRhdGVUYWJsZUhhc2godGFibGVLZXk6IFRhYmxlS2V5KSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcbiAgICB0YWJsZS5faGFzaCA9ICcnO1xuICAgIGhpcCh0YWJsZSwgeyB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UgfSk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7XG4gICAgdGFibGVDZmc6IFRhYmxlQ2ZnO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRhYmxlIGNvbmZpZyBpcyBjb21wYXRpYmxlXG4gICAgLy8gd2l0aCBhbiBwb3RlbnRpYWwgZXhpc3RpbmcgdGFibGVcbiAgICBjb25zdCB0YWJsZUNmZyA9IHJlcXVlc3QudGFibGVDZmc7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh0YWJsZUNmZyk7XG5cbiAgICBjb25zdCB7IGtleSB9ID0gdGFibGVDZmc7XG5cbiAgICAvLyBSZWNyZWF0ZSBoYXNoZXMgaW4gdGhlIGNhc2UgdGhlIGV4aXN0aW5nIGhhc2hlcyBhcmUgd3JvbmdcbiAgICBjb25zdCBuZXdDb25maWcgPSBoc2godGFibGVDZmcpO1xuXG4gICAgLy8gRmluZCBhbiBleGlzdGluZyB0YWJsZSBjb25maWcgd2l0aCB0aGUgc2FtZSBoYXNoXG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRhYmxlQ2ZnT3JOdWxsKGtleSk7XG5cbiAgICAvLyBXcml0ZSB0aGUgbmV3IGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIGlmICghZXhpc3RpbmdDb25maWcpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVRhYmxlKG5ld0NvbmZpZywga2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWcsIG5ld0NvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgX2NyZWF0ZVRhYmxlKG5ld0NvbmZpZzogVGFibGVDZmcsIHRhYmxlS2V5OiBUYWJsZUtleSkge1xuICAgIC8vIFdyaXRlIHRoZSB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9tZW0udGFibGVDZmdzLl9kYXRhLnB1c2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGFibGUgYW5kIHdyaXRlIGl0IGludG8gdGhlIGRhdGFiYXNlXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcbiAgICAgIF9kYXRhOiBbXSxcbiAgICAgIF90YWJsZUNmZzogbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fbWVtW3RhYmxlS2V5XSA/Pz0gaGlwKHRhYmxlKTtcblxuICAgIC8vIFVwZGF0ZSBoYXNoZXNcbiAgICB0aGlzLl91cGRhdGVUYWJsZUhhc2godGFibGVLZXkpO1xuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZzogVGFibGVDZmcsIG5ld0NvbmZpZzogVGFibGVDZmcpIHtcbiAgICAvLyBObyBjb2x1bW5zIGFkZGVkPyBSZXR1cm4uXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbmV3IHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGhpcy5fbWVtLnRhYmxlQ2Zncyk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZyBvZiB0aGUgZXhpc3RpbmcgdGFibGVcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtuZXdDb25maWcua2V5XSBhcyBUYWJsZVR5cGU7XG4gICAgdGFibGUuX3RhYmxlQ2ZnID0gbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZztcblxuICAgIC8vIFVwZGF0ZSB0aGUgaGFzaGVzXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKG5ld0NvbmZpZy5rZXkpO1xuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuXG4gIHByaXZhdGUgYXN5bmMgX2R1bXAoKTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gY29weSh0aGlzLl9tZW0pO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2R1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURvZXNOb3RFeGlzdChyZXF1ZXN0LnRhYmxlKTtcblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgIHJldHVybiB7XG4gICAgICBbcmVxdWVzdC50YWJsZV06IGNvcHkodGFibGUpLFxuICAgIH07XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFkZGVkRGF0YSA9IGhzaChyZXF1ZXN0LmRhdGEpO1xuICAgIHRoaXMuX3JlbW92ZU51bGxWYWx1ZXMoYWRkZWREYXRhKTtcbiAgICBjb25zdCB0YWJsZXMgPSBPYmplY3Qua2V5cyhhZGRlZERhdGEpO1xuICAgIGhzaChhZGRlZERhdGEpO1xuXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJlcXVlc3QuZGF0YSk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcocmVxdWVzdC5kYXRhKTtcblxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG4gICAgICBpZiAodGFibGUuc3RhcnRzV2l0aCgnXycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGRUYWJsZSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBhZGRlZERhdGFbdGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgICAgLy8gVGFibGUgZXhpc3RzLiBNZXJnZSBkYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3VGFibGUuX2RhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGl0ZW0uX2hhc2g7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IG9sZFRhYmxlLl9kYXRhLmZpbmQoKGkpID0+IGkuX2hhc2ggPT09IGhhc2gpO1xuICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgIG9sZFRhYmxlLl9kYXRhLnB1c2goaXRlbSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2gob2xkVGFibGUpO1xuICAgIH1cblxuICAgIC8vIFJlY2FsYyBtYWluIGhhc2hlc1xuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9yZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURvZXNOb3RFeGlzdChyZXF1ZXN0LnRhYmxlKTtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlbkNvbHVtbkRvZXNOb3RFeGlzdChcbiAgICAgIHJlcXVlc3QudGFibGUsXG4gICAgICBPYmplY3Qua2V5cyhyZXF1ZXN0LndoZXJlKSxcbiAgICApO1xuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xuXG4gICAgY29uc3QgcmVzdWx0OiBSbGpzb24gPSB7XG4gICAgICBbcmVxdWVzdC50YWJsZV06IHtcbiAgICAgICAgX2RhdGE6IHRhYmxlLl9kYXRhLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gaW4gcmVxdWVzdC53aGVyZSkge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJvd1tjb2x1bW5dO1xuICAgICAgICAgICAgY29uc3QgYiA9IHJlcXVlc3Qud2hlcmVbY29sdW1uXTtcbiAgICAgICAgICAgIGlmIChiID09PSBudWxsICYmIGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFlcXVhbHMoYSwgYikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0gYXMgYW55O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9yZW1vdmVOdWxsVmFsdWVzKHJsanNvbjogUmxqc29uKSB7XG4gICAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAodGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBybGpzb25bdGFibGVdLl9kYXRhO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJvdykge1xuICAgICAgICAgIGlmIChyb3dba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSW8sIElvTWVtIH0gZnJvbSAnLi9pbmRleC50cyc7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cbiAqIGNvbmZvcm1hbmNlIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgaW5pdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGVhcnMgZG93biB0aGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIHRlYXJEb3duOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXG4gICAqL1xuICBpbzogSW87XG59XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcbmV4cG9ydCBjb25zdCBleGFtcGxlVGVzdFNldHVwID0gKCk6IElvVGVzdFNldHVwID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpbzogbmV3IElvTWVtKCksXG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW8gaW1wbGVtZW50YXRpb25cbiAgICB9LFxuICAgIHRlYXJEb3duOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXG4gICAgfSxcbiAgfTtcbn07XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7IFJsanNvbiwgVGFibGVDZmcsIFRhYmxlS2V5IH0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGludGVyZmFjZSBJbyB7XG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG5cbiAgLyoqIFN0YXJ0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi9cbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBDbG9zZXMgdGhlIGlvICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBpbyBpcyBvcGVuZWQgKi9cbiAgaXNPcGVuOiBib29sZWFuO1xuXG4gIC8qKiBBIHByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIElvIGludGVyZmFjZSBpcyByZWFkeVxuICAgKlxuICAgKiDwn5KhIFVzZSBAcmxqc29uL2lzLXJlYWR5XG4gICAqL1xuICBpc1JlYWR5KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIER1bXBcblxuICAvKiogUmV0dXJucyB0aGUgY29tcGxldGUgZGIgY29udGVudCBhcyBSbGpzb24gKi9cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLyoqIFJldHVybnMgdGhlIGR1bXAgb2YgYSBjb21wbGV0ZSB0YWJsZSAqL1xuICBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFRhYmxlc1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhYmxlIGV4aXN0c1xuICAgKi9cbiAgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHdpdGggYSBnaXZlbiBjb25maWcuXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbmV3IGNvbHVtbnMgYXJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyB0YWJsZS5cbiAgICogSWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZy5cbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgY29sdW1ucyBhcmUgcmVtb3ZlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCB0aGUgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKi9cbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXG4gIHdyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBSZWFkIHJvd3NcblxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xuICByZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xuICByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+O1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGNvbnN0IGV4YW1wbGVJbyA9XG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSnNvbiB9IGZyb20gJ0BybGpzb24vanNvbic7XG5pbXBvcnQge1xuICBCdWZmZXQsXG4gIENha2UsXG4gIGl0ZXJhdGVUYWJsZXNTeW5jLFxuICBMYXllcixcbiAgUmVmLFxuICBSbGpzb24sXG4gIFRhYmxlS2V5LFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIERlc2NyaWJlcyBhIHJvdyB0aGF0IHJlZmVyZW5jZXMgYSBjaGlsZCB0YWJsZSByb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJlbnRSZWYge1xuICAvKipcbiAgICogVGhlIHBhcmVudCB0YWJsZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHRhYmxlXG4gICAqL1xuICBbcGFyZW50VGFibGU6IFRhYmxlS2V5XToge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXJlbnQgcm93IHRoYXQgcmVmZXJlbmNlcyB0aGUgY2hpbGQgcm93XG4gICAgICovXG4gICAgW3BhcmVudFJvdzogUmVmXToge1xuICAgICAgLyoqXG4gICAgICAgKiBEZXRhaWxzIGFib3V0IHRoZSByZWZlcmVuY2UsIGUuZy4gYW4gYXJyYXkgaW5kZXggZXRjLlxuICAgICAgICovXG4gICAgICBkZXRhaWxzPzogSnNvbjtcbiAgICB9O1xuICB9O1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHBhcmVudCB0YWJsZSByb3dzIHJlZmVyZW5jaW5nIGEgY2hpbGQgdGFibGUgcm93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZXJzZVJlZnMge1xuICAvKipcbiAgICogVGhlIGNoaWxkIHRhYmxlIHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXG4gICAqL1xuICBbY2hpbGRUYWJsZTogVGFibGVLZXldOiB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvdyBoYXNod2UgbmVlZCB0aGUgcmVmZXJlbmNpbmcgcm93cyBmb3JcbiAgICAgKi9cbiAgICBbY2hpbGRSb3c6IFJlZl06IFBhcmVudFJlZjtcbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0ICovXG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHJldmVyc2UgcmVmZXJlbmNlcyBmb3IgYSBnaXZlbiBybGpzb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjUmV2ZXJzZVJlZnMgPSAocmxqc29uOiBSbGpzb24pOiBSZXZlcnNlUmVmcyA9PiB7XG4gIGNvbnN0IHJlc3VsdDogUmV2ZXJzZVJlZnMgPSB7fTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFByZXBhcmUgZGF0YSBzdHJ1Y3R1cmVcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAoY2hpbGRUYWJsZUtleSwgdGFibGUpID0+IHtcbiAgICBjb25zdCBjaGlsZFRhYmxlOiB7IFtjaGlsZFJvd0hhc2g6IHN0cmluZ106IFBhcmVudFJlZiB9ID0ge307XG4gICAgcmVzdWx0W2NoaWxkVGFibGVLZXldID0gY2hpbGRUYWJsZTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkUm93IG9mIHRhYmxlLl9kYXRhKSB7XG4gICAgICBjaGlsZFRhYmxlW2NoaWxkUm93Ll9oYXNoXSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmF0ZSByZXZlcnNlIHJlZmVyZW5jZXNcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlKSA9PiB7XG4gICAgLy8gSXRlcmF0ZSBhbGwgcm93cyBvZiBlYWNoIHRhYmxlXG4gICAgZm9yIChjb25zdCBwYXJlbnRUYWJsZVJvdyBvZiBwYXJlbnRUYWJsZS5fZGF0YSkge1xuICAgICAgLy8gRmluZCBvdXQgd2hlIG90aGVyIHRhYmxlcyAmIHJvd3MgYXJlIHJlZmVyZW5jZWQgYnkgdGhpcyByb3dcbiAgICAgIC8vIFdyaXRlIHRoZXNlIGluZm9ybWF0aW9uIGludHRvIHJlc3VsdFxuICAgICAgc3dpdGNoIChwYXJlbnRUYWJsZS5fdHlwZSkge1xuICAgICAgICBjYXNlICdpbmdyZWRpZW50cyc6XG4gICAgICAgICAgX3dyaXRlSW5ncmVkaWVudFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2xheWVycyc6IHtcbiAgICAgICAgICBfd3JpdGVMYXllclJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnc2xpY2VJZHMnOiB7XG4gICAgICAgICAgLy8gU2xpY2UgaWRzIGRvIG5vdCByZWZlcmVuY2Ugb3RoZXIgdGFibGVzXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdjYWtlcyc6IHtcbiAgICAgICAgICBfd3JpdGVDYWtlUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdidWZmZXRzJzoge1xuICAgICAgICAgIF93cml0ZUJ1ZmZldFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyogdjggaWdub3JlIGVuZCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlSW5ncmVkaWVudFJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogSnNvbixcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IHBhcmVudENvbHVtbk5hbWUgaW4gcGFyZW50Um93KSB7XG4gICAgaWYgKHBhcmVudENvbHVtbk5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudENvbHVtbk5hbWUuZW5kc1dpdGgoJ1JlZicpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudENvbHVtbk5hbWUuc2xpY2UoMCwgLTMpO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvd1twYXJlbnRDb2x1bW5OYW1lXSBhcyBzdHJpbmc7XG5cbiAgICBfd3JpdGUoXG4gICAgICByZXN1bHQsXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcbiAgICAgIGNoaWxkUm93SGFzaCxcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgIHBhcmVudFJvd0hhc2gsXG4gICAgKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUxheWVyUmVmcyA9IChcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcbiAgcGFyZW50Um93OiBMYXllcixcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5pbmdyZWRpZW50c1RhYmxlO1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFzc2lnbikge1xuICAgIGlmIChzbGljZUlkLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpY2VIYXNoID0gcGFyZW50Um93LmFzc2lnbltzbGljZUlkXSBhcyBzdHJpbmc7XG5cbiAgICBfd3JpdGUocmVzdWx0LCBjaGlsZFRhYmxlTmFtZSwgc2xpY2VIYXNoLCBwYXJlbnRUYWJsZU5hbWUsIHBhcmVudFJvd0hhc2gpO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogQ2FrZSxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGxheWVyIGluIHBhcmVudFJvdy5sYXllcnMpIHtcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5sYXllcnNUYWJsZTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3cubGF5ZXJzW2xheWVyXSBhcyBzdHJpbmc7XG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVCdWZmZXRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEJ1ZmZldCxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50Um93Lml0ZW1zKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBpdGVtLnRhYmxlO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IGl0ZW0ucmVmO1xuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlID0gKFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuICBjaGlsZFRhYmxlTmFtZTogc3RyaW5nLFxuICBjaGlsZFJvd0hhc2g6IHN0cmluZyxcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcsXG4gIHBhcmVudFJvd0hhc2g6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZSA9IChyZXN1bHRbY2hpbGRUYWJsZU5hbWVdID8/PSB7fSk7XG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93ID0gKHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlW2NoaWxkUm93SGFzaF0gPz89XG4gICAge30pO1xuXG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV0gPz89IHt9O1xuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdW3BhcmVudFJvd0hhc2hdID8/PSB7fTtcbn07XG4iXSwibmFtZXMiOlsiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBdUJPLE1BQU0sV0FBTixNQUFNLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS25CLFlBQTRCLElBQVE7QUFpQ3BDO0FBQUE7QUFBQTtBQUFBLDhDQUFxQixZQUFZO0FBQy9CLFlBQU0sV0FBcUI7QUFBQSxRQUN6QixLQUFLO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFFVixTQUFTO0FBQUEsVUFDUCxFQUFFLEtBQUssU0FBUyxNQUFNLFNBQVM7QUFBQSxVQUMvQixFQUFFLEtBQUssU0FBUyxNQUFNLFNBQVM7QUFBQSxVQUMvQixFQUFFLEtBQUssZUFBZSxNQUFNLFNB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
|
|
601
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG4gIHRocm93T25JbnZhbGlkVGFibGVDZmcsXG4gIHZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnLFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvTWVtIH0gZnJvbSAnLi9pby1tZW0udHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuLyoqXG4gKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIElvIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIElvVG9vbHMge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGlvIFRoZSBJbyBpbnRlcmZhY2UgdG8gdXNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW86IElvKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIHRoZSB0YWJsZUNmZ3MgdGFibGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0IHRhYmxlQ2Znc1RhYmxlQ2ZnKCkge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gaGlwPFRhYmxlQ2ZnPih7XG4gICAgICBfaGFzaDogJycsXG4gICAgICBrZXk6ICd0YWJsZUNmZ3MnLFxuICAgICAgdHlwZTogJ2luZ3JlZGllbnRzJyxcbiAgICAgIGlzSGVhZDogZmFsc2UsXG4gICAgICBpc1Jvb3Q6IGZhbHNlLFxuICAgICAgaXNTaGFyZWQ6IHRydWUsXG4gICAgICBwcmV2aW91czogJycsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBrZXk6ICdfaGFzaCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAna2V5JywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICd0eXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdpc0hlYWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdpc1Jvb3QnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdpc1NoYXJlZCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICB7IGtleTogJ3ByZXZpb3VzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdjb2x1bW5zJywgdHlwZTogJ2pzb25BcnJheScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFibGVDZmc7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJldmlzaW9ucyB0YWJsZS5cbiAgICovXG4gIGluaXRSZXZpc2lvbnNUYWJsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZzogVGFibGVDZmcgPSB7XG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxuICAgICAgdHlwZTogJ2luZ3JlZGllbnRzJyxcbiAgICAgIGlzSGVhZDogdHJ1ZSxcbiAgICAgIGlzUm9vdDogdHJ1ZSxcbiAgICAgIGlzU2hhcmVkOiBmYWxzZSxcblxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7IGtleTogJ19oYXNoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICd0YWJsZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAncHJlZGVjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3N1Y2Nlc3NvcicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndGltZXN0YW1wJywgdHlwZTogJ251bWJlcicgfSxcbiAgICAgICAgeyBrZXk6ICdpZCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmlvLmNyZWF0ZU9yRXh0ZW5kVGFibGUoeyB0YWJsZUNmZyB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXhhbXBsZSBvYmplY3QgZm9yIHRlc3QgcHVycG9zZXNcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcbiAgICovXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xuICAgIGF3YWl0IGlvLmluaXQoKTtcbiAgICBhd2FpdCBpby5pc1JlYWR5KCk7XG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZSk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgYW55IG9mIHRoZSB0YWJsZXMgaW4gcmxqc29uIGRvIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlc0RvTm90RXhpc3Qocmxqc29uOiBSbGpzb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhybGpzb24sIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlS2V5KTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZUtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbWlzc2luZ1RhYmxlcyA9IChlIGFzIEFycmF5PGFueT4pLm1hcCgoZSkgPT4gZS50YWJsZUtleSk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgdGFibGVzIGRvIG5vdCBleGlzdDogJHttaXNzaW5nVGFibGVzLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgY2ZncyBvZiBhbGwgdGFibGVzXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcbiAgICovXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcbiAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmlvLnJhd1RhYmxlQ2ZncygpO1xuXG4gICAgLy8gVGFrZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCB0eXBlIGtleVxuICAgIGNvbnN0IG5ld2VzdFZlcnNpb246IFJlY29yZDxUYWJsZUtleSwgVGFibGVDZmc+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IHRhYmxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXNbaV07XG4gICAgICBjb25zdCBleGlzdGluZyA9IG5ld2VzdFZlcnNpb25bdGFibGUua2V5XTtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIGVuZCAqL1xuICAgIH1cblxuICAgIC8vIFNvcnQgdGhlIHRhYmxlcyBieSBrZXlcbiAgICBjb25zdCByZXN1bHREYXRhID0gT2JqZWN0LnZhbHVlcyhuZXdlc3RWZXJzaW9uKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5rZXkgPCBiLmtleSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5rZXkgPiBiLmtleSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgICAgLyogdjggaWdub3JlIGVuZCAqL1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRhYmxlIG5hbWVzXG4gICAqL1xuICBhc3luYyBhbGxUYWJsZUtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLnRhYmxlQ2ZncygpKS5tYXAoKGUpID0+IGUua2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZVxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmcodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZz4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh0YWJsZSk7XG4gICAgaWYgKCF0YWJsZUNmZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlQ2ZnITtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cblxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmdPck51bGwodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZyB8IG51bGw+IHtcbiAgICBjb25zdCB0YWJsZUNmZ3MgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZncygpO1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gdGFibGVDZmdzLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgdGFibGU6IFRhYmxlS2V5LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxuICAgICAgICAgICcsICcsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xuXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1ucyA9IGRlbGV0ZWRDb2x1bW5LZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcbiAgICAgICAgICAgICAgYERlbGV0ZWQgY29sdW1uczogJHtkZWxldGVkQ29sdW1uc319YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4ga2V5cyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtiZWZvcmV9XCIgd2FzIHJlbmFtZWQgaW50byBcIiR7YWZ0ZXJ9XCIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIHR5cGVzIGNoYW5nZWQ/XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS50eXBlO1xuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXG4gICAgICAgICAgICAgIGBUeXBlIG9mIGNvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBjaGFuZ2VkIGZyb20gXCIke2JlZm9yZX1cIiB0byAke2FmdGVyfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhkYXRhOiBSbGpzb24pIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhd2FpdCBpdGVyYXRlVGFibGVzKGRhdGEsIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcbiAgICAgIGNvbnN0IHRhYmxlID0gZGF0YVt0YWJsZUtleV07XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyh0YWJsZS5fZGF0YSwgdGFibGVDZmcpKTtcbiAgICB9KTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFibGUgZGF0YSBkb2VzIG5vdCBtYXRjaCB0aGUgY29uZmlndXJhdGlvbi5cXG5cXG5FcnJvcnM6XFxuJHtlcnJvcnNcbiAgICAgICAgICAubWFwKChlKSA9PiBgLSAke2V9YClcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBkYXRhIG9mIGEgdGFibGUgYnkgdGhlIGhhc2ggYW5kIHVwZGF0ZXMgdGhlIHRhYmxlIGhhc2ggaW4gcGxhY2VcbiAgICovXG4gIHNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRhYmxlOiBUYWJsZVR5cGUpOiB2b2lkIHtcbiAgICB0YWJsZS5fZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBoYXNoQSA9IGEuX2hhc2ggYXMgc3RyaW5nO1xuICAgICAgY29uc3QgaGFzaEIgPSBiLl9oYXNoIGFzIHN0cmluZztcbiAgICAgIGlmIChoYXNoQSA8IGhhc2hCKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNoQSA+IGhhc2hCKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDA7XG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXG4gICAgfSk7XG5cbiAgICB0YWJsZS5faGFzaCA9ICcnO1xuICAgIGhpcCh0YWJsZSwge1xuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxuICAgICAgdGhyb3dPbldyb25nSGFzaGVzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IGhpcCwgaHNoIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7IElzUmVhZHkgfSBmcm9tICdAcmxqc29uL2lzLXJlYWR5JztcbmltcG9ydCB7IGNvcHksIGVxdWFscywgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXNTeW5jLFxuICBSbGpzb24sXG4gIFRhYmxlQ2ZnLFxuICBUYWJsZUtleSxcbiAgVGFibGVUeXBlLFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvVG9vbHMgfSBmcm9tICcuL2lvLXRvb2xzLnRzJztcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XG5cbi8qKlxuICogSW4tTWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSbGpzb24gSW8gaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgSW9NZW0gaW1wbGVtZW50cyBJbyB7XG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBDb25zdHJ1Y3RvciAmIGV4YW1wbGVcblxuICBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBuZXcgSW9NZW0oKTtcbiAgfTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhbFxuICBpc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JlYWR5LnByb21pc2U7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gRHVtcFxuXG4gIGR1bXAoKTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZHVtcFRhYmxlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFJvd3NcblxuICByZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRSb3dzKHJlcXVlc3QpO1xuICB9XG5cbiAgYXN5bmMgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy5fbWVtW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG4gICAgaWYgKCF0YWJsZURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRhYmxlRGF0YS5fZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFdyaXRlXG5cbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93cml0ZShyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBUYWJsZSBtYW5hZ2VtZW50XG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3RhYmxlS2V5XSBhcyBUYWJsZVR5cGU7XG4gICAgcmV0dXJuIHRhYmxlID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICBhc3luYyByYXdUYWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XG4gICAgY29uc3QgdGFibGVzID0gdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YSBhcyBUYWJsZUNmZ1tdO1xuICAgIHJldHVybiB0YWJsZXM7XG4gIH1cblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIFByaXZhdGVcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xuXG4gIHByaXZhdGUgX2lzUmVhZHkgPSBuZXcgSXNSZWFkeSgpO1xuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9tZW06IFJsanNvbiA9IGhpcCh7fSBhcyBSbGpzb24pO1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9pbml0KCkge1xuICAgIHRoaXMuX2lvVG9vbHMgPSBuZXcgSW9Ub29scyh0aGlzKTtcbiAgICB0aGlzLl9pbml0VGFibGVDZmdzKCk7XG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMuaW5pdFJldmlzaW9uc1RhYmxlKCk7XG4gICAgaHNoKHRoaXMuX21lbSk7XG5cbiAgICB0aGlzLl9pc1JlYWR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9pbml0VGFibGVDZmdzID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gSW9Ub29scy50YWJsZUNmZ3NUYWJsZUNmZztcblxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MgPSBoaXAoe1xuICAgICAgX2RhdGE6IFt0YWJsZUNmZ10sXG4gICAgICBfdGFibGVDZmc6IHRhYmxlQ2ZnLl9oYXNoIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgfTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfdXBkYXRlR2xvYmFsSGFzaCgpIHtcbiAgICAodGhpcy5fbWVtIGFzIGFueSkuX2hhc2ggPSAnJztcbiAgICBoaXAodGhpcy5fbWVtLCB7XG4gICAgICB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5OiBUYWJsZUtleSkge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3RhYmxlS2V5XSBhcyBUYWJsZVR5cGU7XG4gICAgdGFibGUuX2hhc2ggPSAnJztcbiAgICBoaXAodGFibGUsIHsgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlIH0pO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDoge1xuICAgIHRhYmxlQ2ZnOiBUYWJsZUNmZztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0YWJsZSBjb25maWcgaXMgY29tcGF0aWJsZVxuICAgIC8vIHdpdGggYW4gcG90ZW50aWFsIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGVDZmcgPSByZXF1ZXN0LnRhYmxlQ2ZnO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVJc05vdENvbXBhdGlibGUodGFibGVDZmcpO1xuXG4gICAgY29uc3QgeyBrZXkgfSA9IHRhYmxlQ2ZnO1xuXG4gICAgLy8gUmVjcmVhdGUgaGFzaGVzIGluIHRoZSBjYXNlIHRoZSBleGlzdGluZyBoYXNoZXMgYXJlIHdyb25nXG4gICAgY29uc3QgbmV3Q29uZmlnID0gaHNoKHRhYmxlQ2ZnKTtcblxuICAgIC8vIEZpbmQgYW4gZXhpc3RpbmcgdGFibGUgY29uZmlnIHdpdGggdGhlIHNhbWUgaGFzaFxuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gYXdhaXQgdGhpcy5faW9Ub29scy50YWJsZUNmZ09yTnVsbChrZXkpO1xuXG4gICAgLy8gV3JpdGUgdGhlIG5ldyBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcbiAgICBpZiAoIWV4aXN0aW5nQ29uZmlnKSB7XG4gICAgICB0aGlzLl9jcmVhdGVUYWJsZShuZXdDb25maWcsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnLCBuZXdDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9jcmVhdGVUYWJsZShuZXdDb25maWc6IFRhYmxlQ2ZnLCB0YWJsZUtleTogVGFibGVLZXkpIHtcbiAgICAvLyBXcml0ZSB0aGUgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgbmV3Q29uZmlnID0gaHNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcblxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIGNvbnN0IHRhYmxlOiBUYWJsZVR5cGUgPSB7XG4gICAgICBfZGF0YTogW10sXG4gICAgICBfdGFibGVDZmc6IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmcsXG4gICAgfTtcblxuICAgIHRoaXMuX21lbVt0YWJsZUtleV0gPz89IGhpcCh0YWJsZSk7XG5cbiAgICAvLyBVcGRhdGUgaGFzaGVzXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5KTtcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWc6IFRhYmxlQ2ZnLCBuZXdDb25maWc6IFRhYmxlQ2ZnKSB7XG4gICAgLy8gTm8gY29sdW1ucyBhZGRlZD8gUmV0dXJuLlxuICAgIGlmIChleGlzdGluZ0NvbmZpZy5jb2x1bW5zLmxlbmd0aCA9PT0gbmV3Q29uZmlnLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIG5ldyB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9tZW0udGFibGVDZmdzLl9kYXRhLnB1c2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb25maWcgb2YgdGhlIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bbmV3Q29uZmlnLmtleV0gYXMgVGFibGVUeXBlO1xuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGhhc2hlc1xuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaChuZXdDb25maWcua2V5KTtcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cblxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIGNvcHkodGhpcy5fbWVtKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9kdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiBjb3B5KHRhYmxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3dyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhZGRlZERhdGEgPSBoc2gocmVxdWVzdC5kYXRhKTtcbiAgICB0aGlzLl9yZW1vdmVOdWxsVmFsdWVzKGFkZGVkRGF0YSk7XG4gICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmtleXMoYWRkZWREYXRhKTtcbiAgICBoc2goYWRkZWREYXRhKTtcblxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVzRG9Ob3RFeGlzdChyZXF1ZXN0LmRhdGEpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKHJlcXVlc3QuZGF0YSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgaWYgKHRhYmxlLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkVGFibGUgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICAgIGNvbnN0IG5ld1RhYmxlID0gYWRkZWREYXRhW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICAgIC8vIFRhYmxlIGV4aXN0cy4gTWVyZ2UgZGF0YVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5ld1RhYmxlLl9kYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBpdGVtLl9oYXNoO1xuICAgICAgICBjb25zdCBleGlzdHMgPSBvbGRUYWJsZS5fZGF0YS5maW5kKChpKSA9PiBpLl9oYXNoID09PSBoYXNoKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICBvbGRUYWJsZS5fZGF0YS5wdXNoKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKG9sZFRhYmxlKTtcbiAgICB9XG5cbiAgICAvLyBSZWNhbGMgbWFpbiBoYXNoZXNcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgICByZXF1ZXN0LnRhYmxlLFxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdC53aGVyZSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgIGNvbnN0IHJlc3VsdDogUmxqc29uID0ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiB7XG4gICAgICAgIF9kYXRhOiB0YWJsZS5fZGF0YS5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIGluIHJlcXVlc3Qud2hlcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByb3dbY29sdW1uXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByZXF1ZXN0LndoZXJlW2NvbHVtbl07XG4gICAgICAgICAgICBpZiAoYiA9PT0gbnVsbCAmJiBhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxzKGEsIGIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9IGFzIGFueTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfcmVtb3ZlTnVsbFZhbHVlcyhybGpzb246IFJsanNvbikge1xuICAgIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKHRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmxqc29uW3RhYmxlXS5fZGF0YTtcblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICBpZiAocm93W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IElvLCBJb01lbSB9IGZyb20gJy4vaW5kZXgudHMnO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBJbyBpbXBsZW1lbnRhdGlvbiBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIGluXG4gKiBjb25mb3JtYW5jZSB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb1Rlc3RTZXR1cCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGluaXQ6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRlYXJzIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqL1xuICB0ZWFyRG93bjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGlvIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgaW4gdGhlIGNvbmZvcm1hbmNlIHRlc3RzLlxuICAgKi9cbiAgaW86IElvO1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLy8gRXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSW9UZXN0U2V0dXAgaW50ZXJmYWNlXG5leHBvcnQgY29uc3QgZXhhbXBsZVRlc3RTZXR1cCA9ICgpOiBJb1Rlc3RTZXR1cCA9PiB7XG4gIHJldHVybiB7XG4gICAgaW86IG5ldyBJb01lbSgpLFxuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGlvIGltcGxlbWVudGF0aW9uXG4gICAgfSxcbiAgICB0ZWFyRG93bjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGVhciBkb3duIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxuICAgIH0sXG4gIH07XG59O1xuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IEpzb25WYWx1ZSB9IGZyb20gJ0BybGpzb24vanNvbic7XG5pbXBvcnQgeyBSbGpzb24sIFRhYmxlQ2ZnLCBUYWJsZUtleSB9IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmV4cG9ydCBpbnRlcmZhY2UgSW8ge1xuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhbFxuXG4gIC8qKiBTdGFydHMgdGhlIGluaXRpYWxpemF0aW9uICovXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKiogQ2xvc2VzIHRoZSBpbyAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgaW8gaXMgb3BlbmVkICovXG4gIGlzT3BlbjogYm9vbGVhbjtcblxuICAvKiogQSBwcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBJbyBpbnRlcmZhY2UgaXMgcmVhZHlcbiAgICpcbiAgICog8J+SoSBVc2UgQHJsanNvbi9pcy1yZWFkeVxuICAgKi9cbiAgaXNSZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgLyoqIFJldHVybnMgdGhlIGNvbXBsZXRlIGRiIGNvbnRlbnQgYXMgUmxqc29uICovXG4gIGR1bXAoKTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBkdW1wIG9mIGEgY29tcGxldGUgdGFibGUgKi9cbiAgZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBUYWJsZXNcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0YWJsZSBleGlzdHNcbiAgICovXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxuICAgKiBJZiB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIG5ldyBjb2x1bW5zIGFyZSBhZGRlZCB0byB0aGUgZXhpc3RpbmcgdGFibGUuXG4gICAqIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWcuXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgdGhlIGNvbHVtbiB0eXBlIGlzIGNoYW5nZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmF3VGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFdyaXRlXG5cbiAgLyoqIFdyaXRlcyBSbGpzb24gZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSAqL1xuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUmVhZCByb3dzXG5cbiAgLyoqIFF1ZXJpZXMgYSBsaXN0IG9mIHJvd3MgKi9cbiAgcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIHwgbnVsbCB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZ2l2ZW4gdGFibGUgKi9cbiAgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxuICAnQ2hlY2tvdXQgQHJsanNvbi9pby1tZW0gZm9yIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24nO1xuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IEpzb24gfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHtcbiAgQnVmZmV0LFxuICBDYWtlLFxuICBpdGVyYXRlVGFibGVzU3luYyxcbiAgTGF5ZXIsXG4gIFJlZixcbiAgUmxqc29uLFxuICBUYWJsZUtleSxcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdGFibGUgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCB0YWJsZVxuICAgKi9cbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFyZW50IHJvdyB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHJvd1xuICAgICAqL1xuICAgIFtwYXJlbnRSb3c6IFJlZl06IHtcbiAgICAgIC8qKlxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cbiAgICAgICAqL1xuICAgICAgZGV0YWlscz86IEpzb247XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldmVyc2VSZWZzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZCB0YWJsZSB3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxuICAgKi9cbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xuICAgIC8qKlxuICAgICAqIFRoZSByb3cgaGFzaHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXG4gICAgICovXG4gICAgW2NoaWxkUm93OiBSZWZdOiBQYXJlbnRSZWY7XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY2FsY1JldmVyc2VSZWZzID0gKHJsanNvbjogUmxqc29uKTogUmV2ZXJzZVJlZnMgPT4ge1xuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKGNoaWxkVGFibGVLZXksIHRhYmxlKSA9PiB7XG4gICAgY29uc3QgY2hpbGRUYWJsZTogeyBbY2hpbGRSb3dIYXNoOiBzdHJpbmddOiBQYXJlbnRSZWYgfSA9IHt9O1xuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XG4gICAgZm9yIChjb25zdCBjaGlsZFJvdyBvZiB0YWJsZS5fZGF0YSkge1xuICAgICAgY2hpbGRUYWJsZVtjaGlsZFJvdy5faGFzaF0gPSB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhdGUgcmV2ZXJzZSByZWZlcmVuY2VzXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZSkgPT4ge1xuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxuICAgIGZvciAoY29uc3QgcGFyZW50VGFibGVSb3cgb2YgcGFyZW50VGFibGUuX2RhdGEpIHtcbiAgICAgIC8vIEZpbmQgb3V0IHdoZSBvdGhlciB0YWJsZXMgJiByb3dzIGFyZSByZWZlcmVuY2VkIGJ5IHRoaXMgcm93XG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcbiAgICAgIHN3aXRjaCAocGFyZW50VGFibGUuX3R5cGUpIHtcbiAgICAgICAgY2FzZSAnaW5ncmVkaWVudHMnOlxuICAgICAgICAgIF93cml0ZUluZ3JlZGllbnRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdsYXllcnMnOiB7XG4gICAgICAgICAgX3dyaXRlTGF5ZXJSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3NsaWNlSWRzJzoge1xuICAgICAgICAgIC8vIFNsaWNlIGlkcyBkbyBub3QgcmVmZXJlbmNlIG90aGVyIHRhYmxlc1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnY2FrZXMnOiB7XG4gICAgICAgICAgX3dyaXRlQ2FrZVJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYnVmZmV0cyc6IHtcbiAgICAgICAgICBfd3JpdGVCdWZmZXRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qIHY4IGlnbm9yZSBlbmQgKi9cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUluZ3JlZGllbnRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEpzb24sXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xuICAgIGlmIChwYXJlbnRDb2x1bW5OYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRDb2x1bW5OYW1lLmVuZHNXaXRoKCdSZWYnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3dbcGFyZW50Q29sdW1uTmFtZV0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVMYXllclJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogTGF5ZXIsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cuaW5ncmVkaWVudHNUYWJsZTtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBzbGljZUlkIGluIHBhcmVudFJvdy5hc3NpZ24pIHtcbiAgICBpZiAoc2xpY2VJZC5zdGFydHNXaXRoKCdfJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hc3NpZ25bc2xpY2VJZF0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKHJlc3VsdCwgY2hpbGRUYWJsZU5hbWUsIHNsaWNlSGFzaCwgcGFyZW50VGFibGVOYW1lLCBwYXJlbnRSb3dIYXNoKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUNha2VSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IENha2UsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBsYXllciBpbiBwYXJlbnRSb3cubGF5ZXJzKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cubGF5ZXJzVGFibGU7XG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gcGFyZW50Um93LmxheWVyc1tsYXllcl0gYXMgc3RyaW5nO1xuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQnVmZmV0UmVmcyA9IChcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcbiAgcGFyZW50Um93OiBCdWZmZXQsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHBhcmVudFJvdy5pdGVtcykge1xuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gaXRlbS50YWJsZTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBpdGVtLnJlZjtcbiAgICBfd3JpdGUoXG4gICAgICByZXN1bHQsXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcbiAgICAgIGNoaWxkUm93SGFzaCxcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgIHBhcmVudFJvd0hhc2gsXG4gICAgKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZSA9IChcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbiAgY2hpbGRUYWJsZU5hbWU6IHN0cmluZyxcbiAgY2hpbGRSb3dIYXNoOiBzdHJpbmcsXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nLFxuICBwYXJlbnRSb3dIYXNoOiBzdHJpbmcsXG4pID0+IHtcbiAgY29uc3QgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGUgPSAocmVzdWx0W2NoaWxkVGFibGVOYW1lXSA/Pz0ge30pO1xuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvdyA9IChyZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVtjaGlsZFJvd0hhc2hdID8/PVxuICAgIHt9KTtcblxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdID8/PSB7fTtcbiAgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3dbcGFyZW50VGFibGVOYW1lXVtwYXJlbnRSb3dIYXNoXSA/Pz0ge307XG59O1xuIl0sIm5hbWVzIjpbImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQXVCTyxNQUFNLFdBQU4sTUFBTSxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtu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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rljson/io",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"packageManager": "pnpm@10.9.0",
|
|
5
5
|
"description": "Low level interface for reading and writing RLJSON data",
|
|
6
6
|
"homepage": "https://github.com/rljson/io",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@vitest/coverage-v8": "^3.1.3",
|
|
36
36
|
"cross-env": "^7.0.3",
|
|
37
37
|
"eslint": "^9.26.0",
|
|
38
|
-
"eslint-plugin-jsdoc": "^50.6.
|
|
38
|
+
"eslint-plugin-jsdoc": "^50.6.17",
|
|
39
39
|
"eslint-plugin-tsdoc": "^0.4.0",
|
|
40
40
|
"globals": "^16.1.0",
|
|
41
41
|
"jsdoc": "^4.0.4",
|