@bitgo-beta/sdk-coin-xrp 1.3.3-alpha.224 → 1.3.3-alpha.226

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,18 @@
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
+ # [3.5.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.4.0...@bitgo/sdk-coin-xrp@3.5.0) (2024-11-08)
7
+
8
+ ### Features
9
+
10
+ - **sdk-coin-xrp:** add support for token enablement ([8972a6e](https://github.com/BitGo/BitGoJS/commit/8972a6e857ae47835639e023d4b3f6adcd832c4b))
11
+
12
+ # [3.4.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.3.0...@bitgo/sdk-coin-xrp@3.4.0) (2024-11-07)
13
+
14
+ ### Features
15
+
16
+ - **sdk-coin-xrp:** add non-bitgo recovery for xrpl token ([ef10edd](https://github.com/BitGo/BitGoJS/commit/ef10edd92b790df10a184174498d7b60ffe6849a))
17
+
6
18
  # [3.3.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.2.0...@bitgo/sdk-coin-xrp@3.3.0) (2024-11-01)
7
19
 
8
20
  ### Features
@@ -68,10 +68,11 @@ export interface AccountSetTransactionExplanation extends BaseTransactionExplana
68
68
  };
69
69
  }
70
70
  export interface TrustSetTransactionExplanation extends BaseTransactionExplanation {
71
+ account: string;
71
72
  limitAmount: {
72
- tokenName: string;
73
- address: string;
74
- amount: string;
73
+ currency: string;
74
+ issuer: string;
75
+ value: string;
75
76
  };
76
77
  }
77
78
  export interface SignerListSetTransactionExplanation extends BaseTransactionExplanation {
@@ -1 +1 @@
1
- {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,2BAA2B,EACtD,sBAAsB,IAAI,0BAA0B,EACpD,sBAAsB,IAAI,0BAA0B,EACpD,oBAAoB,IAAI,wBAAwB,EAChD,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEjG,oBAAY,kBAAkB;IAC5B,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,0BAA0B;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,2BAA2B;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,gCAAgC,GAChC,8BAA8B,GAC9B,mCAAmC,CAAC;AAExC,MAAM,WAAW,gCAAiC,SAAQ,0BAA0B;IAClF,UAAU,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,8BAA+B,SAAQ,0BAA0B;IAChF,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mCAAoC,SAAQ,0BAA0B;IACrF,aAAa,EAAE;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,WAAW,EAAE,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IAErB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,kBAAkB,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;IAEpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,4 @@ var XrpTransactionType;
8
8
  XrpTransactionType["SignerListSet"] = "SignerListSet";
9
9
  XrpTransactionType["TrustSet"] = "TrustSet";
10
10
  })(XrpTransactionType = exports.XrpTransactionType || (exports.XrpTransactionType = {}));
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QiwrQ0FBeUIsQ0FBQTtJQUN6Qix5Q0FBbUIsQ0FBQTtJQUNuQixxREFBK0IsQ0FBQTtJQUMvQiwyQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyBhcyBCYXNlSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQWNjb3VudFNldCwgQW1vdW50LCBQYXltZW50LCBTaWduZXIsIFNpZ25lckVudHJ5LCBTaWduZXJMaXN0U2V0LCBUcnVzdFNldCB9IGZyb20gJ3hycGwnO1xuXG5leHBvcnQgZW51bSBYcnBUcmFuc2FjdGlvblR5cGUge1xuICBBY2NvdW50U2V0ID0gJ0FjY291bnRTZXQnLFxuICBQYXltZW50ID0gJ1BheW1lbnQnLFxuICBTaWduZXJMaXN0U2V0ID0gJ1NpZ25lckxpc3RTZXQnLFxuICBUcnVzdFNldCA9ICdUcnVzdFNldCcsXG59XG5cbmV4cG9ydCB0eXBlIFhycFRyYW5zYWN0aW9uID0gUGF5bWVudCB8IEFjY291bnRTZXQgfCBTaWduZXJMaXN0U2V0IHwgVHJ1c3RTZXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzcyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgZGVzdGluYXRpb25UYWc/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlSW5mbyB7XG4gIGRhdGU6IHN0cmluZztcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGJhc2VSZXNlcnZlOiBzdHJpbmc7XG4gIGJhc2VGZWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbiAgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZzsgLy8gdHhIZXggaXMgcG9vcmx5IG5hbWVkIGhlcmU7IGl0IGlzIGp1c3QgYSB3cmFwcGVkIEpTT04gb2JqZWN0XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICByb290QWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5SW5mbyBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgYmFja3VwS2V5Pzogc3RyaW5nO1xuICBjb2luPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5VHJhbnNhY3Rpb24ge1xuICB0eEhleDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIGV4dGVuZHMgQmFzZUluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIHtcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgdG9rZW5OYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhbGZTaWduZWRUcmFuc2FjdGlvbiB7XG4gIGhhbGZTaWduZWQ6IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMge1xuICByb290UHJpdmF0ZUtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9XG4gIHwgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgfCBBY2NvdW50U2V0VHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICB8IFRydXN0U2V0VHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICB8IFNpZ25lckxpc3RTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBhY2NvdW50U2V0OiB7XG4gICAgbWVzc2FnZUtleT86IHN0cmluZztcbiAgICBzZXRGbGFnOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBsaW1pdEFtb3VudDoge1xuICAgIHRva2VuTmFtZTogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhbW91bnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduZXJMaXN0U2V0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgc2lnbmVyTGlzdFNldDoge1xuICAgIHNpZ25lclF1b3J1bTogbnVtYmVyO1xuICAgIHNpZ25lckVudHJpZXM6IFNpZ25lckVudHJ5W107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgLy8gbWFuZGF0b3J5IGZpZWxkc1xuICBmcm9tOiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uVHlwZTogWHJwVHJhbnNhY3Rpb25UeXBlO1xuICBpc011bHRpU2lnOiBib29sZWFuO1xuICAvLyBvcHRpb25hbCBmaWVsZHNcbiAgaWQ/OiBzdHJpbmc7XG4gIGZlZT86IHN0cmluZztcbiAgZmxhZ3M6IG51bWJlcjtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG4gIGxhc3RMZWRnZXJTZXF1ZW5jZT86IG51bWJlcjtcbiAgc2lnbmluZ1B1YktleT86IHN0cmluZzsgLy8gaWYgJycgdGhlbiBpdCBpcyBhIG11bHRpIHNpZ1xuICB0eG5TaWduYXR1cmU/OiBzdHJpbmc7IC8vIG9ubHkgZm9yIHNpbmdsZSBzaWdcbiAgc2lnbmVycz86IFNpZ25lcltdOyAvLyBvbmx5IGZvciBtdWx0aSBzaWdcbiAgLy8gdHJhbnNmZXIgeHJwIGZpZWxkc1xuICBkZXN0aW5hdGlvbj86IHN0cmluZztcbiAgZGVzdGluYXRpb25UYWc/OiBudW1iZXI7XG4gIGFtb3VudD86IEFtb3VudDtcbiAgLy8gYWNjb3VudCBzZXQgZmllbGRzXG4gIG1lc3NhZ2VLZXk/OiBzdHJpbmc7XG4gIHNldEZsYWc/OiBudW1iZXI7XG4gIC8vIHNpZ25lciBsaXN0IHNldCBmaWVsZHNcbiAgc2lnbmVyUXVvcnVtPzogbnVtYmVyO1xuICBzaWduZXJFbnRyaWVzPzogU2lnbmVyRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduZXJEZXRhaWxzIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB3ZWlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QiwrQ0FBeUIsQ0FBQTtJQUN6Qix5Q0FBbUIsQ0FBQTtJQUNuQixxREFBK0IsQ0FBQTtJQUMvQiwyQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyBhcyBCYXNlSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQWNjb3VudFNldCwgQW1vdW50LCBQYXltZW50LCBTaWduZXIsIFNpZ25lckVudHJ5LCBTaWduZXJMaXN0U2V0LCBUcnVzdFNldCB9IGZyb20gJ3hycGwnO1xuXG5leHBvcnQgZW51bSBYcnBUcmFuc2FjdGlvblR5cGUge1xuICBBY2NvdW50U2V0ID0gJ0FjY291bnRTZXQnLFxuICBQYXltZW50ID0gJ1BheW1lbnQnLFxuICBTaWduZXJMaXN0U2V0ID0gJ1NpZ25lckxpc3RTZXQnLFxuICBUcnVzdFNldCA9ICdUcnVzdFNldCcsXG59XG5cbmV4cG9ydCB0eXBlIFhycFRyYW5zYWN0aW9uID0gUGF5bWVudCB8IEFjY291bnRTZXQgfCBTaWduZXJMaXN0U2V0IHwgVHJ1c3RTZXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzcyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgZGVzdGluYXRpb25UYWc/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlSW5mbyB7XG4gIGRhdGU6IHN0cmluZztcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGJhc2VSZXNlcnZlOiBzdHJpbmc7XG4gIGJhc2VGZWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbiAgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZzsgLy8gdHhIZXggaXMgcG9vcmx5IG5hbWVkIGhlcmU7IGl0IGlzIGp1c3QgYSB3cmFwcGVkIEpTT04gb2JqZWN0XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICByb290QWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5SW5mbyBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgYmFja3VwS2V5Pzogc3RyaW5nO1xuICBjb2luPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5VHJhbnNhY3Rpb24ge1xuICB0eEhleDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIGV4dGVuZHMgQmFzZUluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIHtcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgdG9rZW5OYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhbGZTaWduZWRUcmFuc2FjdGlvbiB7XG4gIGhhbGZTaWduZWQ6IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMge1xuICByb290UHJpdmF0ZUtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9XG4gIHwgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgfCBBY2NvdW50U2V0VHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICB8IFRydXN0U2V0VHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICB8IFNpZ25lckxpc3RTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBhY2NvdW50U2V0OiB7XG4gICAgbWVzc2FnZUtleT86IHN0cmluZztcbiAgICBzZXRGbGFnOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIGxpbWl0QW1vdW50OiB7XG4gICAgY3VycmVuY3k6IHN0cmluZztcbiAgICBpc3N1ZXI6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lckxpc3RTZXRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBzaWduZXJMaXN0U2V0OiB7XG4gICAgc2lnbmVyUXVvcnVtOiBudW1iZXI7XG4gICAgc2lnbmVyRW50cmllczogU2lnbmVyRW50cnlbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeERhdGEge1xuICAvLyBtYW5kYXRvcnkgZmllbGRzXG4gIGZyb206IHN0cmluZztcbiAgdHJhbnNhY3Rpb25UeXBlOiBYcnBUcmFuc2FjdGlvblR5cGU7XG4gIGlzTXVsdGlTaWc6IGJvb2xlYW47XG4gIC8vIG9wdGlvbmFsIGZpZWxkc1xuICBpZD86IHN0cmluZztcbiAgZmVlPzogc3RyaW5nO1xuICBmbGFnczogbnVtYmVyO1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgbGFzdExlZGdlclNlcXVlbmNlPzogbnVtYmVyO1xuICBzaWduaW5nUHViS2V5Pzogc3RyaW5nOyAvLyBpZiAnJyB0aGVuIGl0IGlzIGEgbXVsdGkgc2lnXG4gIHR4blNpZ25hdHVyZT86IHN0cmluZzsgLy8gb25seSBmb3Igc2luZ2xlIHNpZ1xuICBzaWduZXJzPzogU2lnbmVyW107IC8vIG9ubHkgZm9yIG11bHRpIHNpZ1xuICAvLyB0cmFuc2ZlciB4cnAgZmllbGRzXG4gIGRlc3RpbmF0aW9uPzogc3RyaW5nO1xuICBkZXN0aW5hdGlvblRhZz86IG51bWJlcjtcbiAgYW1vdW50PzogQW1vdW50O1xuICAvLyBhY2NvdW50IHNldCBmaWVsZHNcbiAgbWVzc2FnZUtleT86IHN0cmluZztcbiAgc2V0RmxhZz86IG51bWJlcjtcbiAgLy8gc2lnbmVyIGxpc3Qgc2V0IGZpZWxkc1xuICBzaWduZXJRdW9ydW0/OiBudW1iZXI7XG4gIHNpZ25lckVudHJpZXM/OiBTaWduZXJFbnRyeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lckRldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHdlaWdodDogbnVtYmVyO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"xrp.d.ts","sourceRoot":"","sources":["../../src/xrp.ts"],"names":[],"mappings":";;AAQA,OAAO,EACL,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EAEvB,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AAKlF,OAAO,EACL,yBAAyB,EACzB,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAKrB,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAQ/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC,wBAAwB,IAAI,qBAAqB;IAOxD;;;;;;OAMG;IACU,eAAe,CAAC,EAC3B,UAAU,EACV,GAAG,EACH,eAAe,GAChB,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAAC;IAkChF;;;;;OAKG;IACG,wBAAwB,CAC5B,YAAY,EAAE,+BAA+B,GAC5C,OAAO,CAAC,+BAA+B,CAAC;IAe3C;;;OAGG;IACG,kBAAkB,CAAC,MAAM,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAsFjG;;;;;;OAMG;IACU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmDpG;;;;;;OAMG;IACU,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB9F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;;;;;;;;OAUG;IACU,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAuN7E,eAAe,CAAC,MAAM,KAAA,EAAE,SAAS,KAAA,EAAE,WAAW,KAAA;IA4E3D;;;OAGG;IACI,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYxC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpF"}
1
+ {"version":3,"file":"xrp.d.ts","sourceRoot":"","sources":["../../src/xrp.ts"],"names":[],"mappings":";;AAQA,OAAO,EACL,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EAEvB,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AAKlF,OAAO,EACL,yBAAyB,EACzB,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAKrB,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAQ/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC,wBAAwB,IAAI,qBAAqB;IAOxD;;;;;;OAMG;IACU,eAAe,CAAC,EAC3B,UAAU,EACV,GAAG,EACH,eAAe,GAChB,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAAC;IAkChF;;;;;OAKG;IACG,wBAAwB,CAC5B,YAAY,EAAE,+BAA+B,GAC5C,OAAO,CAAC,+BAA+B,CAAC;IAe3C;;;OAGG;IACG,kBAAkB,CAAC,MAAM,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgGjG;;;;;;OAMG;IACU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqDpG;;;;;;OAMG;IACU,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB9F;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;;;;;;;;OAUG;IACU,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAuN7E,eAAe,CAAC,MAAM,KAAA,EAAE,SAAS,KAAA,EAAE,WAAW,KAAA;IA4E3D;;;OAGG;IACI,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYxC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpF"}
package/dist/src/xrp.js CHANGED
@@ -214,7 +214,16 @@ class Xrp extends sdk_core_1.BaseCoin {
214
214
  }
215
215
  else if (transaction.TransactionType === 'TrustSet') {
216
216
  return {
217
- displayOrder: ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'limitAmount'],
217
+ displayOrder: [
218
+ 'id',
219
+ 'outputAmount',
220
+ 'changeAmount',
221
+ 'outputs',
222
+ 'changeOutputs',
223
+ 'fee',
224
+ 'account',
225
+ 'limitAmount',
226
+ ],
218
227
  id: id,
219
228
  changeOutputs: [],
220
229
  outputAmount: 0,
@@ -225,10 +234,11 @@ class Xrp extends sdk_core_1.BaseCoin {
225
234
  feeRate: undefined,
226
235
  size: txHex.length / 2,
227
236
  },
237
+ account: transaction.Account,
228
238
  limitAmount: {
229
- tokenName: transaction.LimitAmount.currency,
230
- address: transaction.LimitAmount.issuer,
231
- amount: transaction.LimitAmount.value,
239
+ currency: transaction.LimitAmount.currency,
240
+ issuer: transaction.LimitAmount.issuer,
241
+ value: transaction.LimitAmount.value,
232
242
  },
233
243
  };
234
244
  }
@@ -260,6 +270,7 @@ class Xrp extends sdk_core_1.BaseCoin {
260
270
  * @returns {boolean}
261
271
  */
262
272
  async verifyTransaction({ txParams, txPrebuild }) {
273
+ var _a;
263
274
  const coinConfig = statics_1.coins.get(this.getChain());
264
275
  const explanation = await this.explainTransaction({
265
276
  txHex: txPrebuild.txHex,
@@ -274,30 +285,32 @@ class Xrp extends sdk_core_1.BaseCoin {
274
285
  const amount2 = new bignumber_js_1.BigNumber(recipient2.amount);
275
286
  return amount1.toFixed() === amount2.toFixed();
276
287
  };
277
- if (txParams.recipients) {
278
- // for enabletoken, recipient output amount is 0
279
- const recipients = txParams.recipients.map((recipient) => ({
280
- ...recipient,
281
- }));
288
+ if ((txParams.type === undefined || txParams.type === 'payment') &&
289
+ typeof output.amount !== 'object' &&
290
+ !comparator(output, expectedOutput)) {
291
+ throw new Error('transaction prebuild does not match expected output');
292
+ }
293
+ if (txParams.type === 'enabletoken') {
294
+ if (((_a = txParams.recipients) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
295
+ throw new Error('Only one recipient is allowed.');
296
+ }
297
+ const recipient = txParams.recipients[0];
298
+ if (!recipient.tokenName) {
299
+ throw new Error('Recipient must include a token name.');
300
+ }
301
+ const recipientCurrency = utils_1.default.getXrpCurrencyFromTokenName(recipient.tokenName).currency;
282
302
  if (coinConfig.isToken) {
283
- recipients.forEach((recipient) => {
284
- if (recipient.tokenName !== undefined &&
285
- utils_1.default.getXrpCurrencyFromTokenName(recipient.tokenName).currency !== coinConfig.currencyCode) {
286
- throw new Error('Incorrect token name specified in recipients');
287
- }
288
- recipient.tokenName = coinConfig.currencyCode;
289
- });
303
+ if (recipientCurrency !== coinConfig.currencyCode) {
304
+ throw new Error('Incorrect token name specified in recipients');
305
+ }
290
306
  }
291
- // verify recipients from params and explainedTx
292
- const filteredRecipients = recipients === null || recipients === void 0 ? void 0 : recipients.map((recipient) => _.pick(recipient, ['address', 'amount', 'tokenName']));
293
- const filteredOutputs = 'limitAmount' in explanation ? [explanation.limitAmount] : [];
294
- if (!_.isEqual(filteredOutputs, filteredRecipients)) {
295
- throw new Error('Tx outputs does not match with expected txParams recipients');
307
+ if (!('account' in explanation) || !('limitAmount' in explanation) || !explanation.limitAmount.currency) {
308
+ throw new Error('Explanation is missing required keys (account or limitAmount with currency)');
296
309
  }
297
- }
298
- else {
299
- if (!comparator(output, expectedOutput)) {
300
- throw new Error('transaction prebuild does not match expected output');
310
+ const baseAddress = explanation.account;
311
+ const currency = explanation.limitAmount.currency;
312
+ if (recipient.address !== baseAddress || recipientCurrency !== currency) {
313
+ throw new Error('Tx outputs does not match with expected txParams recipients');
301
314
  }
302
315
  }
303
316
  return true;
@@ -598,4 +611,4 @@ class Xrp extends sdk_core_1.BaseCoin {
598
611
  }
599
612
  }
600
613
  exports.Xrp = Xrp;
601
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsK0NBQXlDO0FBQ3pDLDBDQUE0QjtBQUM1Qix5REFBMkM7QUFDM0MseUNBQTJCO0FBRTNCLG1EQWE4QjtBQUM5QixpREFBa0Y7QUFDbEYsdUVBQXlEO0FBQ3pELGdFQUFrRDtBQUNsRCwyQ0FBNkI7QUFjN0IsMkNBQXNEO0FBQ3RELHdEQUFnQztBQUNoQyxzREFBOEI7QUFFOUIsTUFBYSxHQUFJLFNBQVEsbUJBQVE7SUFFL0IsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZ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QyxTQUFTLENBQUM7WUFDcEQsc0JBQXNCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMvQztRQUNELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxJQUFhO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQStCO1FBQ3BELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBbG9CRCxrQkFrb0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjaGVja0tyc1Byb3ZpZGVyLFxuICBnZXRCaXAzMktleXMsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgcHJvbWlzZVByb3BzLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucywgWHJwQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgcmlwcGxlQmluYXJ5Q29kZWMgZnJvbSAncmlwcGxlLWJpbmFyeS1jb2RlYyc7XG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcblxuaW1wb3J0IHtcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgRmVlSW5mbyxcbiAgSGFsZlNpZ25lZFRyYW5zYWN0aW9uLFxuICBSZWNvdmVyeUluZm8sXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCByaXBwbGUgZnJvbSAnLi9yaXBwbGUnO1xuXG5leHBvcnQgY2xhc3MgWHJwIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYcnAoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgY29pbidzIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgYmxvY2tjaGFpbiB3aGljaCBzdXBwb3J0cyB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBjb2luIGZhbWlseVxuICAgKi9cbiAgcHVibGljIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgd2hldGhlciBhbiBhZGRyZXNzIHN0cmluZyBpcyB2YWxpZCBmb3IgdGhpcyBjb2luXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgcHVibGljIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmZWUgaW5mbyBmcm9tIHNlcnZlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZlZUluZm8oKTogUHJvbWlzZTxGZWVJbmZvPiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2ZlZWluZm8nKSkucmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gdHhQcmVidWlsZFxuICAgKiAtIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxIYWxmU2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHtcbiAgICB0eFByZWJ1aWxkLFxuICAgIHBydixcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gIH06IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEhhbGZTaWduZWRUcmFuc2FjdGlvbiB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSB8fCAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZCBtdXN0IGJlIGFuIG9iamVjdCwgZ290IHR5cGUgJHt0eXBlb2YgdHhQcmVidWlsZH1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikgfHwgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBydikgJiYgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBydiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgdHlwZSAke3R5cGVvZiBwcnZ9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcHJ2IHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgdHhIZXggaW4gdHhQcmVidWlsZGApO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoeyBwcnYgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSAoa2V5UGFpci5nZXRQcml2YXRlS2V5KCkgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB0eCA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhQcmVidWlsZC50eEhleCwgcHJpdmF0ZUtleSwge1xuICAgICAgc2lnbkFzOiBhZGRyZXNzLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgdGhlIFNESyBwcm92aWRlcyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGZvciBhbiBYUlAgdHgsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgcHJvdmlkZXMgdGhlIGZpbmFsIG9uZSBhcyB3ZWxsXG4gICAgLy8gKHJlY292ZXJpZXMpXG4gICAgaWYgKGlzTGFzdFNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH07XG4gICAgfVxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSaXBwbGUgcmVxdWlyZXMgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB3YWxsZXQgZ2VuZXJhdGlvbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlXG4gICAqIHRoZSByb290IHB1YmxpYyBrZXksIHdoaWNoIGlzIHRoZSBiYXNpcyBvZiB0aGUgcm9vdCBhZGRyZXNzLCB0d28gc2lnbmVkLCBhbmQgb25lIGhhbGYtc2lnbmVkIGluaXRpYWxpemF0aW9uIHR4c1xuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqIC0gcm9vdFByaXZhdGVLZXk6IG9wdGlvbmFsIGhleC1lbmNvZGVkIFJpcHBsZSBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5KSB7XG4gICAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290UHJpdmF0ZUtleSBuZWVkcyB0byBiZSBhIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBpZiAoIWtleVBhaXIucHJ2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5ID0ga2V5UGFpci5wcnY7XG4gICAgfVxuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zID0ge30pOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb247XG4gICAgbGV0IHR4SGV4OiBzdHJpbmcgPSBwYXJhbXMudHhIZXggfHwgKChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCkgYXMgc3RyaW5nKTtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gdHhIZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uID0gcmlwcGxlQmluYXJ5Q29kZWMuZGVjb2RlKHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UodHhIZXgpO1xuICAgICAgICB0eEhleCA9IHJpcHBsZUJpbmFyeUNvZGVjLmVuY29kZSh0cmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbmVlZHMgdG8gYmUgZWl0aGVyIGhleCBvciBKU09OIHN0cmluZyBmb3IgWFJQJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIC8vIGhhc2hlcyBpZHMgYXJlIGRpZmZlcmVudCBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCB0eFxuICAgIC8vIGZpcnN0IHdlIHRyeSB0byBnZXQgdGhlIGhhc2ggaWQgYXMgaWYgaXQgaXMgc2lnbmVkLCB3aWxsIHRocm93IGlmIGl0cyBub3RcbiAgICB0cnkge1xuICAgICAgaWQgPSB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgodHhIZXgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFR4KHR4SGV4KTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25UeXBlID09PSAnQWNjb3VudFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnYWNjb3VudFNldCddLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50U2V0OiB7XG4gICAgICAgICAgbWVzc2FnZUtleTogdHJhbnNhY3Rpb24uTWVzc2FnZUtleSxcbiAgICAgICAgICBzZXRGbGFnOiB0cmFuc2FjdGlvbi5TZXRGbGFnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ1RydXN0U2V0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICdsaW1pdEFtb3VudCddLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBsaW1pdEFtb3VudDoge1xuICAgICAgICAgIHRva2VuTmFtZTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQuY3VycmVuY3ksXG4gICAgICAgICAgYWRkcmVzczogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQuaXNzdWVyLFxuICAgICAgICAgIGFtb3VudDogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgdHJhbnNhY3Rpb24uRGVzdGluYXRpb24gKyAodHJhbnNhY3Rpb24uRGVzdGluYXRpb25UYWcgPj0gMCA/ICc/ZHQ9JyArIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnIDogJycpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ10sXG4gICAgICBpZDogaWQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dEFtb3VudDogdHJhbnNhY3Rpb24uQW1vdW50LFxuICAgICAgY2hhbmdlQW1vdW50OiAwLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0cmFuc2FjdGlvbi5GZWUsXG4gICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0gdHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gdHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSB3YWxsZXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9OiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkgYXMgWHJwQ29pbjtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmV4cGxhbmF0aW9uLm91dHB1dHMsIC4uLmV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNdWzBdO1xuICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50cyAmJiB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuXG4gICAgY29uc3QgY29tcGFyYXRvciA9IChyZWNpcGllbnQxLCByZWNpcGllbnQyKSA9PiB7XG4gICAgICBpZiAocmVjaXBpZW50MS5hZGRyZXNzICE9PSByZWNpcGllbnQyLmFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYW1vdW50MSA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50MS5hbW91bnQpO1xuICAgICAgY29uc3QgYW1vdW50MiA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50Mi5hbW91bnQpO1xuICAgICAgcmV0dXJuIGFtb3VudDEudG9GaXhlZCgpID09PSBhbW91bnQyLnRvRml4ZWQoKTtcbiAgICB9O1xuXG4gICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMpIHtcbiAgICAgIC8vIGZvciBlbmFibGV0b2tlbiwgcmVjaXBpZW50IG91dHB1dCBhbW91bnQgaXMgMFxuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+ICh7XG4gICAgICAgIC4uLnJlY2lwaWVudCxcbiAgICAgIH0pKTtcbiAgICAgIGlmIChjb2luQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgICAgcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZWNpcGllbnQudG9rZW5OYW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHV0aWxzLmdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZShyZWNpcGllbnQudG9rZW5OYW1lKS5jdXJyZW5jeSAhPT0gY29pbkNvbmZpZy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHRva2VuIG5hbWUgc3BlY2lmaWVkIGluIHJlY2lwaWVudHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjaXBpZW50LnRva2VuTmFtZSA9IGNvaW5Db25maWcuY3VycmVuY3lDb2RlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gdmVyaWZ5IHJlY2lwaWVudHMgZnJvbSBwYXJhbXMgYW5kIGV4cGxhaW5lZFR4XG4gICAgICBjb25zdCBmaWx0ZXJlZFJlY2lwaWVudHMgPSByZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4gXy5waWNrKHJlY2lwaWVudCwgWydhZGRyZXNzJywgJ2Ftb3VudCcsICd0b2tlbk5hbWUnXSkpO1xuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXRzID0gJ2xpbWl0QW1vdW50JyBpbiBleHBsYW5hdGlvbiA/IFtleHBsYW5hdGlvbi5saW1pdEFtb3VudF0gOiBbXTtcblxuICAgICAgaWYgKCFfLmlzRXF1YWwoZmlsdGVyZWRPdXRwdXRzLCBmaWx0ZXJlZFJlY2lwaWVudHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb21wYXJhdG9yKG91dHB1dCwgZXhwZWN0ZWRPdXRwdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgb3V0cHV0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhIHZhbGlkIFhSUCBhZGRyZXNzLCBhbmQgdGhlbiBtYWtlIHN1cmUgdGhlIHJvb3QgYWRkcmVzc2VzIG1hdGNoLlxuICAgKiBUaGlzIHByZXZlbnRzIGF0dGFja3Mgd2hlcmUgYW4gYXR0YWNrIG1heSBzd2l0Y2ggb3V0IHRoZSBuZXcgYWRkcmVzcyBmb3Igb25lIG9mIHRoZWlyIG93blxuICAgKiBAcGFyYW0gYWRkcmVzcyB7U3RyaW5nfSB0aGUgYWRkcmVzcyB0byB2ZXJpZnlcbiAgICogQHBhcmFtIHJvb3RBZGRyZXNzIHtTdHJpbmd9IHRoZSB3YWxsZXQncyByb290IGFkZHJlc3NcbiAgICogQHJldHVybiB0cnVlIGlmZiBhZGRyZXNzIGlzIGEgd2FsbGV0IGFkZHJlc3MgKGJhc2VkIG9uIHJvb3RBZGRyZXNzKVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIHJvb3RBZGRyZXNzIH06IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2ZXJpZmljYXRpb24gZmFpbHVyZTogYWRkcmVzcyBcIiR7YWRkcmVzc31cIiBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzRGV0YWlscyA9IHV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKHJvb3RBZGRyZXNzKTtcblxuICAgIGlmIChhZGRyZXNzRGV0YWlscy5hZGRyZXNzICE9PSByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogJHthZGRyZXNzRGV0YWlscy5hZGRyZXNzfSB2cy4gJHtyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVSTCBvZiBhIHdlbGwta25vd24sIHB1YmxpYyBmYWNpbmcgKG5vbi1iaXRnbykgcmlwcGxlZCBpbnN0YW5jZSB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcmVjb3ZlcnlcbiAgICovXG4gIHB1YmxpYyBnZXRSaXBwbGVkVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdodHRwczovL3MxLnJpcHBsZS5jb206NTEyMzQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiAtIHJvb3RBZGRyZXNzOiByb290IFhSUCB3YWxsZXQgYWRkcmVzcyB0byByZWNvdmVyIGZ1bmRzIGZyb21cbiAgICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSB4cHJ2XG4gICAqIC0gYmFja3VwS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViIGlmIHRoZSB4cHJ2IGlzIGhlbGQgYnkgYSBLUlMgcHJvdmlkZXJcbiAgICogLSB3YWxsZXRQYXNzcGhyYXNlOiBuZWNlc3NhcnkgaWYgb25lIG9mIHRoZSB4cHJ2cyBpcyBlbmNyeXB0ZWRcbiAgICogLSBiaXRnb0tleTogeHB1YlxuICAgKiAtIGtyc1Byb3ZpZGVyOiBuZWNlc3NhcnkgaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSU1xuICAgKiAtIHJlY292ZXJ5RGVzdGluYXRpb246IHRhcmdldCBhZGRyZXNzIHRvIHNlbmQgcmVjb3ZlcmVkIGZ1bmRzIHRvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgUmVjb3ZlcnlUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJpcHBsZWRVcmwgPSB0aGlzLmdldFJpcHBsZWRVcmwoKTtcbiAgICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gcGFyYW1zLmJhY2t1cEtleS5zdGFydHNXaXRoKCd4cHViJykgJiYgIXBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKTtcbiAgICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSAmJiBwYXJhbXMudXNlcktleS5zdGFydHNXaXRoKCd4cHViJyk7XG5cbiAgICBjb25zdCBhY2NvdW50SW5mb1BhcmFtcyA9IHtcbiAgICAgIG1ldGhvZDogJ2FjY291bnRfaW5mbycsXG4gICAgICBwYXJhbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHBhcmFtcy5yb290QWRkcmVzcyxcbiAgICAgICAgICBsZWRnZXJfaW5kZXg6ICdjdXJyZW50JyxcbiAgICAgICAgICBxdWV1ZTogdHJ1ZSxcbiAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgc2lnbmVyX2xpc3RzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgYWNjb3VudExpbmVzUGFyYW1zID0ge1xuICAgICAgbWV0aG9kOiAnYWNjb3VudF9saW5lcycsXG4gICAgICBwYXJhbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHBhcmFtcy5yb290QWRkcmVzcyxcbiAgICAgICAgICBsZWRnZXJfaW5kZXg6ICd2YWxpZGF0ZWQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIGNoZWNrS3JzUHJvdmlkZXIodGhpcywgcGFyYW1zLmtyc1Byb3ZpZGVyKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzc1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXModGhpcy5iaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgeyBhZGRyZXNzRGV0YWlscywgZmVlRGV0YWlscywgc2VydmVyRGV0YWlscywgYWNjb3VudExpbmVzIH0gPSBhd2FpdCBwcm9taXNlUHJvcHMoe1xuICAgICAgYWRkcmVzc0RldGFpbHM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKGFjY291bnRJbmZvUGFyYW1zKSxcbiAgICAgIGZlZURldGFpbHM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKHsgbWV0aG9kOiAnZmVlJyB9KSxcbiAgICAgIHNlcnZlckRldGFpbHM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKHsgbWV0aG9kOiAnc2VydmVyX2luZm8nIH0pLFxuICAgICAgYWNjb3VudExpbmVzOiB0aGlzLmJpdGdvLnBvc3QocmlwcGxlZFVybCkuc2VuZChhY2NvdW50TGluZXNQYXJhbXMpLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3BlbkxlZGdlckZlZSA9IG5ldyBCaWdOdW1iZXIoZmVlRGV0YWlscy5ib2R5LnJlc3VsdC5kcm9wcy5vcGVuX2xlZGdlcl9mZWUpO1xuICAgIGNvbnN0IGJhc2VSZXNlcnZlID0gbmV3IEJpZ051bWJlcihzZXJ2ZXJEZXRhaWxzLmJvZHkucmVzdWx0LmluZm8udmFsaWRhdGVkX2xlZGdlci5yZXNlcnZlX2Jhc2VfeHJwKS50aW1lcyhcbiAgICAgIHRoaXMuZ2V0QmFzZUZhY3RvcigpXG4gICAgKTtcbiAgICBjb25zdCByZXNlcnZlRGVsdGEgPSBuZXcgQmlnTnVtYmVyKHNlcnZlckRldGFpbHMuYm9keS5yZXN1bHQuaW5mby52YWxpZGF0ZWRfbGVkZ2VyLnJlc2VydmVfaW5jX3hycCkudGltZXMoXG4gICAgICB0aGlzLmdldEJhc2VGYWN0b3IoKVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudExlZGdlciA9IHNlcnZlckRldGFpbHMuYm9keS5yZXN1bHQuaW5mby52YWxpZGF0ZWRfbGVkZ2VyLnNlcTtcbiAgICBjb25zdCBzZXF1ZW5jZUlkID0gYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLlNlcXVlbmNlO1xuICAgIGNvbnN0IGJhbGFuY2UgPSBuZXcgQmlnTnVtYmVyKGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5CYWxhbmNlKTtcbiAgICBjb25zdCBzaWduZXJMaXN0cyA9IGFkZHJlc3NEZXRhaWxzLmJvZHkucmVzdWx0LmFjY291bnRfZGF0YS5zaWduZXJfbGlzdHM7XG4gICAgY29uc3QgYWNjb3VudEZsYWdzID0gYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLkZsYWdzO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25lciBsaXN0IHNldFxuICAgIGlmIChzaWduZXJMaXN0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzZXQgb2Ygc2lnbmVyIGxpc3RzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBzaWduZXJzIGFyZSB1c2VyLCBiYWNrdXAsIGJpdGdvXG4gICAgY29uc3QgdXNlckFkZHJlc3MgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKGtleXNbMF0ucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgYmFja3VwQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1sxXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcblxuICAgIGNvbnN0IHNpZ25lckxpc3QgPSBzaWduZXJMaXN0c1swXTtcbiAgICBpZiAoc2lnbmVyTGlzdC5TaWduZXJRdW9ydW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtaW5pbXVtIHNpZ25hdHVyZSBjb3VudCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEFkZHJlc3NlcyA9IHt9O1xuXG4gICAgY29uc3Qgc2lnbmVyRW50cmllcyA9IHNpZ25lckxpc3QuU2lnbmVyRW50cmllcztcbiAgICBpZiAoc2lnbmVyRW50cmllcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgbGlzdCBsZW5ndGgnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7IFNpZ25lckVudHJ5IH0gb2Ygc2lnbmVyRW50cmllcykge1xuICAgICAgY29uc3Qgd2VpZ2h0ID0gU2lnbmVyRW50cnkuU2lnbmVyV2VpZ2h0O1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNpZ25lckVudHJ5LkFjY291bnQ7XG4gICAgICBpZiAod2VpZ2h0ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZXIgd2VpZ2h0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGl0J3MgYSBkdXBlIG9mIGFuIGFkZHJlc3Mgd2UgYWxyZWFkeSBrbm93LCBibG9ja1xuICAgICAgaWYgKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID49IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdID0gKGZvdW5kQWRkcmVzc2VzW2FkZHJlc3NdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmRBZGRyZXNzZXNbdXNlckFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1tiYWNrdXBBZGRyZXNzXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGluY2lkZW5jZSBmcmVxdWVuY3kgb2YgdXNlciBzaWduZXIgYWRkcmVzcycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZmxhZ3MgZGlzYWJsZSB0aGUgbWFzdGVyIGtleSBhbmQgZW5mb3JjZSBkZXN0aW5hdGlvbiB0YWdzXG4gICAgY29uc3QgVVNFUl9LRVlfU0VUVElOR19GTEFHID0gNjU1MzY7XG4gICAgY29uc3QgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRyA9IDEwNDg1NzY7XG4gICAgY29uc3QgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRyA9IDEzMTA3MjtcbiAgICBpZiAoKGFjY291bnRGbGFncyAmIFVTRVJfS0VZX1NFVFRJTkdfRkxBRykgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYSBjdXN0b20gdXNlciBrZXkgaGFzIGJlZW4gc2V0Jyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykgIT09IE1BU1RFUl9LRVlfREVBQ1RJVkFUSU9OX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIG1hc3RlciBrZXkgaGFzIG5vdCBiZWVuIGRlYWN0aXZhdGVkJyk7XG4gICAgfVxuICAgIGlmICgoYWNjb3VudEZsYWdzICYgUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykgIT09IFJFUVVJUkVfREVTVElOQVRJT05fVEFHX0ZMQUcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIGRlc3RpbmF0aW9uIGZsYWcgcmVxdWlyZW1lbnQgaGFzIG5vdCBiZWVuIGFjdGl2YXRlZCcpO1xuICAgIH1cblxuICAgIC8vIHJlY292ZXIgdGhlIGZ1bmRzXG4gICAgY29uc3QgcmVzZXJ2ZSA9IGJhc2VSZXNlcnZlLnBsdXMocmVzZXJ2ZURlbHRhKTtcbiAgICBjb25zdCByZWNvdmVyYWJsZUJhbGFuY2UgPSBiYWxhbmNlLm1pbnVzKHJlc2VydmUpO1xuXG4gICAgY29uc3QgcmF3RGVzdGluYXRpb24gPSBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UocmF3RGVzdGluYXRpb24pO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZTtcblxuICAgIC8vIHBhcnNlIGRlc3RpbmF0aW9uIHRhZyBmcm9tIHF1ZXJ5XG4gICAgbGV0IGRlc3RpbmF0aW9uVGFnOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSkge1xuICAgICAgY29uc3QgcXVlcnlEZXRhaWxzID0gcXVlcnlzdHJpbmcucGFyc2UoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5RGV0YWlscy5kdCkpIHtcbiAgICAgICAgLy8gaWYgcXVlcnlEZXRhaWxzLmR0IGlzIGFuIGFycmF5LCB0aGF0IG1lYW5zIGR0IHdhcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywgd2hpY2ggaXMgbm90IHZhbGlkXG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICAgIGBkZXN0aW5hdGlvbiB0YWcgY2FuIGFwcGVhciBhdCBtb3N0IG9uY2UsIGJ1dCAke3F1ZXJ5RGV0YWlscy5kdC5sZW5ndGh9IGRlc3RpbmF0aW9uIHRhZ3Mgd2VyZSBmb3VuZGBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkVGFnID0gcGFyc2VJbnQocXVlcnlEZXRhaWxzLmR0IGFzIHN0cmluZywgMTApO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocGFyc2VkVGFnKSkge1xuICAgICAgICBkZXN0aW5hdGlvblRhZyA9IHBhcnNlZFRhZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVjb3ZlcmFibGVCYWxhbmNlLnRvTnVtYmVyKCkgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUXVhbnRpdHkgb2YgWFJQIHRvIHJlY292ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4gQ3VycmVudCBiYWxhbmNlOiAke2JhbGFuY2UudG9OdW1iZXIoKX0sIGJsb2NrY2hhaW4gcmVzZXJ2ZTogJHtyZXNlcnZlLnRvTnVtYmVyKCl9LCBzcGVuZGFibGUgYmFsYW5jZTogJHtyZWNvdmVyYWJsZUJhbGFuY2UudG9OdW1iZXIoKX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuTmFtZSA9IHBhcmFtcz8udG9rZW5OYW1lO1xuICAgIGlmICghIXRva2VuTmFtZSkge1xuICAgICAgY29uc3QgdG9rZW5QYXJhbXMgPSB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25UYWcsXG4gICAgICAgIHJlY292ZXJhYmxlQmFsYW5jZSxcbiAgICAgICAgY3VycmVudExlZGdlcixcbiAgICAgICAgb3BlbkxlZGdlckZlZSxcbiAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgYWNjb3VudExpbmVzLFxuICAgICAgICBrZXlzLFxuICAgICAgICBpc0tyc1JlY292ZXJ5LFxuICAgICAgICB1c2VyQWRkcmVzcyxcbiAgICAgICAgYmFja3VwQWRkcmVzcyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJlY292ZXJYcnBUb2tlbihwYXJhbXMsIHRva2VuTmFtZSwgdG9rZW5QYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0ge1xuICAgICAgVHJhbnNhY3Rpb25UeXBlOiAnUGF5bWVudCcsXG4gICAgICBBY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsIC8vIHNvdXJjZSBhZGRyZXNzXG4gICAgICBEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgRGVzdGluYXRpb25UYWc6IGRlc3RpbmF0aW9uVGFnLFxuICAgICAgQW1vdW50OiByZWNvdmVyYWJsZUJhbGFuY2UudG9GaXhlZCgwKSxcbiAgICAgIEZsYWdzOiAyMTQ3NDgzNjQ4LFxuICAgICAgTGFzdExlZGdlclNlcXVlbmNlOiBjdXJyZW50TGVkZ2VyICsgMTAwMDAwMCwgLy8gZ2l2ZSBpdCAxIG1pbGxpb24gbGVkZ2VycycgdGltZSAofjEgbW9udGgsIHN1aXRhYmxlIGZvciBLUlMpXG4gICAgICBGZWU6IG9wZW5MZWRnZXJGZWUudGltZXMoMykudG9GaXhlZCgwKSwgLy8gdGhlIGZhY3RvciB0aHJlZSBpcyBmb3IgdGhlIG11bHRpc2lnbmluZ1xuICAgICAgU2VxdWVuY2U6IHNlcXVlbmNlSWQsXG4gICAgfTtcbiAgICBjb25zdCB0eEpTT046IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRyYW5zYWN0aW9uKTtcblxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eEpTT04sXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFrZXlzWzBdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlcktleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleSh0eEpTT04sIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHR4SlNPTiwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVjb3ZlclhycFRva2VuKHBhcmFtcywgdG9rZW5OYW1lLCB0b2tlblBhcmFtcykge1xuICAgIGNvbnN0IHsgY3VycmVuY3ksIGlzc3VlciB9ID0gdXRpbHMuZ2V0WHJwQ3VycmVuY3lGcm9tVG9rZW5OYW1lKHRva2VuTmFtZSk7XG5cbiAgICAvLyBjb25zdCBhY2NvdW50TGluZXMgPSBKU09OLnBhcnNlKHRva2VuUGFyYW1zLmFjY291bnRMaW5lcyk7XG4gICAgLy8gY29uc3QgbGluZXMgPSBhY2NvdW50TGluZXMuYm9keS5yZXN1bHQubGluZXM7XG4gICAgY29uc3QgbGluZXMgPSB0b2tlblBhcmFtcy5hY2NvdW50TGluZXMuYm9keS5yZXN1bHQubGluZXM7XG5cbiAgICBsZXQgYW1vdW50O1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgaWYgKGxpbmUuY3VycmVuY3kgPT09IGN1cnJlbmN5ICYmIGxpbmUuYWNjb3VudCA9PT0gaXNzdWVyKSB7XG4gICAgICAgIGFtb3VudCA9IGxpbmUuYmFsYW5jZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERvZXMgbm90IGhhdmUgVHJ1c3RsaW5lIHdpdGggJHtpc3N1ZXJ9YCk7XG4gICAgfVxuICAgIGlmIChhbW91bnQgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb2VzIG5vdCBoYXZlIGZ1bmRzIHRvIHJlY292ZXJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBGTEFHX1ZBTFVFID0gMjE0NzQ4MzY0ODtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0ge1xuICAgICAgVHJhbnNhY3Rpb25UeXBlOiAnUGF5bWVudCcsXG4gICAgICBBbW91bnQ6IHtcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY3VycmVuY3ksXG4gICAgICAgIGlzc3VlcixcbiAgICAgIH0sIC8vIHNvdXJjZSBhZGRyZXNzXG4gICAgICBEZXN0aW5hdGlvbjogdG9rZW5QYXJhbXMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgRGVzdGluYXRpb25UYWc6IHRva2VuUGFyYW1zLmRlc3RpbmF0aW9uVGFnLFxuICAgICAgQWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgRmxhZ3M6IEZMQUdfVkFMVUUsXG4gICAgICBMYXN0TGVkZ2VyU2VxdWVuY2U6IHRva2VuUGFyYW1zLmN1cnJlbnRMZWRnZXIgKyAxMDAwMDAwLCAvLyBnaXZlIGl0IDEgbWlsbGlvbiBsZWRnZXJzJyB0aW1lICh+MSBtb250aCwgc3VpdGFibGUgZm9yIEtSUylcbiAgICAgIEZlZTogdG9rZW5QYXJhbXMub3BlbkxlZGdlckZlZS50aW1lcygzKS50b0ZpeGVkKDApLCAvLyB0aGUgZmFjdG9yIHRocmVlIGlzIGZvciB0aGUgbXVsdGlzaWduaW5nXG4gICAgICBTZXF1ZW5jZTogdG9rZW5QYXJhbXMuc2VxdWVuY2VJZCxcbiAgICB9O1xuICAgIGNvbnN0IHR4SlNPTjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodHJhbnNhY3Rpb24pO1xuXG4gICAgY29uc3QgeyBrZXlzLCBpc0tyc1JlY292ZXJ5LCB1c2VyQWRkcmVzcywgYmFja3VwQWRkcmVzcyB9ID0gdG9rZW5QYXJhbXM7XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcktleSA9IGtleXNbMF0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdXNlclNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhKU09OLCB1c2VyS2V5LCB7IHNpZ25BczogdXNlckFkZHJlc3MgfSk7XG5cbiAgICBsZXQgc2lnbmVkVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHVzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgha2V5c1sxXS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja3VwS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYWNrdXBLZXkgPSBrZXlzWzFdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgYmFja3VwU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleSh0eEpTT04sIGJhY2t1cEtleSwgeyBzaWduQXM6IGJhY2t1cEFkZHJlc3MgfSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHJpcHBsZS5tdWx0aXNpZ24oW3VzZXJTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb24sIGJhY2t1cFNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbl0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb246IFJlY292ZXJ5SW5mbyA9IChhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgfSkpIGFzIFJlY292ZXJ5SW5mbztcblxuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24udHhIZXggPSBzaWduZWRUcmFuc2FjdGlvbjtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG4gICAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmNvaW4gPSB0aGlzLmdldENoYWluKCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IGtleXBhaXIgZm9yIHRoaXMgY29pbi5cbiAgICogQHBhcmFtIHNlZWQgU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBYcnBLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBYcnBLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnhwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMueHB1YixcbiAgICAgIHBydjoga2V5cy54cHJ2LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iXX0=
614
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsK0NBQXlDO0FBQ3pDLDBDQUE0QjtBQUM1Qix5REFBMkM7QUFDM0MseUNBQTJCO0FBRTNCLG1EQWE4QjtBQUM5QixpREFBa0Y7QUFDbEYsdUVBQXlEO0FBQ3pELGdFQUFrRDtBQUNsRCwyQ0FBNkI7QUFjN0IsMkNBQXNEO0FBQ3RELHdEQUFnQztBQUNoQyxzREFBOEI7QUFFOUIsTUFBYSxHQUFJLFNBQVEsbUJBQVE7SUFFL0IsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxZ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QUMxRSxLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBaUIsQ0FBQztRQUVwQixzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7UUFFakQsSUFBSSxhQUFhLEVBQUU7WUFDakIsc0JBQXNCLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDcEQsc0JBQXNCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMvQztRQUNELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxJQUFhO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBVSxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQStCO1FBQ3BELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBOW9CRCxrQkE4b0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjaGVja0tyc1Byb3ZpZGVyLFxuICBnZXRCaXAzMktleXMsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgcHJvbWlzZVByb3BzLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucywgWHJwQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgcmlwcGxlQmluYXJ5Q29kZWMgZnJvbSAncmlwcGxlLWJpbmFyeS1jb2RlYyc7XG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcblxuaW1wb3J0IHtcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgRmVlSW5mbyxcbiAgSGFsZlNpZ25lZFRyYW5zYWN0aW9uLFxuICBSZWNvdmVyeUluZm8sXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCByaXBwbGUgZnJvbSAnLi9yaXBwbGUnO1xuXG5leHBvcnQgY2xhc3MgWHJwIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYcnAoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgY29pbidzIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgYmxvY2tjaGFpbiB3aGljaCBzdXBwb3J0cyB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBjb2luIGZhbWlseVxuICAgKi9cbiAgcHVibGljIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIGNvaW5cbiAgICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgd2hldGhlciBhbiBhZGRyZXNzIHN0cmluZyBpcyB2YWxpZCBmb3IgdGhpcyBjb2luXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgcHVibGljIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmZWUgaW5mbyBmcm9tIHNlcnZlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZlZUluZm8oKTogUHJvbWlzZTxGZWVJbmZvPiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2ZlZWluZm8nKSkucmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gdHhQcmVidWlsZFxuICAgKiAtIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxIYWxmU2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHtcbiAgICB0eFByZWJ1aWxkLFxuICAgIHBydixcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gIH06IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEhhbGZTaWduZWRUcmFuc2FjdGlvbiB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSB8fCAhXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZCBtdXN0IGJlIGFuIG9iamVjdCwgZ290IHR5cGUgJHt0eXBlb2YgdHhQcmVidWlsZH1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikgfHwgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBydikgJiYgIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBydiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgdHlwZSAke3R5cGVvZiBwcnZ9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcHJ2IHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgdHhIZXggaW4gdHhQcmVidWlsZGApO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoeyBwcnYgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSAoa2V5UGFpci5nZXRQcml2YXRlS2V5KCkgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB0eCA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhQcmVidWlsZC50eEhleCwgcHJpdmF0ZUtleSwge1xuICAgICAgc2lnbkFzOiBhZGRyZXNzLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgdGhlIFNESyBwcm92aWRlcyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGZvciBhbiBYUlAgdHgsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgcHJvdmlkZXMgdGhlIGZpbmFsIG9uZSBhcyB3ZWxsXG4gICAgLy8gKHJlY292ZXJpZXMpXG4gICAgaWYgKGlzTGFzdFNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH07XG4gICAgfVxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHR4LnNpZ25lZFRyYW5zYWN0aW9uIH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSaXBwbGUgcmVxdWlyZXMgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB3YWxsZXQgZ2VuZXJhdGlvbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlXG4gICAqIHRoZSByb290IHB1YmxpYyBrZXksIHdoaWNoIGlzIHRoZSBiYXNpcyBvZiB0aGUgcm9vdCBhZGRyZXNzLCB0d28gc2lnbmVkLCBhbmQgb25lIGhhbGYtc2lnbmVkIGluaXRpYWxpemF0aW9uIHR4c1xuICAgKiBAcGFyYW0gd2FsbGV0UGFyYW1zXG4gICAqIC0gcm9vdFByaXZhdGVLZXk6IG9wdGlvbmFsIGhleC1lbmNvZGVkIFJpcHBsZSBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5KSB7XG4gICAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290UHJpdmF0ZUtleSBuZWVkcyB0byBiZSBhIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFhycEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBpZiAoIWtleVBhaXIucHJ2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5ID0ga2V5UGFpci5wcnY7XG4gICAgfVxuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zID0ge30pOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb247XG4gICAgbGV0IHR4SGV4OiBzdHJpbmcgPSBwYXJhbXMudHhIZXggfHwgKChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCkgYXMgc3RyaW5nKTtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gdHhIZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uID0gcmlwcGxlQmluYXJ5Q29kZWMuZGVjb2RlKHR4SGV4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UodHhIZXgpO1xuICAgICAgICB0eEhleCA9IHJpcHBsZUJpbmFyeUNvZGVjLmVuY29kZSh0cmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbmVlZHMgdG8gYmUgZWl0aGVyIGhleCBvciBKU09OIHN0cmluZyBmb3IgWFJQJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIC8vIGhhc2hlcyBpZHMgYXJlIGRpZmZlcmVudCBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCB0eFxuICAgIC8vIGZpcnN0IHdlIHRyeSB0byBnZXQgdGhlIGhhc2ggaWQgYXMgaWYgaXQgaXMgc2lnbmVkLCB3aWxsIHRocm93IGlmIGl0cyBub3RcbiAgICB0cnkge1xuICAgICAgaWQgPSB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgodHhIZXgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlkID0geHJwbC5oYXNoZXMuaGFzaFR4KHR4SGV4KTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25UeXBlID09PSAnQWNjb3VudFNldCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnYWNjb3VudFNldCddLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50U2V0OiB7XG4gICAgICAgICAgbWVzc2FnZUtleTogdHJhbnNhY3Rpb24uTWVzc2FnZUtleSxcbiAgICAgICAgICBzZXRGbGFnOiB0cmFuc2FjdGlvbi5TZXRGbGFnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uVHlwZSA9PT0gJ1RydXN0U2V0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgICAnb3V0cHV0cycsXG4gICAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAgICdmZWUnLFxuICAgICAgICAgICdhY2NvdW50JyxcbiAgICAgICAgICAnbGltaXRBbW91bnQnLFxuICAgICAgICBdLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IDAsXG4gICAgICAgIGNoYW5nZUFtb3VudDogMCxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogdHJhbnNhY3Rpb24uRmVlLFxuICAgICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaXplOiB0eEhleC5sZW5ndGggLyAyLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50OiB0cmFuc2FjdGlvbi5BY2NvdW50LFxuICAgICAgICBsaW1pdEFtb3VudDoge1xuICAgICAgICAgIGN1cnJlbmN5OiB0cmFuc2FjdGlvbi5MaW1pdEFtb3VudC5jdXJyZW5jeSxcbiAgICAgICAgICBpc3N1ZXI6IHRyYW5zYWN0aW9uLkxpbWl0QW1vdW50Lmlzc3VlcixcbiAgICAgICAgICB2YWx1ZTogdHJhbnNhY3Rpb24uTGltaXRBbW91bnQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgdHJhbnNhY3Rpb24uRGVzdGluYXRpb24gKyAodHJhbnNhY3Rpb24uRGVzdGluYXRpb25UYWcgPj0gMCA/ICc/ZHQ9JyArIHRyYW5zYWN0aW9uLkRlc3RpbmF0aW9uVGFnIDogJycpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ10sXG4gICAgICBpZDogaWQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dEFtb3VudDogdHJhbnNhY3Rpb24uQW1vdW50LFxuICAgICAgY2hhbmdlQW1vdW50OiAwLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0cmFuc2FjdGlvbi5GZWUsXG4gICAgICAgIGZlZVJhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogdHhIZXgubGVuZ3RoIC8gMixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0gdHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gdHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSB3YWxsZXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9OiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkgYXMgWHJwQ29pbjtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmV4cGxhbmF0aW9uLm91dHB1dHMsIC4uLmV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNdWzBdO1xuICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50cyAmJiB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuXG4gICAgY29uc3QgY29tcGFyYXRvciA9IChyZWNpcGllbnQxLCByZWNpcGllbnQyKSA9PiB7XG4gICAgICBpZiAocmVjaXBpZW50MS5hZGRyZXNzICE9PSByZWNpcGllbnQyLmFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYW1vdW50MSA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50MS5hbW91bnQpO1xuICAgICAgY29uc3QgYW1vdW50MiA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50Mi5hbW91bnQpO1xuICAgICAgcmV0dXJuIGFtb3VudDEudG9GaXhlZCgpID09PSBhbW91bnQyLnRvRml4ZWQoKTtcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgKHR4UGFyYW1zLnR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eFBhcmFtcy50eXBlID09PSAncGF5bWVudCcpICYmXG4gICAgICB0eXBlb2Ygb3V0cHV0LmFtb3VudCAhPT0gJ29iamVjdCcgJiZcbiAgICAgICFjb21wYXJhdG9yKG91dHB1dCwgZXhwZWN0ZWRPdXRwdXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGlmICh0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nKSB7XG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgcmVjaXBpZW50IGlzIGFsbG93ZWQuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgaWYgKCFyZWNpcGllbnQudG9rZW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50IG11c3QgaW5jbHVkZSBhIHRva2VuIG5hbWUuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNpcGllbnRDdXJyZW5jeSA9IHV0aWxzLmdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZShyZWNpcGllbnQudG9rZW5OYW1lKS5jdXJyZW5jeTtcbiAgICAgIGlmIChjb2luQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgICAgaWYgKHJlY2lwaWVudEN1cnJlbmN5ICE9PSBjb2luQ29uZmlnLmN1cnJlbmN5Q29kZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHRva2VuIG5hbWUgc3BlY2lmaWVkIGluIHJlY2lwaWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoJ2FjY291bnQnIGluIGV4cGxhbmF0aW9uKSB8fCAhKCdsaW1pdEFtb3VudCcgaW4gZXhwbGFuYXRpb24pIHx8ICFleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGxhbmF0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQga2V5cyAoYWNjb3VudCBvciBsaW1pdEFtb3VudCB3aXRoIGN1cnJlbmN5KScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZUFkZHJlc3MgPSBleHBsYW5hdGlvbi5hY2NvdW50O1xuICAgICAgY29uc3QgY3VycmVuY3kgPSBleHBsYW5hdGlvbi5saW1pdEFtb3VudC5jdXJyZW5jeTtcblxuICAgICAgaWYgKHJlY2lwaWVudC5hZGRyZXNzICE9PSBiYXNlQWRkcmVzcyB8fCByZWNpcGllbnRDdXJyZW5jeSAhPT0gY3VycmVuY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIGEgdmFsaWQgWFJQIGFkZHJlc3MsIGFuZCB0aGVuIG1ha2Ugc3VyZSB0aGUgcm9vdCBhZGRyZXNzZXMgbWF0Y2guXG4gICAqIFRoaXMgcHJldmVudHMgYXR0YWNrcyB3aGVyZSBhbiBhdHRhY2sgbWF5IHN3aXRjaCBvdXQgdGhlIG5ldyBhZGRyZXNzIGZvciBvbmUgb2YgdGhlaXIgb3duXG4gICAqIEBwYXJhbSBhZGRyZXNzIHtTdHJpbmd9IHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gcm9vdEFkZHJlc3Mge1N0cmluZ30gdGhlIHdhbGxldCdzIHJvb3QgYWRkcmVzc1xuICAgKiBAcmV0dXJuIHRydWUgaWZmIGFkZHJlc3MgaXMgYSB3YWxsZXQgYWRkcmVzcyAoYmFzZWQgb24gcm9vdEFkZHJlc3MpXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlsdXJlOiBhZGRyZXNzIFwiJHthZGRyZXNzfVwiIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuXG4gICAgaWYgKGFkZHJlc3NEZXRhaWxzLmFkZHJlc3MgIT09IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3NEZXRhaWxzLmFkZHJlc3N9IHZzLiAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVVJMIG9mIGEgd2VsbC1rbm93biwgcHVibGljIGZhY2luZyAobm9uLWJpdGdvKSByaXBwbGVkIGluc3RhbmNlIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvdmVyeVxuICAgKi9cbiAgcHVibGljIGdldFJpcHBsZWRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vczEucmlwcGxlLmNvbTo1MTIzNCc7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gcm9vdEFkZHJlc3M6IHJvb3QgWFJQIHdhbGxldCBhZGRyZXNzIHRvIHJlY292ZXIgZnVuZHMgZnJvbVxuICAgKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnZcbiAgICogLSBiYWNrdXBLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWIgaWYgdGhlIHhwcnYgaXMgaGVsZCBieSBhIEtSUyBwcm92aWRlclxuICAgKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICAgKiAtIGJpdGdvS2V5OiB4cHViXG4gICAqIC0ga3JzUHJvdmlkZXI6IG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gICAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmlwcGxlZFVybCA9IHRoaXMuZ2V0UmlwcGxlZFVybCgpO1xuICAgIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSAmJiAhcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmIHBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKTtcblxuICAgIGNvbnN0IGFjY291bnRJbmZvUGFyYW1zID0ge1xuICAgICAgbWV0aG9kOiAnYWNjb3VudF9pbmZvJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ2N1cnJlbnQnLFxuICAgICAgICAgIHF1ZXVlOiB0cnVlLFxuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBzaWduZXJfbGlzdHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50TGluZXNQYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdhY2NvdW50X2xpbmVzJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGxlZGdlcl9pbmRleDogJ3ZhbGlkYXRlZCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgY2hlY2tLcnNQcm92aWRlcih0aGlzLCBwYXJhbXMua3JzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MhJyk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IGdldEJpcDMyS2V5cyh0aGlzLmJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCB7IGFkZHJlc3NEZXRhaWxzLCBmZWVEZXRhaWxzLCBzZXJ2ZXJEZXRhaWxzLCBhY2NvdW50TGluZXMgfSA9IGF3YWl0IHByb21pc2VQcm9wcyh7XG4gICAgICBhZGRyZXNzRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoYWNjb3VudEluZm9QYXJhbXMpLFxuICAgICAgZmVlRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdmZWUnIH0pLFxuICAgICAgc2VydmVyRGV0YWlsczogdGhpcy5iaXRnby5wb3N0KHJpcHBsZWRVcmwpLnNlbmQoeyBtZXRob2Q6ICdzZXJ2ZXJfaW5mbycgfSksXG4gICAgICBhY2NvdW50TGluZXM6IHRoaXMuYml0Z28ucG9zdChyaXBwbGVkVXJsKS5zZW5kKGFjY291bnRMaW5lc1BhcmFtcyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcGVuTGVkZ2VyRmVlID0gbmV3IEJpZ051bWJlcihmZWVEZXRhaWxzLmJvZHkucmVzdWx0LmRyb3BzLm9wZW5fbGVkZ2VyX2ZlZSk7XG4gICAgY29uc3QgYmFzZVJlc2VydmUgPSBuZXcgQmlnTnVtYmVyKHNlcnZlckRldGFpbHMuYm9keS5yZXN1bHQuaW5mby52YWxpZGF0ZWRfbGVkZ2VyLnJlc2VydmVfYmFzZV94cnApLnRpbWVzKFxuICAgICAgdGhpcy5nZXRCYXNlRmFjdG9yKClcbiAgICApO1xuICAgIGNvbnN0IHJlc2VydmVEZWx0YSA9IG5ldyBCaWdOdW1iZXIoc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIucmVzZXJ2ZV9pbmNfeHJwKS50aW1lcyhcbiAgICAgIHRoaXMuZ2V0QmFzZUZhY3RvcigpXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGVkZ2VyID0gc2VydmVyRGV0YWlscy5ib2R5LnJlc3VsdC5pbmZvLnZhbGlkYXRlZF9sZWRnZXIuc2VxO1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuU2VxdWVuY2U7XG4gICAgY29uc3QgYmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIoYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLkJhbGFuY2UpO1xuICAgIGNvbnN0IHNpZ25lckxpc3RzID0gYWRkcmVzc0RldGFpbHMuYm9keS5yZXN1bHQuYWNjb3VudF9kYXRhLnNpZ25lcl9saXN0cztcbiAgICBjb25zdCBhY2NvdW50RmxhZ3MgPSBhZGRyZXNzRGV0YWlscy5ib2R5LnJlc3VsdC5hY2NvdW50X2RhdGEuRmxhZ3M7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgc2lnbmVyIGxpc3Qgc2V0XG4gICAgaWYgKHNpZ25lckxpc3RzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNldCBvZiBzaWduZXIgbGlzdHMnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHNpZ25lcnMgYXJlIHVzZXIsIGJhY2t1cCwgYml0Z29cbiAgICBjb25zdCB1c2VyQWRkcmVzcyA9IHJpcHBsZUtleXBhaXJzLmRlcml2ZUFkZHJlc3Moa2V5c1swXS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBjb25zdCBiYWNrdXBBZGRyZXNzID0gcmlwcGxlS2V5cGFpcnMuZGVyaXZlQWRkcmVzcyhrZXlzWzFdLnB1YmxpY0tleS50b1N0cmluZygnaGV4JykpO1xuXG4gICAgY29uc3Qgc2lnbmVyTGlzdCA9IHNpZ25lckxpc3RzWzBdO1xuICAgIGlmIChzaWduZXJMaXN0LlNpZ25lclF1b3J1bSAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1pbmltdW0gc2lnbmF0dXJlIGNvdW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kQWRkcmVzc2VzID0ge307XG5cbiAgICBjb25zdCBzaWduZXJFbnRyaWVzID0gc2lnbmVyTGlzdC5TaWduZXJFbnRyaWVzO1xuICAgIGlmIChzaWduZXJFbnRyaWVzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciBsaXN0IGxlbmd0aCcpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgU2lnbmVyRW50cnkgfSBvZiBzaWduZXJFbnRyaWVzKSB7XG4gICAgICBjb25zdCB3ZWlnaHQgPSBTaWduZXJFbnRyeS5TaWduZXJXZWlnaHQ7XG4gICAgICBjb25zdCBhZGRyZXNzID0gU2lnbmVyRW50cnkuQWNjb3VudDtcbiAgICAgIGlmICh3ZWlnaHQgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25lciB3ZWlnaHQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgaXQncyBhIGR1cGUgb2YgYW4gYWRkcmVzcyB3ZSBhbHJlYWR5IGtub3csIGJsb2NrXG4gICAgICBpZiAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPj0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBzaWduZXIgYWRkcmVzcycpO1xuICAgICAgfVxuICAgICAgZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gPSAoZm91bmRBZGRyZXNzZXNbYWRkcmVzc10gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGlmIChmb3VuZEFkZHJlc3Nlc1t1c2VyQWRkcmVzc10gIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBpbmNpZGVuY2UgZnJlcXVlbmN5IG9mIHVzZXIgc2lnbmVyIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKGZvdW5kQWRkcmVzc2VzW2JhY2t1cEFkZHJlc3NdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgaW5jaWRlbmNlIGZyZXF1ZW5jeSBvZiB1c2VyIHNpZ25lciBhZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBmbGFncyBkaXNhYmxlIHRoZSBtYXN0ZXIga2V5IGFuZCBlbmZvcmNlIGRlc3RpbmF0aW9uIHRhZ3NcbiAgICBjb25zdCBVU0VSX0tFWV9TRVRUSU5HX0ZMQUcgPSA2NTUzNjtcbiAgICBjb25zdCBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHID0gMTA0ODU3NjtcbiAgICBjb25zdCBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHID0gMTMxMDcyO1xuICAgIGlmICgoYWNjb3VudEZsYWdzICYgVVNFUl9LRVlfU0VUVElOR19GTEFHKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhIGN1c3RvbSB1c2VyIGtleSBoYXMgYmVlbiBzZXQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBNQVNURVJfS0VZX0RFQUNUSVZBVElPTl9GTEFHKSAhPT0gTUFTVEVSX0tFWV9ERUFDVElWQVRJT05fRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgbWFzdGVyIGtleSBoYXMgbm90IGJlZW4gZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG4gICAgaWYgKChhY2NvdW50RmxhZ3MgJiBSRVFVSVJFX0RFU1RJTkFUSU9OX1RBR19GTEFHKSAhPT0gUkVRVUlSRV9ERVNUSU5BVElPTl9UQUdfRkxBRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgZGVzdGluYXRpb24gZmxhZyByZXF1aXJlbWVudCBoYXMgbm90IGJlZW4gYWN0aXZhdGVkJyk7XG4gICAgfVxuXG4gICAgLy8gcmVjb3ZlciB0aGUgZnVuZHNcbiAgICBjb25zdCByZXNlcnZlID0gYmFzZVJlc2VydmUucGx1cyhyZXNlcnZlRGVsdGEpO1xuICAgIGNvbnN0IHJlY292ZXJhYmxlQmFsYW5jZSA9IGJhbGFuY2UubWludXMocmVzZXJ2ZSk7XG5cbiAgICBjb25zdCByYXdEZXN0aW5hdGlvbiA9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uRGV0YWlscyA9IHVybC5wYXJzZShyYXdEZXN0aW5hdGlvbik7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lO1xuXG4gICAgLy8gcGFyc2UgZGVzdGluYXRpb24gdGFnIGZyb20gcXVlcnlcbiAgICBsZXQgZGVzdGluYXRpb25UYWc6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLmR0KSkge1xuICAgICAgICAvLyBpZiBxdWVyeURldGFpbHMuZHQgaXMgYW4gYXJyYXksIHRoYXQgbWVhbnMgZHQgd2FzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBub3QgdmFsaWRcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoXG4gICAgICAgICAgYGRlc3RpbmF0aW9uIHRhZyBjYW4gYXBwZWFyIGF0IG1vc3Qgb25jZSwgYnV0ICR7cXVlcnlEZXRhaWxzLmR0Lmxlbmd0aH0gZGVzdGluYXRpb24gdGFncyB3ZXJlIGZvdW5kYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZWRUYWcgPSBwYXJzZUludChxdWVyeURldGFpbHMuZHQgYXMgc3RyaW5nLCAxMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwYXJzZWRUYWcpKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uVGFnID0gcGFyc2VkVGFnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNvdmVyYWJsZUJhbGFuY2UudG9OdW1iZXIoKSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBRdWFudGl0eSBvZiBYUlAgdG8gcmVjb3ZlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBDdXJyZW50IGJhbGFuY2U6ICR7YmFsYW5jZS50b051bWJlcigpfSwgYmxvY2tjaGFpbiByZXNlcnZlOiAke3Jlc2VydmUudG9OdW1iZXIoKX0sIHNwZW5kYWJsZSBiYWxhbmNlOiAke3JlY292ZXJhYmxlQmFsYW5jZS50b051bWJlcigpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW5OYW1lID0gcGFyYW1zPy50b2tlbk5hbWU7XG4gICAgaWYgKCEhdG9rZW5OYW1lKSB7XG4gICAgICBjb25zdCB0b2tlblBhcmFtcyA9IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRhZyxcbiAgICAgICAgcmVjb3ZlcmFibGVCYWxhbmNlLFxuICAgICAgICBjdXJyZW50TGVkZ2VyLFxuICAgICAgICBvcGVuTGVkZ2VyRmVlLFxuICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICBhY2NvdW50TGluZXMsXG4gICAgICAgIGtleXMsXG4gICAgICAgIGlzS3JzUmVjb3ZlcnksXG4gICAgICAgIHVzZXJBZGRyZXNzLFxuICAgICAgICBiYWNrdXBBZGRyZXNzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMucmVjb3ZlclhycFRva2VuKHBhcmFtcywgdG9rZW5OYW1lLCB0b2tlblBhcmFtcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7XG4gICAgICBUcmFuc2FjdGlvblR5cGU6ICdQYXltZW50JyxcbiAgICAgIEFjY291bnQ6IHBhcmFtcy5yb290QWRkcmVzcywgLy8gc291cmNlIGFkZHJlc3NcbiAgICAgIERlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBEZXN0aW5hdGlvblRhZzogZGVzdGluYXRpb25UYWcsXG4gICAgICBBbW91bnQ6IHJlY292ZXJhYmxlQmFsYW5jZS50b0ZpeGVkKDApLFxuICAgICAgRmxhZ3M6IDIxNDc0ODM2NDgsXG4gICAgICBMYXN0TGVkZ2VyU2VxdWVuY2U6IGN1cnJlbnRMZWRnZXIgKyAxMDAwMDAwLCAvLyBnaXZlIGl0IDEgbWlsbGlvbiBsZWRnZXJzJyB0aW1lICh+MSBtb250aCwgc3VpdGFibGUgZm9yIEtSUylcbiAgICAgIEZlZTogb3BlbkxlZGdlckZlZS50aW1lcygzKS50b0ZpeGVkKDApLCAvLyB0aGUgZmFjdG9yIHRocmVlIGlzIGZvciB0aGUgbXVsdGlzaWduaW5nXG4gICAgICBTZXF1ZW5jZTogc2VxdWVuY2VJZCxcbiAgICB9O1xuICAgIGNvbnN0IHR4SlNPTjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodHJhbnNhY3Rpb24pO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHR4SlNPTixcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLZXkgPSBrZXlzWzBdLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHR4SlNPTiwgdXNlcktleSwgeyBzaWduQXM6IHVzZXJBZGRyZXNzIH0pO1xuXG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBzdHJpbmc7XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSB1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWtleXNbMV0ucHJpdmF0ZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhY2t1cEtleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFja3VwS2V5ID0ga2V5c1sxXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJhY2t1cFNpZ25hdHVyZSA9IHJpcHBsZS5zaWduV2l0aFByaXZhdGVLZXkodHhKU09OLCBiYWNrdXBLZXksIHsgc2lnbkFzOiBiYWNrdXBBZGRyZXNzIH0pO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSByaXBwbGUubXVsdGlzaWduKFt1c2VyU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uLCBiYWNrdXBTaWduYXR1cmUuc2lnbmVkVHJhbnNhY3Rpb25dKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIH0pKSBhcyBSZWNvdmVyeUluZm87XG5cbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLnR4SGV4ID0gc2lnbmVkVHJhbnNhY3Rpb247XG5cbiAgICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5iYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5O1xuICAgICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyWHJwVG9rZW4ocGFyYW1zLCB0b2tlbk5hbWUsIHRva2VuUGFyYW1zKSB7XG4gICAgY29uc3QgeyBjdXJyZW5jeSwgaXNzdWVyIH0gPSB1dGlscy5nZXRYcnBDdXJyZW5jeUZyb21Ub2tlbk5hbWUodG9rZW5OYW1lKTtcblxuICAgIC8vIGNvbnN0IGFjY291bnRMaW5lcyA9IEpTT04ucGFyc2UodG9rZW5QYXJhbXMuYWNjb3VudExpbmVzKTtcbiAgICAvLyBjb25zdCBsaW5lcyA9IGFjY291bnRMaW5lcy5ib2R5LnJlc3VsdC5saW5lcztcbiAgICBjb25zdCBsaW5lcyA9IHRva2VuUGFyYW1zLmFjY291bnRMaW5lcy5ib2R5LnJlc3VsdC5saW5lcztcblxuICAgIGxldCBhbW91bnQ7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBpZiAobGluZS5jdXJyZW5jeSA9PT0gY3VycmVuY3kgJiYgbGluZS5hY2NvdW50ID09PSBpc3N1ZXIpIHtcbiAgICAgICAgYW1vdW50ID0gbGluZS5iYWxhbmNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRG9lcyBub3QgaGF2ZSBUcnVzdGxpbmUgd2l0aCAke2lzc3Vlcn1gKTtcbiAgICB9XG4gICAgaWYgKGFtb3VudCA9PT0gJzAnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERvZXMgbm90IGhhdmUgZnVuZHMgdG8gcmVjb3ZlcmApO1xuICAgIH1cblxuICAgIGNvbnN0IEZMQUdfVkFMVUUgPSAyMTQ3NDgzNjQ4O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7XG4gICAgICBUcmFuc2FjdGlvblR5cGU6ICdQYXltZW50JyxcbiAgICAgIEFtb3VudDoge1xuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjdXJyZW5jeSxcbiAgICAgICAgaXNzdWVyLFxuICAgICAgfSwgLy8gc291cmNlIGFkZHJlc3NcbiAgICAgIERlc3RpbmF0aW9uOiB0b2tlblBhcmFtcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBEZXN0aW5hdGlvblRhZzogdG9rZW5QYXJhbXMuZGVzdGluYXRpb25UYWcsXG4gICAgICBBY2NvdW50OiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICBGbGFnczogRkxBR19WQUxVRSxcbiAgICAgIExhc3RMZWRnZXJTZXF1ZW5jZTogdG9rZW5QYXJhbXMuY3VycmVudExlZGdlciArIDEwMDAwMDAsIC8vIGdpdmUgaXQgMSBtaWxsaW9uIGxlZGdlcnMnIHRpbWUgKH4xIG1vbnRoLCBzdWl0YWJsZSBmb3IgS1JTKVxuICAgICAgRmVlOiB0b2tlblBhcmFtcy5vcGVuTGVkZ2VyRmVlLnRpbWVzKDMpLnRvRml4ZWQoMCksIC8vIHRoZSBmYWN0b3IgdGhyZWUgaXMgZm9yIHRoZSBtdWx0aXNpZ25pbmdcbiAgICAgIFNlcXVlbmNlOiB0b2tlblBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgIH07XG4gICAgY29uc3QgdHhKU09OOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0cmFuc2FjdGlvbik7XG5cbiAgICBjb25zdCB7IGtleXMsIGlzS3JzUmVjb3ZlcnksIHVzZXJBZGRyZXNzLCBiYWNrdXBBZGRyZXNzIH0gPSB0b2tlblBhcmFtcztcblxuICAgIGlmICgha2V5c1swXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXJLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyS2V5ID0ga2V5c1swXS5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gcmlwcGxlLnNpZ25XaXRoUHJpdmF0ZUtleSh0eEpTT04sIHVzZXJLZXksIHsgc2lnbkFzOiB1c2VyQWRkcmVzcyB9KTtcblxuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhY2t1cEtleSA9IGtleXNbMV0ucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBiYWNrdXBTaWduYXR1cmUgPSByaXBwbGUuc2lnbldpdGhQcml2YXRlS2V5KHR4SlNPTiwgYmFja3VwS2V5LCB7IHNpZ25BczogYmFja3VwQWRkcmVzcyB9KTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gcmlwcGxlLm11bHRpc2lnbihbdXNlclNpZ25hdHVyZS5zaWduZWRUcmFuc2FjdGlvbiwgYmFja3VwU2lnbmF0dXJlLnNpZ25lZFRyYW5zYWN0aW9uXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuXG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHNpZ25lZFRyYW5zYWN0aW9uO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcbiAgICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFhycEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IFhycEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICBpZiAoIWtleXMueHBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy54cHViLFxuICAgICAgcHJ2OiBrZXlzLnhwcnYsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiJdfQ==