@bitgo/abstract-utxo 10.7.0 → 10.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +0 -7
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +1 -16
  4. package/dist/cjs/src/address/fixedScript.d.ts +2 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +11 -6
  7. package/dist/cjs/src/keychains.d.ts +6 -2
  8. package/dist/cjs/src/keychains.d.ts.map +1 -1
  9. package/dist/cjs/src/keychains.js +33 -1
  10. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  11. package/dist/cjs/src/recovery/backupKeyRecovery.js +20 -13
  12. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  13. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  14. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +1 -1
  15. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  16. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  17. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +42 -18
  18. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +14 -5
  19. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  20. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +61 -38
  21. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +9 -6
  23. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -1
  24. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +37 -6
  25. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  26. package/dist/esm/abstractUtxoCoin.d.ts +0 -7
  27. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  28. package/dist/esm/abstractUtxoCoin.js +1 -16
  29. package/dist/esm/address/fixedScript.d.ts +2 -4
  30. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  31. package/dist/esm/address/fixedScript.js +12 -7
  32. package/dist/esm/keychains.d.ts +6 -2
  33. package/dist/esm/keychains.d.ts.map +1 -1
  34. package/dist/esm/keychains.js +32 -1
  35. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  36. package/dist/esm/recovery/backupKeyRecovery.js +20 -13
  37. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  38. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  39. package/dist/esm/transaction/descriptor/explainPsbt.js +1 -1
  40. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  41. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  42. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +42 -18
  43. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +14 -5
  44. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  45. package/dist/esm/transaction/fixedScript/explainTransaction.js +61 -38
  46. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  47. package/dist/esm/transaction/fixedScript/parseOutput.js +9 -6
  48. package/package.json +10 -10
@@ -356,13 +356,6 @@ export declare abstract class AbstractUtxoCoin extends BaseCoin {
356
356
  * @param params
357
357
  */
358
358
  explainTransaction<TNumber extends number | bigint = number>(params: ExplainTransactionOptions<TNumber>): Promise<TransactionExplanation>;
359
- /**
360
- * Create a multisig address of a given type from a list of keychains and a signing threshold
361
- * @param addressType
362
- * @param signatureThreshold
363
- * @param keys
364
- */
365
- createMultiSigAddress(addressType: ScriptType2Of3, signatureThreshold: number, keys: Buffer[]): MultiSigAddress;
366
359
  /**
367
360
  * @deprecated - use {@see backupKeyRecovery}
368
361
  * Builds a funds recovery transaction without BitGo
@@ -1 +1 @@
1
- {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAoC,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,SAAS,EAGT,cAAc,EAEd,OAAO,EACP,gBAAgB,EAGhB,YAAY,EAEZ,uBAAuB,IAAI,2BAA2B,EACtD,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,IAAI,0BAA0B,EACpD,+BAA+B,EAC/B,iBAAiB,IAAI,qBAAqB,EAC1C,mBAAmB,IAAI,uBAAuB,EAC9C,MAAM,EAEN,mBAAmB,EACnB,oBAAoB,IAAI,wBAAwB,EAChD,wBAAwB,IAAI,4BAA4B,EACxD,MAAM,EAGP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAG1B,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAS3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAI1D,OAAO,EAAoB,UAAU,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAKhB,QAAQ,GAGR,MAAM,GAGN,WAAW,CAAC;AAEhB,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,QAAQ,EAAE,QAAQ;CAG/B;AAED,KAAK,yBAAyB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI;IAChE,CAAC,MAAM,EAAE;QACP,IAAI,EAAE,SAAS,CAAC;QAChB,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB;;;;;;;;;;;;;;;WAeG;QACH,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,GAAG,eAAe,CAAC;KACnE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChC,CAAC;AAIF,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAgDhF,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAC1D,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAE3B,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AAElD,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,6BAA6B,CAAC;AAEnF,MAAM,WAAW,oBAAoB,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,wBAAwB;IAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IACvE,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,kCAAkC,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAC1F,SAAQ,yBAAyB,CAAC,OAAO,CAAC;IAC1C,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;AAE1C,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,uBAAuB;IAC5G,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,2BAA2B;IACpH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iCAAkC,SAAQ,sBAAsB;IAC/E,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,mBAAmB,GAAG,6BAA6B,CAAC;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,KAAK,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,0BAA0B,GAAG;IAC3G,6CAA6C;IAC7C,UAAU,EAAE;QACV;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,uGAAuG;IACvG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,8BAA8B,CAAC,OAAO,CAAC,GACpH,CACI;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;CACjD,GACD;IACE,WAAW,EAAE,eAAe,CAAC;CAC9B,CACJ,CAAC;AAEJ,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,gBAAgB,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAChF,SAAQ,4BAA4B;IACpC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8BAAsB,gBAAiB,SAAQ,QAAQ;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAC7C,SAAgB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAE,QAAQ,GAAG,QAAmB;IAY5G,IAAI,OAAO,oBAEV;IAED,QAAQ;IAIR,SAAS;IAIT,WAAW;IAIX,yDAAyD;IACzD,mBAAmB;IAWnB,iBAAiB,IAAI,OAAO;IAI5B,kBAAkB;IAClB,MAAM,KAAK,iBAAiB,IAAI,cAAc,EAAE,CAE/C;IAED;;;OAGG;IACH,aAAa;IAIb;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,sBAAsB,CAAC,OAAO,GAAG,OAAO;IAuBzG;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM;IAQtB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAcvE;;;OAGG;IACG,oBAAoB,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlE,cAAc,CAAC,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAO7E;;;OAGG;IACG,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvD,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACrC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAQxC;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,GAAG,IAAI;IAIjF,wBAAwB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC/D,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;IAIzC,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;IAyBvG,6BAA6B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE;QACvE,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,kBAAkB,CAAC,OAAO,CAAC;IAQ/B,+BAA+B,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAClF,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;IAUD;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC7D,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAItC;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO;IAI1E;;OAEG;IACI,kBAAkB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO;IAItE;;;;;;;;;;;;;;;OAeG;IACG,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC9D,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;;;;;;;;OAWG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4CzG;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO;IAIzD,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI5C,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ5E;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQzF;;;;OAIG;IACG,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC5D,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;IAIzD;;;;;;OAMG;IACG,6BAA6B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACjE,qBAAqB,EAAE,yBAAyB,CAAC,OAAO,CAAC,EACzD,qBAAqB,EAAE;QAAE,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACnF,OAAO,CAAC,iBAAiB,CAAC;IA2C7B;;;OAGG;IACH,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAI1F;;;;OAIG;IACY,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACxE,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,GACzC,OAAO,CAAC,sBAAsB,CAAC;IAIlC;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC;IAIpE,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC;IAI1E,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC;IAIhE;;;;;;;;;;;;OAYG;IACG,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAClE,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IA+BnF;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAc3D;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IA4B9E,sBAAsB,CAAC,WAAW,EAAE,0BAA0B,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAClG,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,iBAAiB,CAAC,EAAE,cAAc,EAAE,GAAG,cAAc,CAAC;KACvD,CAAC;IAoBF,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAI7C,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBnE,wBAAwB,CAC5B,YAAY,EAAE,+BAA+B,EAC7C,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,GAAG,CAAC;IAIf,sBAAsB,IAAI,OAAO;IAIjC,wBAAwB,IAAI,OAAO;IAInC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAIxD,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE;;;;KAAA;CAcnD"}
@@ -427,21 +427,6 @@ export class AbstractUtxoCoin extends BaseCoin {
427
427
  async explainTransaction(params) {
428
428
  return explainTx(this.decodeTransactionFromPrebuild(params), params, this.network);
429
429
  }
430
- /**
431
- * Create a multisig address of a given type from a list of keychains and a signing threshold
432
- * @param addressType
433
- * @param signatureThreshold
434
- * @param keys
435
- */
436
- createMultiSigAddress(addressType, signatureThreshold, keys) {
437
- const { scriptPubKey: outputScript, redeemScript, witnessScript, } = utxolib.bitgo.outputScripts.createOutputScript2of3(keys, addressType);
438
- return {
439
- outputScript,
440
- redeemScript,
441
- witnessScript,
442
- address: utxolib.address.fromOutputScript(outputScript, this.network),
443
- };
444
- }
445
430
  /**
446
431
  * @deprecated - use {@see backupKeyRecovery}
447
432
  * Builds a funds recovery transaction without BitGo
@@ -601,4 +586,4 @@ export class AbstractUtxoCoin extends BaseCoin {
601
586
  }
602
587
  }
603
588
  }
604
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUVMLFFBQVEsRUFNUixxQ0FBcUMsRUFDckMsbUJBQW1CLEVBRW5CLFFBQVEsRUFHUixVQUFVLEVBR1YsYUFBYSxFQVdiLDhCQUE4QixFQUs5QixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixPQUFPLEVBQ1AsaUJBQWlCLEVBR2pCLG1CQUFtQixFQUVuQixPQUFPLEdBRVIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsU0FBUyxFQUNULHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiw0QkFBNEIsR0FDN0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsMEJB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ekMsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuaW1wb3J0IHsgYml0Z28sIGdldE1haW5uZXQsIGlzTWFpbm5ldCwgaXNUZXN0bmV0IH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIEFkZHJlc3NDb2luU3BlY2lmaWMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIENyZWF0ZUFkZHJlc3NGb3JtYXQsXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBJQmFzZUNvaW4sXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uUGFyYW1zIGFzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCBhcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVHJpcGxlLFxuICBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IsXG4gIFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFdhbGxldCxcbiAgaXNWYWxpZFBydixcbiAgaXNWYWxpZFhwcnYsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5LFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBmb3JDb2luLFxuICByZWNvdmVyQ3Jvc3NDaGFpbixcbiAgUmVjb3ZlclBhcmFtcyxcbiAgUmVjb3ZlcnlQcm92aWRlcixcbiAgdjFCYWNrdXBLZXlSZWNvdmVyeSxcbiAgVjFSZWNvdmVyUGFyYW1zLFxuICB2MVN3ZWVwLFxuICBWMVN3ZWVwUGFyYW1zLFxufSBmcm9tICcuL3JlY292ZXJ5JztcbmltcG9ydCB7IGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBleHBsYWluVHgsXG4gIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQsXG4gIGlzU2NyaXB0UmVjaXBpZW50LFxuICBwYXJzZVRyYW5zYWN0aW9uLFxuICB2ZXJpZnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBnZXRDaGFpbkZyb21OZXR3b3JrLCBnZXRGYW1pbHlGcm9tTmV0d29yaywgZ2V0RnVsbE5hbWVGcm9tTmV0d29yayB9IGZyb20gJy4vbmFtZXMnO1xuaW1wb3J0IHsgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5cbmltcG9ydCBTY3JpcHRUeXBlMk9mMyA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPVxuICAvLyBUaGlzIGlzIGEgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBhcm91bmQgdGhlIGJpdGNvaW5qcy1saWIgc2VyaWFsaXphdGlvbiBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgLy8gZG9lcyBub3QgaW5jbHVkZSBwcmV2T3V0IGRhdGEgYW5kIGlzIGEgYml0IHBhaW5mdWwgdG8gd29yayB3aXRoXG4gIC8vIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcHNidFxuICAvLyBAZGVwcmVjYXRlZFxuICB8ICdsZWdhY3knXG4gIC8vIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBzYnQgZm9ybWF0LCBpbmNsdWRpbmcgdGhlIGZ1bGwgcHJldlR4IGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMuXG4gIC8vIFRoaXMgd2lsbCByZW1haW4gc3VwcG9ydGVkIGJ1dCBpcyBub3QgdGhlIGRlZmF1bHQsIHNpbmNlIHRoZSBkYXRhIHNpemVzIGNhbiBiZWNvbWUgcHJvaGliaXRpdmVseSBsYXJnZS5cbiAgfCAncHNidCdcbiAgLy8gVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHBzYnQgdmVyc2lvbiB3aGVyZSBsZWdhY3kgaW5wdXRzIGFyZSBzZXJpYWxpemVkIGFzIGlmIHRoZXkgd2VyZSBzZWd3aXQgaW5wdXRzLlxuICAvLyBXaGlsZSB0aGlzIHByZXZlbnRzIHVzIHRvIGZ1bGx5IHZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZmVlLCB3ZSBoYXZlIG90aGVyIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIGZlZSBpcyB3aXRoaW4gYm91bmRzLlxuICB8ICdwc2J0LWxpdGUnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR4Rm9ybWF0OiBUeEZvcm1hdCkge1xuICAgIHN1cGVyKGBTREsgc3VwcG9ydCBmb3IgdHhGb3JtYXQ9JHt0eEZvcm1hdH0gaXMgZGVwcmVjYXRlZCBvbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIHBzYnQgaW5zdGVhZC5gKTtcbiAgfVxufVxuXG50eXBlIFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB7XG4gIChwYXJhbXM6IHtcbiAgICBjb2luOiBJQmFzZUNvaW47XG4gICAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogc2lnbmluZ1N0ZXAgZmxhZyBiZWNvbWVzIGFwcGxpY2FibGUgd2hlbiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICAgICAqIDEpIFdoZW4gdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZFxuICAgICAqIDIpIFdoZW4gdGhlIFBTQlQgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQuXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmluZyBwcm9jZXNzIG9mIGEgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dCBpcyBhIDQtc3RlcCBzZXF1ZW5jZTpcbiAgICAgKiBpKSB1c2VyIG5vbmNlIGdlbmVyYXRpb24gLSBzaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWkpIGJpdGdvIG5vbmNlIGdlbmVyYXRpb24gLSBjb3NpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBsb2NhbCBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaWkpIHVzZXIgc2lnbmF0dXJlIC0gc2lnbmVyU2lnbmF0dXJlIC0gdGhpcyBpcyB0aGUgc2Vjb25kIGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaXYpIGJpdGdvIHNpZ25hdHVyZSAtIG5vdCBpbiBzaWduVHJhbnNhY3Rpb24gbWV0aG9k4oCZcyBzY29wZVxuICAgICAqXG4gICAgICogSW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBmbGFnLCB0aGUgYWZvcmVtZW50aW9uZWQgZmlyc3QgdGhyZWUgc2VxdWVuY2UgaXMgZXhlY3V0ZWQgaW4gYSBzaW5nbGUgc2lnblRyYW5zYWN0aW9uIGNhbGwuXG4gICAgICpcbiAgICAgKiBOT1RFOiBXZSBtYWtlIGEgc3Ryb25nIGFzc3VtcHRpb24gdGhhdCB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgYW5kIGl0cyBjYWxsZXIgdXNlcyBzdGlja3kgc2Vzc2lvbnMsXG4gICAgICogc2luY2UgUFNCVHMgYXJlIGNhY2hlZCBpbiBzdGVwIDEgdG8gYmUgdXNlZCBpbiBzdGVwIDMgZm9yIE11U2lnMiB1c2VyIHNlY3VyZSBub25jZSBhY2Nlc3MuXG4gICAgICovXG4gICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCAnY29zaWduZXJOb25jZSc7XG4gIH0pOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcbn07XG5cbmNvbnN0IHsgaXNDaGFpbkNvZGUsIHNjcmlwdFR5cGVGb3JDaGFpbiwgb3V0cHV0U2NyaXB0cyB9ID0gYml0Z287XG5cbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3Ige1xuICBjb25zdCBtaXNtYXRjaGVkUmVjaXBpZW50czogTWlzbWF0Y2hlZFJlY2lwaWVudFtdID0gW107XG5cbiAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3IuZXJyb3JzKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yTWlzc2luZ091dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5taXNzaW5nT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHhJbnRlbnRFcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IoXG4gICAgZXJyb3IubWVzc2FnZSxcbiAgICByZXFJZCxcbiAgICBbdHhQYXJhbXNdLFxuICAgIHR4SGV4LFxuICAgIG1pc21hdGNoZWRSZWNpcGllbnRzXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9XG4gIHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj5cbiAgfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuXG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICByYmZUeElkcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG4gIHZlcmlmaWNhdGlvbj86IFZlcmlmaWNhdGlvbk9wdGlvbnM7XG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjM7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBmb3JtYXQ/OiBDcmVhdGVBZGRyZXNzRm9ybWF0O1xuICBrZXljaGFpbnM6IHtcbiAgICBwdWI6IHN0cmluZztcbiAgICBhc3BLZXlJZD86IHN0cmluZztcbiAgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZHJlc3NEZXRhaWxzIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luOiBzdHJpbmc7XG4gIGNvaW5TcGVjaWZpYzogQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuICBhZGRyZXNzVHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYyBleHRlbmRzIEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBkZXNjcmlwdG9yTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdG9yQ2hlY2tzdW06IHN0cmluZztcbn1cblxudHlwZSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyAmIHtcbiAgLyoqIFRyYW5zYWN0aW9uIHByZWJ1aWxkIGZyb20gYml0Z28gc2VydmVyICovXG4gIHR4UHJlYnVpbGQ6IHtcbiAgICAvKipcbiAgICAgKiB3YWxsZXRJZCBpcyByZXF1aXJlZCBpbiBmb2xsb3dpbmcgMiBzY2VuYXJpb3MuXG4gICAgICogMS4gRXh0ZXJuYWwgc2lnbmVyIGV4cHJlc3MgbW9kZSBpcyB1c2VkLlxuICAgICAqIDIuIGJpdGdvIE11U2lnMiBub25jZSBpcyByZXF1ZXN0ZWRcbiAgICAgKi9cbiAgICB3YWxsZXRJZD86IHN0cmluZztcbiAgICB0eEhleDogc3RyaW5nO1xuICAgIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgfTtcbiAgLyoqIHhwdWJzIHRyaXBsZSBmb3Igd2FsbGV0ICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gUmVxdWlyZWQgb25seSB3aGVuIHR4UHJlYnVpbGQudHhIZXggaXMgbm90IGEgUFNCVCAqL1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIC8qKiB4cHViIGZvciBjb3NpZ25lciAoZGVmYXVsdHMgdG8gYml0Z28pICovXG4gIGNvc2lnbmVyUHViPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBjcmVhdGVzIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGhvdXQgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICogV2hlbiBmYWxzZSwgY3JlYXRlcyBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqL1xuICBpc0xhc3RTaWduYXR1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgYWxsb3dzIHNpZ25pbmcgYSBub24tc2Vnd2l0IGlucHV0IHdpdGggYSB3aXRuZXNzVXR4byBpbnN0ZWFkIHJlcXVpcmluZyBhIHByZXZpb3VzXG4gICAqIHRyYW5zYWN0aW9uIChub25XaXRuZXNzVXR4bylcbiAgICovXG4gIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg/OiBib29sZWFuO1xuICB3YWxsZXQ/OiBVdHhvV2FsbGV0O1xufTtcblxuZXhwb3J0IHR5cGUgU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgcHJ2OiBzdHJpbmc7XG4gICAgICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnO1xuICAgICAgfVxuICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2lnQWRkcmVzcyB7XG4gIG91dHB1dFNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zIHtcbiAgdHhpZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHhwcnY/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICByZWNvdmVyeUNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICBzaWduZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zIHtcbiAgdXNlcktleWNoYWluOiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXljaGFpblRvVmVyaWZ5OiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXlTaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbj86IFV0eG9LZXljaGFpbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXF1ZXN0IHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVzcG9uc2Uge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFV0eG9Db2luIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwdWJsaWMgYWx0U2NyaXB0SGFzaD86IG51bWJlcjtcbiAgcHVibGljIHN1cHBvcnRBbHRTY3JpcHREZXN0aW5hdGlvbj86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaywgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghdXR4b2xpYi5pc1ZhbGlkTmV0d29yayhuZXR3b3JrKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnaW52YWxpZCBuZXR3b3JrOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIG9mICcgK1xuICAgICAgICAgICdAYml0Z28vdXR4by1saWIgYXMgdGhpcyBsaWJyYXJ5IHdoZW4gaW5pdGlhbGl6aW5nIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmFtb3VudFR5cGUgPSBhbW91bnRUeXBlO1xuICAgIHRoaXMuX25ldHdvcmsgPSBuZXR3b3JrO1xuICB9XG5cbiAgZ2V0IG5ldHdvcmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25ldHdvcms7XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gZ2V0Q2hhaW5Gcm9tTmV0d29yayh0aGlzLm5ldHdvcmspO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCkge1xuICAgIHJldHVybiBnZXRGYW1pbHlGcm9tTmV0d29yayh0aGlzLm5ldHdvcmspO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIGdldEZ1bGxOYW1lRnJvbU5ldHdvcmsodGhpcy5uZXR3b3JrKTtcbiAgfVxuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29pbiBzdXBwb3J0cyBhIGJsb2NrIHRhcmdldCAqL1xuICBzdXBwb3J0c0Jsb2NrVGFyZ2V0KCkge1xuICAgIC8vIEZJWE1FOiB0aGUgU0RLIGRvZXMgbm90IHNlZW0gdG8gdXNlIHRoaXMgYW55d2hlcmUgc28gaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzXG4gICAgc3dpdGNoIChnZXRNYWlubmV0KHRoaXMubmV0d29yaykpIHtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luOlxuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzdGF0aWMgZ2V0IHZhbGlkQWRkcmVzc1R5cGVzKCk6IFNjcmlwdFR5cGUyT2YzW10ge1xuICAgIHJldHVybiBbLi4ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKSB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBwYXJhbT86IHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCAvKiBsZWdhY3kgcGFyYW1ldGVyICovIGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGFsbG93IGFsbCBhZGRyZXNzIGZvcm1hdHMuXG4gICAgLy8gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIG9ubHkgYWRkaXRpb25hbCBhZGRyZXNzIGZvcm1hdCBpcyBiY2ggY2FzaGFkZHIuXG4gICAgY29uc3QgYW55Rm9ybWF0ID0gKHBhcmFtIGFzIHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbnlGb3JtYXQgPz8gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCBvdXQgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIGFueSBmb3JtYXQuIFRyaWVzIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cyBieSBkZWZhdWx0LlxuICAgICAgLy8gVGhyb3dzIGlmIGFkZHJlc3MgY2Fubm90IGJlIGRlY29kZWQgd2l0aCBhbnkgZm9ybWF0LlxuICAgICAgY29uc3QgW2Zvcm1hdCwgc2NyaXB0XSA9IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b091dHB1dFNjcmlwdEFuZEZvcm1hdChhZGRyZXNzLCB0aGlzLm5ldHdvcmspO1xuICAgICAgLy8gdW5sZXNzIGFueUZvcm1hdCBpcyBzZXQsIG9ubHkgJ2RlZmF1bHQnIGlzIGFsbG93ZWQuXG4gICAgICBpZiAoIWFueUZvcm1hdCAmJiBmb3JtYXQgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhZGRyZXNzIGlzIGluIG5vcm1hbCByZXByZXNlbnRhdGlvbiBmb3IgZ2l2ZW4gZm9ybWF0LlxuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChzY3JpcHQsIGZvcm1hdCwgdGhpcy5uZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmlwMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoYWRkcmVzcykgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IGJsb2NrIGhlaWdodFxuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJsb2NrSGVpZ2h0KHJlcUlkPzogUmVxdWVzdFRyYWNlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIH1cbiAgICBjb25zdCBjaGFpbmhlYWQgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9ibG9jay9sYXRlc3QnKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIChjaGFpbmhlYWQgYXMgYW55KS5oZWlnaHQ7XG4gIH1cblxuICBjaGVja1JlY2lwaWVudChyZWNpcGllbnQ6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmICghaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IHR4LnRvSGV4KCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbikgPyBzY3JpcHRUeXBlRm9yQ2hhaW4oYWRkcmVzc0RldGFpbHMuY2hhaW4pIDogbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBoZXg6IHN0cmluZ1xuICApOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXI+KGhleCwgdGhpcy5uZXR3b3JrLCB0aGlzLmFtb3VudFR5cGUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIFsnaGV4JywgJ2Jhc2U2NCddIGFzIGNvbnN0KSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGlucHV0LCBmb3JtYXQpO1xuICAgICAgICBjb25zdCBidWZmZXJUb1N0cmluZyA9IGJ1ZmZlci50b1N0cmluZyhmb3JtYXQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1hdCA9PT0gJ2Jhc2U2NCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0KSB8fFxuICAgICAgICAgIChmb3JtYXQgPT09ICdoZXgnICYmIGJ1ZmZlclRvU3RyaW5nID09PSBpbnB1dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihidWZmZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgbXVzdCBiZSBhIHZhbGlkIGhleCBvciBiYXNlNjQgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0eG9saWIuYml0Z28uaXNQc2J0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoaW5wdXQsIHRoaXMubmV0d29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihpbnB1dCwgdGhpcy5uZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6IHRoaXMuYW1vdW50VHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHByZWJ1aWxkOiB7XG4gICAgdHhIZXg/OiBzdHJpbmc7XG4gICAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4ID8/IHByZWJ1aWxkLnR4QmFzZTY0O1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggb3IgdHhCYXNlNjQgcHJvcGVydHknKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oc3RyaW5nKTtcbiAgfVxuXG4gIHRvQ2Fub25pY2FsVHJhbnNhY3Rpb25SZWNpcGllbnQob3V0cHV0OiB7IHZhbHVlU3RyaW5nOiBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfSk6IHtcbiAgICBhbW91bnQ6IGJpZ2ludDtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IGFtb3VudCA9IEJpZ0ludChvdXRwdXQudmFsdWVTdHJpbmcpO1xuICAgIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQoeyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH0pO1xuICAgIGFzc2VydChvdXRwdXQuYWRkcmVzcywgJ2FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4geyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH07XG4gICAgfVxuICAgIHJldHVybiB7IGFtb3VudCwgYWRkcmVzczogdGhpcy5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYW5kIGZpbGwgdHJhbnNhY3Rpb24gZGV0YWlscyBzdWNoIGFzIGludGVybmFsL2NoYW5nZSBzcGVuZCwgZXh0ZXJuYWwgc3BlbmQgKGV4cGxpY2l0IHZzLiBpbXBsaWNpdCksIGV0Yy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24odGhpcywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5IGluc3RlYWRcbiAgICovXG4gIHByb3RlY3RlZCB2ZXJpZnlVc2VyUHVibGljS2V5KHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5VXNlclB1YmxpY0tleSh0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeUtleVNpZ25hdHVyZSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtczogVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBzZXJ2ZXJcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4IHByZWJ1aWx0IHRyYW5zYWN0aW9uJ3MgdHhIZXggZm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCBXYWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uIE9iamVjdCBzcGVjaWZ5aW5nIHNvbWUgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgRGlzYWxsb3cgZmV0Y2hpbmcgYW55IGRhdGEgZnJvbSB0aGUgaW50ZXJuZXQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5rZXljaGFpbnMgUGFzcyBrZXljaGFpbnMgbWFudWFsbHkgcmF0aGVyIHRoYW4gZmV0Y2hpbmcgdGhlbSBieSBpZFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5hZGRyZXNzZXMgQWRkcmVzcyBkZXRhaWxzIHRvIHBhc3MgaW4gZm9yIG91dC1vZi1iYW5kIHZlcmlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3J9IGlmIHRyYW5zYWN0aW9uIHJlY2lwaWVudHMgZG9uJ3QgbWF0Y2ggdXNlciBpbnRlbnRcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHRocm93IGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goZXJyb3IsIHBhcmFtcy5yZXFJZCwgcGFyYW1zLnR4UGFyYW1zLCBwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIGFuIGFkZHJlc3MgaXMgdmFsaWQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90LlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3Mgc3RyaW5nIG9uIHRoZSBuZXR3b3JrXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzc1R5cGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgS2V5Y2hhaW4gb2JqZWN0cyB3aXRoIHhwdWJzXG4gICAqIEBwYXJhbSBwYXJhbXMuY29pblNwZWNpZmljIENvaW4tc3BlY2lmaWMgZGV0YWlscyBmb3IgdGhlIGFkZHJlc3Mgc3VjaCBhcyBhIHdpdG5lc3Mgc2NyaXB0XG4gICAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gRGVyaXZhdGlvbiBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLmluZGV4IERlcml2YXRpb24gaW5kZXhcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn1cbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcn1cbiAgICogQHRocm93cyB7VW5leHBlY3RlZEFkZHJlc3NFcnJvcn1cbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zPFV0eG9Db2luU3BlY2lmaWM+LCB3YWxsZXQ/OiBJV2FsbGV0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMsIGNoYWluLCBpbmRleCB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKHdhbGxldCAmJiBpc0Rlc2NyaXB0b3JXYWxsZXQod2FsbGV0KSkge1xuICAgICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1RyaXBsZShrZXljaGFpbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzKFxuICAgICAgICB0aGlzLm5ldHdvcmssXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB0b0JpcDMyVHJpcGxlKGtleWNoYWlucyksIGdldFBvbGljeUZvckVudih0aGlzLmJpdGdvLmVudikpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKChfLmlzVW5kZWZpbmVkKGNoYWluKSAmJiBfLmlzVW5kZWZpbmVkKGluZGV4KSkgfHwgIShfLmlzRmluaXRlKGNoYWluKSAmJiBfLmlzRmluaXRlKGluZGV4KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyh0aGlzLm5ldHdvcmssIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBrZXljaGFpbnMsXG4gICAgICBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ2Jhc2U1OCcsXG4gICAgICBhZGRyZXNzVHlwZTogcGFyYW1zLmFkZHJlc3NUeXBlLFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzVHlwZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gdW5zcGVudFR5cGVcbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc1R5cGUoYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1N1cHBvcnRlZFNjcmlwdFR5cGUodGhpcy5uZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHJldHVybiB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gY2hhaW5cbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc0NoYWluKGNoYWluOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoY2hhaW4pICYmIHRoaXMuc3VwcG9ydHNBZGRyZXNzVHlwZSh1dHhvbGliLmJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVIsIEtleUluZGljZXMuQkFDS1VQLCBLZXlJbmRpY2VzLkJJVEdPXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidEhleCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZywgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8U2lnblBzYnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBhcmFtczogU2lnblBzYnRSZXF1ZXN0ID0geyBwc2J0OiBwc2J0SGV4IH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKCcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHgvc2lnbnBzYnQnKSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzIGZyb20gT1ZDLlxuICAgKiBAcGFyYW0gb3ZjSnNvbiBKU09OIG9iamVjdCBwcm92aWRlZCBieSBPVkMgd2l0aCBmaWVsZHMgcHNidEhleCBhbmQgd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0RnJvbU9WQyhvdmNKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBhc3NlcnQob3ZjSnNvblsncHNidEhleCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gcHNidEhleCcpO1xuICAgIGFzc2VydChvdmNKc29uWyd3YWxsZXRJZCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gd2FsbGV0SWQnKTtcbiAgICBjb25zdCBwc2J0ID0gKGF3YWl0IHRoaXMuc2lnblBzYnQob3ZjSnNvblsncHNidEhleCddIGFzIHN0cmluZywgb3ZjSnNvblsnd2FsbGV0SWQnXSBhcyBzdHJpbmcpKS5wc2J0O1xuICAgIGFzc2VydChwc2J0LCAncHNidCBub3QgZm91bmQnKTtcbiAgICByZXR1cm4gXy5leHRlbmQob3ZjSnNvbiwgeyB0eEhleDogcHNidCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzIChmb3IgbGVnYWN5IHR4IG9ubHkpLlxuICAgKlxuICAgKiBAcmV0dXJucyBzaWduZWQgdHJhbnNhY3Rpb24gYXMgaGV4IHN0cmluZ1xuICAgKi9cbiAgYXN5bmMgc2lnbldpdGhDdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uOiBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXI+LFxuICAgIHNpZ25UcmFuc2FjdGlvblBhcmFtczogeyB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+OyBwdWJzPzogc3RyaW5nW10gfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBzaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBhc3NlcnQodHhIZXgsICdtaXNzaW5nIHR4SGV4IHBhcmFtZXRlcicpO1xuXG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHR4SGV4KTtcblxuICAgIGNvbnN0IGlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQgPSB0eCBpbnN0YW5jZW9mIGJpdGdvLlV0eG9Qc2J0ICYmIGJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgdGhpcy5uZXR3b3JrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIHJldHVybiBleHBsYWluVHgodGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMpLCBwYXJhbXMsIHRoaXMubmV0d29yayk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbXVsdGlzaWcgYWRkcmVzcyBvZiBhIGdpdmVuIHR5cGUgZnJvbSBhIGxpc3Qgb2Yga2V5Y2hhaW5zIGFuZCBhIHNpZ25pbmcgdGhyZXNob2xkXG4gICAqIEBwYXJhbSBhZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlVGhyZXNob2xkXG4gICAqIEBwYXJhbSBrZXlzXG4gICAqL1xuICBjcmVhdGVNdWx0aVNpZ0FkZHJlc3MoYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzLCBzaWduYXR1cmVUaHJlc2hvbGQ6IG51bWJlciwga2V5czogQnVmZmVyW10pOiBNdWx0aVNpZ0FkZHJlc3Mge1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcmlwdFB1YktleTogb3V0cHV0U2NyaXB0LFxuICAgICAgcmVkZWVtU2NyaXB0LFxuICAgICAgd2l0bmVzc1NjcmlwdCxcbiAgICB9ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoa2V5cywgYWRkcmVzc1R5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dFNjcmlwdCxcbiAgICAgIHJlZGVlbVNjcmlwdCxcbiAgICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvdXRwdXRTY3JpcHQsIHRoaXMubmV0d29yayksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zIC0ge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIGJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIGJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyByZWNvdmVyVjEocGFyYW1zOiBWMVJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MUJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIHYxQmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHN3ZWVwVjEocGFyYW1zOiBWMVN3ZWVwUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFTd2VlcD4ge1xuICAgIHJldHVybiB2MVN3ZWVwKHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBjb2luIHRoYXQgd2FzIHNlbnQgdG8gd3JvbmcgY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4aWQgVGhlIHR4aWQgb2YgdGhlIGZhdWx0eSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyBhZGRyZXNzIHRvIHNlbmQgcmVjb3ZlcmVkIGZ1bmRzIHRvXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUNvaW4gdGhlIGNvaW4gdHlwZSBvZiB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMuc2lnbmVkIHJldHVybiBhIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIChkZWZhdWx0PXRydWUpXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHBhcmFtcy54cHJ2IHRoZSB1bmVuY3J5cHRlZCB4cHJ2ICh1c2VkIGluc3RlYWQgb2Ygd2FsbGV0IHBhc3NwaHJhc2UpXG4gICAqIEBwYXJhbSBwYXJhbXMuYXBpS2V5IGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFJlY292ZXJGcm9tV3JvbmdDaGFpbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHsgdHhpZCwgcmVjb3ZlcnlBZGRyZXNzLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UsIHhwcnYsIGFwaUtleSB9ID0gcGFyYW1zO1xuXG4gICAgLy8gcGFyYW1zLnJlY292ZXJ5Q29pbiB1c2VkIHRvIGJlIHBhcmFtcy5jb2luLCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IHJlY292ZXJ5Q29pbiA9IHBhcmFtcy5jb2luIHx8IHBhcmFtcy5yZWNvdmVyeUNvaW47XG4gICAgaWYgKCFyZWNvdmVyeUNvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBvYmplY3QgcmVjb3ZlcnlDb2luJyk7XG4gICAgfVxuICAgIC8vIHNpZ25lZCBzaG91bGQgZGVmYXVsdCB0byB0cnVlLCBhbmQgb25seSBiZSBkaXNhYmxlZCBpZiBleHBsaWNpdGx5IHNldCB0byBmYWxzZSAobm90IHVuZGVmaW5lZClcbiAgICBjb25zdCBzaWduZWQgPSBwYXJhbXMuc2lnbmVkICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IHNvdXJjZUNvaW5GYW1pbHkgPSB0aGlzLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHJlY292ZXJ5Q29pbkZhbWlseSA9IHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zID0gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbkZhbWlseV07XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zKSB8fCAhc3VwcG9ydGVkUmVjb3ZlcnlDb2lucy5pbmNsdWRlcyhyZWNvdmVyeUNvaW5GYW1pbHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY292ZXJ5IG9mICR7c291cmNlQ29pbkZhbWlseX0gYmFsYW5jZXMgZnJvbSAke3JlY292ZXJ5Q29pbkZhbWlseX0gd2FsbGV0cyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCByZWNvdmVyQ3Jvc3NDaGFpbjxUTnVtYmVyPih0aGlzLmJpdGdvLCB7XG4gICAgICBzb3VyY2VDb2luOiB0aGlzLFxuICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldCxcbiAgICAgIHR4aWQsXG4gICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBzaWduZWQgPyB3YWxsZXRQYXNzcGhyYXNlIDogdW5kZWZpbmVkLFxuICAgICAgeHBydjogc2lnbmVkID8geHBydiA6IHVuZGVmaW5lZCxcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBiaXAzMiBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkOiBCdWZmZXIpOiB7IHB1Yjogc3RyaW5nOyBwcnY6IHN0cmluZyB9IHtcbiAgICBpZiAoIXNlZWQpIHtcbiAgICAgIC8vIEFuIGV4dGVuZGVkIHByaXZhdGUga2V5IGhhcyBib3RoIGEgbm9ybWFsIDI1NiBiaXQgcHJpdmF0ZSBrZXkgYW5kIGEgMjU2XG4gICAgICAvLyBiaXQgY2hhaW4gY29kZSwgYm90aCBvZiB3aGljaCBtdXN0IGJlIHJhbmRvbS4gNTEyIGJpdHMgaXMgdGhlcmVmb3JlIHRoZVxuICAgICAgLy8gbWF4aW11bSBlbnRyb3B5IGFuZCBnaXZlcyB1cyBtYXhpbXVtIHNlY3VyaXR5IGFnYWluc3QgY3JhY2tpbmcuXG4gICAgICBzZWVkID0gcmFuZG9tQnl0ZXMoNTEyIC8gOCk7XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuZGVkS2V5ID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogZXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgcHJ2OiBleHRlbmRlZEtleS50b0Jhc2U1OCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgb24gd2FsbGV0IHByb3BlcnRpZXMgYW5kIG5ldHdvcmtcbiAgICogQHBhcmFtIHdhbGxldCAtIFRoZSB3YWxsZXQgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlcXVlc3RlZEZvcm1hdCAtIE9wdGlvbmFsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gZm9ybWF0IHRvIHVzZSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRlZmF1bHQgYXBwbGllc1xuICAgKi9cbiAgZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldDogV2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQ/OiBUeEZvcm1hdCk6IFR4Rm9ybWF0IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBJZiBmb3JtYXQgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBpdFxuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGlzVGVzdG5ldCh0aGlzLm5ldHdvcmspICYmIHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVGVzdG5ldCh0aGlzLm5ldHdvcmspKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FsbGV0RmxhZ011c2lnS3AgPSB3YWxsZXQuZmxhZygnbXVzaWdLcCcpID09PSAndHJ1ZSc7XG4gICAgY29uc3QgaXNIb3RXYWxsZXQgPSB3YWxsZXQudHlwZSgpID09PSAnaG90JztcblxuICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgZGVmYXVsdCB0byBwc2J0IGZvcm1hdFxuICAgIGNvbnN0IHNob3VsZERlZmF1bHRUb1BzYnQgPVxuICAgICAgd2FsbGV0LnN1YlR5cGUoKSA9PT0gJ2Rpc3RyaWJ1dGVkQ3VzdG9keScgfHxcbiAgICAgIC8vIGlmIG1haW5uZXQsIG9ubHkgZGVmYXVsdCB0byBwc2J0IGZvciBidGMgaG90IHdhbGxldHNcbiAgICAgIChpc01haW5uZXQodGhpcy5uZXR3b3JrKSAmJiBnZXRNYWlubmV0KHRoaXMubmV0d29yaykgPT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbiAmJiBpc0hvdFdhbGxldCkgfHxcbiAgICAgIC8vIGRlZmF1bHQgdG8gcHNidCBpZiBpdCBoYXMgdGhlIHdhbGxldCBmbGFnXG4gICAgICB3YWxsZXRGbGFnTXVzaWdLcDtcblxuICAgIHJldHVybiBzaG91bGREZWZhdWx0VG9Qc2J0ID8gJ3BzYnQnIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtczogRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMgJiB7IHdhbGxldDogV2FsbGV0IH0pOiBQcm9taXNlPHtcbiAgICB0eEZvcm1hdD86IFR4Rm9ybWF0O1xuICAgIGNoYW5nZUFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzO1xuICB9PiB7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIGJ1aWxkUGFyYW1zLnR4Rm9ybWF0IGFzIFR4Rm9ybWF0IHwgdW5kZWZpbmVkKTtcbiAgICBsZXQgY2hhbmdlQWRkcmVzc1R5cGUgPSBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSBhcyBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjMgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGUgYWRkcmVzc1R5cGUgaXMgbm90IHNwZWNpZmllZCwgd2UgbmVlZCB0byBkZWZhdWx0IHRvIHAydHJNdXNpZzIgZm9yIHRlc3RuZXQgaG90IHdhbGxldHMgZm9yIHN0YWdlZCByb2xsb3V0IG9mIHAydHJNdXNpZzJcbiAgICBpZiAoXG4gICAgICBidWlsZFBhcmFtcy5hZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmIC8vIGFkZHJlc3NUeXBlIGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IGBjaGFuZ2VBZGRyZXNzYFxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy53YWxsZXQudHlwZSgpID09PSAnaG90J1xuICAgICkge1xuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBbJ3AydHJNdXNpZzInLCAncDJ3c2gnLCAncDJzaFAyd3NoJywgJ3Ayc2gnLCAncDJ0ciddO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgIH07XG4gIH1cblxuICBwcmVDcmVhdGVCaXRHbyhwYXJhbXM6IFByZWNyZWF0ZUJpdEdvT3B0aW9ucyk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5jIHByZXNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChwYXJhbXMud2FsbGV0RGF0YSAmJiBpc1V0eG9XYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSAmJiBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSkge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgLy8gSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGEgJ3BzYnQtbGl0ZScgdHJhbnNhY3Rpb24gZm9ybWF0LCB3ZSB3YW50IHRvIGluZGljYXRlIGluIHNpZ25pbmcgdG8gbm90IGZhaWxcbiAgICBjb25zdCB0eEhleCA9IChwYXJhbXMudHhIZXggPz8gcGFyYW1zLnR4UHJlYnVpbGQ/LnR4SGV4KSBhcyBzdHJpbmc7XG4gICAgaWYgKFxuICAgICAgdHhIZXggJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0KHR4SGV4IGFzIHN0cmluZykgJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0TGl0ZSh1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCB0aGlzLm5ldHdvcmspKSAmJlxuICAgICAgcGFyYW1zLmFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHggPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLCBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvdmVyeVByb3ZpZGVyKGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlciB7XG4gICAgcmV0dXJuIGZvckNvaW4odGhpcy5nZXRDaGFpbigpLCBhcGlUb2tlbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoeyBtdWx0aVNpZ1R5cGUsIHB1YmxpY0tleSwgcHJ2IH0pIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlID09PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0c3MgYXVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFBydihwcnYpICYmICFpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSkge1xuICAgICAgY29uc3QgZ2VuUHViS2V5ID0gYmlwMzIuZnJvbUJhc2U1OChwcnYpLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGlmIChnZW5QdWJLZXkgIT09IHB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
589
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUVMLFFBQVEsRUFNUixxQ0FBcUMsRUFDckMsbUJBQW1CLEVBRW5CLFFBQVEsRUFHUixVQUFVLEVBR1YsYUFBYSxFQVdiLDhCQUE4QixFQUs5QixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixPQUFPLEVBQ1AsaUJBQWlCLEVBR2pCLG1CQUFtQixFQUVuQixPQUFPLEdBRVIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsU0FBUyxFQUNULHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiw0QkFBNEIsR0FDN0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsMEJB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RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyx3QkFBd0IsQ0FDNUIsWUFBNkMsRUFDN0MsU0FBMkI7UUFFM0IsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBaUI7UUFDbkMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuaW1wb3J0IHsgYml0Z28sIGdldE1haW5uZXQsIGlzTWFpbm5ldCwgaXNUZXN0bmV0IH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIEFkZHJlc3NDb2luU3BlY2lmaWMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIENyZWF0ZUFkZHJlc3NGb3JtYXQsXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBJQmFzZUNvaW4sXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uUGFyYW1zIGFzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCBhcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVHJpcGxlLFxuICBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IsXG4gIFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFdhbGxldCxcbiAgaXNWYWxpZFBydixcbiAgaXNWYWxpZFhwcnYsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5LFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBmb3JDb2luLFxuICByZWNvdmVyQ3Jvc3NDaGFpbixcbiAgUmVjb3ZlclBhcmFtcyxcbiAgUmVjb3ZlcnlQcm92aWRlcixcbiAgdjFCYWNrdXBLZXlSZWNvdmVyeSxcbiAgVjFSZWNvdmVyUGFyYW1zLFxuICB2MVN3ZWVwLFxuICBWMVN3ZWVwUGFyYW1zLFxufSBmcm9tICcuL3JlY292ZXJ5JztcbmltcG9ydCB7IGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBleHBsYWluVHgsXG4gIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQsXG4gIGlzU2NyaXB0UmVjaXBpZW50LFxuICBwYXJzZVRyYW5zYWN0aW9uLFxuICB2ZXJpZnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBnZXRDaGFpbkZyb21OZXR3b3JrLCBnZXRGYW1pbHlGcm9tTmV0d29yaywgZ2V0RnVsbE5hbWVGcm9tTmV0d29yayB9IGZyb20gJy4vbmFtZXMnO1xuaW1wb3J0IHsgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5cbmltcG9ydCBTY3JpcHRUeXBlMk9mMyA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPVxuICAvLyBUaGlzIGlzIGEgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBhcm91bmQgdGhlIGJpdGNvaW5qcy1saWIgc2VyaWFsaXphdGlvbiBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgLy8gZG9lcyBub3QgaW5jbHVkZSBwcmV2T3V0IGRhdGEgYW5kIGlzIGEgYml0IHBhaW5mdWwgdG8gd29yayB3aXRoXG4gIC8vIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcHNidFxuICAvLyBAZGVwcmVjYXRlZFxuICB8ICdsZWdhY3knXG4gIC8vIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBzYnQgZm9ybWF0LCBpbmNsdWRpbmcgdGhlIGZ1bGwgcHJldlR4IGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMuXG4gIC8vIFRoaXMgd2lsbCByZW1haW4gc3VwcG9ydGVkIGJ1dCBpcyBub3QgdGhlIGRlZmF1bHQsIHNpbmNlIHRoZSBkYXRhIHNpemVzIGNhbiBiZWNvbWUgcHJvaGliaXRpdmVseSBsYXJnZS5cbiAgfCAncHNidCdcbiAgLy8gVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHBzYnQgdmVyc2lvbiB3aGVyZSBsZWdhY3kgaW5wdXRzIGFyZSBzZXJpYWxpemVkIGFzIGlmIHRoZXkgd2VyZSBzZWd3aXQgaW5wdXRzLlxuICAvLyBXaGlsZSB0aGlzIHByZXZlbnRzIHVzIHRvIGZ1bGx5IHZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZmVlLCB3ZSBoYXZlIG90aGVyIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIGZlZSBpcyB3aXRoaW4gYm91bmRzLlxuICB8ICdwc2J0LWxpdGUnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR4Rm9ybWF0OiBUeEZvcm1hdCkge1xuICAgIHN1cGVyKGBTREsgc3VwcG9ydCBmb3IgdHhGb3JtYXQ9JHt0eEZvcm1hdH0gaXMgZGVwcmVjYXRlZCBvbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIHBzYnQgaW5zdGVhZC5gKTtcbiAgfVxufVxuXG50eXBlIFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB7XG4gIChwYXJhbXM6IHtcbiAgICBjb2luOiBJQmFzZUNvaW47XG4gICAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogc2lnbmluZ1N0ZXAgZmxhZyBiZWNvbWVzIGFwcGxpY2FibGUgd2hlbiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICAgICAqIDEpIFdoZW4gdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZFxuICAgICAqIDIpIFdoZW4gdGhlIFBTQlQgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQuXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmluZyBwcm9jZXNzIG9mIGEgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dCBpcyBhIDQtc3RlcCBzZXF1ZW5jZTpcbiAgICAgKiBpKSB1c2VyIG5vbmNlIGdlbmVyYXRpb24gLSBzaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWkpIGJpdGdvIG5vbmNlIGdlbmVyYXRpb24gLSBjb3NpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBsb2NhbCBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaWkpIHVzZXIgc2lnbmF0dXJlIC0gc2lnbmVyU2lnbmF0dXJlIC0gdGhpcyBpcyB0aGUgc2Vjb25kIGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaXYpIGJpdGdvIHNpZ25hdHVyZSAtIG5vdCBpbiBzaWduVHJhbnNhY3Rpb24gbWV0aG9k4oCZcyBzY29wZVxuICAgICAqXG4gICAgICogSW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBmbGFnLCB0aGUgYWZvcmVtZW50aW9uZWQgZmlyc3QgdGhyZWUgc2VxdWVuY2UgaXMgZXhlY3V0ZWQgaW4gYSBzaW5nbGUgc2lnblRyYW5zYWN0aW9uIGNhbGwuXG4gICAgICpcbiAgICAgKiBOT1RFOiBXZSBtYWtlIGEgc3Ryb25nIGFzc3VtcHRpb24gdGhhdCB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgYW5kIGl0cyBjYWxsZXIgdXNlcyBzdGlja3kgc2Vzc2lvbnMsXG4gICAgICogc2luY2UgUFNCVHMgYXJlIGNhY2hlZCBpbiBzdGVwIDEgdG8gYmUgdXNlZCBpbiBzdGVwIDMgZm9yIE11U2lnMiB1c2VyIHNlY3VyZSBub25jZSBhY2Nlc3MuXG4gICAgICovXG4gICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCAnY29zaWduZXJOb25jZSc7XG4gIH0pOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcbn07XG5cbmNvbnN0IHsgaXNDaGFpbkNvZGUsIHNjcmlwdFR5cGVGb3JDaGFpbiwgb3V0cHV0U2NyaXB0cyB9ID0gYml0Z287XG5cbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3Ige1xuICBjb25zdCBtaXNtYXRjaGVkUmVjaXBpZW50czogTWlzbWF0Y2hlZFJlY2lwaWVudFtdID0gW107XG5cbiAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3IuZXJyb3JzKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yTWlzc2luZ091dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5taXNzaW5nT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHhJbnRlbnRFcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IoXG4gICAgZXJyb3IubWVzc2FnZSxcbiAgICByZXFJZCxcbiAgICBbdHhQYXJhbXNdLFxuICAgIHR4SGV4LFxuICAgIG1pc21hdGNoZWRSZWNpcGllbnRzXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9XG4gIHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj5cbiAgfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuXG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICByYmZUeElkcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG4gIHZlcmlmaWNhdGlvbj86IFZlcmlmaWNhdGlvbk9wdGlvbnM7XG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjM7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBmb3JtYXQ/OiBDcmVhdGVBZGRyZXNzRm9ybWF0O1xuICBrZXljaGFpbnM6IHtcbiAgICBwdWI6IHN0cmluZztcbiAgICBhc3BLZXlJZD86IHN0cmluZztcbiAgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZHJlc3NEZXRhaWxzIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luOiBzdHJpbmc7XG4gIGNvaW5TcGVjaWZpYzogQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuICBhZGRyZXNzVHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYyBleHRlbmRzIEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBkZXNjcmlwdG9yTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdG9yQ2hlY2tzdW06IHN0cmluZztcbn1cblxudHlwZSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyAmIHtcbiAgLyoqIFRyYW5zYWN0aW9uIHByZWJ1aWxkIGZyb20gYml0Z28gc2VydmVyICovXG4gIHR4UHJlYnVpbGQ6IHtcbiAgICAvKipcbiAgICAgKiB3YWxsZXRJZCBpcyByZXF1aXJlZCBpbiBmb2xsb3dpbmcgMiBzY2VuYXJpb3MuXG4gICAgICogMS4gRXh0ZXJuYWwgc2lnbmVyIGV4cHJlc3MgbW9kZSBpcyB1c2VkLlxuICAgICAqIDIuIGJpdGdvIE11U2lnMiBub25jZSBpcyByZXF1ZXN0ZWRcbiAgICAgKi9cbiAgICB3YWxsZXRJZD86IHN0cmluZztcbiAgICB0eEhleDogc3RyaW5nO1xuICAgIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgfTtcbiAgLyoqIHhwdWJzIHRyaXBsZSBmb3Igd2FsbGV0ICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gUmVxdWlyZWQgb25seSB3aGVuIHR4UHJlYnVpbGQudHhIZXggaXMgbm90IGEgUFNCVCAqL1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIC8qKiB4cHViIGZvciBjb3NpZ25lciAoZGVmYXVsdHMgdG8gYml0Z28pICovXG4gIGNvc2lnbmVyUHViPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBjcmVhdGVzIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGhvdXQgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICogV2hlbiBmYWxzZSwgY3JlYXRlcyBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqL1xuICBpc0xhc3RTaWduYXR1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgYWxsb3dzIHNpZ25pbmcgYSBub24tc2Vnd2l0IGlucHV0IHdpdGggYSB3aXRuZXNzVXR4byBpbnN0ZWFkIHJlcXVpcmluZyBhIHByZXZpb3VzXG4gICAqIHRyYW5zYWN0aW9uIChub25XaXRuZXNzVXR4bylcbiAgICovXG4gIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg/OiBib29sZWFuO1xuICB3YWxsZXQ/OiBVdHhvV2FsbGV0O1xufTtcblxuZXhwb3J0IHR5cGUgU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgcHJ2OiBzdHJpbmc7XG4gICAgICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnO1xuICAgICAgfVxuICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2lnQWRkcmVzcyB7XG4gIG91dHB1dFNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zIHtcbiAgdHhpZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHhwcnY/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICByZWNvdmVyeUNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICBzaWduZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zIHtcbiAgdXNlcktleWNoYWluOiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXljaGFpblRvVmVyaWZ5OiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXlTaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbj86IFV0eG9LZXljaGFpbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXF1ZXN0IHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVzcG9uc2Uge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFV0eG9Db2luIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwdWJsaWMgYWx0U2NyaXB0SGFzaD86IG51bWJlcjtcbiAgcHVibGljIHN1cHBvcnRBbHRTY3JpcHREZXN0aW5hdGlvbj86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaywgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIGlmICghdXR4b2xpYi5pc1ZhbGlkTmV0d29yayhuZXR3b3JrKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnaW52YWxpZCBuZXR3b3JrOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIG9mICcgK1xuICAgICAgICAgICdAYml0Z28vdXR4by1saWIgYXMgdGhpcyBsaWJyYXJ5IHdoZW4gaW5pdGlhbGl6aW5nIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmFtb3VudFR5cGUgPSBhbW91bnRUeXBlO1xuICAgIHRoaXMuX25ldHdvcmsgPSBuZXR3b3JrO1xuICB9XG5cbiAgZ2V0IG5ldHdvcmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25ldHdvcms7XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gZ2V0Q2hhaW5Gcm9tTmV0d29yayh0aGlzLm5ldHdvcmspO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCkge1xuICAgIHJldHVybiBnZXRGYW1pbHlGcm9tTmV0d29yayh0aGlzLm5ldHdvcmspO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIGdldEZ1bGxOYW1lRnJvbU5ldHdvcmsodGhpcy5uZXR3b3JrKTtcbiAgfVxuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29pbiBzdXBwb3J0cyBhIGJsb2NrIHRhcmdldCAqL1xuICBzdXBwb3J0c0Jsb2NrVGFyZ2V0KCkge1xuICAgIC8vIEZJWE1FOiB0aGUgU0RLIGRvZXMgbm90IHNlZW0gdG8gdXNlIHRoaXMgYW55d2hlcmUgc28gaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzXG4gICAgc3dpdGNoIChnZXRNYWlubmV0KHRoaXMubmV0d29yaykpIHtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luOlxuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzdGF0aWMgZ2V0IHZhbGlkQWRkcmVzc1R5cGVzKCk6IFNjcmlwdFR5cGUyT2YzW10ge1xuICAgIHJldHVybiBbLi4ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKSB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBwYXJhbT86IHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCAvKiBsZWdhY3kgcGFyYW1ldGVyICovIGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGFsbG93IGFsbCBhZGRyZXNzIGZvcm1hdHMuXG4gICAgLy8gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIG9ubHkgYWRkaXRpb25hbCBhZGRyZXNzIGZvcm1hdCBpcyBiY2ggY2FzaGFkZHIuXG4gICAgY29uc3QgYW55Rm9ybWF0ID0gKHBhcmFtIGFzIHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbnlGb3JtYXQgPz8gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCBvdXQgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIGFueSBmb3JtYXQuIFRyaWVzIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cyBieSBkZWZhdWx0LlxuICAgICAgLy8gVGhyb3dzIGlmIGFkZHJlc3MgY2Fubm90IGJlIGRlY29kZWQgd2l0aCBhbnkgZm9ybWF0LlxuICAgICAgY29uc3QgW2Zvcm1hdCwgc2NyaXB0XSA9IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b091dHB1dFNjcmlwdEFuZEZvcm1hdChhZGRyZXNzLCB0aGlzLm5ldHdvcmspO1xuICAgICAgLy8gdW5sZXNzIGFueUZvcm1hdCBpcyBzZXQsIG9ubHkgJ2RlZmF1bHQnIGlzIGFsbG93ZWQuXG4gICAgICBpZiAoIWFueUZvcm1hdCAmJiBmb3JtYXQgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhZGRyZXNzIGlzIGluIG5vcm1hbCByZXByZXNlbnRhdGlvbiBmb3IgZ2l2ZW4gZm9ybWF0LlxuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChzY3JpcHQsIGZvcm1hdCwgdGhpcy5uZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmlwMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoYWRkcmVzcykgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IGJsb2NrIGhlaWdodFxuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJsb2NrSGVpZ2h0KHJlcUlkPzogUmVxdWVzdFRyYWNlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIH1cbiAgICBjb25zdCBjaGFpbmhlYWQgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9ibG9jay9sYXRlc3QnKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIChjaGFpbmhlYWQgYXMgYW55KS5oZWlnaHQ7XG4gIH1cblxuICBjaGVja1JlY2lwaWVudChyZWNpcGllbnQ6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmICghaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IHR4LnRvSGV4KCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbikgPyBzY3JpcHRUeXBlRm9yQ2hhaW4oYWRkcmVzc0RldGFpbHMuY2hhaW4pIDogbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBoZXg6IHN0cmluZ1xuICApOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXI+KGhleCwgdGhpcy5uZXR3b3JrLCB0aGlzLmFtb3VudFR5cGUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIFsnaGV4JywgJ2Jhc2U2NCddIGFzIGNvbnN0KSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGlucHV0LCBmb3JtYXQpO1xuICAgICAgICBjb25zdCBidWZmZXJUb1N0cmluZyA9IGJ1ZmZlci50b1N0cmluZyhmb3JtYXQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1hdCA9PT0gJ2Jhc2U2NCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0KSB8fFxuICAgICAgICAgIChmb3JtYXQgPT09ICdoZXgnICYmIGJ1ZmZlclRvU3RyaW5nID09PSBpbnB1dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihidWZmZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgbXVzdCBiZSBhIHZhbGlkIGhleCBvciBiYXNlNjQgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0eG9saWIuYml0Z28uaXNQc2J0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoaW5wdXQsIHRoaXMubmV0d29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihpbnB1dCwgdGhpcy5uZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6IHRoaXMuYW1vdW50VHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHByZWJ1aWxkOiB7XG4gICAgdHhIZXg/OiBzdHJpbmc7XG4gICAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4ID8/IHByZWJ1aWxkLnR4QmFzZTY0O1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggb3IgdHhCYXNlNjQgcHJvcGVydHknKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oc3RyaW5nKTtcbiAgfVxuXG4gIHRvQ2Fub25pY2FsVHJhbnNhY3Rpb25SZWNpcGllbnQob3V0cHV0OiB7IHZhbHVlU3RyaW5nOiBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfSk6IHtcbiAgICBhbW91bnQ6IGJpZ2ludDtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IGFtb3VudCA9IEJpZ0ludChvdXRwdXQudmFsdWVTdHJpbmcpO1xuICAgIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQoeyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH0pO1xuICAgIGFzc2VydChvdXRwdXQuYWRkcmVzcywgJ2FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4geyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH07XG4gICAgfVxuICAgIHJldHVybiB7IGFtb3VudCwgYWRkcmVzczogdGhpcy5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYW5kIGZpbGwgdHJhbnNhY3Rpb24gZGV0YWlscyBzdWNoIGFzIGludGVybmFsL2NoYW5nZSBzcGVuZCwgZXh0ZXJuYWwgc3BlbmQgKGV4cGxpY2l0IHZzLiBpbXBsaWNpdCksIGV0Yy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24odGhpcywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5IGluc3RlYWRcbiAgICovXG4gIHByb3RlY3RlZCB2ZXJpZnlVc2VyUHVibGljS2V5KHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5VXNlclB1YmxpY0tleSh0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeUtleVNpZ25hdHVyZSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtczogVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBzZXJ2ZXJcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4IHByZWJ1aWx0IHRyYW5zYWN0aW9uJ3MgdHhIZXggZm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCBXYWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uIE9iamVjdCBzcGVjaWZ5aW5nIHNvbWUgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgRGlzYWxsb3cgZmV0Y2hpbmcgYW55IGRhdGEgZnJvbSB0aGUgaW50ZXJuZXQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5rZXljaGFpbnMgUGFzcyBrZXljaGFpbnMgbWFudWFsbHkgcmF0aGVyIHRoYW4gZmV0Y2hpbmcgdGhlbSBieSBpZFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5hZGRyZXNzZXMgQWRkcmVzcyBkZXRhaWxzIHRvIHBhc3MgaW4gZm9yIG91dC1vZi1iYW5kIHZlcmlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3J9IGlmIHRyYW5zYWN0aW9uIHJlY2lwaWVudHMgZG9uJ3QgbWF0Y2ggdXNlciBpbnRlbnRcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHRocm93IGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goZXJyb3IsIHBhcmFtcy5yZXFJZCwgcGFyYW1zLnR4UGFyYW1zLCBwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIGFuIGFkZHJlc3MgaXMgdmFsaWQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90LlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3Mgc3RyaW5nIG9uIHRoZSBuZXR3b3JrXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzc1R5cGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgS2V5Y2hhaW4gb2JqZWN0cyB3aXRoIHhwdWJzXG4gICAqIEBwYXJhbSBwYXJhbXMuY29pblNwZWNpZmljIENvaW4tc3BlY2lmaWMgZGV0YWlscyBmb3IgdGhlIGFkZHJlc3Mgc3VjaCBhcyBhIHdpdG5lc3Mgc2NyaXB0XG4gICAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gRGVyaXZhdGlvbiBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLmluZGV4IERlcml2YXRpb24gaW5kZXhcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn1cbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcn1cbiAgICogQHRocm93cyB7VW5leHBlY3RlZEFkZHJlc3NFcnJvcn1cbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zPFV0eG9Db2luU3BlY2lmaWM+LCB3YWxsZXQ/OiBJV2FsbGV0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMsIGNoYWluLCBpbmRleCB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKHdhbGxldCAmJiBpc0Rlc2NyaXB0b3JXYWxsZXQod2FsbGV0KSkge1xuICAgICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1RyaXBsZShrZXljaGFpbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzKFxuICAgICAgICB0aGlzLm5ldHdvcmssXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB0b0JpcDMyVHJpcGxlKGtleWNoYWlucyksIGdldFBvbGljeUZvckVudih0aGlzLmJpdGdvLmVudikpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKChfLmlzVW5kZWZpbmVkKGNoYWluKSAmJiBfLmlzVW5kZWZpbmVkKGluZGV4KSkgfHwgIShfLmlzRmluaXRlKGNoYWluKSAmJiBfLmlzRmluaXRlKGluZGV4KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyh0aGlzLm5ldHdvcmssIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBrZXljaGFpbnMsXG4gICAgICBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ2Jhc2U1OCcsXG4gICAgICBhZGRyZXNzVHlwZTogcGFyYW1zLmFkZHJlc3NUeXBlLFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzVHlwZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gdW5zcGVudFR5cGVcbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc1R5cGUoYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1N1cHBvcnRlZFNjcmlwdFR5cGUodGhpcy5uZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHJldHVybiB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gY2hhaW5cbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc0NoYWluKGNoYWluOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoY2hhaW4pICYmIHRoaXMuc3VwcG9ydHNBZGRyZXNzVHlwZSh1dHhvbGliLmJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVIsIEtleUluZGljZXMuQkFDS1VQLCBLZXlJbmRpY2VzLkJJVEdPXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidEhleCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZywgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8U2lnblBzYnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBhcmFtczogU2lnblBzYnRSZXF1ZXN0ID0geyBwc2J0OiBwc2J0SGV4IH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKCcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHgvc2lnbnBzYnQnKSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzIGZyb20gT1ZDLlxuICAgKiBAcGFyYW0gb3ZjSnNvbiBKU09OIG9iamVjdCBwcm92aWRlZCBieSBPVkMgd2l0aCBmaWVsZHMgcHNidEhleCBhbmQgd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0RnJvbU9WQyhvdmNKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBhc3NlcnQob3ZjSnNvblsncHNidEhleCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gcHNidEhleCcpO1xuICAgIGFzc2VydChvdmNKc29uWyd3YWxsZXRJZCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gd2FsbGV0SWQnKTtcbiAgICBjb25zdCBwc2J0ID0gKGF3YWl0IHRoaXMuc2lnblBzYnQob3ZjSnNvblsncHNidEhleCddIGFzIHN0cmluZywgb3ZjSnNvblsnd2FsbGV0SWQnXSBhcyBzdHJpbmcpKS5wc2J0O1xuICAgIGFzc2VydChwc2J0LCAncHNidCBub3QgZm91bmQnKTtcbiAgICByZXR1cm4gXy5leHRlbmQob3ZjSnNvbiwgeyB0eEhleDogcHNidCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzIChmb3IgbGVnYWN5IHR4IG9ubHkpLlxuICAgKlxuICAgKiBAcmV0dXJucyBzaWduZWQgdHJhbnNhY3Rpb24gYXMgaGV4IHN0cmluZ1xuICAgKi9cbiAgYXN5bmMgc2lnbldpdGhDdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uOiBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXI+LFxuICAgIHNpZ25UcmFuc2FjdGlvblBhcmFtczogeyB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+OyBwdWJzPzogc3RyaW5nW10gfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBzaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBhc3NlcnQodHhIZXgsICdtaXNzaW5nIHR4SGV4IHBhcmFtZXRlcicpO1xuXG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHR4SGV4KTtcblxuICAgIGNvbnN0IGlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQgPSB0eCBpbnN0YW5jZW9mIGJpdGdvLlV0eG9Qc2J0ICYmIGJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgdGhpcy5uZXR3b3JrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIHJldHVybiBleHBsYWluVHgodGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMpLCBwYXJhbXMsIHRoaXMubmV0d29yayk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiBiYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3ZlclYxKHBhcmFtczogVjFSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFCYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiB2MUJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyBzd2VlcFYxKHBhcmFtczogVjFTd2VlcFBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxU3dlZXA+IHtcbiAgICByZXR1cm4gdjFTd2VlcCh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgY29pbiB0aGF0IHdhcyBzZW50IHRvIHdyb25nIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eGlkIFRoZSB0eGlkIG9mIHRoZSBmYXVsdHkgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlDb2luIHRoZSBjb2luIHR5cGUgb2YgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNpZ25lZCByZXR1cm4gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiAoZGVmYXVsdD10cnVlKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgdGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSBwYXJhbXMueHBydiB0aGUgdW5lbmNyeXB0ZWQgeHBydiAodXNlZCBpbnN0ZWFkIG9mIHdhbGxldCBwYXNzcGhyYXNlKVxuICAgKiBAcGFyYW0gcGFyYW1zLmFwaUtleSBmb3IgdXR4byBjb2lucyBvdGhlciB0aGFuIFtCVEMsVEJUQ10gdGhpcyBpcyBhIEJsb2NrIENoYWlyIGFwaSBrZXlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyByZWNvdmVyRnJvbVdyb25nQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zXG4gICk6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB7IHR4aWQsIHJlY292ZXJ5QWRkcmVzcywgd2FsbGV0LCB3YWxsZXRQYXNzcGhyYXNlLCB4cHJ2LCBhcGlLZXkgfSA9IHBhcmFtcztcblxuICAgIC8vIHBhcmFtcy5yZWNvdmVyeUNvaW4gdXNlZCB0byBiZSBwYXJhbXMuY29pbiwgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWNvdmVyeUNvaW4gPSBwYXJhbXMuY29pbiB8fCBwYXJhbXMucmVjb3ZlcnlDb2luO1xuICAgIGlmICghcmVjb3ZlcnlDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHJlY292ZXJ5Q29pbicpO1xuICAgIH1cbiAgICAvLyBzaWduZWQgc2hvdWxkIGRlZmF1bHQgdG8gdHJ1ZSwgYW5kIG9ubHkgYmUgZGlzYWJsZWQgaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UgKG5vdCB1bmRlZmluZWQpXG4gICAgY29uc3Qgc2lnbmVkID0gcGFyYW1zLnNpZ25lZCAhPT0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VDb2luRmFtaWx5ID0gdGhpcy5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCByZWNvdmVyeUNvaW5GYW1pbHkgPSByZWNvdmVyeUNvaW4uZ2V0RmFtaWx5KCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkUmVjb3ZlcnlDb2lucyA9IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzW3NvdXJjZUNvaW5GYW1pbHldO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3VwcG9ydGVkUmVjb3ZlcnlDb2lucykgfHwgIXN1cHBvcnRlZFJlY292ZXJ5Q29pbnMuaW5jbHVkZXMocmVjb3ZlcnlDb2luRmFtaWx5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNvdmVyeSBvZiAke3NvdXJjZUNvaW5GYW1pbHl9IGJhbGFuY2VzIGZyb20gJHtyZWNvdmVyeUNvaW5GYW1pbHl9IHdhbGxldHMgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlcj4odGhpcy5iaXRnbywge1xuICAgICAgc291cmNlQ29pbjogdGhpcyxcbiAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgIHdhbGxldElkOiB3YWxsZXQsXG4gICAgICB0eGlkLFxuICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbmVkID8gd2FsbGV0UGFzc3BocmFzZSA6IHVuZGVmaW5lZCxcbiAgICAgIHhwcnY6IHNpZ25lZCA/IHhwcnYgOiB1bmRlZmluZWQsXG4gICAgICBhcGlLZXksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYmlwMzIga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiBhbmQgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZDogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGV4dGVuZGVkS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIG9uIHdhbGxldCBwcm9wZXJ0aWVzIGFuZCBuZXR3b3JrXG4gICAqIEBwYXJhbSB3YWxsZXQgLSBUaGUgd2FsbGV0IHRvIGNoZWNrXG4gICAqIEBwYXJhbSByZXF1ZXN0ZWRGb3JtYXQgLSBPcHRpb25hbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBmb3JtYXRcbiAgICogQHJldHVybnMgVGhlIHRyYW5zYWN0aW9uIGZvcm1hdCB0byB1c2UsIG9yIHVuZGVmaW5lZCBpZiBubyBkZWZhdWx0IGFwcGxpZXNcbiAgICovXG4gIGdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQ6IFdhbGxldCwgcmVxdWVzdGVkRm9ybWF0PzogVHhGb3JtYXQpOiBUeEZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWYgZm9ybWF0IGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB1c2UgaXRcbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpc1Rlc3RuZXQodGhpcy5uZXR3b3JrKSAmJiByZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWVzdGVkRm9ybWF0O1xuICAgIH1cblxuICAgIGlmIChpc1Rlc3RuZXQodGhpcy5uZXR3b3JrKSkge1xuICAgICAgcmV0dXJuICdwc2J0LWxpdGUnO1xuICAgIH1cblxuICAgIGNvbnN0IHdhbGxldEZsYWdNdXNpZ0twID0gd2FsbGV0LmZsYWcoJ211c2lnS3AnKSA9PT0gJ3RydWUnO1xuICAgIGNvbnN0IGlzSG90V2FsbGV0ID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCc7XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGRlZmF1bHQgdG8gcHNidCBmb3JtYXRcbiAgICBjb25zdCBzaG91bGREZWZhdWx0VG9Qc2J0ID1cbiAgICAgIHdhbGxldC5zdWJUeXBlKCkgPT09ICdkaXN0cmlidXRlZEN1c3RvZHknIHx8XG4gICAgICAvLyBpZiBtYWlubmV0LCBvbmx5IGRlZmF1bHQgdG8gcHNidCBmb3IgYnRjIGhvdCB3YWxsZXRzXG4gICAgICAoaXNNYWlubmV0KHRoaXMubmV0d29yaykgJiYgZ2V0TWFpbm5ldCh0aGlzLm5ldHdvcmspID09PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4gJiYgaXNIb3RXYWxsZXQpIHx8XG4gICAgICAvLyBkZWZhdWx0IHRvIHBzYnQgaWYgaXQgaGFzIHRoZSB3YWxsZXQgZmxhZ1xuICAgICAgd2FsbGV0RmxhZ011c2lnS3A7XG5cbiAgICByZXR1cm4gc2hvdWxkRGVmYXVsdFRvUHNidCA/ICdwc2J0JyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zICYgeyB3YWxsZXQ6IFdhbGxldCB9KTogUHJvbWlzZTx7XG4gICAgdHhGb3JtYXQ/OiBUeEZvcm1hdDtcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMztcbiAgfT4ge1xuICAgIGNvbnN0IHR4Rm9ybWF0ID0gdGhpcy5nZXREZWZhdWx0VHhGb3JtYXQoYnVpbGRQYXJhbXMud2FsbGV0LCBidWlsZFBhcmFtcy50eEZvcm1hdCBhcyBUeEZvcm1hdCB8IHVuZGVmaW5lZCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhGb3JtYXQsXG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJlQ3JlYXRlQml0R28ocGFyYW1zOiBQcmVjcmVhdGVCaXRHb09wdGlvbnMpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luYyBwcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAocGFyYW1zLndhbGxldERhdGEgJiYgaXNVdHhvV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkgJiYgaXNEZXNjcmlwdG9yV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkpIHtcbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhICdwc2J0LWxpdGUnIHRyYW5zYWN0aW9uIGZvcm1hdCwgd2Ugd2FudCB0byBpbmRpY2F0ZSBpbiBzaWduaW5nIHRvIG5vdCBmYWlsXG4gICAgY29uc3QgdHhIZXggPSAocGFyYW1zLnR4SGV4ID8/IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleCkgYXMgc3RyaW5nO1xuICAgIGlmIChcbiAgICAgIHR4SGV4ICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCBhcyBzdHJpbmcpICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidExpdGUodXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgdGhpcy5uZXR3b3JrKSkgJiZcbiAgICAgIHBhcmFtcy5hbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgICBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgdHJhbnNhY3Rpb25EYXRhQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlUb2tlbj86IHN0cmluZyk6IFJlY292ZXJ5UHJvdmlkZXIge1xuICAgIHJldHVybiBmb3JDb2luKHRoaXMuZ2V0Q2hhaW4oKSwgYXBpVG9rZW4pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwdWJsaWNLZXksIHBydiB9KSB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSA9PT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHNzIGF1ZGl0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRQcnYocHJ2KSAmJiAhaXNWYWxpZFhwcnYocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChwdWJsaWNLZXkpIHtcbiAgICAgIGNvbnN0IGdlblB1YktleSA9IGJpcDMyLmZyb21CYXNlNTgocHJ2KS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICBpZiAoZ2VuUHViS2V5ICE9PSBwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { CreateAddressFormat } from '@bitgo/sdk-core';
1
+ import { CreateAddressFormat, Triple } from '@bitgo/sdk-core';
2
2
  import * as utxolib from '@bitgo/utxo-lib';
3
3
  import { bitgo } from '@bitgo/utxo-lib';
4
4
  type ScriptType2Of3 = bitgo.outputScripts.ScriptType2Of3;
@@ -20,9 +20,7 @@ interface GenerateFixedScriptAddressOptions extends GenerateAddressOptions {
20
20
  pub: string;
21
21
  }[];
22
22
  }
23
- export declare function generateAddressWithChainAndIndex(network: utxolib.Network, keychains: {
24
- pub: string;
25
- }[], chain: bitgo.ChainCode, index: number, format: CreateAddressFormat | undefined): string;
23
+ export declare function generateAddressWithChainAndIndex(network: utxolib.Network, keychains: bitgo.RootWalletKeys | Triple<string>, chain: bitgo.ChainCode, index: number, format: CreateAddressFormat | undefined): string;
26
24
  /**
27
25
  * Generate an address for a wallet based on a set of configurations
28
26
  * @param params.addressType {string} Deprecated
@@ -1 +1 @@
1
- {"version":3,"file":"fixedScript.d.ts","sourceRoot":"","sources":["../../../src/address/fixedScript.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EASpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,KAAK,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iCAAkC,SAAQ,sBAAsB;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9B;AAeD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,SAAS,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,EAC5B,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC,MAAM,CAwBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,iCAAiC,GAAG,MAAM,CAkD3G;AAED,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,EACE,KAAK,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,WAAW,EACX,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,IAAI,CAsBN"}
1
+ {"version":3,"file":"fixedScript.d.ts","sourceRoot":"","sources":["../../../src/address/fixedScript.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EASnB,MAAM,EACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,KAAK,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iCAAkC,SAAQ,sBAAsB;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9B;AAeD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,SAAS,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAChD,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC,MAAM,CAmBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,iCAAiC,GAAG,MAAM,CA4D3G;AAED,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,EACE,KAAK,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,WAAW,EACX,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,IAAI,CAsBN"}
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { AddressTypeChainMismatchError, InvalidAddressDerivationPropertyError, UnexpectedAddressError, P2shP2wshUnsupportedError, P2trMusig2UnsupportedError, P2trUnsupportedError, P2wshUnsupportedError, UnsupportedAddressTypeError, sanitizeLegacyPath, } from '@bitgo/sdk-core';
2
+ import { AddressTypeChainMismatchError, InvalidAddressDerivationPropertyError, UnexpectedAddressError, P2shP2wshUnsupportedError, P2trMusig2UnsupportedError, P2trUnsupportedError, P2wshUnsupportedError, UnsupportedAddressTypeError, isTriple, } from '@bitgo/sdk-core';
3
3
  import * as utxolib from '@bitgo/utxo-lib';
4
4
  import { bitgo } from '@bitgo/utxo-lib';
5
5
  import { bip32 } from '@bitgo/secp256k1';
@@ -20,12 +20,14 @@ export function generateAddressWithChainAndIndex(network, keychains, chain, inde
20
20
  // Convert CreateAddressFormat to AddressFormat for wasm-utxo
21
21
  // 'base58' -> 'default', 'cashaddr' -> 'cashaddr'
22
22
  const wasmFormat = format === 'base58' ? 'default' : format;
23
- return wasmUtxo.fixedScriptWallet.address(keychains.map((k) => k.pub), chain, index, network, wasmFormat);
23
+ return wasmUtxo.fixedScriptWallet.address(keychains, chain, index, network, wasmFormat);
24
+ }
25
+ if (!(keychains instanceof bitgo.RootWalletKeys)) {
26
+ const hdNodes = keychains.map((pub) => bip32.fromBase58(pub));
27
+ keychains = new bitgo.RootWalletKeys(hdNodes);
24
28
  }
25
- const path = '0/0/' + chain + '/' + index;
26
- const hdNodes = keychains.map(({ pub }) => bip32.fromBase58(pub));
27
- const derivedKeys = hdNodes.map((hdNode) => hdNode.derivePath(sanitizeLegacyPath(path)).publicKey);
28
29
  const addressType = bitgo.scriptTypeForChain(chain);
30
+ const derivedKeys = keychains.deriveForChainAndIndex(chain, index).publicKeys;
29
31
  const { scriptPubKey: outputScript } = utxolib.bitgo.outputScripts.createOutputScript2of3(derivedKeys, addressType);
30
32
  const address = utxolib.address.fromOutputScript(outputScript, network);
31
33
  return canonicalAddress(network, address, format);
@@ -86,7 +88,10 @@ export function generateAddress(network, params) {
86
88
  throw new UnsupportedAddressTypeError();
87
89
  }
88
90
  }
89
- return generateAddressWithChainAndIndex(network, keychains, derivationChain, derivationIndex, params.format);
91
+ if (!isTriple(keychains)) {
92
+ throw new Error('keychains must be a triple');
93
+ }
94
+ return generateAddressWithChainAndIndex(network, keychains.map((k) => k.pub), derivationChain, derivationIndex, params.format);
90
95
  }
91
96
  export function assertFixedScriptWalletAddress(network, { chain, index, keychains, format, addressType, address, }) {
92
97
  if ((_.isUndefined(chain) && _.isUndefined(index)) || !(_.isFinite(chain) && _.isFinite(index))) {
@@ -106,4 +111,4 @@ export function assertFixedScriptWalletAddress(network, { chain, index, keychain
106
111
  throw new UnexpectedAddressError(`address validation failure: expected ${expectedAddress} but got ${address}`);
107
112
  }
108
113
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRkcmVzcy9maXhlZFNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUNMLDZCQUE2QixFQUU3QixxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0Isa0JBQWtCLEdBQ25CLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUF1QjdDLFNBQVMsZ0JBQWdCLENBQUMsT0FBd0IsRUFBRSxPQUFlLEVBQUUsTUFBNEI7SUFDL0YsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELHNEQUFzRDtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQXdCLEVBQUUsV0FBMkI7SUFDaEYsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIs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eEIsRUFDRSxLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sV0FBVyxFQUNYLE9BQU8sR0FRUjtJQUVELElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLElBQUkscUNBQXFDLENBQzdDLDhDQUE4QyxLQUFLLGVBQWUsS0FBSyxHQUFHLENBQzNFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFO1FBQy9DLE1BQU07UUFDTixXQUFXLEVBQUUsV0FBNkI7UUFDMUMsU0FBUztRQUNULEtBQUs7UUFDTCxLQUFLO0tBQ04sQ0FBQyxDQUFDO0lBRUgsSUFBSSxlQUFlLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLHNCQUFzQixDQUFDLHdDQUF3QyxlQUFlLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBBZGRyZXNzVHlwZUNoYWluTWlzbWF0Y2hFcnJvcixcbiAgQ3JlYXRlQWRkcmVzc0Zvcm1hdCxcbiAgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgUDJzaFAyd3NoVW5zdXBwb3J0ZWRFcnJvcixcbiAgUDJ0ck11c2lnMlVuc3VwcG9ydGVkRXJyb3IsXG4gIFAydHJVbnN1cHBvcnRlZEVycm9yLFxuICBQMndzaFVuc3VwcG9ydGVkRXJyb3IsXG4gIFVuc3VwcG9ydGVkQWRkcmVzc1R5cGVFcnJvcixcbiAgc2FuaXRpemVMZWdhY3lQYXRoLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCAqIGFzIHdhc21VdHhvIGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZFNjcmlwdEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBvdXRwdXRTY3JpcHQ/OiBzdHJpbmc7XG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczogeyBwdWI6IHN0cmluZyB9W107XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbEFkZHJlc3MobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCBhZGRyZXNzOiBzdHJpbmcsIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQpOiBzdHJpbmcge1xuICBpZiAoZm9ybWF0ID09PSAnY2FzaGFkZHInKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICByZXR1cm4gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KHNjcmlwdCwgZm9ybWF0LCBuZXR3b3JrKTtcbiAgfVxuICAvLyBEZWZhdWx0IHRvIGNhbm9uaWNhbCBmb3JtYXQgKGJhc2U1OCBmb3IgbW9zdCBjb2lucylcbiAgcmV0dXJuIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b0Nhbm9uaWNhbEZvcm1hdChhZGRyZXNzLCBuZXR3b3JrKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNBZGRyZXNzVHlwZShuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssIGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU3VwcG9ydGVkU2NyaXB0VHlwZShuZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBrZXljaGFpbnM6IHsgcHViOiBzdHJpbmcgfVtdLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBmb3JtYXQ6IENyZWF0ZUFkZHJlc3NGb3JtYXQgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGlmICh1dHhvbGliLmlzVGVzdG5ldChuZXR3b3JrKSkge1xuICAgIC8vIENvbnZlcnQgQ3JlYXRlQWRkcmVzc0Zvcm1hdCB0byBBZGRyZXNzRm9ybWF0IGZvciB3YXNtLXV0eG9cbiAgICAvLyAnYmFzZTU4JyAtPiAnZGVmYXVsdCcsICdjYXNoYWRkcicgLT4gJ2Nhc2hhZGRyJ1xuICAgIGNvbnN0IHdhc21Gb3JtYXQgPSBmb3JtYXQgPT09ICdiYXNlNTgnID8gJ2RlZmF1bHQnIDogZm9ybWF0O1xuICAgIHJldHVybiB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKFxuICAgICAga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgICBuZXR3b3JrLFxuICAgICAgd2FzbUZvcm1hdFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXRoID0gJzAvMC8nICsgY2hhaW4gKyAnLycgKyBpbmRleDtcbiAgY29uc3QgaGROb2RlcyA9IGtleWNoYWlucy5tYXAoKHsgcHViIH0pID0+IGJpcDMyLmZyb21CYXNlNTgocHViKSk7XG4gIGNvbnN0IGRlcml2ZWRLZXlzID0gaGROb2Rlcy5tYXAoKGhkTm9kZSkgPT4gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKHBhdGgpKS5wdWJsaWNLZXkpO1xuICBjb25zdCBhZGRyZXNzVHlwZSA9IGJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbik7XG5cbiAgY29uc3QgeyBzY3JpcHRQdWJLZXk6IG91dHB1dFNjcmlwdCB9ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoZGVyaXZlZEtleXMsIGFkZHJlc3NUeXBlKTtcblxuICBjb25zdCBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQob3V0cHV0U2NyaXB0LCBuZXR3b3JrKTtcblxuICByZXR1cm4gY2Fub25pY2FsQWRkcmVzcyhuZXR3b3JrLCBhZGRyZXNzLCBmb3JtYXQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIGFkZHJlc3MgZm9yIGEgd2FsbGV0IGJhc2VkIG9uIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zXG4gKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3NUeXBlIHtzdHJpbmd9ICAgRGVwcmVjYXRlZFxuICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgICB7W29iamVjdF19IEFycmF5IG9mIG9iamVjdHMgd2l0aCB4cHVic1xuICogQHBhcmFtIHBhcmFtcy50aHJlc2hvbGQgICB7bnVtYmVyfSAgIE1pbmltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gICAgICAge251bWJlcn0gICBEZXJpdmF0aW9uIGNoYWluIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL0JpdEdvL3Vuc3BlbnRzL2Jsb2IvbWFzdGVyL3NyYy9jb2Rlcy50cyBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgdHlwZSBvZiBhIGdpdmVuIGNoYWluIGNvZGUpXG4gKiBAcGFyYW0gcGFyYW1zLmluZGV4ICAgICAgIHtudW1iZXJ9ICAgRGVyaXZhdGlvbiBpbmRleFxuICogQHBhcmFtIHBhcmFtcy5zZWd3aXQgICAgICB7Ym9vbGVhbn0gIERlcHJlY2F0ZWRcbiAqIEBwYXJhbSBwYXJhbXMuYmVjaDMyICAgICAge2Jvb2xlYW59ICBEZXByZWNhdGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWRkcmVzcyhuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssIHBhcmFtczogR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zKTogc3RyaW5nIHtcbiAgbGV0IGRlcml2YXRpb25JbmRleCA9IDA7XG4gIGlmIChfLmlzSW50ZWdlcihwYXJhbXMuaW5kZXgpICYmIChwYXJhbXMuaW5kZXggYXMgbnVtYmVyKSA+IDApIHtcbiAgICBkZXJpdmF0aW9uSW5kZXggPSBwYXJhbXMuaW5kZXggYXMgbnVtYmVyO1xuICB9XG5cbiAgY29uc3QgeyBrZXljaGFpbnMsIGNoYWluLCBzZWd3aXQgPSBmYWxzZSwgYmVjaDMyID0gZmFsc2UgfSA9IHBhcmFtcyBhcyBHZW5lcmF0ZUZpeGVkU2NyaXB0QWRkcmVzc09wdGlvbnM7XG5cbiAgbGV0IGRlcml2YXRpb25DaGFpbiA9IGJpdGdvLmdldEV4dGVybmFsQ2hhaW5Db2RlKCdwMnNoJyk7XG4gIGlmIChfLmlzTnVtYmVyKGNoYWluKSAmJiBfLmlzSW50ZWdlcihjaGFpbikgJiYgYml0Z28uaXNDaGFpbkNvZGUoY2hhaW4pKSB7XG4gICAgZGVyaXZhdGlvbkNoYWluID0gY2hhaW47XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0RmxhZ3NUb0FkZHJlc3NUeXBlKCk6IFNjcmlwdFR5cGUyT2YzIHtcbiAgICBpZiAoYml0Z28uaXNDaGFpbkNvZGUoY2hhaW4pKSB7XG4gICAgICByZXR1cm4gYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKTtcbiAgICB9XG4gICAgaWYgKF8uaXNCb29sZWFuKHNlZ3dpdCkgJiYgc2Vnd2l0KSB7XG4gICAgICByZXR1cm4gJ3Ayc2hQMndzaCc7XG4gICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbihiZWNoMzIpICYmIGJlY2gzMikge1xuICAgICAgcmV0dXJuICdwMndzaCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAncDJzaCc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWRkcmVzc1R5cGUgPSBwYXJhbXMuYWRkcmVzc1R5cGUgfHwgY29udmVydEZsYWdzVG9BZGRyZXNzVHlwZSgpO1xuXG4gIGlmIChhZGRyZXNzVHlwZSAhPT0gdXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oZGVyaXZhdGlvbkNoYWluKSkge1xuICAgIHRocm93IG5ldyBBZGRyZXNzVHlwZUNoYWluTWlzbWF0Y2hFcnJvcihhZGRyZXNzVHlwZSwgZGVyaXZhdGlvbkNoYWluKTtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNBZGRyZXNzVHlwZShuZXR3b3JrLCBhZGRyZXNzVHlwZSkpIHtcbiAgICBzd2l0Y2ggKGFkZHJlc3NUeXBlKSB7XG4gICAgICBjYXNlICdwMnNoJzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcm5hbCBlcnJvcjogcDJzaCBzaG91bGQgYWx3YXlzIGJlIHN1cHBvcnRlZGApO1xuICAgICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgICAgdGhyb3cgbmV3IFAyc2hQMndzaFVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgICAgdGhyb3cgbmV3IFAyd3NoVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgY2FzZSAncDJ0cic6XG4gICAgICAgIHRocm93IG5ldyBQMnRyVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgIHRocm93IG5ldyBQMnRyTXVzaWcyVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQWRkcmVzc1R5cGVFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChuZXR3b3JrLCBrZXljaGFpbnMsIGRlcml2YXRpb25DaGFpbiwgZGVyaXZhdGlvbkluZGV4LCBwYXJhbXMuZm9ybWF0KTtcbn1cblxudHlwZSBLZXljaGFpbiA9IHtcbiAgcHViOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzKFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHtcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICBrZXljaGFpbnMsXG4gICAgZm9ybWF0LFxuICAgIGFkZHJlc3NUeXBlLFxuICAgIGFkZHJlc3MsXG4gIH06IHtcbiAgICBjaGFpbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAga2V5Y2hhaW5zOiBLZXljaGFpbltdO1xuICAgIGZvcm1hdDogQ3JlYXRlQWRkcmVzc0Zvcm1hdDtcbiAgICBhZGRyZXNzVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgfVxuKTogdm9pZCB7XG4gIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICk7XG4gIH1cblxuICBpZiAoIWtleWNoYWlucykge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhuZXR3b3JrLCB7XG4gICAgZm9ybWF0LFxuICAgIGFkZHJlc3NUeXBlOiBhZGRyZXNzVHlwZSBhcyBTY3JpcHRUeXBlMk9mMyxcbiAgICBrZXljaGFpbnMsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gIH0pO1xuXG4gIGlmIChleHBlY3RlZEFkZHJlc3MgIT09IGFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzfSBidXQgZ290ICR7YWRkcmVzc31gKTtcbiAgfVxufVxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRkcmVzcy9maXhlZFNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUNMLDZCQUE2QixFQUU3QixxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsUUFBUSxHQUVULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUF1QjdDLFNBQVMsZ0JBQWdCLENBQUMsT0FBd0IsRUFBRSxPQUFlLEVBQUUsTUFBNEI7SUFDL0YsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELHNEQUFzRDtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQXdCLEVBQUUsV0FBMkI7SUFDaEYsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FB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RUFDN0MsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7QUFDSixDQUFDO0FBTUQsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxPQUF3QixFQUN4QixFQUNFLEtBQUssRUFDTCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixXQUFXLEVBQ1gsT0FBTyxHQVFSO0lBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxxQ0FBcUMsQ0FDN0MsOENBQThDLEtBQUssZUFBZSxLQUFLLEdBQUcsQ0FDM0UsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUU7UUFDL0MsTUFBTTtRQUNOLFdBQVcsRUFBRSxXQUE2QjtRQUMxQyxTQUFTO1FBQ1QsS0FBSztRQUNMLEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksc0JBQXNCLENBQUMsd0NBQXdDLGVBQWUsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIEFkZHJlc3NUeXBlQ2hhaW5NaXNtYXRjaEVycm9yLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBQMnNoUDJ3c2hVbnN1cHBvcnRlZEVycm9yLFxuICBQMnRyTXVzaWcyVW5zdXBwb3J0ZWRFcnJvcixcbiAgUDJ0clVuc3VwcG9ydGVkRXJyb3IsXG4gIFAyd3NoVW5zdXBwb3J0ZWRFcnJvcixcbiAgVW5zdXBwb3J0ZWRBZGRyZXNzVHlwZUVycm9yLFxuICBpc1RyaXBsZSxcbiAgVHJpcGxlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCAqIGFzIHdhc21VdHhvIGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZFNjcmlwdEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBvdXRwdXRTY3JpcHQ/OiBzdHJpbmc7XG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczogeyBwdWI6IHN0cmluZyB9W107XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbEFkZHJlc3MobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCBhZGRyZXNzOiBzdHJpbmcsIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQpOiBzdHJpbmcge1xuICBpZiAoZm9ybWF0ID09PSAnY2FzaGFkZHInKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICByZXR1cm4gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KHNjcmlwdCwgZm9ybWF0LCBuZXR3b3JrKTtcbiAgfVxuICAvLyBEZWZhdWx0IHRvIGNhbm9uaWNhbCBmb3JtYXQgKGJhc2U1OCBmb3IgbW9zdCBjb2lucylcbiAgcmV0dXJuIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b0Nhbm9uaWNhbEZvcm1hdChhZGRyZXNzLCBuZXR3b3JrKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNBZGRyZXNzVHlwZShuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssIGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU3VwcG9ydGVkU2NyaXB0VHlwZShuZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBrZXljaGFpbnM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgVHJpcGxlPHN0cmluZz4sXG4gIGNoYWluOiBiaXRnby5DaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIGZvcm1hdDogQ3JlYXRlQWRkcmVzc0Zvcm1hdCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgaWYgKHV0eG9saWIuaXNUZXN0bmV0KG5ldHdvcmspKSB7XG4gICAgLy8gQ29udmVydCBDcmVhdGVBZGRyZXNzRm9ybWF0IHRvIEFkZHJlc3NGb3JtYXQgZm9yIHdhc20tdXR4b1xuICAgIC8vICdiYXNlNTgnIC0+ICdkZWZhdWx0JywgJ2Nhc2hhZGRyJyAtPiAnY2FzaGFkZHInXG4gICAgY29uc3Qgd2FzbUZvcm1hdCA9IGZvcm1hdCA9PT0gJ2Jhc2U1OCcgPyAnZGVmYXVsdCcgOiBmb3JtYXQ7XG4gICAgcmV0dXJuIHdhc21VdHhvLmZpeGVkU2NyaXB0V2FsbGV0LmFkZHJlc3Moa2V5Y2hhaW5zLCBjaGFpbiwgaW5kZXgsIG5ldHdvcmssIHdhc21Gb3JtYXQpO1xuICB9XG5cbiAgaWYgKCEoa2V5Y2hhaW5zIGluc3RhbmNlb2YgYml0Z28uUm9vdFdhbGxldEtleXMpKSB7XG4gICAgY29uc3QgaGROb2RlcyA9IGtleWNoYWlucy5tYXAoKHB1YikgPT4gYmlwMzIuZnJvbUJhc2U1OChwdWIpKTtcbiAgICBrZXljaGFpbnMgPSBuZXcgYml0Z28uUm9vdFdhbGxldEtleXMoaGROb2RlcyBhcyBUcmlwbGU8dXR4b2xpYi5CSVAzMkludGVyZmFjZT4pO1xuICB9XG5cbiAgY29uc3QgYWRkcmVzc1R5cGUgPSBiaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuXG4gIGNvbnN0IGRlcml2ZWRLZXlzID0ga2V5Y2hhaW5zLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW4sIGluZGV4KS5wdWJsaWNLZXlzO1xuICBjb25zdCB7IHNjcmlwdFB1YktleTogb3V0cHV0U2NyaXB0IH0gPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhkZXJpdmVkS2V5cywgYWRkcmVzc1R5cGUpO1xuICBjb25zdCBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQob3V0cHV0U2NyaXB0LCBuZXR3b3JrKTtcbiAgcmV0dXJuIGNhbm9uaWNhbEFkZHJlc3MobmV0d29yaywgYWRkcmVzcywgZm9ybWF0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGZvciBhIHdhbGxldCBiYXNlZCBvbiBhIHNldCBvZiBjb25maWd1cmF0aW9uc1xuICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZSB7c3RyaW5nfSAgIERlcHJlY2F0ZWRcbiAqIEBwYXJhbSBwYXJhbXMua2V5Y2hhaW5zICAge1tvYmplY3RdfSBBcnJheSBvZiBvYmplY3RzIHdpdGggeHB1YnNcbiAqIEBwYXJhbSBwYXJhbXMudGhyZXNob2xkICAge251bWJlcn0gICBNaW5pbXVtIG51bWJlciBvZiBzaWduYXR1cmVzXG4gKiBAcGFyYW0gcGFyYW1zLmNoYWluICAgICAgIHtudW1iZXJ9ICAgRGVyaXZhdGlvbiBjaGFpbiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9CaXRHby91bnNwZW50cy9ibG9iL21hc3Rlci9zcmMvY29kZXMudHMgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIHR5cGUgb2YgYSBnaXZlbiBjaGFpbiBjb2RlKVxuICogQHBhcmFtIHBhcmFtcy5pbmRleCAgICAgICB7bnVtYmVyfSAgIERlcml2YXRpb24gaW5kZXhcbiAqIEBwYXJhbSBwYXJhbXMuc2Vnd2l0ICAgICAge2Jvb2xlYW59ICBEZXByZWNhdGVkXG4gKiBAcGFyYW0gcGFyYW1zLmJlY2gzMiAgICAgIHtib29sZWFufSAgRGVwcmVjYXRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFkZHJlc3MobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCBwYXJhbXM6IEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyk6IHN0cmluZyB7XG4gIGxldCBkZXJpdmF0aW9uSW5kZXggPSAwO1xuICBpZiAoXy5pc0ludGVnZXIocGFyYW1zLmluZGV4KSAmJiAocGFyYW1zLmluZGV4IGFzIG51bWJlcikgPiAwKSB7XG4gICAgZGVyaXZhdGlvbkluZGV4ID0gcGFyYW1zLmluZGV4IGFzIG51bWJlcjtcbiAgfVxuXG4gIGNvbnN0IHsga2V5Y2hhaW5zLCBjaGFpbiwgc2Vnd2l0ID0gZmFsc2UsIGJlY2gzMiA9IGZhbHNlIH0gPSBwYXJhbXMgYXMgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zO1xuXG4gIGxldCBkZXJpdmF0aW9uQ2hhaW4gPSBiaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSgncDJzaCcpO1xuICBpZiAoXy5pc051bWJlcihjaGFpbikgJiYgXy5pc0ludGVnZXIoY2hhaW4pICYmIGJpdGdvLmlzQ2hhaW5Db2RlKGNoYWluKSkge1xuICAgIGRlcml2YXRpb25DaGFpbiA9IGNoYWluO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydEZsYWdzVG9BZGRyZXNzVHlwZSgpOiBTY3JpcHRUeXBlMk9mMyB7XG4gICAgaWYgKGJpdGdvLmlzQ2hhaW5Db2RlKGNoYWluKSkge1xuICAgICAgcmV0dXJuIGJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbik7XG4gICAgfVxuICAgIGlmIChfLmlzQm9vbGVhbihzZWd3aXQpICYmIHNlZ3dpdCkge1xuICAgICAgcmV0dXJuICdwMnNoUDJ3c2gnO1xuICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4oYmVjaDMyKSAmJiBiZWNoMzIpIHtcbiAgICAgIHJldHVybiAncDJ3c2gnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3Ayc2gnO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3NUeXBlID0gcGFyYW1zLmFkZHJlc3NUeXBlIHx8IGNvbnZlcnRGbGFnc1RvQWRkcmVzc1R5cGUoKTtcblxuICBpZiAoYWRkcmVzc1R5cGUgIT09IHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGRlcml2YXRpb25DaGFpbikpIHtcbiAgICB0aHJvdyBuZXcgQWRkcmVzc1R5cGVDaGFpbk1pc21hdGNoRXJyb3IoYWRkcmVzc1R5cGUsIGRlcml2YXRpb25DaGFpbik7XG4gIH1cblxuICBpZiAoIXN1cHBvcnRzQWRkcmVzc1R5cGUobmV0d29yaywgYWRkcmVzc1R5cGUpKSB7XG4gICAgc3dpdGNoIChhZGRyZXNzVHlwZSkge1xuICAgICAgY2FzZSAncDJzaCc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW50ZXJuYWwgZXJyb3I6IHAyc2ggc2hvdWxkIGFsd2F5cyBiZSBzdXBwb3J0ZWRgKTtcbiAgICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICAgIHRocm93IG5ldyBQMnNoUDJ3c2hVbnN1cHBvcnRlZEVycm9yKCk7XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICAgIHRocm93IG5ldyBQMndzaFVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgICB0aHJvdyBuZXcgUDJ0clVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICB0aHJvdyBuZXcgUDJ0ck11c2lnMlVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NUeXBlRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWlucyBtdXN0IGJlIGEgdHJpcGxlJyk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXgoXG4gICAgbmV0d29yayxcbiAgICBrZXljaGFpbnMubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgZGVyaXZhdGlvbkNoYWluLFxuICAgIGRlcml2YXRpb25JbmRleCxcbiAgICBwYXJhbXMuZm9ybWF0XG4gICk7XG59XG5cbnR5cGUgS2V5Y2hhaW4gPSB7XG4gIHB1Yjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyhcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB7XG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAga2V5Y2hhaW5zLFxuICAgIGZvcm1hdCxcbiAgICBhZGRyZXNzVHlwZSxcbiAgICBhZGRyZXNzLFxuICB9OiB7XG4gICAgY2hhaW46IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleWNoYWluczogS2V5Y2hhaW5bXTtcbiAgICBmb3JtYXQ6IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gICAgYWRkcmVzc1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH1cbik6IHZvaWQge1xuICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MobmV0d29yaywge1xuICAgIGZvcm1hdCxcbiAgICBhZGRyZXNzVHlwZTogYWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjMsXG4gICAga2V5Y2hhaW5zLFxuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICB9KTtcblxuICBpZiAoZXhwZWN0ZWRBZGRyZXNzICE9PSBhZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke2V4cGVjdGVkQWRkcmVzc30gYnV0IGdvdCAke2FkZHJlc3N9YCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import * as t from 'io-ts';
2
+ import { bitgo } from '@bitgo/utxo-lib';
2
3
  import { BIP32Interface } from '@bitgo/secp256k1';
3
4
  import { IRequestTracer, IWallet, Triple } from '@bitgo/sdk-core';
4
5
  import { AbstractUtxoCoin } from './abstractUtxoCoin';
@@ -35,9 +36,12 @@ export declare const UtxoNamedKeychains: t.TypeC<{
35
36
  }>;
36
37
  export type UtxoNamedKeychains = t.TypeOf<typeof UtxoNamedKeychains>;
37
38
  export declare function toKeychainTriple(keychains: UtxoNamedKeychains): Triple<UtxoKeychain>;
38
- export declare function toBip32Triple(keychains: UtxoNamedKeychains | Triple<{
39
+ export declare function toBip32Triple(keychains: bitgo.RootWalletKeys | UtxoNamedKeychains | Triple<{
39
40
  pub: string;
40
- }> | Triple<string>): Triple<BIP32Interface>;
41
+ }> | string[]): Triple<BIP32Interface>;
42
+ export declare function toXpubTriple(keychains: UtxoNamedKeychains | Triple<{
43
+ pub: string;
44
+ }> | Triple<string> | Triple<BIP32Interface>): Triple<string>;
41
45
  export declare function fetchKeychains(coin: AbstractUtxoCoin, wallet: IWallet, reqId?: IRequestTracer): Promise<UtxoNamedKeychains>;
42
46
  export declare const KeySignatures: t.PartialC<{
43
47
  backupPub: t.StringC;
@@ -1 +1 @@
1
- {"version":3,"file":"keychains.d.ts","sourceRoot":"","sources":["../../src/keychains.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAS,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,OAAO,EAA4B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAUtC;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;IAWxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAErE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,CAGpF;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GACvE,MAAM,CAAC,cAAc,CAAC,CASxB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAQ7B;AAED,eAAO,MAAM,aAAa;;;EAGxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAK9E"}
1
+ {"version":3,"file":"keychains.d.ts","sourceRoot":"","sources":["../../src/keychains.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAS,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,OAAO,EAA4B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAUtC;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;IAWxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAErE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,CAGpF;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,KAAK,CAAC,cAAc,GAAG,kBAAkB,GAAG,MAAM,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,GACxF,MAAM,CAAC,cAAc,CAAC,CAexB;AAkBD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,GAChG,MAAM,CAAC,MAAM,CAAC,CAQhB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAQ7B;AAED,eAAO,MAAM,aAAa;;;EAGxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAK9E"}