@bitgo-beta/sdk-coin-avaxp 3.5.10-beta.612 → 3.5.10-beta.613

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/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.0.53](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@5.0.51...@bitgo/sdk-coin-avaxp@5.0.53) (2024-12-17)
7
+
8
+ **Note:** Version bump only for package @bitgo/sdk-coin-avaxp
9
+
10
+ ## [5.0.52](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@5.0.51...@bitgo/sdk-coin-avaxp@5.0.52) (2024-12-17)
11
+
12
+ **Note:** Version bump only for package @bitgo/sdk-coin-avaxp
13
+
6
14
  ## [5.0.51](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@5.0.50...@bitgo/sdk-coin-avaxp@5.0.51) (2024-12-12)
7
15
 
8
16
  **Note:** Version bump only for package @bitgo/sdk-coin-avaxp
@@ -1,7 +1,7 @@
1
1
  import { BaseCoin as StaticsBaseCoin, CoinFamily } from '@bitgo-beta/statics';
2
- import { BaseCoin, BitGoBase, KeyPair, VerifyAddressOptions, SignedTransaction, ParseTransactionOptions, FeeEstimateOptions, ITransactionRecipient, ParsedTransaction } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin, BitGoBase, KeyPair, VerifyAddressOptions, SignedTransaction, ParseTransactionOptions, ITransactionRecipient, ParsedTransaction } from '@bitgo-beta/sdk-core';
3
3
  import * as AvaxpLib from './lib';
4
- import { AvaxpSignTransactionOptions, TransactionFee, ExplainTransactionOptions, AvaxpVerifyTransactionOptions, AvaxpTransactionStakingOptions, AvaxpTransactionParams } from './iface';
4
+ import { AvaxpSignTransactionOptions, ExplainTransactionOptions, AvaxpVerifyTransactionOptions, AvaxpTransactionStakingOptions, AvaxpTransactionParams } from './iface';
5
5
  export declare class AvaxP extends BaseCoin {
6
6
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
7
7
  constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
@@ -73,7 +73,6 @@ export declare class AvaxP extends BaseCoin {
73
73
  * Signs Avaxp transaction
74
74
  */
75
75
  signTransaction(params: AvaxpSignTransactionOptions): Promise<SignedTransaction>;
76
- feeEstimate(params: FeeEstimateOptions): Promise<TransactionFee>;
77
76
  parseTransaction(params: ParseTransactionOptions): Promise<ParsedTransaction>;
78
77
  /**
79
78
  * Explain a Avaxp transaction from txHex
@@ -1 +1 @@
1
- {"version":3,"file":"avaxp.d.ts","sourceRoot":"","sources":["../../src/avaxp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EAGvB,kBAAkB,EAKlB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAMjB,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAGlB,SAAS,IAAI,UAAU;IAGvB,WAAW,IAAI,MAAM;IAGrB,aAAa,IAAI,MAAM,GAAG,MAAM;IAIhC;;;;;OAKG;IACH,iBAAiB,CACf,cAAc,EAAE,8BAA8B,EAC9C,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IAYP;;;;;OAKG;IACH,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAAG,IAAI;IAqBzG;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAgB5F,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IA0DhF;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BrE;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAanD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBhF,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAKhE,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAInF;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAcrG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIvD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"avaxp.d.ts","sourceRoot":"","sources":["../../src/avaxp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EAOvB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAMjB,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAGlB,SAAS,IAAI,UAAU;IAGvB,WAAW,IAAI,MAAM;IAGrB,aAAa,IAAI,MAAM,GAAG,MAAM;IAIhC;;;;;OAKG;IACH,iBAAiB,CACf,cAAc,EAAE,8BAA8B,EAC9C,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IAYP;;;;;OAKG;IACH,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAAG,IAAI;IAqBzG;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAgB5F,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IA0DhF;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BrE;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAanD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBhF,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAInF;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAcrG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIvD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E,OAAO,CAAC,UAAU;CAGnB"}
package/dist/src/avaxp.js CHANGED
@@ -292,10 +292,6 @@ class AvaxP extends sdk_core_1.BaseCoin {
292
292
  ? { txHex: transaction.toBroadcastFormat() }
293
293
  : { halfSigned: { txHex: transaction.toBroadcastFormat() } };
294
294
  }
295
- async feeEstimate(params) {
296
- // staking transactions are fee-less
297
- return { fee: '0' };
298
- }
299
295
  async parseTransaction(params) {
300
296
  return {};
301
297
  }
@@ -337,4 +333,4 @@ class AvaxP extends sdk_core_1.BaseCoin {
337
333
  }
338
334
  }
339
335
  exports.AvaxP = AvaxP;
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQXVHO0FBQ3ZHLG1EQWdCOEI7QUFDOUIsZ0RBQWtDO0FBU2xDLHdEQUFnQztBQUNoQyxvREFBdUI7QUFDdkIsZ0VBQXFDO0FBQ3JDLHFEQUFzRTtBQUV0RSxNQUFhLEtBQU0sU0FBUSxtQkFBUTtJQUdqQyxZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FDZixjQUE4QyxFQUM5QyxXQUE0QztRQUU1QyxNQUFNLGtCQUFrQixH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UUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQTJCLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVksRUFBRSxPQUF3QjtRQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLHVCQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUEyQixFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPLElBQUksUUFBUSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0Y7QUE5VUQsc0JBOFVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXZhbGFuY2hlTmV0d29yaywgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBDb2luRmFtaWx5LCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgS2V5UGFpcixcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgRmVlRXN0aW1hdGVPcHRpb25zLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgSVRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgQXZheHBMaWIgZnJvbSAnLi9saWInO1xuaW1wb3J0IHtcbiAgQXZheHBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkZlZSxcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQXZheHBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEF2YXhwVHJhbnNhY3Rpb25TdGFraW5nT3B0aW9ucyxcbiAgQXZheHBUcmFuc2FjdGlvblBhcmFtcyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGlzVmFsaWRBZGRyZXNzIGFzIGlzVmFsaWRFdGhBZGRyZXNzIH0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcblxuZXhwb3J0IGNsYXNzIEF2YXhQIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEF2YXhQKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG4gIGdldEZhbWlseSgpOiBDb2luRmFtaWx5IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG4gIGdldEJhc2VGYWN0b3IoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHN0YWtpbmcgdHhuIGlzIHZhbGlkLCBiYXNlZCBvbiBleHBlY3RlZCB0eCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXZheHBUcmFuc2FjdGlvblN0YWtpbmdPcHRpb25zfSBzdGFraW5nT3B0aW9ucyBleHBlY3RlZCBzdGFraW5nIHBhcmFtcyB0byBjaGVjayBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7QXZheHBMaWIuVHJhbnNhY3Rpb25FeHBsYW5hdGlvbn0gZXhwbGFpbmVkVHggZXhwbGFpbmVkIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICovXG4gIHZhbGlkYXRlU3Rha2luZ1R4KFxuICAgIHN0YWtpbmdPcHRpb25zOiBBdmF4cFRyYW5zYWN0aW9uU3Rha2luZ09wdGlvbnMsXG4gICAgZXhwbGFpbmVkVHg6IEF2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyZWRSZWNpcGllbnRzID0gW3sgYWRkcmVzczogc3Rha2luZ09wdGlvbnMubm9kZUlELCBhbW91bnQ6IHN0YWtpbmdPcHRpb25zLmFtb3VudCB9XTtcbiAgICBjb25zdCBmaWx0ZXJlZE91dHB1dHMgPSBleHBsYWluZWRUeC5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBfLnBpY2sob3V0cHV0LCBbJ2FkZHJlc3MnLCAnYW1vdW50J10pKTtcblxuICAgIGlmICghXy5pc0VxdWFsKGZpbHRlcmVkT3V0cHV0cywgZmlsdGVyZWRSZWNpcGllbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHN0YWtpbmdPcHRpb25zPy5hbW91bnQgIT09IGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCB0b3RhbCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0b3RhbCBhbW91bnQgZmllbGQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZXhwb3J0IHR4biBpcyB2YWxpZCwgYmFzZWQgb24gZXhwZWN0ZWQgdHggcGFyYW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0lUcmFuc2FjdGlvblJlY2lwaWVudFtdfSByZWNpcGllbnRzIGV4cGVjdGVkIHJlY2lwaWVudHMgYW5kIGluZm9cbiAgICogQHBhcmFtIHtBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYWluZWRUeCBleHBsYWluZWQgZXhwb3J0IHRyYW5zYWN0aW9uXG4gICAqL1xuICB2YWxpZGF0ZUV4cG9ydFR4KHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdLCBleHBsYWluZWRUeDogQXZheHBMaWIuVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IHZvaWQge1xuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCAhPT0gMSB8fCBleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBvcnQgVHggcmVxdWlyZXMgb25lIHJlY2lwaWVudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG1heEltcG9ydEZlZSA9ICh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmspLm1heEltcG9ydEZlZTtcbiAgICBjb25zdCByZWNpcGllbnRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudHNbMF0uYW1vdW50KTtcbiAgICBpZiAoXG4gICAgICByZWNpcGllbnRBbW91bnQuaXNHcmVhdGVyVGhhbihleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpIHx8XG4gICAgICByZWNpcGllbnRBbW91bnQucGx1cyhtYXhJbXBvcnRGZWUpLmlzTGVzc1RoYW4oZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHggdG90YWwgYW1vdW50ICR7ZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50fSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCAke3JlY2lwaWVudEFtb3VudH0gYW5kIG1heCBpbXBvcnQgZmVlICR7bWF4SW1wb3J0RmVlfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGV4cGxhaW5lZFR4Lm91dHB1dHMgJiYgIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGV4cGxhaW5lZFR4Lm91dHB1dHNbMF0uYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBQLWNoYWluIGFkZHJlc3MgJHtleHBsYWluZWRUeC5vdXRwdXRzWzBdLmFkZHJlc3N9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGltcG9ydCB0eG4gaW50byBQIGlzIHZhbGlkLCBiYXNlZCBvbiBleHBlY3RlZCB0eCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXZheHBMaWIuQXZheHBFbnRyeVtdfSBleHBsYWluZWRUeElucHV0cyB0eCBpbnB1dHMgKHVuc3BlbnRzIHRvIGJlIGltcG9ydGVkKVxuICAgKiBAcGFyYW0ge0F2YXhwVHJhbnNhY3Rpb25QYXJhbXN9IHR4UGFyYW1zIGV4cGVjdGVkIHR4IGluZm8gdG8gY2hlY2sgYWdhaW5zdFxuICAgKi9cbiAgdmFsaWRhdGVJbXBvcnRUeChleHBsYWluZWRUeElucHV0czogQXZheHBMaWIuQXZheHBFbnRyeVtdLCB0eFBhcmFtczogQXZheHBUcmFuc2FjdGlvblBhcmFtcyk6IHZvaWQge1xuICAgIGlmICh0eFBhcmFtcy51bnNwZW50cykge1xuICAgICAgaWYgKGV4cGxhaW5lZFR4SW5wdXRzLmxlbmd0aCAhPT0gdHhQYXJhbXMudW5zcGVudHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHt0eFBhcmFtcy51bnNwZW50cy5sZW5ndGh9IFVUWE9zLCB0cmFuc2FjdGlvbiBoYWQgJHtleHBsYWluZWRUeElucHV0cy5sZW5ndGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gbmV3IFNldCh0eFBhcmFtcy51bnNwZW50cyk7XG5cbiAgICAgIGZvciAoY29uc3QgdW5zcGVudCBvZiBleHBsYWluZWRUeElucHV0cykge1xuICAgICAgICBpZiAoIXVuc3BlbnRzLmhhcyh1bnNwZW50LmlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gc2hvdWxkIG5vdCBjb250YWluIHRoZSBVVFhPOiAke3Vuc3BlbnQuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IEF2YXhwVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhQcmVidWlsZCAmJiBwYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9XG4gICAgbGV0IHR4O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHR4SGV4KTtcbiAgICAgIHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgY29uc3QgeyB0eXBlLCBzdGFraW5nT3B0aW9ucyB9ID0gcGFyYW1zLnR4UGFyYW1zO1xuICAgIC8vIFRPRE8oQkctNjIxMTIpOiBjaGFuZ2UgSW1wb3J0VG9DIHR5cGUgdG8gSW1wb3J0XG4gICAgaWYgKCF0eXBlIHx8ICh0eXBlICE9PSAnSW1wb3J0VG9DJyAmJiBleHBsYWluZWRUeC50eXBlICE9PSBUcmFuc2FjdGlvblR5cGVbdHlwZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHR5cGUgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyB0eXBlJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChleHBsYWluZWRUeC50eXBlKSB7XG4gICAgICAvLyBAZGVwcmVjYXRlZFxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdG9yOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NEZWxlZ2F0b3I6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcjpcbiAgICAgICAgdGhpcy52YWxpZGF0ZVN0YWtpbmdUeChzdGFraW5nT3B0aW9ucywgZXhwbGFpbmVkVHgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDpcbiAgICAgICAgaWYgKCFwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cyB8fCBwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBvcnQgVHggcmVxdWlyZXMgYSByZWNpcGllbnQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRXhwb3J0VHgocGFyYW1zLnR4UGFyYW1zLnJlY2lwaWVudHMsIGV4cGxhaW5lZFR4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkltcG9ydDpcbiAgICAgICAgaWYgKHR4LmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBJbXBvcnQgdG8gQy1jaGFpblxuICAgICAgICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIG91dHB1dCBpbiBpbXBvcnQgdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cyB8fCBwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgMSByZWNpcGllbnQgaW4gaW1wb3J0IHRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEltcG9ydCB0byBQLWNoYWluXG4gICAgICAgICAgaWYgKGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIDEgb3V0cHV0IGluIGltcG9ydCB0cmFuc2FjdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW1wb3J0VHgoZXhwbGFpbmVkVHguaW5wdXRzLCBwYXJhbXMudHhQYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQsIHRoZW4gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIHJvb3QgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgcHVibGljIGtleXMgdG8gZ2VuZXJhdGUgdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucyB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIGlmICgha2V5Y2hhaW5zIHx8IGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXNpZyBhZGRyZXNzZXMgYXJlIHNlcGFyYXRlZCBieSB+XG4gICAgY29uc3Qgc3BsaXRBZGRyZXNzZXMgPSBhZGRyZXNzLnNwbGl0KCd+Jyk7XG5cbiAgICAvLyBkZXJpdmUgYWRkcmVzc2VzIGZyb20ga2V5Y2hhaW5cbiAgICBjb25zdCB1bmxvY2tBZGRyZXNzZXMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT5cbiAgICAgIG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgcHViOiBrZXljaGFpbi5wdWIgfSkuZ2V0QWRkcmVzcyh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrLnR5cGUpXG4gICAgKTtcblxuICAgIGlmIChzcGxpdEFkZHJlc3Nlcy5sZW5ndGggIT09IHVubG9ja0FkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogbXVsdGlzaWcgYWRkcmVzcyBsZW5ndGggZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRyZXNzZXNBcnJheXNNYXRjaChzcGxpdEFkZHJlc3NlcywgdW5sb2NrQWRkcmVzc2VzKSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3N9IGlzIG5vdCBvZiB0aGlzIHdhbGxldGApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdHdvIG11bHRpc2lnIGFkZHJlc3MgYXJyYXlzIGhhdmUgdGhlIHNhbWUgZWxlbWVudHMsIG9yZGVyIGRvZXNudCBtYXR0ZXJcbiAgICogQHBhcmFtIGFkZHJlc3NBcnJheTFcbiAgICogQHBhcmFtIGFkZHJlc3NBcnJheTJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhZGRyZXNzIGFycmF5cyBoYXZlIHRoZSBzYW1lIGFkZHJlc3Nlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhZHJlc3Nlc0FycmF5c01hdGNoKGFkZHJlc3NBcnJheTE6IHN0cmluZ1tdLCBhZGRyZXNzQXJyYXkyOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhZGRyZXNzQXJyYXkxLnNvcnQoKSkgPT09IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NBcnJheTIuc29ydCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBBdmF4cCBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2VlZCAtIFNlZWQgZnJvbSB3aGljaCB0aGUgbmV3IGtleXBhaXIgc2hvdWxkIGJlIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIGEgcmFuZG9tIHNlZWQgaXMgdXNlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQXZheHBMaWIuS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy5wdWIsXG4gICAgICBwcnY6IGtleXMucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHB1YiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEF2YXhwTGliLktleVBhaXIoeyBwcnYgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAoYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgZXRoIGFkZHJlc3MgZm9yIGNyb3NzLWNoYWluIHR4cyB0byBjLWNoYWluXG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIEF2YXhwTGliLlV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIEF2YXhwIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBBdmF4cFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gZGVzZXJpYWxpemUgcmF3IHRyYW5zYWN0aW9uIChub3RlOiBmcm9tQWRkcmVzcyBoYXMgb25jaGFpbiBvcmRlcilcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBrZXkgPSBwYXJhbXMucHJ2O1xuXG4gICAgLy8gcHVzaCB0aGUga2V5cGFpciB0byBzaWduZXIgYXJyYXlcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleSB9KTtcblxuICAgIC8vIGJ1aWxkIHRoZSB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0Vycm9yIHdoaWxlIHRyeWluZyB0byBidWlsZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+PSAyXG4gICAgICA/IHsgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkgfVxuICAgICAgOiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkgfSB9O1xuICB9XG5cbiAgYXN5bmMgZmVlRXN0aW1hdGUocGFyYW1zOiBGZWVFc3RpbWF0ZU9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRmVlPiB7XG4gICAgLy8gc3Rha2luZyB0cmFuc2FjdGlvbnMgYXJlIGZlZS1sZXNzXG4gICAgcmV0dXJuIHsgZmVlOiAnMCcgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIEF2YXhwIHRyYW5zYWN0aW9uIGZyb20gdHhIZXhcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEF2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCA/PyBwYXJhbXM/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJlY292ZXJ5U2lnbmF0dXJlKG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBBdmF4cExpYi5VdGlscy5yZWNvdmVyeVNpZ25hdHVyZSh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmssIG1lc3NhZ2UsIHNpZ25hdHVyZSk7XG4gIH1cblxuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IEtleVBhaXIsIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgcHJ2ID0gbmV3IEF2YXhwTGliLktleVBhaXIoa2V5KS5nZXRQcml2YXRlS2V5KCk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlID0gQnVmZmVyLmZyb20obWVzc2FnZSwgJ2hleCcpO1xuICAgIH1cbiAgICByZXR1cm4gQXZheHBMaWIuVXRpbHMuY3JlYXRlU2lnbmF0dXJlKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZSwgcHJ2KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlcigpOiBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICB9XG59XG4iXX0=
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQXVHO0FBQ3ZHLG1EQWU4QjtBQUM5QixnREFBa0M7QUFRbEMsd0RBQWdDO0FBQ2hDLG9EQUF1QjtBQUN2QixnRUFBcUM7QUFDckMscURBQXNFO0FBRXRFLE1BQWEsS0FBTSxTQUFRLG1CQUFRO0lBR2pDLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBQ0QsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUNELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUNmLGNBQThDLEVBQzlDLFdBQTRDO1FBRTVDLE1BQU0sa0JBQWtCLEdB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QztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBWSxFQUFFLE9BQXdCO1FBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksdUJBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQTJCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxRQUFRLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDRjtBQXpVRCxzQkF5VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdmFsYW5jaGVOZXR3b3JrLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgSVRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgQXZheHBMaWIgZnJvbSAnLi9saWInO1xuaW1wb3J0IHtcbiAgQXZheHBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zLFxuICBBdmF4cFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQXZheHBUcmFuc2FjdGlvblN0YWtpbmdPcHRpb25zLFxuICBBdmF4cFRyYW5zYWN0aW9uUGFyYW1zLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgaXNWYWxpZEFkZHJlc3MgYXMgaXNWYWxpZEV0aEFkZHJlc3MgfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgQXZheFAgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgQXZheFAoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cbiAgZ2V0RmFtaWx5KCk6IENvaW5GYW1pbHkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cbiAgZ2V0QmFzZUZhY3RvcigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc3Rha2luZyB0eG4gaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBdmF4cFRyYW5zYWN0aW9uU3Rha2luZ09wdGlvbnN9IHN0YWtpbmdPcHRpb25zIGV4cGVjdGVkIHN0YWtpbmcgcGFyYW1zIHRvIGNoZWNrIGFnYWluc3RcbiAgICogQHBhcmFtIHtBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYWluZWRUeCBleHBsYWluZWQgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKi9cbiAgdmFsaWRhdGVTdGFraW5nVHgoXG4gICAgc3Rha2luZ09wdGlvbnM6IEF2YXhwVHJhbnNhY3Rpb25TdGFraW5nT3B0aW9ucyxcbiAgICBleHBsYWluZWRUeDogQXZheHBMaWIuVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJlZFJlY2lwaWVudHMgPSBbeyBhZGRyZXNzOiBzdGFraW5nT3B0aW9ucy5ub2RlSUQsIGFtb3VudDogc3Rha2luZ09wdGlvbnMuYW1vdW50IH1dO1xuICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IF8ucGljayhvdXRwdXQsIFsnYWRkcmVzcycsICdhbW91bnQnXSkpO1xuXG4gICAgaWYgKCFfLmlzRXF1YWwoZmlsdGVyZWRPdXRwdXRzLCBmaWx0ZXJlZFJlY2lwaWVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAoc3Rha2luZ09wdGlvbnM/LmFtb3VudCAhPT0gZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHRvdGFsIGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBleHBvcnQgdHhuIGlzIHZhbGlkLCBiYXNlZCBvbiBleHBlY3RlZCB0eCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SVRyYW5zYWN0aW9uUmVjaXBpZW50W119IHJlY2lwaWVudHMgZXhwZWN0ZWQgcmVjaXBpZW50cyBhbmQgaW5mb1xuICAgKiBAcGFyYW0ge0F2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhaW5lZFR4IGV4cGxhaW5lZCBleHBvcnQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHZhbGlkYXRlRXhwb3J0VHgocmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W10sIGV4cGxhaW5lZFR4OiBBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoICE9PSAxIHx8IGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cG9ydCBUeCByZXF1aXJlcyBvbmUgcmVjaXBpZW50Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4SW1wb3J0RmVlID0gKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykubWF4SW1wb3J0RmVlO1xuICAgIGNvbnN0IHJlY2lwaWVudEFtb3VudCA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50c1swXS5hbW91bnQpO1xuICAgIGlmIChcbiAgICAgIHJlY2lwaWVudEFtb3VudC5pc0dyZWF0ZXJUaGFuKGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudCkgfHxcbiAgICAgIHJlY2lwaWVudEFtb3VudC5wbHVzKG1heEltcG9ydEZlZSkuaXNMZXNzVGhhbihleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeCB0b3RhbCBhbW91bnQgJHtleHBsYWluZWRUeC5vdXRwdXRBbW91bnR9IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkICR7cmVjaXBpZW50QW1vdW50fSBhbmQgbWF4IGltcG9ydCBmZWUgJHttYXhJbXBvcnRGZWV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwbGFpbmVkVHgub3V0cHV0cyAmJiAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFAtY2hhaW4gYWRkcmVzcyAke2V4cGxhaW5lZFR4Lm91dHB1dHNbMF0uYWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaW1wb3J0IHR4biBpbnRvIFAgaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBdmF4cExpYi5BdmF4cEVudHJ5W119IGV4cGxhaW5lZFR4SW5wdXRzIHR4IGlucHV0cyAodW5zcGVudHMgdG8gYmUgaW1wb3J0ZWQpXG4gICAqIEBwYXJhbSB7QXZheHBUcmFuc2FjdGlvblBhcmFtc30gdHhQYXJhbXMgZXhwZWN0ZWQgdHggaW5mbyB0byBjaGVjayBhZ2FpbnN0XG4gICAqL1xuICB2YWxpZGF0ZUltcG9ydFR4KGV4cGxhaW5lZFR4SW5wdXRzOiBBdmF4cExpYi5BdmF4cEVudHJ5W10sIHR4UGFyYW1zOiBBdmF4cFRyYW5zYWN0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKHR4UGFyYW1zLnVuc3BlbnRzKSB7XG4gICAgICBpZiAoZXhwbGFpbmVkVHhJbnB1dHMubGVuZ3RoICE9PSB0eFBhcmFtcy51bnNwZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3R4UGFyYW1zLnVuc3BlbnRzLmxlbmd0aH0gVVRYT3MsIHRyYW5zYWN0aW9uIGhhZCAke2V4cGxhaW5lZFR4SW5wdXRzLmxlbmd0aH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5zcGVudHMgPSBuZXcgU2V0KHR4UGFyYW1zLnVuc3BlbnRzKTtcblxuICAgICAgZm9yIChjb25zdCB1bnNwZW50IG9mIGV4cGxhaW5lZFR4SW5wdXRzKSB7XG4gICAgICAgIGlmICghdW5zcGVudHMuaGFzKHVuc3BlbnQuaWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBzaG91bGQgbm90IGNvbnRhaW4gdGhlIFVUWE86ICR7dW5zcGVudC5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogQXZheHBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eFByZWJ1aWxkICYmIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cbiAgICBsZXQgdHg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBjb25zdCB7IHR5cGUsIHN0YWtpbmdPcHRpb25zIH0gPSBwYXJhbXMudHhQYXJhbXM7XG4gICAgLy8gVE9ETyhCRy02MjExMik6IGNoYW5nZSBJbXBvcnRUb0MgdHlwZSB0byBJbXBvcnRcbiAgICBpZiAoIXR5cGUgfHwgKHR5cGUgIT09ICdJbXBvcnRUb0MnICYmIGV4cGxhaW5lZFR4LnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZVt0eXBlXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV4cGxhaW5lZFR4LnR5cGUpIHtcbiAgICAgIC8vIEBkZXByZWNhdGVkXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGREZWxlZ2F0b3I6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3I6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc0RlbGVnYXRvcjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yOlxuICAgICAgICB0aGlzLnZhbGlkYXRlU3Rha2luZ1R4KHN0YWtpbmdPcHRpb25zLCBleHBsYWluZWRUeCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAoIXBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzIHx8IHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cG9ydCBUeCByZXF1aXJlcyBhIHJlY2lwaWVudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVFeHBvcnRUeChwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cywgZXhwbGFpbmVkVHgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuSW1wb3J0OlxuICAgICAgICBpZiAodHguaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEltcG9ydCB0byBDLWNoYWluXG4gICAgICAgICAgaWYgKGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIDEgb3V0cHV0IGluIGltcG9ydCB0cmFuc2FjdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzIHx8IHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIHJlY2lwaWVudCBpbiBpbXBvcnQgdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW1wb3J0IHRvIFAtY2hhaW5cbiAgICAgICAgICBpZiAoZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgMSBvdXRwdXQgaW4gaW1wb3J0IHRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbXBvcnRUeChleHBsYWluZWRUeC5pbnB1dHMsIHBhcmFtcy50eFBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHR5cGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCwgdGhlbiBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB0aGUgcm9vdCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBwdWJsaWMga2V5cyB0byBnZW5lcmF0ZSB0aGUgd2FsbGV0XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gICAgaWYgKCFrZXljaGFpbnMgfHwga2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIC8vIG11bHRpc2lnIGFkZHJlc3NlcyBhcmUgc2VwYXJhdGVkIGJ5IH5cbiAgICBjb25zdCBzcGxpdEFkZHJlc3NlcyA9IGFkZHJlc3Muc3BsaXQoJ34nKTtcblxuICAgIC8vIGRlcml2ZSBhZGRyZXNzZXMgZnJvbSBrZXljaGFpblxuICAgIGNvbnN0IHVubG9ja0FkZHJlc3NlcyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PlxuICAgICAgbmV3IEF2YXhwTGliLktleVBhaXIoeyBwdWI6IGtleWNoYWluLnB1YiB9KS5nZXRBZGRyZXNzKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsudHlwZSlcbiAgICApO1xuXG4gICAgaWYgKHNwbGl0QWRkcmVzc2VzLmxlbmd0aCAhPT0gdW5sb2NrQWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBtdWx0aXNpZyBhZGRyZXNzIGxlbmd0aCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hZHJlc3Nlc0FycmF5c01hdGNoKHNwbGl0QWRkcmVzc2VzLCB1bmxvY2tBZGRyZXNzZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6ICR7YWRkcmVzc30gaXMgbm90IG9mIHRoaXMgd2FsbGV0YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0d28gbXVsdGlzaWcgYWRkcmVzcyBhcnJheXMgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cywgb3JkZXIgZG9lc250IG1hdHRlclxuICAgKiBAcGFyYW0gYWRkcmVzc0FycmF5MVxuICAgKiBAcGFyYW0gYWRkcmVzc0FycmF5MlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGFkZHJlc3MgYXJyYXlzIGhhdmUgdGhlIHNhbWUgYWRkcmVzc2VzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFkcmVzc2VzQXJyYXlzTWF0Y2goYWRkcmVzc0FycmF5MTogc3RyaW5nW10sIGFkZHJlc3NBcnJheTI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFkZHJlc3NBcnJheTEuc29ydCgpKSA9PT0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0FycmF5Mi5zb3J0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEF2YXhwIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBdmF4cExpYi5LZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuXG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgcHViIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHBydiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBldGggYWRkcmVzcyBmb3IgY3Jvc3MtY2hhaW4gdHhzIHRvIGMtY2hhaW5cbiAgICBpZiAodHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnICYmIGlzVmFsaWRFdGhBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXZheHBMaWIuVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgQXZheHAgdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IEF2YXhwU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBkZXNlcmlhbGl6ZSByYXcgdHJhbnNhY3Rpb24gKG5vdGU6IGZyb21BZGRyZXNzIGhhcyBvbmNoYWluIG9yZGVyKVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IGtleSA9IHBhcmFtcy5wcnY7XG5cbiAgICAvLyBwdXNoIHRoZSBrZXlwYWlyIHRvIHNpZ25lciBhcnJheVxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5IH0pO1xuXG4gICAgLy8gYnVpbGQgdGhlIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGJ1aWxkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDJcbiAgICAgID8geyB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSB9XG4gICAgICA6IHsgaGFsZlNpZ25lZDogeyB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSB9IH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gYSBBdmF4cCB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggPz8gcGFyYW1zPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHJhbnNhY3Rpb24gaGV4Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZWNvdmVyeVNpZ25hdHVyZShtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQXZheHBMaWIuVXRpbHMucmVjb3ZlcnlTaWduYXR1cmUodGhpcy5fc3RhdGljc0NvaW4ubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrLCBtZXNzYWdlLCBzaWduYXR1cmUpO1xuICB9XG5cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiBLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IHBydiA9IG5ldyBBdmF4cExpYi5LZXlQYWlyKGtleSkuZ2V0UHJpdmF0ZUtleSgpO1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UsICdoZXgnKTtcbiAgICB9XG4gICAgcmV0dXJuIEF2YXhwTGliLlV0aWxzLmNyZWF0ZVNpZ25hdHVyZSh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmssIG1lc3NhZ2UsIHBydik7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIoKTogQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"permissionlessValidatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/permissionlessValidatorTxBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissionlessValidatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/permissionlessValidatorTxBuilder.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
21
21
  super(coinConfig);
22
22
  this._signer = [];
23
23
  this.recoverSigner = false;
24
+ this.transaction._fee.fee = this.transaction._network.txFee;
24
25
  }
25
26
  /**
26
27
  * get transaction type
@@ -449,4 +450,4 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
449
450
  }
450
451
  }
451
452
  exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQWtCa0M7QUFDbEMsbURBUThCO0FBRzlCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBV3RFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBZmIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQU9yQixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQVNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gseUJBQXlCLENBQUMsaUJBQXlCO1FBQ2pELElBQUksaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUMzRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7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QUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYyxXQUFXLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUMxQixJQUFJLENBQUMsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksZ0NBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsY0FBc0I7UUFDM0MsZUFBSyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBeUI7UUFDM0Msd0VBQXdFO0lBQzFFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF2a0JELDRFQXVrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZGRyZXNzLFxuICBhdmF4U2VyaWFsLFxuICB1dGlscyBhcyBBdmF4VXRpbHMsXG4gIEJpZ0ludFByLFxuICBDcmVkZW50aWFsLFxuICBJZCxcbiAgSW5wdXQsXG4gIEludCxcbiAgbmV0d29ya0lEcyxcbiAgT3V0cHV0T3duZXJzLFxuICBwdm1TZXJpYWwsXG4gIFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBUeXBlU3ltYm9scyxcbiAgVW5zaWduZWRUeCxcbiAgVXR4byxcbiAgdXRpbHMgYXMgYXZheFV0aWxzLFxufSBmcm9tICdAYml0Z28tZm9ya3MvYXZhbGFuY2hlanMnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgaXNWYWxpZEJMU1B1YmxpY0tleSxcbiAgaXNWYWxpZEJMU1NpZ25hdHVyZSxcbiAgTm90U3VwcG9ydGVkLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyByZWNvdmVyVXR4b3MgfSBmcm9tICcuL3V0eG9FbmdpbmUnO1xuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQ7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBsb2NrdGltZVxuICAgKiBAcGFyYW0gbG9ja3RpbWVcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBkZWxlZ2F0aW9uIGZlZSBpcyBhdCBsZWFzdCB0aGUgbWluRGVsZWdhdGlvbkZlZVxuICAgKiBAcGFyYW0gZGVsZWdhdGlvbkZlZVJhdGUgbnVtYmVyXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKGRlbGVnYXRpb25GZWVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZGVsZWdhdGlvbkZlZVJhdGUgPCBOdW1iZXIodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYERlbGVnYXRpb24gZmVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gJHt0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIFVUWE8gaGFzIGV4cGVjdGVkIGZpZWxkcy5cbiAgICogQHBhcmFtIFVUWE9cbiAgICovXG4gIHZhbGlkYXRlVXR4byh2YWx1ZTogRGVjb2RlZFV0eG9PYmopOiB2b2lkIHtcbiAgICBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVXR4b3MgcmVxdWlyZWQgJHtmaWVsZH1gKTtcbiAgICB9KTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogQWRkcmVzc2VzIHdoZXJlIHJld2FyZCBzaG91bGQgYmUgZGVwb3NpdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBhZGRyZXNzIC0gc2luZ2xlIGFkZHJlc3Mgb3IgYXJyYXkgb2YgYWRkcmVzc2VzIHRvIHJlY2VpdmUgcmV3YXJkc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzcyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcmVzcyA6IFthZGRyZXNzXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9yZXdhcmRBZGRyZXNzZXMgPSByZXdhcmRBZGRyZXNzZXMubWFwKHV0aWxzLnBhcnNlQWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBBdmF4VXRpbHMuZ2V0TWFuYWdlckZvclZNKCdQVk0nKTtcbiAgICBjb25zdCBbY29kZWMsIHJlc3RdID0gbWFuYWdlci5nZXRDb2RlY0Zyb21CdWZmZXIoQXZheFV0aWxzLmhleFRvQnVmZmVyKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgY29uc3QgdHggPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHJlc3QpWzBdO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmJ1aWxkQXZheFRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIGlmICh0aGlzLmhhc1NpZ25lcigpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleVBhaXIgb2YgdGhpcy5fc2lnbmVyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgbm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vZGVJRChub2RlSUQpO1xuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYmxzUHVibGljS2V5XG4gICAqL1xuICBibHNQdWJsaWNLZXkoYmxzUHVibGljS2V5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpc1ZhbGlkQkxTUHVibGljS2V5KGJsc1B1YmxpY0tleSk7XG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gYmxzUHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBibHNTaWduYXR1cmVcbiAgICovXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNTaWduYXR1cmUoYmxzU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3RpbWUgaXMgYSBsb25nIHRoYXQgY29udGFpbnMgdGhlIHVuaXggdGltZXN0YW1wIHRoYXQgdGhpcyBvdXRwdXQgY2FuIGJlIHNwZW50IGFmdGVyLlxuICAgKiBUaGUgdW5peCB0aW1lc3RhbXAgaXMgc3BlY2lmaWMgdG8gdGhlIHNlY29uZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKEJpZ0ludCh2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkZWxlZ2F0aW9uRmVlUmF0ZVxuICAgKiBAcGFyYW0gdmFsdWUgbnVtYmVyXG4gICAqL1xuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHN0YXJ0IHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGFydFRpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZW5kIHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBlbmRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9lbmRUaW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YWtlQW1vdW50KHZhbHVlOiBiaWdpbnQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB2YWx1ZUJpZ0ludCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6IEJpZ0ludCh2YWx1ZSk7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlQW1vdW50KHZhbHVlQmlnSW50KTtcbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IHZhbHVlQmlnSW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvcnJlY3QgTm9kZUlEIGlzIHVzZWRcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgdmFsaWRhdGVOb2RlSUQobm9kZUlEOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGVJRCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub2RlSUQnKTtcbiAgICB9XG4gICAgaWYgKG5vZGVJRC5zbGljZSgwLCA2KSAhPT0gJ05vZGVJRCcpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgTm9kZUlEIHRhZycpO1xuICAgIH1cbiAgICBpZiAoIShBdmF4VXRpbHMuYmFzZTU4LmRlY29kZShub2RlSUQuc2xpY2UoNykpLmxlbmd0aCA9PT0gMjQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBOb2RlSUQgaXMgbm90IGluIGNiNTggZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHN0YWtlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSBzdGFydFRpbWVcbiAgICogQHBhcmFtIGVuZFRpbWVcbiAgICovXG4gIHZhbGlkYXRlU3Rha2VEdXJhdGlvbihzdGFydFRpbWU6IGJpZ2ludCwgZW5kVGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGVuZFRpbWUgPCBzdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0VuZCBkYXRlIGNhbm5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgZGF0ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFrZSBhbW91bnRcbiAgICogQHBhcmFtIGFtb3VudFxuICAgKi9cbiAgdmFsaWRhdGVTdGFrZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGNvbnN0IG1pblN0YWtlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluU3Rha2UpO1xuICAgIGlmIChhbW91bnQgPCBtaW5TdGFrZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWluaW11bSBzdGFraW5nIGFtb3VudCBpcyAnICsgTnVtYmVyKG1pblN0YWtlKSAvIDEwMDAwMDAwMDAgKyAnIEFWQVguJyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgY29uc3QgcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCA9ICh0eCBhcyBVbnNpZ25lZFR4KS50eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXS5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgaWYgKG91dHB1dHNbMF0uZ2V0QXNzZXRJZCgpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleSA9IEF2YXhVdGlscy5idWZmZXJUb0hleChcbiAgICAgIChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnNpZ25lciBhcyBwdm1TZXJpYWwuU2lnbmVyKS5wcm9vZi5wdWJsaWNLZXlcbiAgICApO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmUgPSBBdmF4VXRpbHMuYnVmZmVyVG9IZXgoXG4gICAgICAocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zaWduZXIgYXMgcHZtU2VyaWFsLlNpZ25lcikucHJvb2Yuc2lnbmF0dXJlXG4gICAgKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmU7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dC5vdXRwdXRPd25lcnMubG9ja3RpbWUudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBvdXRwdXQub3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX25vZGVJRCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5ub2RlSWQudG9TdHJpbmcoKTtcbiAgICB0aGlzLl9ub2RlSUQgPSB0aGlzLnRyYW5zYWN0aW9uLl9ub2RlSUQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLnN0YXJ0VGltZS52YWx1ZSgpO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLmVuZFRpbWUudmFsdWUoKTtcbiAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gb3V0cHV0Lm91dHB1dE93bmVycy5hZGRycy5tYXAoKGEpID0+IGEudG9CeXRlcygpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFrZUFtb3VudCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3Rha2VbMF0ub3V0cHV0LmFtb3VudCgpO1xuICAgIHRoaXMuc3Rha2VBbW91bnQocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gcmVjb3ZlclV0eG9zKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguZ2V0SW5wdXRzKCkpO1xuICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICBjb25zb2xlLmxvZygndXR4b3M6ICcsIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zKTtcbiAgICBjb25zb2xlLmxvZygnZnJvbUFkZHJlc3NlczogJywgdGhpcy50cmFuc2FjdGlvbi5mcm9tQWRkcmVzc2VzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHlwZTogVHlwZVN5bWJvbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gVHlwZVN5bWJvbHMuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eDogVHgpOiB0eCBpcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB7XG4gICAgcmV0dXJuIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLl90eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5jZSBhZGRyZXNzZXMgaW4gb3V0cHV0cyBnZXQgcmVvcmRlcmVkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzaWduYXR1cmVzXG4gICAqIGFyZSBhZGRlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgKiBUbyBmaW5kIHRoZSBwb3NpdGlvbiwgd2UgdXNlIHRoZSBvdXRwdXQncyBhZGRyZXNzZXMgdG8gY3JlYXRlIHRoZVxuICAgKiBzaWduYXR1cmVJZHggaW4gdGhlIG9yZGVyIG5lZWRlZCAoaS5lLiBbdXNlciwgYml0Z28sIGJhY2t1cF0pXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVVdHhvcygpOiB7XG4gICAgaW5wdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgdXR4b3M6IFV0eG9bXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICB9IHtcbiAgICBjb25zdCBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWtlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W10gPSBbXTtcbiAgICBjb25zdCB1dHhvczogVXR4b1tdID0gW107XG5cbiAgICBsZXQgY3VycmVudFRvdGFsID0gQmlnSW50KDApO1xuXG4gICAgLy8gZGVsZWdhdGluZyBhbmQgdmFsaWRhdGluZyBoYXZlIG5vIGZlZXNcbiAgICBjb25zdCB0b3RhbFRhcmdldCA9IHRoaXMuX3N0YWtlQW1vdW50LnZhbHVlT2YoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSB0aGlzLnRyYW5zYWN0aW9uLmNyZWRlbnRpYWxzID8/IFtdO1xuICAgIC8vIENvbnZlcnQgZnJvbUFkZHJlc3NlcyB0byBzdHJpbmdcbiAgICAvLyBUaGUgb3JkZXIgb2YgZnJvbUFkZHJlc3NlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbiAgICAvLyBXaGVuIGJ1aWxkaW5nIGZyb20gcGFyYW1zLCB0aGUgb3JkZXIgaXMgW3VzZXIsIGJpdGdvLCBiYWNrdXBdXG4gICAgLy8gVGhlIG9yZGVyIGZyb20gdHggaGV4IGlzIFtiaXRnbywgYmFja3VwLCB1c2VyXVxuICAgIGNvbnN0IGJpdGdvQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGIpID0+XG4gICAgICBhdmF4VXRpbHMuZm9ybWF0KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCBiKVxuICAgICk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgIGNvbnNvbGUubG9nKGBiaXRnb0FkZHJlc3M6ICR7Yml0Z29BZGRyZXNzZXN9YCk7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gT1ZDLCBub25lIG9mIHRoZSB1dHhvcyB3aWxsIGhhdmUgYWRkcmVzc2VzIHNpbmNlIHRoZXkgY29tZSBmcm9tXG4gICAgLy8gZGVzZXJpYWxpemVkIGlucHV0cyAod2hpY2ggZG9uJ3QgaGF2ZSBhZGRyZXNzZXMpLCBub3QgdGhlIElNU1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0cyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXS5hZGRyZXNzZXMubGVuZ3RoICE9PSAwIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlc0luZGV4Py5sZW5ndGggIT09IDA7XG5cbiAgICBjb25zdCBhc3NldElkID0gSWQuZnJvbVN0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvLCBpbmRleCkgPT4ge1xuICAgICAgLy8gdmFsaWRhdGUgdGhlIHV0eG9zXG4gICAgICBpZiAoIXV0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVXR4byBpcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZHJlc3Nlc0luZGV4IHNob3VsZCBuZXZlciBoYXZlIGEgbWlzbWF0Y2hcbiAgICAgIGlmICh1dHhvLmFkZHJlc3Nlc0luZGV4Py5pbmNsdWRlcygtMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWRkcmVzc2VzIGFyZSBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dHhvLnRocmVzaG9sZCA8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgIC8vIGluIFdQLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZW1wdHksIHNvIGZpbGwgaXRcbiAgICAgIGlmICghdXR4by5hZGRyZXNzZXNJbmRleCB8fCB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1dHhvLmFkZHJlc3Nlc0luZGV4ID0gYml0Z29BZGRyZXNzZXMubWFwKChhKSA9PiB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH1cbiAgICAgIC8vIHV0eG8uYWRkcmVzc2VzIGlzIG51bGwgd2hlbiBidWlsZCBmcm9tIHJhd1xuICAgICAgLy8gYnV0IHV0eG8uYWRkcmVzc2VzSW5kZXggaGFzIG9ubHkgMiBlbGVtZW50cyB3aGVuIGJ1aWxkIGZyb20gcmF3XG4gICAgICAvLyBzbyB0aGUgYml0Z29JbmRleFRvT25DaGFpbkluZGV4IG1hcCB3aWxsIGJlIGVtcHR5XG4gICAgICB1dHhvLmFkZHJlc3Nlcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5zZXQoYml0Z29BZGRyZXNzZXMuaW5kZXhPZihhKSwgdXR4by5hZGRyZXNzZXMuaW5kZXhPZihhKSk7XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgIGNvbnNvbGUubG9nKGB1dHhvLmFkZHJlc3NlczogJHt1dHhvLmFkZHJlc3Nlc31gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXg6ICR7QXJyYXkuZnJvbShiaXRnb0luZGV4VG9PbkNoYWluSW5kZXgpfWApO1xuICAgICAgLy8gaW4gT1ZDLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZGVmaW5lZCBjb3JyZWN0bHkgZnJvbSB0aGUgcHJldmlvdXMgaXRlcmF0aW9uXG5cbiAgICAgIGlmICh1dHhvLm91dHB1dElEID09PSBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0KSB7XG4gICAgICAgIGNvbnN0IHV0eG9BbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgICAvLyBlaXRoZXIgdXNlciAoMCkgb3IgcmVjb3ZlcnkgKDIpXG4gICAgICAgIC8vIE9uIHJlZ3VsYXIgbW9kZTogW3VzZXIsIGJpdGdvXSAoaS5lLiBbMCwgMV0pXG4gICAgICAgIC8vIE9uIHJlY292ZXJ5IG1vZGU6IFtiYWNrdXAsIGJpdGdvXSAoaS5lLiBbMiwgMV0pXG4gICAgICAgIGNvbnN0IHVzZXJPckJhY2t1cEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICAgIGNvbnN0IGJpdGdvSW5kZXggPSAxO1xuXG4gICAgICAgIGN1cnJlbnRUb3RhbCA9IGN1cnJlbnRUb3RhbCArIHV0eG9BbW91bnQ7XG5cbiAgICAgICAgY29uc3QgdXR4b0lkID0gYXZheFNlcmlhbC5VVFhPSUQuZnJvbU5hdGl2ZSh1dHhvLnR4aWQsIE51bWJlcih1dHhvLm91dHB1dGlkeCkpO1xuXG4gICAgICAgIGxldCBhZGRyZXNzZXNJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXggJiYgYml0Z29JbmRleFRvT25DaGFpbkluZGV4LnNpemUgPT09IDApIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleCA9IFsuLi51dHhvLmFkZHJlc3Nlc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQodXNlck9yQmFja3VwSW5kZXgpKTtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQoYml0Z29JbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dHMgPSBuZXcgVHJhbnNmZXJJbnB1dChcbiAgICAgICAgICBuZXcgQmlnSW50UHIodXR4b0Ftb3VudCksXG4gICAgICAgICAgbmV3IElucHV0KFsuLi5hZGRyZXNzZXNJbmRleF0uc29ydCgpLm1hcCgobnVtKSA9PiBuZXcgSW50KG51bSkpKVxuICAgICAgICApO1xuICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2luZyBhZGRyZXNzZXNJbmRleCBzb3J0ZWQ6ICR7Wy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCl9YCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dCh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKTtcbiAgICAgICAgdXR4b3MucHVzaChuZXcgVXR4byh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKSk7XG5cbiAgICAgICAgaW5wdXRzLnB1c2goaW5wdXQpO1xuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgfHwgdGhpcy50cmFuc2FjdGlvbi5jcmVkZW50aWFscy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgICAgICAgIC8vIEZvciB0aGUgYml0Z28gc2lnbmF0dXJlIHdlIGNyZWF0ZSBhbiBlbXB0eSBzaWduYXR1cmVcbiAgICAgICAgICAgIC8vIEZvciB0aGUgdXNlci9iYWNrdXAgc2lnbmF0dXJlIHdlIHN0b3JlIHRoZSBhZGRyZXNzIHRoYXQgbWF0Y2hlcyB0aGUga2V5XG4gICAgICAgICAgICAvLyBpZiBiaXRnbyBhZGRyZXNzIGNvbWVzIGJlZm9yZSAgPCB1c2VyL2JhY2t1cCBhZGRyZXNzXG5cbiAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBiaXRnbyBpbmRleCBvbiBjaGFpbjogJHt1dHhvLmFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdfWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgT3IgQmFja3VwIEluZGV4OiAke3V0eG8uYWRkcmVzc2VzSW5kZXhbdXNlck9yQmFja3VwSW5kZXhdfWApO1xuICAgICAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCB1dHhvLmFkZHJlc3Nlc0luZGV4W3VzZXJPckJhY2t1cEluZGV4XSkge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBhZnRlciBiaXRnb2ApO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20oJycpLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBiZWZvcmUgYml0Z29gKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChbXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiB2ZXJpZnkgdGhpcyBlbHNlIGNhc2UgZm9yIE9WQ1xuICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgICAgYWRkcmVzc2VzSW5kZXgubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ldKS50b1N0cmluZygnaGV4JykpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgY29uc29sZS5sb2coYHJldXNpbmcgY3JlZGVudGlhbHMgZnJvbSB0cmFuc2FjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYnVpbGRPdXRwdXRzKSB7XG4gICAgICBpZiAoY3VycmVudFRvdGFsIDwgdG90YWxUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgVXR4byBvdXRwdXRzIGdldCAke2N1cnJlbnRUb3RhbC50b1N0cmluZygpfSBhbmQgJHt0b3RhbFRhcmdldC50b1N0cmluZygpfSBpcyByZXF1aXJlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRvdGFsID49IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN0YWtlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBzdGFrZU91dHB1dHMucHVzaChzdGFrZU91dHB1dCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUb3RhbCA+IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgICAgYXNzZXRJZCxcbiAgICAgICAgICAgIG5ldyBUcmFuc2Zlck91dHB1dChcbiAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKGN1cnJlbnRUb3RhbCAtIHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgICAgbmV3IE91dHB1dE93bmVycyhcbiAgICAgICAgICAgICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNoYW5nZU91dHB1dHMucHVzaChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlucHV0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYXZheFV0aWxzLmJ5dGVzRXF1YWwoYS51dHhvSUQudHhJRC50b0J5dGVzKCksIGIudXR4b0lELnR4SUQudG9CeXRlcygpKSkge1xuICAgICAgICByZXR1cm4gYS51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCkgLSBiLnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEudXR4b0lELnR4SUQudG9CeXRlcygpLCBiLnV0eG9JRC50eElELnRvQnl0ZXMoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgaW5wdXRzLCBzdGFrZU91dHB1dHMsIGNoYW5nZU91dHB1dHMsIHV0eG9zLCBjcmVkZW50aWFscyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEF2YXhUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU3Rha2VEdXJhdGlvbih0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWUsIHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWUpO1xuICAgIGNvbnN0IHsgaW5wdXRzLCBzdGFrZU91dHB1dHMsIGNoYW5nZU91dHB1dHMsIHV0eG9zLCBjcmVkZW50aWFscyB9ID0gdGhpcy5jYWxjdWxhdGVVdHhvcygpO1xuICAgIGNvbnN0IGJhc2VUeCA9IGF2YXhTZXJpYWwuQmFzZVR4LmZyb21OYXRpdmUoXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrSUQsXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsXG4gICAgICBjaGFuZ2VPdXRwdXRzLFxuICAgICAgaW5wdXRzLFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoKSAvLyBkZWZhdWx0IGVtcHR5IG1lbW9cbiAgICApO1xuXG4gICAgY29uc3Qgc3VibmV0VmFsaWRhdG9yID0gcHZtU2VyaWFsLlN1Ym5ldFZhbGlkYXRvci5mcm9tTmF0aXZlKFxuICAgICAgdGhpcy5fbm9kZUlELFxuICAgICAgdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgdGhpcy5fZW5kVGltZSxcbiAgICAgIHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgbmV0d29ya0lEcy5QcmltYXJ5TmV0d29ya0lEXG4gICAgKTtcblxuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBwdm1TZXJpYWwuU2lnbmVyKFxuICAgICAgbmV3IHB2bVNlcmlhbC5Qcm9vZk9mUG9zc2Vzc2lvbihcbiAgICAgICAgQXZheFV0aWxzLmhleFRvQnVmZmVyKHRoaXMuX2Jsc1B1YmxpY0tleSksXG4gICAgICAgIEF2YXhVdGlscy5oZXhUb0J1ZmZlcih0aGlzLl9ibHNTaWduYXR1cmUpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG91dHB1dE93bmVycyA9IG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgICAubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyhDUi0xMDczKTogY2hlY2sgdGhpcyB2YWx1ZVxuICAgIC8vICBTaGFyZXMgMTAsMDAwIHRpbWVzIHBlcmNlbnRhZ2Ugb2YgcmV3YXJkIHRha2VuIGZyb20gZGVsZWdhdG9yc1xuICAgIC8vICBodHRwczovL2RvY3MuYXZheC5uZXR3b3JrL3JlZmVyZW5jZS9hdmFsYW5jaGVnby9wLWNoYWluL3R4bi1mb3JtYXQjdW5zaWduZWQtYWRkLXZhbGlkYXRvci10eFxuICAgIGNvbnN0IHNoYXJlcyA9IG5ldyBJbnQoMWU0ICogMik7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAubWFwKChhZGRyZXNzKSA9PiBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhZGRyZXNzKSwgMF1dKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKFxuICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgIG5ldyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeChcbiAgICAgICAgICBiYXNlVHgsXG4gICAgICAgICAgc3VibmV0VmFsaWRhdG9yLFxuICAgICAgICAgIHNpZ25lcixcbiAgICAgICAgICBzdGFrZU91dHB1dHMsXG4gICAgICAgICAgb3V0cHV0T3duZXJzLFxuICAgICAgICAgIG91dHB1dE93bmVycyxcbiAgICAgICAgICBzaGFyZXNcbiAgICAgICAgKSxcbiAgICAgICAgdXR4b3MsXG4gICAgICAgIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLFxuICAgICAgICBjcmVkZW50aWFsc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGhhc1NpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmVyLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlVHJhbnNhY3Rpb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxufVxuIl19
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQWtCa0M7QUFDbEMsbURBUThCO0FBRzlCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBV3RFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBZmIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQU9yQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQVM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLDBCQUEwQixDQUFDO0lBQ3BELENBQUM7SUFFRCxvQkFBb0I7SUFDcEI7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsUUFBZ0I7UUFDL0IsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzNFLE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0Is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QUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzFCLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxjQUFzQjtRQUMzQyxlQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUF5QjtRQUMzQyx3RUFBd0U7SUFDMUUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXhrQkQsNEVBd2tCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkZHJlc3MsXG4gIGF2YXhTZXJpYWwsXG4gIHV0aWxzIGFzIEF2YXhVdGlscyxcbiAgQmlnSW50UHIsXG4gIENyZWRlbnRpYWwsXG4gIElkLFxuICBJbnB1dCxcbiAgSW50LFxuICBuZXR3b3JrSURzLFxuICBPdXRwdXRPd25lcnMsXG4gIHB2bVNlcmlhbCxcbiAgVHJhbnNmZXJJbnB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIFR5cGVTeW1ib2xzLFxuICBVbnNpZ25lZFR4LFxuICBVdHhvLFxuICB1dGlscyBhcyBhdmF4VXRpbHMsXG59IGZyb20gJ0BiaXRnby1mb3Jrcy9hdmFsYW5jaGVqcyc7XG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBpc1ZhbGlkQkxTUHVibGljS2V5LFxuICBpc1ZhbGlkQkxTU2lnbmF0dXJlLFxuICBOb3RTdXBwb3J0ZWQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHJlY292ZXJVdHhvcyB9IGZyb20gJy4vdXR4b0VuZ2luZSc7XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHB1YmxpYyBfc2lnbmVyOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9ub2RlSUQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9ibHNQdWJsaWNLZXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9ibHNTaWduYXR1cmU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zdGFydFRpbWU6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIF9lbmRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfc3Rha2VBbW91bnQ6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9kZWxlZ2F0aW9uRmVlUmF0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29pbkNvbmZpZ1xuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay50eEZlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3I7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogVmFsaWRhdGVzIGxvY2t0aW1lXG4gICAqIEBwYXJhbSBsb2NrdGltZVxuICAgKi9cbiAgdmFsaWRhdGVMb2NrdGltZShsb2NrdGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGxvY2t0aW1lIDwgQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBsb2NrdGltZSBtdXN0IGJlIDAgb3IgaGlnaGVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGRlbGVnYXRpb24gZmVlIGlzIGF0IGxlYXN0IHRoZSBtaW5EZWxlZ2F0aW9uRmVlXG4gICAqIEBwYXJhbSBkZWxlZ2F0aW9uRmVlUmF0ZSBudW1iZXJcbiAgICovXG4gIHZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUoZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChkZWxlZ2F0aW9uRmVlUmF0ZSA8IE51bWJlcih0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgRGVsZWdhdGlvbiBmZWUgY2Fubm90IGJlIGxlc3MgdGhhbiAke3RoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluRGVsZWdhdGlvbkZlZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgVVRYTyBoYXMgZXhwZWN0ZWQgZmllbGRzLlxuICAgKiBAcGFyYW0gVVRYT1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHZhbHVlOiBEZWNvZGVkVXR4b09iaik6IHZvaWQge1xuICAgIFsnb3V0cHV0SUQnLCAnYW1vdW50JywgJ3R4aWQnLCAnb3V0cHV0aWR4J10uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvcyByZXF1aXJlZCAke2ZpZWxkfWApO1xuICAgIH0pO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKlxuICAgKiBBZGRyZXNzZXMgd2hlcmUgcmV3YXJkIHNob3VsZCBiZSBkZXBvc2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGFkZHJlc3MgLSBzaW5nbGUgYWRkcmVzcyBvciBhcnJheSBvZiBhZGRyZXNzZXMgdG8gcmVjZWl2ZSByZXdhcmRzXG4gICAqL1xuICByZXdhcmRBZGRyZXNzZXMoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCByZXdhcmRBZGRyZXNzZXMgPSBhZGRyZXNzIGluc3RhbmNlb2YgQXJyYXkgPyBhZGRyZXNzIDogW2FkZHJlc3NdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3Jld2FyZEFkZHJlc3NlcyA9IHJld2FyZEFkZHJlc3Nlcy5tYXAodXRpbHMucGFyc2VBZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgbWFuYWdlciA9IEF2YXhVdGlscy5nZXRNYW5hZ2VyRm9yVk0oJ1BWTScpO1xuICAgIGNvbnN0IFtjb2RlYywgcmVzdF0gPSBtYW5hZ2VyLmdldENvZGVjRnJvbUJ1ZmZlcihBdmF4VXRpbHMuaGV4VG9CdWZmZXIocmF3VHJhbnNhY3Rpb24pKTtcbiAgICBjb25zdCB0eCA9IGNvZGVjLlVucGFja1ByZWZpeDxwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeD4ocmVzdClbMF07XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgaWYgKHRoaXMuaGFzU2lnbmVyKCkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5UGFpciBvZiB0aGlzLl9zaWduZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZUlEXG4gICAqL1xuICBub2RlSUQobm9kZUlEOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm9kZUlEKG5vZGVJRCk7XG4gICAgdGhpcy5fbm9kZUlEID0gbm9kZUlEO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBibHNQdWJsaWNLZXlcbiAgICovXG4gIGJsc1B1YmxpY0tleShibHNQdWJsaWNLZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNQdWJsaWNLZXkoYmxzUHVibGljS2V5KTtcbiAgICB0aGlzLl9ibHNQdWJsaWNLZXkgPSBibHNQdWJsaWNLZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJsc1NpZ25hdHVyZVxuICAgKi9cbiAgYmxzU2lnbmF0dXJlKGJsc1NpZ25hdHVyZTogc3RyaW5nKTogdGhpcyB7XG4gICAgaXNWYWxpZEJMU1NpZ25hdHVyZShibHNTaWduYXR1cmUpO1xuICAgIHRoaXMuX2Jsc1NpZ25hdHVyZSA9IGJsc1NpZ25hdHVyZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NrdGltZSBpcyBhIGxvbmcgdGhhdCBjb250YWlucyB0aGUgdW5peCB0aW1lc3RhbXAgdGhhdCB0aGlzIG91dHB1dCBjYW4gYmUgc3BlbnQgYWZ0ZXIuXG4gICAqIFRoZSB1bml4IHRpbWVzdGFtcCBpcyBzcGVjaWZpYyB0byB0aGUgc2Vjb25kLlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIGxvY2t0aW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTG9ja3RpbWUoQmlnSW50KHZhbHVlKSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGRlbGVnYXRpb25GZWVSYXRlXG4gICAqIEBwYXJhbSB2YWx1ZSBudW1iZXJcbiAgICovXG4gIGRlbGVnYXRpb25GZWVSYXRlKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUodmFsdWUpO1xuICAgIHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogc3RhcnQgdGltZSBvZiBzdGFraW5nIHBlcmlvZFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YXJ0VGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmQgdGltZSBvZiBzdGFraW5nIHBlcmlvZFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIGVuZFRpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgc3Rha2VBbW91bnQodmFsdWU6IGJpZ2ludCB8IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHZhbHVlQmlnSW50ID0gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IHZhbHVlIDogQmlnSW50KHZhbHVlKTtcbiAgICB0aGlzLnZhbGlkYXRlU3Rha2VBbW91bnQodmFsdWVCaWdJbnQpO1xuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gdmFsdWVCaWdJbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogdmFsaWRhdGVzIGEgY29ycmVjdCBOb2RlSUQgaXMgdXNlZFxuICAgKiBAcGFyYW0gbm9kZUlEXG4gICAqL1xuICB2YWxpZGF0ZU5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbm9kZUlEKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vZGVJRCcpO1xuICAgIH1cbiAgICBpZiAobm9kZUlELnNsaWNlKDAsIDYpICE9PSAnTm9kZUlEJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCBOb2RlSUQgdGFnJyk7XG4gICAgfVxuICAgIGlmICghKEF2YXhVdGlscy5iYXNlNTguZGVjb2RlKG5vZGVJRC5zbGljZSg3KSkubGVuZ3RoID09PSAyNCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IE5vZGVJRCBpcyBub3QgaW4gY2I1OCBmb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc3Rha2UgZHVyYXRpb25cbiAgICogQHBhcmFtIHN0YXJ0VGltZVxuICAgKiBAcGFyYW0gZW5kVGltZVxuICAgKi9cbiAgdmFsaWRhdGVTdGFrZUR1cmF0aW9uKHN0YXJ0VGltZTogYmlnaW50LCBlbmRUaW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIGRhdGUgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFydCBkYXRlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHN0YWtlIGFtb3VudFxuICAgKiBAcGFyYW0gYW1vdW50XG4gICAqL1xuICB2YWxpZGF0ZVN0YWtlQW1vdW50KGFtb3VudDogYmlnaW50KTogdm9pZCB7XG4gICAgY29uc3QgbWluU3Rha2UgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5TdGFrZSk7XG4gICAgaWYgKGFtb3VudCA8IG1pblN0YWtlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaW5pbXVtIHN0YWtpbmcgYW1vdW50IGlzICcgKyBOdW1iZXIobWluU3Rha2UpIC8gMTAwMDAwMDAwMCArICcgQVZBWC4nKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICBjb25zdCBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4ID0gKHR4IGFzIFVuc2lnbmVkVHgpLnR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4O1xuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5iYXNlVHgub3V0cHV0cztcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbiBoYXZlIG9uZSBleHRlcm5hbCBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBpZiAob3V0cHV0c1swXS5nZXRBc3NldElkKCkgIT09IHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxzUHVibGljS2V5ID0gQXZheFV0aWxzLmJ1ZmZlclRvSGV4KFxuICAgICAgKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc2lnbmVyIGFzIHB2bVNlcmlhbC5TaWduZXIpLnByb29mLnB1YmxpY0tleVxuICAgICk7XG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gdGhpcy50cmFuc2FjdGlvbi5fYmxzUHVibGljS2V5O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsc1NpZ25hdHVyZSA9IEF2YXhVdGlscy5idWZmZXJUb0hleChcbiAgICAgIChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnNpZ25lciBhcyBwdm1TZXJpYWwuU2lnbmVyKS5wcm9vZi5zaWduYXR1cmVcbiAgICApO1xuICAgIHRoaXMuX2Jsc1NpZ25hdHVyZSA9IHRoaXMudHJhbnNhY3Rpb24uX2Jsc1NpZ25hdHVyZTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0Lm91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IG91dHB1dC5vdXRwdXRPd25lcnMudGhyZXNob2xkLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbm9kZUlEID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLm5vZGVJZC50b1N0cmluZygpO1xuICAgIHRoaXMuX25vZGVJRCA9IHRoaXMudHJhbnNhY3Rpb24uX25vZGVJRDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWUgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3Iuc3RhcnRUaW1lLnZhbHVlKCk7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gdGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWUgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3IuZW5kVGltZS52YWx1ZSgpO1xuICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gYS50b0J5dGVzKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3N0YWtlQW1vdW50ID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCk7XG4gICAgdGhpcy5zdGFrZUFtb3VudChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN0YWtlWzBdLm91dHB1dC5hbW91bnQoKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSByZWNvdmVyVXR4b3MocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5nZXRJbnB1dHMoKSk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgIGNvbnNvbGUubG9nKCd1dHhvczogJywgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MpO1xuICAgIGNvbnNvbGUubG9nKCdmcm9tQWRkcmVzc2VzOiAnLCB0aGlzLnRyYW5zYWN0aW9uLmZyb21BZGRyZXNzZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eXBlOiBUeXBlU3ltYm9scyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlID09PSBUeXBlU3ltYm9scy5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4OiBUeCk6IHR4IGlzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IHtcbiAgICByZXR1cm4gUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuX3R5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmNlIGFkZHJlc3NlcyBpbiBvdXRwdXRzIGdldCByZW9yZGVyZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHNpZ25hdHVyZXNcbiAgICogYXJlIGFkZGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAqIFRvIGZpbmQgdGhlIHBvc2l0aW9uLCB3ZSB1c2UgdGhlIG91dHB1dCdzIGFkZHJlc3NlcyB0byBjcmVhdGUgdGhlXG4gICAqIHNpZ25hdHVyZUlkeCBpbiB0aGUgb3JkZXIgbmVlZGVkIChpLmUuIFt1c2VyLCBiaXRnbywgYmFja3VwXSlcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZVV0eG9zKCk6IHtcbiAgICBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBzdGFrZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXTtcbiAgICB1dHhvczogVXR4b1tdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gIH0ge1xuICAgIGNvbnN0IGlucHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dFtdID0gW107XG4gICAgY29uc3Qgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdID0gW107XG4gICAgY29uc3QgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IHV0eG9zOiBVdHhvW10gPSBbXTtcblxuICAgIGxldCBjdXJyZW50VG90YWwgPSBCaWdJbnQoMCk7XG5cbiAgICAvLyBkZWxlZ2F0aW5nIGFuZCB2YWxpZGF0aW5nIGhhdmUgbm8gZmVlc1xuICAgIGNvbnN0IHRvdGFsVGFyZ2V0ID0gdGhpcy5fc3Rha2VBbW91bnQudmFsdWVPZigpO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPz8gW107XG4gICAgLy8gQ29udmVydCBmcm9tQWRkcmVzc2VzIHRvIHN0cmluZ1xuICAgIC8vIFRoZSBvcmRlciBvZiBmcm9tQWRkcmVzc2VzIGlzIGRldGVybWluZWQgYnkgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuICAgIC8vIFdoZW4gYnVpbGRpbmcgZnJvbSBwYXJhbXMsIHRoZSBvcmRlciBpcyBbdXNlciwgYml0Z28sIGJhY2t1cF1cbiAgICAvLyBUaGUgb3JkZXIgZnJvbSB0eCBoZXggaXMgW2JpdGdvLCBiYWNrdXAsIHVzZXJdXG4gICAgY29uc3QgYml0Z29BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYikgPT5cbiAgICAgIGF2YXhVdGlscy5mb3JtYXQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcywgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIGIpXG4gICAgKTtcbiAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgY29uc29sZS5sb2coYGJpdGdvQWRkcmVzczogJHtiaXRnb0FkZHJlc3Nlc31gKTtcblxuICAgIC8vIGlmIHdlIGFyZSBpbiBPVkMsIG5vbmUgb2YgdGhlIHV0eG9zIHdpbGwgaGF2ZSBhZGRyZXNzZXMgc2luY2UgdGhleSBjb21lIGZyb21cbiAgICAvLyBkZXNlcmlhbGl6ZWQgaW5wdXRzICh3aGljaCBkb24ndCBoYXZlIGFkZHJlc3NlcyksIG5vdCB0aGUgSU1TXG4gICAgY29uc3QgYnVpbGRPdXRwdXRzID1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlcy5sZW5ndGggIT09IDAgfHwgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbMF0uYWRkcmVzc2VzSW5kZXg/Lmxlbmd0aCAhPT0gMDtcblxuICAgIGNvbnN0IGFzc2V0SWQgPSBJZC5mcm9tU3RyaW5nKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8sIGluZGV4KSA9PiB7XG4gICAgICAvLyB2YWxpZGF0ZSB0aGUgdXR4b3NcbiAgICAgIGlmICghdXR4bykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVdHhvIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgLy8gYWRkcmVzc2VzSW5kZXggc2hvdWxkIG5ldmVyIGhhdmUgYSBtaXNtYXRjaFxuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXg/LmluY2x1ZGVzKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBZGRyZXNzZXMgYXJlIGluY29uc2lzdGVudCcpO1xuICAgICAgfVxuICAgICAgaWYgKHV0eG8udGhyZXNob2xkIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RocmVzaG9sZCBpcyBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYml0Z29JbmRleFRvT25DaGFpbkluZGV4ID0gbmV3IE1hcCgpO1xuICAgICAgLy8gaW4gV1AsIG91dHB1dC5hZGRyZXNzZXNJbmRleCBpcyBlbXB0eSwgc28gZmlsbCBpdFxuICAgICAgaWYgKCF1dHhvLmFkZHJlc3Nlc0luZGV4IHx8IHV0eG8uYWRkcmVzc2VzSW5kZXgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHV0eG8uYWRkcmVzc2VzSW5kZXggPSBiaXRnb0FkZHJlc3Nlcy5tYXAoKGEpID0+IHV0eG8uYWRkcmVzc2VzLmluZGV4T2YoYSkpO1xuICAgICAgfVxuICAgICAgLy8gdXR4by5hZGRyZXNzZXMgaXMgbnVsbCB3aGVuIGJ1aWxkIGZyb20gcmF3XG4gICAgICAvLyBidXQgdXR4by5hZGRyZXNzZXNJbmRleCBoYXMgb25seSAyIGVsZW1lbnRzIHdoZW4gYnVpbGQgZnJvbSByYXdcbiAgICAgIC8vIHNvIHRoZSBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXggbWFwIHdpbGwgYmUgZW1wdHlcbiAgICAgIHV0eG8uYWRkcmVzc2VzLmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgYml0Z29JbmRleFRvT25DaGFpbkluZGV4LnNldChiaXRnb0FkZHJlc3Nlcy5pbmRleE9mKGEpLCB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgICAgY29uc29sZS5sb2coYHV0eG8uYWRkcmVzc2VzOiAke3V0eG8uYWRkcmVzc2VzfWApO1xuICAgICAgY29uc29sZS5sb2coYGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleDogJHtBcnJheS5mcm9tKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleCl9YCk7XG4gICAgICAvLyBpbiBPVkMsIG91dHB1dC5hZGRyZXNzZXNJbmRleCBpcyBkZWZpbmVkIGNvcnJlY3RseSBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYXRpb25cblxuICAgICAgaWYgKHV0eG8ub3V0cHV0SUQgPT09IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQpIHtcbiAgICAgICAgY29uc3QgdXR4b0Ftb3VudCA9IEJpZ0ludCh1dHhvLmFtb3VudCk7XG4gICAgICAgIC8vIGVpdGhlciB1c2VyICgwKSBvciByZWNvdmVyeSAoMilcbiAgICAgICAgLy8gT24gcmVndWxhciBtb2RlOiBbdXNlciwgYml0Z29dIChpLmUuIFswLCAxXSlcbiAgICAgICAgLy8gT24gcmVjb3ZlcnkgbW9kZTogW2JhY2t1cCwgYml0Z29dIChpLmUuIFsyLCAxXSlcbiAgICAgICAgY29uc3QgdXNlck9yQmFja3VwSW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICAgICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAgICAgY3VycmVudFRvdGFsID0gY3VycmVudFRvdGFsICsgdXR4b0Ftb3VudDtcblxuICAgICAgICBjb25zdCB1dHhvSWQgPSBhdmF4U2VyaWFsLlVUWE9JRC5mcm9tTmF0aXZlKHV0eG8udHhpZCwgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSk7XG5cbiAgICAgICAgbGV0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleCAmJiBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXguc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4ID0gWy4uLnV0eG8uYWRkcmVzc2VzSW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4LnB1c2goYml0Z29JbmRleFRvT25DaGFpbkluZGV4LmdldCh1c2VyT3JCYWNrdXBJbmRleCkpO1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4LnB1c2goYml0Z29JbmRleFRvT25DaGFpbkluZGV4LmdldChiaXRnb0luZGV4KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2ZlcklucHV0cyA9IG5ldyBUcmFuc2ZlcklucHV0KFxuICAgICAgICAgIG5ldyBCaWdJbnRQcih1dHhvQW1vdW50KSxcbiAgICAgICAgICBuZXcgSW5wdXQoWy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCkubWFwKChudW0pID0+IG5ldyBJbnQobnVtKSkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgY29uc29sZS5sb2coYHVzaW5nIGFkZHJlc3Nlc0luZGV4IHNvcnRlZDogJHtbLi4uYWRkcmVzc2VzSW5kZXhdLnNvcnQoKX1gKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0KHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpO1xuICAgICAgICB1dHhvcy5wdXNoKG5ldyBVdHhvKHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpKTtcblxuICAgICAgICBpbnB1dHMucHVzaChpbnB1dCk7XG4gICAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5jcmVkZW50aWFscyB8fCB0aGlzLnRyYW5zYWN0aW9uLmNyZWRlbnRpYWxzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaWYgKGJ1aWxkT3V0cHV0cykge1xuICAgICAgICAgICAgLy8gRm9yIHRoZSBiaXRnbyBzaWduYXR1cmUgd2UgY3JlYXRlIGFuIGVtcHR5IHNpZ25hdHVyZVxuICAgICAgICAgICAgLy8gRm9yIHRoZSB1c2VyL2JhY2t1cCBzaWduYXR1cmUgd2Ugc3RvcmUgdGhlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSBrZXlcbiAgICAgICAgICAgIC8vIGlmIGJpdGdvIGFkZHJlc3MgY29tZXMgYmVmb3JlICA8IHVzZXIvYmFja3VwIGFkZHJlc3NcblxuICAgICAgICAgICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGJpdGdvIGluZGV4IG9uIGNoYWluOiAke3V0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF19YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlciBPciBCYWNrdXAgSW5kZXg6ICR7dXR4by5hZGRyZXNzZXNJbmRleFt1c2VyT3JCYWNrdXBJbmRleF19YCk7XG4gICAgICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IHV0eG8uYWRkcmVzc2VzSW5kZXhbdXNlck9yQmFja3VwSW5kZXhdKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgb3IgYmFja3VwIGNyZWRlbnRpYWxzIGFmdGVyIGJpdGdvYCk7XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoW1xuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhcbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbdXNlck9yQmFja3VwSW5kZXhdKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgb3IgYmFja3VwIGNyZWRlbnRpYWxzIGJlZm9yZSBiaXRnb2ApO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhcbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbdXNlck9yQmFja3VwSW5kZXhdKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKCcnKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHZlcmlmeSB0aGlzIGVsc2UgY2FzZSBmb3IgT1ZDXG4gICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgICBhZGRyZXNzZXNJbmRleC5tYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbaV0pLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyhgcmV1c2luZyBjcmVkZW50aWFscyBmcm9tIHRyYW5zYWN0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgIGlmIChjdXJyZW50VG90YWwgPCB0b3RhbFRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgIGBVdHhvIG91dHB1dHMgZ2V0ICR7Y3VycmVudFRvdGFsLnRvU3RyaW5nKCl9IGFuZCAke3RvdGFsVGFyZ2V0LnRvU3RyaW5nKCl9IGlzIHJlcXVpcmVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50VG90YWwgPj0gdG90YWxUYXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc3Rha2VPdXRwdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXQoXG4gICAgICAgICAgYXNzZXRJZCxcbiAgICAgICAgICBuZXcgVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgICBuZXcgQmlnSW50UHIodG90YWxUYXJnZXQpLFxuICAgICAgICAgICAgbmV3IE91dHB1dE93bmVycyhcbiAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgICAgICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgICAgICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLCBiKSlcbiAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHN0YWtlT3V0cHV0cy5wdXNoKHN0YWtlT3V0cHV0KTtcblxuICAgICAgICBpZiAoY3VycmVudFRvdGFsID4gdG90YWxUYXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXQoXG4gICAgICAgICAgICBhc3NldElkLFxuICAgICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgICBuZXcgQmlnSW50UHIoY3VycmVudFRvdGFsIC0gdG90YWxUYXJnZXQpLFxuICAgICAgICAgICAgICBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgICAgICAgICAgIFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXVxuICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY2hhbmdlT3V0cHV0cy5wdXNoKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5wdXRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhdmF4VXRpbHMuYnl0ZXNFcXVhbChhLnV0eG9JRC50eElELnRvQnl0ZXMoKSwgYi51dHhvSUQudHhJRC50b0J5dGVzKCkpKSB7XG4gICAgICAgIHJldHVybiBhLnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKSAtIGIudXR4b0lELm91dHB1dElkeC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYS51dHhvSUQudHhJRC50b0J5dGVzKCksIGIudXR4b0lELnR4SUQudG9CeXRlcygpKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBpbnB1dHMsIHN0YWtlT3V0cHV0cywgY2hhbmdlT3V0cHV0cywgdXR4b3MsIGNyZWRlbnRpYWxzIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGFkZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQXZheFRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTdGFrZUR1cmF0aW9uKHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZSwgdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZSk7XG4gICAgY29uc3QgeyBpbnB1dHMsIHN0YWtlT3V0cHV0cywgY2hhbmdlT3V0cHV0cywgdXR4b3MsIGNyZWRlbnRpYWxzIH0gPSB0aGlzLmNhbGN1bGF0ZVV0eG9zKCk7XG4gICAgY29uc3QgYmFzZVR4ID0gYXZheFNlcmlhbC5CYXNlVHguZnJvbU5hdGl2ZShcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCxcbiAgICAgIGNoYW5nZU91dHB1dHMsXG4gICAgICBpbnB1dHMsXG4gICAgICBuZXcgVWludDhBcnJheSgpIC8vIGRlZmF1bHQgZW1wdHkgbWVtb1xuICAgICk7XG5cbiAgICBjb25zdCBzdWJuZXRWYWxpZGF0b3IgPSBwdm1TZXJpYWwuU3VibmV0VmFsaWRhdG9yLmZyb21OYXRpdmUoXG4gICAgICB0aGlzLl9ub2RlSUQsXG4gICAgICB0aGlzLl9zdGFydFRpbWUsXG4gICAgICB0aGlzLl9lbmRUaW1lLFxuICAgICAgdGhpcy5fc3Rha2VBbW91bnQsXG4gICAgICBuZXR3b3JrSURzLlByaW1hcnlOZXR3b3JrSURcbiAgICApO1xuXG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IHB2bVNlcmlhbC5TaWduZXIoXG4gICAgICBuZXcgcHZtU2VyaWFsLlByb29mT2ZQb3NzZXNzaW9uKFxuICAgICAgICBBdmF4VXRpbHMuaGV4VG9CdWZmZXIodGhpcy5fYmxzUHVibGljS2V5KSxcbiAgICAgICAgQXZheFV0aWxzLmhleFRvQnVmZmVyKHRoaXMuX2Jsc1NpZ25hdHVyZSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gbmV3IE91dHB1dE93bmVycyhcbiAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgIC5tYXAoKGEpID0+IEFkZHJlc3MuZnJvbUJ5dGVzKGEpWzBdKVxuICAgICk7XG5cbiAgICAvLyBUT0RPKENSLTEwNzMpOiBjaGVjayB0aGlzIHZhbHVlXG4gICAgLy8gIFNoYXJlcyAxMCwwMDAgdGltZXMgcGVyY2VudGFnZSBvZiByZXdhcmQgdGFrZW4gZnJvbSBkZWxlZ2F0b3JzXG4gICAgLy8gIGh0dHBzOi8vZG9jcy5hdmF4Lm5ldHdvcmsvcmVmZXJlbmNlL2F2YWxhbmNoZWdvL3AtY2hhaW4vdHhuLWZvcm1hdCN1bnNpZ25lZC1hZGQtdmFsaWRhdG9yLXR4XG4gICAgY29uc3Qgc2hhcmVzID0gbmV3IEludCgxZTQgKiAyKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLCBiKSlcbiAgICAgIC5tYXAoKGFkZHJlc3MpID0+IG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcChbW25ldyBBZGRyZXNzKGFkZHJlc3MpLCAwXV0pKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24oXG4gICAgICBuZXcgVW5zaWduZWRUeChcbiAgICAgICAgbmV3IHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KFxuICAgICAgICAgIGJhc2VUeCxcbiAgICAgICAgICBzdWJuZXRWYWxpZGF0b3IsXG4gICAgICAgICAgc2lnbmVyLFxuICAgICAgICAgIHN0YWtlT3V0cHV0cyxcbiAgICAgICAgICBvdXRwdXRPd25lcnMsXG4gICAgICAgICAgb3V0cHV0T3duZXJzLFxuICAgICAgICAgIHNoYXJlc1xuICAgICAgICApLFxuICAgICAgICB1dHhvcyxcbiAgICAgICAgbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksXG4gICAgICAgIGNyZWRlbnRpYWxzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy5fc2lnbmVyLnB1c2gobmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaGFzU2lnbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaWduZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduZXIubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleSh7IGtleSB9OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgaWYgKCFuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBpbiBhbnkgZm9ybWF0XG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICAvLyB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigndmFsaWRhdGVUcmFuc2FjdGlvbiBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG59XG4iXX0=