@bitgo-beta/sdk-coin-sui 1.4.1-alpha.31 → 1.4.1-alpha.310

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 (162) hide show
  1. package/.mocharc.yml +1 -2
  2. package/CHANGELOG.md +897 -0
  3. package/dist/src/index.d.ts +1 -0
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +7 -2
  6. package/dist/src/lib/compareTransactionBlocks.d.ts +8 -0
  7. package/dist/src/lib/compareTransactionBlocks.d.ts.map +1 -0
  8. package/dist/src/lib/compareTransactionBlocks.js +12 -0
  9. package/dist/src/lib/constants.d.ts +11 -3
  10. package/dist/src/lib/constants.d.ts.map +1 -1
  11. package/dist/src/lib/constants.js +20 -3
  12. package/dist/src/lib/customTransaction.d.ts +57 -0
  13. package/dist/src/lib/customTransaction.d.ts.map +1 -0
  14. package/dist/src/lib/customTransaction.js +159 -0
  15. package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
  16. package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/customTransactionBuilder.js +117 -0
  18. package/dist/src/lib/iface.d.ts +86 -27
  19. package/dist/src/lib/iface.d.ts.map +1 -1
  20. package/dist/src/lib/iface.js +39 -10
  21. package/dist/src/lib/index.d.ts +10 -0
  22. package/dist/src/lib/index.d.ts.map +1 -1
  23. package/dist/src/lib/index.js +44 -10
  24. package/dist/src/lib/keyPair.d.ts.map +1 -1
  25. package/dist/src/lib/keyPair.js +25 -21
  26. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +6 -6
  27. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
  28. package/dist/src/lib/mystenlab/builder/Inputs.js +19 -20
  29. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +302 -0
  30. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -0
  31. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +255 -0
  32. package/dist/src/lib/mystenlab/builder/{TransactionData.d.ts → TransactionDataBlock.d.ts} +62 -62
  33. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -0
  34. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +168 -0
  35. package/dist/src/lib/mystenlab/builder/{Commands.d.ts → Transactions.d.ts} +103 -158
  36. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -0
  37. package/dist/src/lib/mystenlab/builder/Transactions.js +118 -0
  38. package/dist/src/lib/mystenlab/builder/bcs.d.ts +6 -6
  39. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
  40. package/dist/src/lib/mystenlab/builder/bcs.js +16 -16
  41. package/dist/src/lib/mystenlab/builder/index.d.ts +2 -2
  42. package/dist/src/lib/mystenlab/builder/index.d.ts.map +1 -1
  43. package/dist/src/lib/mystenlab/builder/index.js +8 -4
  44. package/dist/src/lib/mystenlab/builder/serializer.d.ts.map +1 -1
  45. package/dist/src/lib/mystenlab/builder/serializer.js +6 -11
  46. package/dist/src/lib/mystenlab/builder/utils.d.ts +2 -5
  47. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
  48. package/dist/src/lib/mystenlab/builder/utils.js +5 -5
  49. package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
  50. package/dist/src/lib/mystenlab/framework/framework.d.ts +8 -7
  51. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
  52. package/dist/src/lib/mystenlab/framework/framework.js +23 -27
  53. package/dist/src/lib/mystenlab/framework/index.d.ts.map +1 -1
  54. package/dist/src/lib/mystenlab/framework/index.js +6 -4
  55. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +4 -23
  56. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -1
  57. package/dist/src/lib/mystenlab/framework/sui-system-state.js +11 -40
  58. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts.map +1 -0
  59. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +119 -0
  60. package/dist/src/lib/mystenlab/types/coin.d.ts +10 -10
  61. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
  62. package/dist/src/lib/mystenlab/types/coin.js +19 -19
  63. package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
  64. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
  65. package/dist/src/lib/mystenlab/types/common.js +22 -22
  66. package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
  67. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
  68. package/dist/src/lib/mystenlab/types/events.js +17 -17
  69. package/dist/src/lib/mystenlab/types/index.d.ts.map +1 -1
  70. package/dist/src/lib/mystenlab/types/index.js +6 -5
  71. package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
  72. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
  73. package/dist/src/lib/mystenlab/types/normalized.js +42 -43
  74. package/dist/src/lib/mystenlab/types/objects.d.ts +95 -78
  75. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
  76. package/dist/src/lib/mystenlab/types/objects.js +98 -104
  77. package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
  78. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
  79. package/dist/src/lib/mystenlab/types/option.js +2 -3
  80. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +10 -9
  81. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
  82. package/dist/src/lib/mystenlab/types/sui-bcs.js +4 -4
  83. package/dist/src/lib/mystenlab/types/transactions.d.ts +3262 -1046
  84. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
  85. package/dist/src/lib/mystenlab/types/transactions.js +209 -187
  86. package/dist/src/lib/mystenlab/types/validator.d.ts +641 -0
  87. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -0
  88. package/dist/src/lib/mystenlab/types/validator.js +156 -0
  89. package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
  90. package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
  91. package/dist/src/lib/resources/walrusConfig.js +37 -0
  92. package/dist/src/lib/rpcClient.d.ts +5 -0
  93. package/dist/src/lib/rpcClient.d.ts.map +1 -0
  94. package/dist/src/lib/rpcClient.js +74 -0
  95. package/dist/src/lib/stakingBuilder.d.ts +15 -15
  96. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  97. package/dist/src/lib/stakingBuilder.js +113 -44
  98. package/dist/src/lib/stakingTransaction.d.ts +2 -10
  99. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  100. package/dist/src/lib/stakingTransaction.js +97 -35
  101. package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
  102. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  103. package/dist/src/lib/tokenTransferBuilder.js +132 -0
  104. package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
  105. package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
  106. package/dist/src/lib/tokenTransferTransaction.js +250 -0
  107. package/dist/src/lib/transaction.d.ts +16 -6
  108. package/dist/src/lib/transaction.d.ts.map +1 -1
  109. package/dist/src/lib/transaction.js +126 -26
  110. package/dist/src/lib/transactionBuilder.d.ts +2 -3
  111. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  112. package/dist/src/lib/transactionBuilder.js +4 -4
  113. package/dist/src/lib/transactionBuilderFactory.d.ts +17 -2
  114. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  115. package/dist/src/lib/transactionBuilderFactory.js +52 -2
  116. package/dist/src/lib/transferBuilder.d.ts +3 -1
  117. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  118. package/dist/src/lib/transferBuilder.js +34 -11
  119. package/dist/src/lib/transferTransaction.d.ts +1 -1
  120. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  121. package/dist/src/lib/transferTransaction.js +33 -18
  122. package/dist/src/lib/unstakingBuilder.d.ts +62 -0
  123. package/dist/src/lib/unstakingBuilder.d.ts.map +1 -0
  124. package/dist/src/lib/unstakingBuilder.js +227 -0
  125. package/dist/src/lib/unstakingTransaction.d.ts +75 -0
  126. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -0
  127. package/dist/src/lib/unstakingTransaction.js +345 -0
  128. package/dist/src/lib/utils.d.ts +51 -7
  129. package/dist/src/lib/utils.d.ts.map +1 -1
  130. package/dist/src/lib/utils.js +362 -27
  131. package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
  132. package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
  133. package/dist/src/lib/walrusStakingBuilder.js +200 -0
  134. package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
  135. package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
  136. package/dist/src/lib/walrusStakingTransaction.js +269 -0
  137. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
  138. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
  139. package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
  140. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
  141. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
  142. package/dist/src/lib/walrusWithdrawStakeTransaction.js +186 -0
  143. package/dist/src/register.d.ts.map +1 -1
  144. package/dist/src/register.js +5 -1
  145. package/dist/src/sui.d.ts +44 -8
  146. package/dist/src/sui.d.ts.map +1 -1
  147. package/dist/src/sui.js +484 -42
  148. package/dist/src/suiToken.d.ts +22 -0
  149. package/dist/src/suiToken.d.ts.map +1 -0
  150. package/dist/src/suiToken.js +61 -0
  151. package/dist/src/tsui.js +1 -1
  152. package/package.json +15 -12
  153. package/dist/src/lib/mystenlab/builder/Commands.d.ts.map +0 -1
  154. package/dist/src/lib/mystenlab/builder/Commands.js +0 -119
  155. package/dist/src/lib/mystenlab/builder/Transaction.d.ts +0 -609
  156. package/dist/src/lib/mystenlab/builder/Transaction.d.ts.map +0 -1
  157. package/dist/src/lib/mystenlab/builder/Transaction.js +0 -254
  158. package/dist/src/lib/mystenlab/builder/TransactionData.d.ts.map +0 -1
  159. package/dist/src/lib/mystenlab/builder/TransactionData.js +0 -171
  160. package/dist/src/lib/mystenlab/builder/type-tag-serializer.d.ts.map +0 -1
  161. package/dist/src/lib/mystenlab/builder/type-tag-serializer.js +0 -119
  162. /package/dist/src/lib/mystenlab/{builder → txn-data-serializers}/type-tag-serializer.d.ts +0 -0
@@ -1,52 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractStructTag = exports.extractReference = exports.extractMutableReference = exports.SuiMoveNormalizedModules = exports.SuiMoveNormalizedModule = exports.SuiMoveNormalizedStruct = exports.SuiMoveNormalizedField = exports.SuiMoveNormalizedFunction = exports.SuiMoveNormalizedStructType = exports.SuiMoveNormalizedType = exports.SuiMoveNormalizedTypeParameterType = exports.SuiMoveStructTypeParameter = exports.SuiMoveAbilitySet = exports.SuiMoveVisibility = exports.SuiMoveModuleId = exports.SuiMoveFunctionArgTypes = exports.SuiMoveFunctionArgType = void 0;
3
+ exports.SuiMoveNormalizedModules = exports.SuiMoveNormalizedModule = exports.SuiMoveNormalizedStruct = exports.SuiMoveNormalizedField = exports.SuiMoveNormalizedFunction = exports.SuiMoveNormalizedStructType = exports.SuiMoveNormalizedType = exports.SuiMoveNormalizedTypeParameterType = exports.SuiMoveStructTypeParameter = exports.SuiMoveAbilitySet = exports.SuiMoveVisibility = exports.SuiMoveModuleId = exports.SuiMoveFunctionArgTypes = exports.SuiMoveFunctionArgType = void 0;
4
+ exports.extractMutableReference = extractMutableReference;
5
+ exports.extractReference = extractReference;
6
+ exports.extractStructTag = extractStructTag;
4
7
  const superstruct_1 = require("superstruct");
5
- exports.SuiMoveFunctionArgType = superstruct_1.union([superstruct_1.string(), superstruct_1.object({ Object: superstruct_1.string() })]);
6
- exports.SuiMoveFunctionArgTypes = superstruct_1.array(exports.SuiMoveFunctionArgType);
7
- exports.SuiMoveModuleId = superstruct_1.object({
8
- address: superstruct_1.string(),
9
- name: superstruct_1.string(),
8
+ exports.SuiMoveFunctionArgType = (0, superstruct_1.union)([(0, superstruct_1.string)(), (0, superstruct_1.object)({ Object: (0, superstruct_1.string)() })]);
9
+ exports.SuiMoveFunctionArgTypes = (0, superstruct_1.array)(exports.SuiMoveFunctionArgType);
10
+ exports.SuiMoveModuleId = (0, superstruct_1.object)({
11
+ address: (0, superstruct_1.string)(),
12
+ name: (0, superstruct_1.string)(),
10
13
  });
11
- exports.SuiMoveVisibility = superstruct_1.union([superstruct_1.literal('Private'), superstruct_1.literal('Public'), superstruct_1.literal('Friend')]);
12
- exports.SuiMoveAbilitySet = superstruct_1.object({
13
- abilities: superstruct_1.array(superstruct_1.string()),
14
+ exports.SuiMoveVisibility = (0, superstruct_1.union)([(0, superstruct_1.literal)('Private'), (0, superstruct_1.literal)('Public'), (0, superstruct_1.literal)('Friend')]);
15
+ exports.SuiMoveAbilitySet = (0, superstruct_1.object)({
16
+ abilities: (0, superstruct_1.array)((0, superstruct_1.string)()),
14
17
  });
15
- exports.SuiMoveStructTypeParameter = superstruct_1.object({
18
+ exports.SuiMoveStructTypeParameter = (0, superstruct_1.object)({
16
19
  constraints: exports.SuiMoveAbilitySet,
17
- isPhantom: superstruct_1.boolean(),
20
+ isPhantom: (0, superstruct_1.boolean)(),
18
21
  });
19
- exports.SuiMoveNormalizedTypeParameterType = superstruct_1.object({
20
- TypeParameter: superstruct_1.number(),
22
+ exports.SuiMoveNormalizedTypeParameterType = (0, superstruct_1.object)({
23
+ TypeParameter: (0, superstruct_1.number)(),
21
24
  });
22
25
  function isSuiMoveNormalizedType(value) {
23
26
  if (!value)
24
27
  return false;
25
28
  if (typeof value === 'string')
26
29
  return true;
27
- if (superstruct_1.is(value, exports.SuiMoveNormalizedTypeParameterType))
30
+ if ((0, superstruct_1.is)(value, exports.SuiMoveNormalizedTypeParameterType))
28
31
  return true;
29
32
  if (isSuiMoveNormalizedStructType(value))
30
33
  return true;
31
34
  if (typeof value !== 'object')
32
35
  return false;
33
36
  const valueProperties = value;
34
- if (superstruct_1.is(valueProperties.Reference, exports.SuiMoveNormalizedType))
37
+ if ((0, superstruct_1.is)(valueProperties.Reference, exports.SuiMoveNormalizedType))
35
38
  return true;
36
- if (superstruct_1.is(valueProperties.MutableReference, exports.SuiMoveNormalizedType))
39
+ if ((0, superstruct_1.is)(valueProperties.MutableReference, exports.SuiMoveNormalizedType))
37
40
  return true;
38
- if (superstruct_1.is(valueProperties.Vector, exports.SuiMoveNormalizedType))
41
+ if ((0, superstruct_1.is)(valueProperties.Vector, exports.SuiMoveNormalizedType))
39
42
  return true;
40
43
  return false;
41
44
  }
42
- exports.SuiMoveNormalizedType = superstruct_1.define('SuiMoveNormalizedType', isSuiMoveNormalizedType);
45
+ exports.SuiMoveNormalizedType = (0, superstruct_1.define)('SuiMoveNormalizedType', isSuiMoveNormalizedType);
43
46
  function isSuiMoveNormalizedStructType(value) {
44
47
  if (!value || typeof value !== 'object')
45
48
  return false;
46
49
  const valueProperties = value;
47
- if (!valueProperties.Struct || typeof valueProperties.Struct !== 'object') {
50
+ if (!valueProperties.Struct || typeof valueProperties.Struct !== 'object')
48
51
  return false;
49
- }
50
52
  const structProperties = valueProperties.Struct;
51
53
  if (typeof structProperties.address !== 'string' ||
52
54
  typeof structProperties.module !== 'string' ||
@@ -58,42 +60,40 @@ function isSuiMoveNormalizedStructType(value) {
58
60
  return true;
59
61
  }
60
62
  // NOTE: This type is recursive, so we need to manually implement it:
61
- exports.SuiMoveNormalizedStructType = superstruct_1.define('SuiMoveNormalizedStructType', isSuiMoveNormalizedStructType);
62
- exports.SuiMoveNormalizedFunction = superstruct_1.object({
63
+ exports.SuiMoveNormalizedStructType = (0, superstruct_1.define)('SuiMoveNormalizedStructType', isSuiMoveNormalizedStructType);
64
+ exports.SuiMoveNormalizedFunction = (0, superstruct_1.object)({
63
65
  visibility: exports.SuiMoveVisibility,
64
- isEntry: superstruct_1.boolean(),
65
- typeParameters: superstruct_1.array(exports.SuiMoveAbilitySet),
66
- parameters: superstruct_1.array(exports.SuiMoveNormalizedType),
67
- return: superstruct_1.array(exports.SuiMoveNormalizedType),
66
+ isEntry: (0, superstruct_1.boolean)(),
67
+ typeParameters: (0, superstruct_1.array)(exports.SuiMoveAbilitySet),
68
+ parameters: (0, superstruct_1.array)(exports.SuiMoveNormalizedType),
69
+ return: (0, superstruct_1.array)(exports.SuiMoveNormalizedType),
68
70
  });
69
- exports.SuiMoveNormalizedField = superstruct_1.object({
70
- name: superstruct_1.string(),
71
+ exports.SuiMoveNormalizedField = (0, superstruct_1.object)({
72
+ name: (0, superstruct_1.string)(),
71
73
  type: exports.SuiMoveNormalizedType,
72
74
  });
73
- exports.SuiMoveNormalizedStruct = superstruct_1.object({
75
+ exports.SuiMoveNormalizedStruct = (0, superstruct_1.object)({
74
76
  abilities: exports.SuiMoveAbilitySet,
75
- typeParameters: superstruct_1.array(exports.SuiMoveStructTypeParameter),
76
- fields: superstruct_1.array(exports.SuiMoveNormalizedField),
77
+ typeParameters: (0, superstruct_1.array)(exports.SuiMoveStructTypeParameter),
78
+ fields: (0, superstruct_1.array)(exports.SuiMoveNormalizedField),
77
79
  });
78
- exports.SuiMoveNormalizedModule = superstruct_1.object({
79
- fileFormatVersion: superstruct_1.number(),
80
- address: superstruct_1.string(),
81
- name: superstruct_1.string(),
82
- friends: superstruct_1.array(exports.SuiMoveModuleId),
83
- structs: superstruct_1.record(superstruct_1.string(), exports.SuiMoveNormalizedStruct),
84
- exposedFunctions: superstruct_1.record(superstruct_1.string(), exports.SuiMoveNormalizedFunction),
80
+ exports.SuiMoveNormalizedModule = (0, superstruct_1.object)({
81
+ fileFormatVersion: (0, superstruct_1.number)(),
82
+ address: (0, superstruct_1.string)(),
83
+ name: (0, superstruct_1.string)(),
84
+ friends: (0, superstruct_1.array)(exports.SuiMoveModuleId),
85
+ structs: (0, superstruct_1.record)((0, superstruct_1.string)(), exports.SuiMoveNormalizedStruct),
86
+ exposedFunctions: (0, superstruct_1.record)((0, superstruct_1.string)(), exports.SuiMoveNormalizedFunction),
85
87
  });
86
- exports.SuiMoveNormalizedModules = superstruct_1.record(superstruct_1.string(), exports.SuiMoveNormalizedModule);
88
+ exports.SuiMoveNormalizedModules = (0, superstruct_1.record)((0, superstruct_1.string)(), exports.SuiMoveNormalizedModule);
87
89
  function extractMutableReference(normalizedType) {
88
90
  return typeof normalizedType === 'object' && 'MutableReference' in normalizedType
89
91
  ? normalizedType.MutableReference
90
92
  : undefined;
91
93
  }
92
- exports.extractMutableReference = extractMutableReference;
93
94
  function extractReference(normalizedType) {
94
95
  return typeof normalizedType === 'object' && 'Reference' in normalizedType ? normalizedType.Reference : undefined;
95
96
  }
96
- exports.extractReference = extractReference;
97
97
  function extractStructTag(normalizedType) {
98
98
  if (typeof normalizedType === 'object' && 'Struct' in normalizedType) {
99
99
  return normalizedType;
@@ -108,5 +108,4 @@ function extractStructTag(normalizedType) {
108
108
  }
109
109
  return undefined;
110
110
  }
111
- exports.extractStructTag = extractStructTag;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbXlzdGVubGFiL3R5cGVzL25vcm1hbGl6ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdIO0FBSW5HLFFBQUEsc0JBQXNCLEdBQUcsbUJBQUssQ0FBQyxDQUFDLG9CQUFNLEVBQUUsRUFBRSxvQkFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpFLFFBQUEsdUJBQXVCLEdBQUcsbUJBQUssQ0FBQyw4QkFBc0IsQ0FBQyxDQUFDO0FBR3hELFFBQUEsZUFBZSxHQUFHLG9CQUFNLENBQUM7SUFDcEMsT0FBTyxFQUFFLG9CQUFNLEVBQUU7SUFDakIsSUFBSSxFQUFFLG9CQUFNLEVBQUU7Q0FDZixDQUFDLENBQUM7QUFHVSxRQUFBLGlCQUFpQixHQUFHLG1CQUFLLENBQUMsQ0FBQyxxQkFBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLHFCQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUscUJBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFHdEYsUUFBQSxpQkFBaUIsR0FBRyxvQkFBTSxDQUFDO0lBQ3RDLFNBQVMsRUFBRSxtQkFBSyxDQUFDLG9CQUFNLEVBQUUsQ0FBQztDQUMzQixDQUFDLENBQUM7QUFHVSxRQUFBLDBCQUEwQixHQUFHLG9CQUFNLENBQUM7SUFDL0MsV0FBVyxFQUFFLHlCQUFpQjtJQUM5QixTQUFTLEVBQUUscUJBQU8sRUFBRTtDQUNyQixDQUFDLENBQUM7QUFHVSxRQUFBLGtDQUFrQyxHQUFHLG9CQUFNLENBQUM7SUFDdkQsYUFBYSxFQUFFLG9CQUFNLEVBQUU7Q0FDeEIsQ0FBQyxDQUFDO0FBV0gsU0FBUyx1QkFBdUIsQ0FBQyxLQUFjO0lBQzdDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsSUFBSSxP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RUFBRTtRQUNwRCxPQUFPLE1BQU0sQ0FBQztLQUNmO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQWhCRCw0Q0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcnJheSwgSW5mZXIsIG9iamVjdCwgc3RyaW5nLCB1bmlvbiwgYm9vbGVhbiwgZGVmaW5lLCBudW1iZXIsIGxpdGVyYWwsIHJlY29yZCwgaXMgfSBmcm9tICdzdXBlcnN0cnVjdCc7XG5cbmV4cG9ydCB0eXBlIFN1aU1vdmVGdW5jdGlvbkFyZ1R5cGVzUmVzcG9uc2UgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZUZ1bmN0aW9uQXJnVHlwZT5bXTtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVGdW5jdGlvbkFyZ1R5cGUgPSB1bmlvbihbc3RyaW5nKCksIG9iamVjdCh7IE9iamVjdDogc3RyaW5nKCkgfSldKTtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVGdW5jdGlvbkFyZ1R5cGVzID0gYXJyYXkoU3VpTW92ZUZ1bmN0aW9uQXJnVHlwZSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlRnVuY3Rpb25BcmdUeXBlcyA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlRnVuY3Rpb25BcmdUeXBlcz47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTW9kdWxlSWQgPSBvYmplY3Qoe1xuICBhZGRyZXNzOiBzdHJpbmcoKSxcbiAgbmFtZTogc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVNb2R1bGVJZCA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlTW9kdWxlSWQ+O1xuXG5leHBvcnQgY29uc3QgU3VpTW92ZVZpc2liaWxpdHkgPSB1bmlvbihbbGl0ZXJhbCgnUHJpdmF0ZScpLCBsaXRlcmFsKCdQdWJsaWMnKSwgbGl0ZXJhbCgnRnJpZW5kJyldKTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVWaXNpYmlsaXR5ID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVWaXNpYmlsaXR5PjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVBYmlsaXR5U2V0ID0gb2JqZWN0KHtcbiAgYWJpbGl0aWVzOiBhcnJheShzdHJpbmcoKSksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVBYmlsaXR5U2V0ID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVBYmlsaXR5U2V0PjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVTdHJ1Y3RUeXBlUGFyYW1ldGVyID0gb2JqZWN0KHtcbiAgY29uc3RyYWludHM6IFN1aU1vdmVBYmlsaXR5U2V0LFxuICBpc1BoYW50b206IGJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VpTW92ZVN0cnVjdFR5cGVQYXJhbWV0ZXIgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZVN0cnVjdFR5cGVQYXJhbWV0ZXI+O1xuXG5leHBvcnQgY29uc3QgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlUGFyYW1ldGVyVHlwZSA9IG9iamVjdCh7XG4gIFR5cGVQYXJhbWV0ZXI6IG51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlTm9ybWFsaXplZFR5cGVQYXJhbWV0ZXJUeXBlID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVOb3JtYWxpemVkVHlwZVBhcmFtZXRlclR5cGU+O1xuXG5leHBvcnQgdHlwZSBTdWlNb3ZlTm9ybWFsaXplZFR5cGUgPVxuICB8IHN0cmluZ1xuICB8IFN1aU1vdmVOb3JtYWxpemVkVHlwZVBhcmFtZXRlclR5cGVcbiAgfCB7IFJlZmVyZW5jZTogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlIH1cbiAgfCB7IE11dGFibGVSZWZlcmVuY2U6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSB9XG4gIHwgeyBWZWN0b3I6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSB9XG4gIHwgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3RUeXBlO1xuXG5mdW5jdGlvbiBpc1N1aU1vdmVOb3JtYWxpemVkVHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN1aU1vdmVOb3JtYWxpemVkVHlwZSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICBpZiAoaXModmFsdWUsIFN1aU1vdmVOb3JtYWxpemVkVHlwZVBhcmFtZXRlclR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGlzU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3RUeXBlKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgdmFsdWVQcm9wZXJ0aWVzID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmIChpcyh2YWx1ZVByb3BlcnRpZXMuUmVmZXJlbmNlLCBTdWlNb3ZlTm9ybWFsaXplZFR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGlzKHZhbHVlUHJvcGVydGllcy5NdXRhYmxlUmVmZXJlbmNlLCBTdWlNb3ZlTm9ybWFsaXplZFR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGlzKHZhbHVlUHJvcGVydGllcy5WZWN0b3IsIFN1aU1vdmVOb3JtYWxpemVkVHlwZSkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTm9ybWFsaXplZFR5cGUgPSBkZWZpbmU8U3VpTW92ZU5vcm1hbGl6ZWRUeXBlPignU3VpTW92ZU5vcm1hbGl6ZWRUeXBlJywgaXNTdWlNb3ZlTm9ybWFsaXplZFR5cGUpO1xuXG5leHBvcnQgdHlwZSBTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGUgPSB7XG4gIFN0cnVjdDoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBtb2R1bGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZUFyZ3VtZW50czogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlW107XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1N1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHZhbHVlUHJvcGVydGllcyA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIXZhbHVlUHJvcGVydGllcy5TdHJ1Y3QgfHwgdHlwZW9mIHZhbHVlUHJvcGVydGllcy5TdHJ1Y3QgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RydWN0UHJvcGVydGllcyA9IHZhbHVlUHJvcGVydGllcy5TdHJ1Y3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmIChcbiAgICB0eXBlb2Ygc3RydWN0UHJvcGVydGllcy5hZGRyZXNzICE9PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiBzdHJ1Y3RQcm9wZXJ0aWVzLm1vZHVsZSAhPT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2Ygc3RydWN0UHJvcGVydGllcy5uYW1lICE9PSAnc3RyaW5nJyB8fFxuICAgICFBcnJheS5pc0FycmF5KHN0cnVjdFByb3BlcnRpZXMudHlwZUFyZ3VtZW50cykgfHxcbiAgICAhc3RydWN0UHJvcGVydGllcy50eXBlQXJndW1lbnRzLmV2ZXJ5KCh2YWx1ZSkgPT4gaXNTdWlNb3ZlTm9ybWFsaXplZFR5cGUodmFsdWUpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gTk9URTogVGhpcyB0eXBlIGlzIHJlY3Vyc2l2ZSwgc28gd2UgbmVlZCB0byBtYW51YWxseSBpbXBsZW1lbnQgaXQ6XG5leHBvcnQgY29uc3QgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3RUeXBlID0gZGVmaW5lPFN1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZT4oXG4gICdTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGUnLFxuICBpc1N1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZVxuKTtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkRnVuY3Rpb24gPSBvYmplY3Qoe1xuICB2aXNpYmlsaXR5OiBTdWlNb3ZlVmlzaWJpbGl0eSxcbiAgaXNFbnRyeTogYm9vbGVhbigpLFxuICB0eXBlUGFyYW1ldGVyczogYXJyYXkoU3VpTW92ZUFiaWxpdHlTZXQpLFxuICBwYXJhbWV0ZXJzOiBhcnJheShTdWlNb3ZlTm9ybWFsaXplZFR5cGUpLFxuICByZXR1cm46IGFycmF5KFN1aU1vdmVOb3JtYWxpemVkVHlwZSksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVOb3JtYWxpemVkRnVuY3Rpb24gPSBJbmZlcjx0eXBlb2YgU3VpTW92ZU5vcm1hbGl6ZWRGdW5jdGlvbj47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTm9ybWFsaXplZEZpZWxkID0gb2JqZWN0KHtcbiAgbmFtZTogc3RyaW5nKCksXG4gIHR5cGU6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRGaWVsZCA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlTm9ybWFsaXplZEZpZWxkPjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkU3RydWN0ID0gb2JqZWN0KHtcbiAgYWJpbGl0aWVzOiBTdWlNb3ZlQWJpbGl0eVNldCxcbiAgdHlwZVBhcmFtZXRlcnM6IGFycmF5KFN1aU1vdmVTdHJ1Y3RUeXBlUGFyYW1ldGVyKSxcbiAgZmllbGRzOiBhcnJheShTdWlNb3ZlTm9ybWFsaXplZEZpZWxkKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3QgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3Q+O1xuXG5leHBvcnQgY29uc3QgU3VpTW92ZU5vcm1hbGl6ZWRNb2R1bGUgPSBvYmplY3Qoe1xuICBmaWxlRm9ybWF0VmVyc2lvbjogbnVtYmVyKCksXG4gIGFkZHJlc3M6IHN0cmluZygpLFxuICBuYW1lOiBzdHJpbmcoKSxcbiAgZnJpZW5kczogYXJyYXkoU3VpTW92ZU1vZHVsZUlkKSxcbiAgc3RydWN0czogcmVjb3JkKHN0cmluZygpLCBTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdCksXG4gIGV4cG9zZWRGdW5jdGlvbnM6IHJlY29yZChzdHJpbmcoKSwgU3VpTW92ZU5vcm1hbGl6ZWRGdW5jdGlvbiksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlPjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlcyA9IHJlY29yZChzdHJpbmcoKSwgU3VpTW92ZU5vcm1hbGl6ZWRNb2R1bGUpO1xuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRNb2R1bGVzID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TXV0YWJsZVJlZmVyZW5jZShub3JtYWxpemVkVHlwZTogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKTogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiBub3JtYWxpemVkVHlwZSA9PT0gJ29iamVjdCcgJiYgJ011dGFibGVSZWZlcmVuY2UnIGluIG5vcm1hbGl6ZWRUeXBlXG4gICAgPyBub3JtYWxpemVkVHlwZS5NdXRhYmxlUmVmZXJlbmNlXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UmVmZXJlbmNlKG5vcm1hbGl6ZWRUeXBlOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUpOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIG5vcm1hbGl6ZWRUeXBlID09PSAnb2JqZWN0JyAmJiAnUmVmZXJlbmNlJyBpbiBub3JtYWxpemVkVHlwZSA/IG5vcm1hbGl6ZWRUeXBlLlJlZmVyZW5jZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdHJ1Y3RUYWcobm9ybWFsaXplZFR5cGU6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSk6IFN1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZSB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZFR5cGUgPT09ICdvYmplY3QnICYmICdTdHJ1Y3QnIGluIG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRUeXBlO1xuICB9XG5cbiAgY29uc3QgcmVmID0gZXh0cmFjdFJlZmVyZW5jZShub3JtYWxpemVkVHlwZSk7XG4gIGNvbnN0IG11dFJlZiA9IGV4dHJhY3RNdXRhYmxlUmVmZXJlbmNlKG5vcm1hbGl6ZWRUeXBlKTtcblxuICBpZiAodHlwZW9mIHJlZiA9PT0gJ29iamVjdCcgJiYgJ1N0cnVjdCcgaW4gcmVmKSB7XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbXV0UmVmID09PSAnb2JqZWN0JyAmJiAnU3RydWN0JyBpbiBtdXRSZWYpIHtcbiAgICByZXR1cm4gbXV0UmVmO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbXlzdGVubGFiL3R5cGVzL25vcm1hbGl6ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0lBLDBEQUlDO0FBRUQsNENBRUM7QUFFRCw0Q0FnQkM7QUExSkQsNkNBQWdIO0FBSW5HLFFBQUEsc0JBQXNCLEdBQUcsSUFBQSxtQkFBSyxFQUFDLENBQUMsSUFBQSxvQkFBTSxHQUFFLEVBQUUsSUFBQSxvQkFBTSxFQUFDLEVBQUUsTUFBTSxFQUFFLElBQUEsb0JBQU0sR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFekUsUUFBQSx1QkFBdUIsR0FBRyxJQUFBLG1CQUFLLEVBQUMsOEJBQXNCLENBQUMsQ0FBQztBQUd4RCxRQUFBLGVBQWUsR0FBRyxJQUFBLG9CQUFNLEVBQUM7SUFDcEMsT0FBTyxFQUFFLElBQUEsb0JBQU0sR0FBRTtJQUNqQixJQUFJLEVBQUUsSUFBQSxvQkFBTSxHQUFFO0NBQ2YsQ0FBQyxDQUFDO0FBR1UsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLG1CQUFLLEVBQUMsQ0FBQyxJQUFBLHFCQUFPLEVBQUMsU0FBUyxDQUFDLEVBQUUsSUFBQSxxQkFBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUEscUJBQU8sRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFHdEYsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLG9CQUFNLEVBQUM7SUFDdEMsU0FBUyxFQUFFLElBQUEsbUJBQUssRUFBQyxJQUFBLG9CQUFNLEdBQUUsQ0FBQztDQUMzQixDQUFDLENBQUM7QUFHVSxRQUFBLDBCQUEwQixHQUFHLElBQUEsb0JBQU0sRUFBQztJQUMvQyxXQUFXLEVBQUUseUJBQWlCO0lBQzlCLFNBQVMsRUFBRSxJQUFBLHFCQUFPLEdBQUU7Q0FDckIsQ0FBQyxDQUFDO0FBR1UsUUFBQSxrQ0FBa0MsR0FBRyxJQUFBLG9CQUFNLEVB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LE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV2RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3JELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXJyYXksIEluZmVyLCBvYmplY3QsIHN0cmluZywgdW5pb24sIGJvb2xlYW4sIGRlZmluZSwgbnVtYmVyLCBsaXRlcmFsLCByZWNvcmQsIGlzIH0gZnJvbSAnc3VwZXJzdHJ1Y3QnO1xuXG5leHBvcnQgdHlwZSBTdWlNb3ZlRnVuY3Rpb25BcmdUeXBlc1Jlc3BvbnNlID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVGdW5jdGlvbkFyZ1R5cGU+W107XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlRnVuY3Rpb25BcmdUeXBlID0gdW5pb24oW3N0cmluZygpLCBvYmplY3QoeyBPYmplY3Q6IHN0cmluZygpIH0pXSk7XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlRnVuY3Rpb25BcmdUeXBlcyA9IGFycmF5KFN1aU1vdmVGdW5jdGlvbkFyZ1R5cGUpO1xuZXhwb3J0IHR5cGUgU3VpTW92ZUZ1bmN0aW9uQXJnVHlwZXMgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZUZ1bmN0aW9uQXJnVHlwZXM+O1xuXG5leHBvcnQgY29uc3QgU3VpTW92ZU1vZHVsZUlkID0gb2JqZWN0KHtcbiAgYWRkcmVzczogc3RyaW5nKCksXG4gIG5hbWU6IHN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlTW9kdWxlSWQgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZU1vZHVsZUlkPjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVWaXNpYmlsaXR5ID0gdW5pb24oW2xpdGVyYWwoJ1ByaXZhdGUnKSwgbGl0ZXJhbCgnUHVibGljJyksIGxpdGVyYWwoJ0ZyaWVuZCcpXSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlVmlzaWJpbGl0eSA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlVmlzaWJpbGl0eT47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlQWJpbGl0eVNldCA9IG9iamVjdCh7XG4gIGFiaWxpdGllczogYXJyYXkoc3RyaW5nKCkpLFxufSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlQWJpbGl0eVNldCA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlQWJpbGl0eVNldD47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlU3RydWN0VHlwZVBhcmFtZXRlciA9IG9iamVjdCh7XG4gIGNvbnN0cmFpbnRzOiBTdWlNb3ZlQWJpbGl0eVNldCxcbiAgaXNQaGFudG9tOiBib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVTdHJ1Y3RUeXBlUGFyYW1ldGVyID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVTdHJ1Y3RUeXBlUGFyYW1ldGVyPjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkVHlwZVBhcmFtZXRlclR5cGUgPSBvYmplY3Qoe1xuICBUeXBlUGFyYW1ldGVyOiBudW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlUGFyYW1ldGVyVHlwZSA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlTm9ybWFsaXplZFR5cGVQYXJhbWV0ZXJUeXBlPjtcblxuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlID1cbiAgfCBzdHJpbmdcbiAgfCBTdWlNb3ZlTm9ybWFsaXplZFR5cGVQYXJhbWV0ZXJUeXBlXG4gIHwgeyBSZWZlcmVuY2U6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSB9XG4gIHwgeyBNdXRhYmxlUmVmZXJlbmNlOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUgfVxuICB8IHsgVmVjdG9yOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUgfVxuICB8IFN1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZTtcblxuZnVuY3Rpb24gaXNTdWlNb3ZlTm9ybWFsaXplZFR5cGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTdWlNb3ZlTm9ybWFsaXplZFR5cGUge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGlzKHZhbHVlLCBTdWlNb3ZlTm9ybWFsaXplZFR5cGVQYXJhbWV0ZXJUeXBlKSkgcmV0dXJuIHRydWU7XG4gIGlmIChpc1N1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZSh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHZhbHVlUHJvcGVydGllcyA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoaXModmFsdWVQcm9wZXJ0aWVzLlJlZmVyZW5jZSwgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKSkgcmV0dXJuIHRydWU7XG4gIGlmIChpcyh2YWx1ZVByb3BlcnRpZXMuTXV0YWJsZVJlZmVyZW5jZSwgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKSkgcmV0dXJuIHRydWU7XG4gIGlmIChpcyh2YWx1ZVByb3BlcnRpZXMuVmVjdG9yLCBTdWlNb3ZlTm9ybWFsaXplZFR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgU3VpTW92ZU5vcm1hbGl6ZWRUeXBlID0gZGVmaW5lPFN1aU1vdmVOb3JtYWxpemVkVHlwZT4oJ1N1aU1vdmVOb3JtYWxpemVkVHlwZScsIGlzU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKTtcblxuZXhwb3J0IHR5cGUgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3RUeXBlID0ge1xuICBTdHJ1Y3Q6IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgbW9kdWxlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGVBcmd1bWVudHM6IFN1aU1vdmVOb3JtYWxpemVkVHlwZVtdO1xuICB9O1xufTtcblxuZnVuY3Rpb24gaXNTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGUge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCB2YWx1ZVByb3BlcnRpZXMgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCF2YWx1ZVByb3BlcnRpZXMuU3RydWN0IHx8IHR5cGVvZiB2YWx1ZVByb3BlcnRpZXMuU3RydWN0ICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHN0cnVjdFByb3BlcnRpZXMgPSB2YWx1ZVByb3BlcnRpZXMuU3RydWN0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoXG4gICAgdHlwZW9mIHN0cnVjdFByb3BlcnRpZXMuYWRkcmVzcyAhPT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2Ygc3RydWN0UHJvcGVydGllcy5tb2R1bGUgIT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHN0cnVjdFByb3BlcnRpZXMubmFtZSAhPT0gJ3N0cmluZycgfHxcbiAgICAhQXJyYXkuaXNBcnJheShzdHJ1Y3RQcm9wZXJ0aWVzLnR5cGVBcmd1bWVudHMpIHx8XG4gICAgIXN0cnVjdFByb3BlcnRpZXMudHlwZUFyZ3VtZW50cy5ldmVyeSgodmFsdWUpID0+IGlzU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKHZhbHVlKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIE5PVEU6IFRoaXMgdHlwZSBpcyByZWN1cnNpdmUsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgaW1wbGVtZW50IGl0OlxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkU3RydWN0VHlwZSA9IGRlZmluZTxTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGU+KFxuICAnU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3RUeXBlJyxcbiAgaXNTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGVcbik7XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTm9ybWFsaXplZEZ1bmN0aW9uID0gb2JqZWN0KHtcbiAgdmlzaWJpbGl0eTogU3VpTW92ZVZpc2liaWxpdHksXG4gIGlzRW50cnk6IGJvb2xlYW4oKSxcbiAgdHlwZVBhcmFtZXRlcnM6IGFycmF5KFN1aU1vdmVBYmlsaXR5U2V0KSxcbiAgcGFyYW1ldGVyczogYXJyYXkoU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKSxcbiAgcmV0dXJuOiBhcnJheShTdWlNb3ZlTm9ybWFsaXplZFR5cGUpLFxufSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlTm9ybWFsaXplZEZ1bmN0aW9uID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVOb3JtYWxpemVkRnVuY3Rpb24+O1xuXG5leHBvcnQgY29uc3QgU3VpTW92ZU5vcm1hbGl6ZWRGaWVsZCA9IG9iamVjdCh7XG4gIG5hbWU6IHN0cmluZygpLFxuICB0eXBlOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUsXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVOb3JtYWxpemVkRmllbGQgPSBJbmZlcjx0eXBlb2YgU3VpTW92ZU5vcm1hbGl6ZWRGaWVsZD47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdCA9IG9iamVjdCh7XG4gIGFiaWxpdGllczogU3VpTW92ZUFiaWxpdHlTZXQsXG4gIHR5cGVQYXJhbWV0ZXJzOiBhcnJheShTdWlNb3ZlU3RydWN0VHlwZVBhcmFtZXRlciksXG4gIGZpZWxkczogYXJyYXkoU3VpTW92ZU5vcm1hbGl6ZWRGaWVsZCksXG59KTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVOb3JtYWxpemVkU3RydWN0ID0gSW5mZXI8dHlwZW9mIFN1aU1vdmVOb3JtYWxpemVkU3RydWN0PjtcblxuZXhwb3J0IGNvbnN0IFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlID0gb2JqZWN0KHtcbiAgZmlsZUZvcm1hdFZlcnNpb246IG51bWJlcigpLFxuICBhZGRyZXNzOiBzdHJpbmcoKSxcbiAgbmFtZTogc3RyaW5nKCksXG4gIGZyaWVuZHM6IGFycmF5KFN1aU1vdmVNb2R1bGVJZCksXG4gIHN0cnVjdHM6IHJlY29yZChzdHJpbmcoKSwgU3VpTW92ZU5vcm1hbGl6ZWRTdHJ1Y3QpLFxuICBleHBvc2VkRnVuY3Rpb25zOiByZWNvcmQoc3RyaW5nKCksIFN1aU1vdmVOb3JtYWxpemVkRnVuY3Rpb24pLFxufSk7XG5leHBvcnQgdHlwZSBTdWlNb3ZlTm9ybWFsaXplZE1vZHVsZSA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlTm9ybWFsaXplZE1vZHVsZT47XG5cbmV4cG9ydCBjb25zdCBTdWlNb3ZlTm9ybWFsaXplZE1vZHVsZXMgPSByZWNvcmQoc3RyaW5nKCksIFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlKTtcbmV4cG9ydCB0eXBlIFN1aU1vdmVOb3JtYWxpemVkTW9kdWxlcyA9IEluZmVyPHR5cGVvZiBTdWlNb3ZlTm9ybWFsaXplZE1vZHVsZXM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE11dGFibGVSZWZlcmVuY2Uobm9ybWFsaXplZFR5cGU6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSk6IFN1aU1vdmVOb3JtYWxpemVkVHlwZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2Ygbm9ybWFsaXplZFR5cGUgPT09ICdvYmplY3QnICYmICdNdXRhYmxlUmVmZXJlbmNlJyBpbiBub3JtYWxpemVkVHlwZVxuICAgID8gbm9ybWFsaXplZFR5cGUuTXV0YWJsZVJlZmVyZW5jZVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJlZmVyZW5jZShub3JtYWxpemVkVHlwZTogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlKTogU3VpTW92ZU5vcm1hbGl6ZWRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiBub3JtYWxpemVkVHlwZSA9PT0gJ29iamVjdCcgJiYgJ1JlZmVyZW5jZScgaW4gbm9ybWFsaXplZFR5cGUgPyBub3JtYWxpemVkVHlwZS5SZWZlcmVuY2UgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3RydWN0VGFnKG5vcm1hbGl6ZWRUeXBlOiBTdWlNb3ZlTm9ybWFsaXplZFR5cGUpOiBTdWlNb3ZlTm9ybWFsaXplZFN0cnVjdFR5cGUgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRUeXBlID09PSAnb2JqZWN0JyAmJiAnU3RydWN0JyBpbiBub3JtYWxpemVkVHlwZSkge1xuICAgIHJldHVybiBub3JtYWxpemVkVHlwZTtcbiAgfVxuXG4gIGNvbnN0IHJlZiA9IGV4dHJhY3RSZWZlcmVuY2Uobm9ybWFsaXplZFR5cGUpO1xuICBjb25zdCBtdXRSZWYgPSBleHRyYWN0TXV0YWJsZVJlZmVyZW5jZShub3JtYWxpemVkVHlwZSk7XG5cbiAgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmICdTdHJ1Y3QnIGluIHJlZikge1xuICAgIHJldHVybiByZWY7XG4gIH1cblxuICBpZiAodHlwZW9mIG11dFJlZiA9PT0gJ29iamVjdCcgJiYgJ1N0cnVjdCcgaW4gbXV0UmVmKSB7XG4gICAgcmV0dXJuIG11dFJlZjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19