occam-furtle 3.0.521 → 3.0.524

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 (59) hide show
  1. package/lib/element/all.js +126 -0
  2. package/lib/element/assignment/object.js +23 -1
  3. package/lib/element/error.js +3 -3
  4. package/lib/element/every.js +13 -13
  5. package/lib/element/exists.js +39 -0
  6. package/lib/element/expression.js +18 -2
  7. package/lib/element/importStatement.js +3 -2
  8. package/lib/element/procedure.js +2 -1
  9. package/lib/element/procedureCall.js +8 -1
  10. package/lib/element/reduce.js +5 -5
  11. package/lib/element/referenceListLiteral.js +24 -0
  12. package/lib/element/references.js +32 -0
  13. package/lib/element/some.js +7 -7
  14. package/lib/element/terms.js +2 -2
  15. package/lib/element/values.js +16 -3
  16. package/lib/example/furtle/bnf.js +2 -2
  17. package/lib/node/all.js +39 -0
  18. package/lib/node/exists.js +39 -0
  19. package/lib/node/expression.js +9 -1
  20. package/lib/node/references.js +23 -0
  21. package/lib/node/referencesListLiteral.js +27 -0
  22. package/lib/nominalValueProperties.js +34 -18
  23. package/lib/nonTerminalNodeMap.js +10 -2
  24. package/lib/parameterNames.js +5 -1
  25. package/lib/preamble.js +7 -3
  26. package/lib/process/instantiate.js +1 -1
  27. package/lib/ruleNames.js +17 -1
  28. package/lib/utilities/element.js +110 -7
  29. package/lib/utilities/string.js +38 -5
  30. package/package.json +5 -5
  31. package/src/element/all.js +119 -0
  32. package/src/element/assignment/object.js +48 -1
  33. package/src/element/error.js +3 -3
  34. package/src/element/every.js +14 -12
  35. package/src/element/exists.js +42 -0
  36. package/src/element/expression.js +19 -1
  37. package/src/element/importStatement.js +3 -1
  38. package/src/element/procedure.js +2 -0
  39. package/src/element/procedureCall.js +14 -0
  40. package/src/element/reduce.js +4 -4
  41. package/src/element/referenceListLiteral.js +19 -0
  42. package/src/element/references.js +31 -0
  43. package/src/element/some.js +7 -6
  44. package/src/element/terms.js +1 -1
  45. package/src/element/values.js +26 -2
  46. package/src/example/furtle/bnf.js +1 -1
  47. package/src/node/all.js +44 -0
  48. package/src/node/exists.js +44 -0
  49. package/src/node/expression.js +17 -1
  50. package/src/node/references.js +16 -0
  51. package/src/node/referencesListLiteral.js +23 -0
  52. package/src/nominalValueProperties.js +43 -25
  53. package/src/nonTerminalNodeMap.js +15 -3
  54. package/src/parameterNames.js +1 -0
  55. package/src/preamble.js +6 -2
  56. package/src/process/instantiate.js +6 -1
  57. package/src/ruleNames.js +4 -0
  58. package/src/utilities/element.js +147 -14
  59. package/src/utilities/string.js +49 -6
@@ -9,12 +9,18 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get allStringFromVariableAndValues () {
13
+ return allStringFromVariableAndValues;
14
+ },
12
15
  get anonymousProcedureStringFromTypeParametersAndReturnBlock () {
13
16
  return anonymousProcedureStringFromTypeParametersAndReturnBlock;
14
17
  },
15
18
  get everyStringFromVariableAndAnonymousProcedure () {
16
19
  return everyStringFromVariableAndAnonymousProcedure;
17
20
  },
21
+ get existsStringFromVariableAndValues () {
22
+ return existsStringFromVariableAndValues;
23
+ },
18
24
  get expressionStringFromProperties () {
19
25
  return expressionStringFromProperties;
20
26
  },
@@ -39,12 +45,18 @@ _export(exports, {
39
45
  get primtiveStringFromStringLiteral () {
40
46
  return primtiveStringFromStringLiteral;
41
47
  },
48
+ get procedureCallStringFromReferenceAndValues () {
49
+ return procedureCallStringFromReferenceAndValues;
50
+ },
42
51
  get procedureStringFromTypeLabelExportedParametersAndReturnBlock () {
43
52
  return procedureStringFromTypeLabelExportedParametersAndReturnBlock;
44
53
  },
45
54
  get reduceStringFromVariableInitialExpressionAndAnonymousProcedure () {
46
55
  return reduceStringFromVariableInitialExpressionAndAnonymousProcedure;
47
56
  },
57
+ get referencesStringFromReferencesArray () {
58
+ return referencesStringFromReferencesArray;
59
+ },
48
60
  get returnBlockStringFromReturnStatementNode () {
49
61
  return returnBlockStringFromReturnStatementNode;
50
62
  },
@@ -84,6 +96,7 @@ _export(exports, {
84
96
  });
85
97
  const _constants = require("../constants");
86
98
  const _stringLiteral = require("./stringLiteral");
99
+ const _element = require("./element");
87
100
  function ternaryStringFromTerm(term) {
88
101
  const termString = term.getString(), ternaryString = `if (${termString}) { ... } else { ... }`;
89
102
  return ternaryString;
@@ -136,9 +149,9 @@ function valuesStringFromValuesArray(valuesArray) {
136
149
  }, null); ///
137
150
  return valuesString;
138
151
  }
139
- function primtiveStringFromNominalValue(nominalValue) {
140
- const string = nominalValue.getString(), primtiveString = string; ///
141
- return primtiveString;
152
+ function allStringFromVariableAndValues(variable, values) {
153
+ const variableString = variable.getString(), valuesString = values.getString(), allString = valuesString !== _constants.EMPTY_STRING ? `all(${variableString}, ${valuesString})` : `all(${variableString})`;
154
+ return allString;
142
155
  }
143
156
  function expressionStringFromProperties(properties) {
144
157
  let expressionString;
@@ -150,6 +163,10 @@ function expressionStringFromProperties(properties) {
150
163
  });
151
164
  return expressionString;
152
165
  }
166
+ function primtiveStringFromNominalValue(nominalValue) {
167
+ const string = nominalValue.getString(), primtiveString = string; ///
168
+ return primtiveString;
169
+ }
153
170
  function primtiveStringFromStringLiteral(stringLiteral) {
154
171
  const string = (0, _stringLiteral.stringFromStringLiteral)(stringLiteral), primtiveString = string; ///
155
172
  return primtiveString;
@@ -158,12 +175,24 @@ function primtiveStringFromNominalValues(nominalValues) {
158
175
  let primtiveString;
159
176
  primtiveString = nominalValues.reduce((primitiveString, nominalValue)=>{
160
177
  const nominalValueString = nominalValue.getString();
161
- primitiveString = primitiveString !== null ? `${primitiveString}, ${nominalValueString}` : nominalValueString; ///
178
+ primitiveString = primitiveString !== null ? `${primitiveString}, '${nominalValueString}'` : `'${nominalValueString}'`;
162
179
  return primitiveString;
163
180
  }, null);
164
181
  primtiveString = `[${primtiveString}]`;
165
182
  return primtiveString;
166
183
  }
184
+ function existsStringFromVariableAndValues(variable, values) {
185
+ const variableString = variable.getString(), valuesString = values.getString(), existsString = valuesString !== _constants.EMPTY_STRING ? `exists(${variableString}, ${valuesString})` : `exists(${variableString})`;
186
+ return existsString;
187
+ }
188
+ function referencesStringFromReferencesArray(referencesArray) {
189
+ const referencesString = referencesArray.reduce((referencesString, reference)=>{
190
+ const referenceString = reference.getString();
191
+ referencesString = referencesString === null ? referenceString : `${referencesString}, ${referenceString}`;
192
+ return referencesString;
193
+ }, null); ///
194
+ return referencesString;
195
+ }
167
196
  function returnBlockStringFromReturnStatementNode(returnStatement) {
168
197
  const returnStatementString = returnStatement.getString(), returnBlockString = `{ ... ${returnStatementString} }`;
169
198
  return returnBlockString;
@@ -180,6 +209,10 @@ function typeStringFromTypeNameAndArgumentTypeName(typeName, argumentTypeName) {
180
209
  }
181
210
  return typeString;
182
211
  }
212
+ function procedureCallStringFromReferenceAndValues(reference, values) {
213
+ const valuesString = values.getString(), referenceString = reference.getString(), procedureCallString = `${referenceString}(${valuesString})`;
214
+ return procedureCallString;
215
+ }
183
216
  function variableAssignmentStringFromTypeAndVariable(type, variable) {
184
217
  const typeString = type.getString(), variableString = variable.getString(), variableAssignmentString = `${typeString} ${variableString} = ... ;`;
185
218
  return variableAssignmentString;
@@ -228,4 +261,4 @@ function reduceStringFromVariableInitialExpressionAndAnonymousProcedure(variable
228
261
  return reduceString;
229
262
  }
230
263
 
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFWFBPUlQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4vc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSBgaWYgKCR7dGVybVN0cmluZ30pIHsgLi4uIH0gZWxzZSB7IC4uLiB9YDtcblxuICByZXR1cm4gdGVybmFyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IG5hbWU7ICAvLy9cblxuICByZXR1cm4gdmFyaWFibGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICBsZXQgdGVybVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB0ZXJtU3RyaW5nID0gcHJvcGVydHlTdHJpbmc7ICAvLy9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCB2YWx1ZVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB2YWx1ZVN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmFsdWVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Cb29sZWFuKGJvb2xlYW4pIHtcbiAgY29uc3QgZXhwcmVzc3Npb25TdHJpbmcgPSBgJHtib29sZWFufWA7XG5cbiAgcmV0dXJuIGV4cHJlc3NzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tSW50ZWdlcihpbnRlZ2VyKSB7XG4gIGNvbnN0IGV4cHJlc3NzaW9uU3RyaW5nID0gYCR7aW50ZWdlcn1gO1xuXG4gIHJldHVybiBleHByZXNzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkodGVybXNBcnJheSkge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zQXJyYXkucmVkdWNlKCh0ZXJtc1N0cmluZywgdGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgdGVybXNTdHJpbmcgPSAodGVybXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgIHRlcm1TdHJpbmcgOlxuICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YDtcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSh2YWx1ZXNBcnJheSkge1xuICBjb25zdCB2YWx1ZXNTdHJpbmcgPSB2YWx1ZXNBcnJheS5yZWR1Y2UoKHZhbHVlc1N0cmluZywgdmFsdWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgdmFsdWVzU3RyaW5nID0gKHZhbHVlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHt2YWx1ZXNTdHJpbmd9LCAke3ZhbHVlU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFsdWVzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHZhbHVlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbU5vbWluYWxWYWx1ZShub21pbmFsVmFsdWUpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpLFxuICAgICAgICBwcmltdGl2ZVN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCBleHByZXNzaW9uU3RyaW5nO1xuXG4gIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICBpZiAocHJvcGVydHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHkuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBwcm9wZXJ0eVN0cmluZzsgIC8vL1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsKHN0cmluZ0xpdGVyYWwpIHtcbiAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwoc3RyaW5nTGl0ZXJhbCksXG4gICAgICAgIHByaW10aXZlU3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHByaW10aXZlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyhub21pbmFsVmFsdWVzKSB7XG4gIGxldCBwcmltdGl2ZVN0cmluZztcblxuICBwcmltdGl2ZVN0cmluZyA9IG5vbWluYWxWYWx1ZXMucmVkdWNlKChwcmltaXRpdmVTdHJpbmcsIG5vbWluYWxWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IG5vbWluYWxWYWx1ZVN0cmluZyA9IG5vbWluYWxWYWx1ZS5nZXRTdHJpbmcoKTtcblxuICAgIHByaW1pdGl2ZVN0cmluZyA9IChwcmltaXRpdmVTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJpbWl0aXZlU3RyaW5nfSwgJHtub21pbmFsVmFsdWVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gcHJpbWl0aXZlU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICBwcmltdGl2ZVN0cmluZyA9IGBbJHtwcmltdGl2ZVN0cmluZ31dYDtcblxuICByZXR1cm4gcHJpbXRpdmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnRTdHJpbmcgPSByZXR1cm5TdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gYHsgLi4uICR7cmV0dXJuU3RhdGVtZW50U3RyaW5nfSB9YDtcblxuICByZXR1cm4gcmV0dXJuQmxvY2tTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZShuYW1lLCB0eXBlKSB7XG4gIGNvbnN0IG5hbWVTdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyA9IGAke3R5cGVTdHJpbmd9ICR7bmFtZVN0cmluZ31gO1xuXG4gIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lKHR5cGVOYW1lLCBhcmd1bWVudFR5cGVOYW1lKSB7XG4gIGxldCB0eXBlU3RyaW5nO1xuXG4gIHR5cGVTdHJpbmcgPSBgJHt0eXBlTmFtZX1gO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgdHlwZVN0cmluZyA9IGAke3R5cGVTdHJpbmd9PCR7YXJndW1lbnRUeXBlTmFtZX0+YDtcbiAgfVxuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dHlwZVN0cmluZ30gJHt2YXJpYWJsZVN0cmluZ30gPSAuLi4gO2A7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBgU29tZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9KSBgO1xuXG4gIHJldHVybiBzb21lU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gYEV2ZXJ5KCR7dmFyaWFibGVTdHJpbmd9LCAke2Fub255bW91c1Byb2NlZHVyZVN0cmluZ30pIGA7XG5cbiAgcmV0dXJuIGV2ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpIHtcbiAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZUFzc2lnbm1lbnQuZ2V0VmFyaWFibGUoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dmFyaWFibGVTdHJpbmd9ID0gLi4uYDtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAoJHtwYXJhbWV0ZXJzU3RyaW5nfSkgJHtyZXR1cm5CbG9ja1N0cmluZ31gO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nRnJvbU5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheShub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkpIHtcbiAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9IG5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheS5yZWR1Y2UoKG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcsIG5vbWluYWxWYWx1ZVByb3BlcnR5KSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmcgPSBub21pbmFsVmFsdWVQcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgIG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcgPSAobm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ30sICR7bm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmd9YDtcblxuICAgIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcblxuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICB2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LnJlZHVjZSgodmFyaWFibGVBc3NpZ25tZW50c1N0cmluZywgdmFyaWFibGVBc3NpZ25tZW50KSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZyA9ICh2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgOlxuICAgICAgYCR7dmFyaWFibGVBc3NpZ25tZW50c1N0cmluZ30sICR7dmFyaWFibGVBc3NpZ25tZW50U3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAke3ZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmd9IDtgOyAvLy9cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICBleHBvcnRTVHJpbmcgPSBleHBvcnRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtFWFBPUlR9IGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBgJHtleHBvcnRTVHJpbmd9JHt0eXBlU3RyaW5nfSAke2xhYmVsU3RyaW5nfSgke3BhcmFtZXRlcnNTdHJpbmd9KSAke3JldHVybkJsb2NrU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsRXhwcmVzc2lvbiwgYW5vbnltb3VzUHJvY2VkdXJlKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGluaXRpYWxFeHByZXNzaW9uU3RyaW5nID0gaW5pdGlhbEV4cHJlc3Npb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gYFJlZHVjZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9LCAke2luaXRpYWxFeHByZXNzaW9uU3RyaW5nfSlgO1xuXG4gIHJldHVybiByZWR1Y2VTdHJpbmc7XG59XG5cbiJdLCJuYW1lcyI6WyJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwibm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ0Zyb21Ob21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZSIsInByaW10aXZlU3RyaW5nRnJvbUJvb2xlYW4iLCJwcmltdGl2ZVN0cmluZ0Zyb21JbnRlZ2VyIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyIsInByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwiLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsRXhwb3J0ZWRQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybXNTdHJpbmdGcm9tVGVybXNBcnJheSIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lIiwidmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyIsInZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21WYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZVN0cmluZ0Zyb21OYW1lIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nIiwibmFtZSIsInZhcmlhYmxlU3RyaW5nIiwicHJvcGVydGllcyIsImZvckVhY2giLCJwcm9wZXJ0eSIsInByb3BlcnR5U3RyaW5nIiwidmFsdWVTdHJpbmciLCJib29sZWFuIiwiZXhwcmVzc3Npb25TdHJpbmciLCJpbnRlZ2VyIiwidGVybXNBcnJheSIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidmFsdWVzQXJyYXkiLCJ2YWx1ZXNTdHJpbmciLCJ2YWx1ZSIsIm5vbWluYWxWYWx1ZSIsInN0cmluZyIsInByaW10aXZlU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZyIsInN0cmluZ0xpdGVyYWwiLCJzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbCIsIm5vbWluYWxWYWx1ZXMiLCJwcmltaXRpdmVTdHJpbmciLCJub21pbmFsVmFsdWVTdHJpbmciLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5TdGF0ZW1lbnRTdHJpbmciLCJyZXR1cm5CbG9ja1N0cmluZyIsInR5cGUiLCJuYW1lU3RyaW5nIiwidHlwZVN0cmluZyIsIm5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIiwidHlwZU5hbWUiLCJhcmd1bWVudFR5cGVOYW1lIiwidmFyaWFibGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJzb21lU3RyaW5nIiwiZXZlcnlTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJnZXRWYXJpYWJsZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInBhcmFtZXRlcnNTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nIiwibm9taW5hbFZhbHVlUHJvcGVydHkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nIiwibGFiZWwiLCJleHBvcnRlZCIsImxhYmVsU3RyaW5nIiwiZXhwb3J0U1RyaW5nIiwiRVhQT1JUIiwiRU1QVFlfU1RSSU5HIiwicHJvY2VkdXJlU3RyaW5nIiwiaW5pdGlhbEV4cHJlc3Npb24iLCJpbml0aWFsRXhwcmVzc2lvblN0cmluZyIsInJlZHVjZVN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBK0xnQkE7ZUFBQUE7O1FBaEJBQztlQUFBQTs7UUFsRkFDO2VBQUFBOztRQTJHQUM7ZUFBQUE7O1FBN0RBQztlQUFBQTs7UUE3RkFDO2VBQUFBOztRQU1BQztlQUFBQTs7UUFrQ0FDO2VBQUFBOztRQTRCQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQStIQUM7ZUFBQUE7O1FBYUFDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUFySkFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUE4SUFDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBd0NBQztlQUFBQTs7UUF1RkFDO2VBQUFBOztRQXVEQUM7ZUFBQUE7O1FBL0JBQztlQUFBQTs7UUEzS0FDO2VBQUFBOzs7MkJBVnFCOytCQUNHO0FBRWpDLFNBQVNQLHNCQUFzQlEsSUFBSTtJQUN4QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTLElBQzNCQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUVGLFdBQVcsc0JBQXNCLENBQUM7SUFFL0QsT0FBT0U7QUFDVDtBQUVPLFNBQVNKLHVCQUF1QkssSUFBSTtJQUN6QyxNQUFNQyxpQkFBaUJELE1BQU8sR0FBRztJQUVqQyxPQUFPQztBQUNUO0FBRU8sU0FBU2YseUJBQXlCZ0IsVUFBVTtJQUNqRCxJQUFJTDtJQUVKSyxXQUFXQyxPQUFPLENBQUMsQ0FBQ0M7UUFDbEIsSUFBSUEsYUFBYSxNQUFNO1lBQ3JCLE1BQU1DLGlCQUFpQkQsU0FBU04sU0FBUztZQUV6Q0QsYUFBYVEsZ0JBQWlCLEdBQUc7UUFDbkM7SUFDRjtJQUVBLE9BQU9SO0FBQ1Q7QUFFTyxTQUFTUCwwQkFBMEJZLFVBQVU7SUFDbEQsSUFBSUk7SUFFSkosV0FBV0MsT0FBTyxDQUFDLENBQUNDO1FBQ2xCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNQyxpQkFBaUJELFNBQVNOLFNBQVM7WUFFekNRLGNBQWNELGdCQUFpQixHQUFHO1FBQ3BDO0lBQ0Y7SUFFQSxPQUFPQztBQUNUO0FBRU8sU0FBUzdCLDBCQUEwQjhCLE9BQU87SUFDL0MsTUFBTUMsb0JBQW9CLEdBQUdELFNBQVM7SUFFdEMsT0FBT0M7QUFDVDtBQUVPLFNBQVM5QiwwQkFBMEIrQixPQUFPO0lBQy9DLE1BQU1ELG9CQUFvQixHQUFHQyxTQUFTO0lBRXRDLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTckIsMEJBQTBCdUIsVUFBVTtJQUNsRCxNQUFNQyxjQUFjRCxXQUFXRSxNQUFNLENBQUMsQ0FBQ0QsYUFBYWY7UUFDbEQsTUFBTUMsYUFBYUQsS0FBS0UsU0FBUztRQUVqQ2EsY0FBYyxBQUFDQSxnQkFBZ0IsT0FDN0JkLGFBQ0EsR0FBR2MsWUFBWSxFQUFFLEVBQUVkLFlBQVk7UUFFakMsT0FBT2M7SUFDVCxHQUFHLE9BQU8sR0FBRztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTcEIsNEJBQTRCc0IsV0FBVztJQUNyRCxNQUFNQyxlQUFlRCxZQUFZRCxNQUFNLENBQUMsQ0FBQ0UsY0FBY0M7UUFDckQsTUFBTVQsY0FBY1MsTUFBTWpCLFNBQVM7UUFFbkNnQixlQUFlLEFBQUNBLGlCQUFpQixPQUNoQlIsY0FDRSxHQUFHUSxhQUFhLEVBQUUsRUFBRVIsYUFBYTtRQUVwRCxPQUFPUTtJQUNULEdBQUcsT0FBTyxHQUFHO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNuQywrQkFBK0JxQyxZQUFZO0lBQ3pELE1BQU1DLFNBQVNELGFBQWFsQixTQUFTLElBQy9Cb0IsaUJBQWlCRCxRQUFTLEdBQUc7SUFFbkMsT0FBT0M7QUFDVDtBQUVPLFNBQVM1QywrQkFBK0I0QixVQUFVO0lBQ3ZELElBQUlpQjtJQUVKakIsV0FBV0MsT0FBTyxDQUFDLENBQUNDO1FBQ2xCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNQyxpQkFBaUJELFNBQVNOLFNBQVM7WUFFekNxQixtQkFBbUJkLGdCQUFpQixHQUFHO1FBQ3pDO0lBQ0Y7SUFFQSxPQUFPYztBQUNUO0FBRU8sU0FBU3RDLGdDQUFnQ3VDLGFBQWE7SUFDM0QsTUFBTUgsU0FBU0ksSUFBQUEsc0NBQXVCLEVBQUNELGdCQUNqQ0YsaUJBQWlCRCxRQUFTLEdBQUc7SUFFbkMsT0FBT0M7QUFDVDtBQUVPLFNBQVN0QyxnQ0FBZ0MwQyxhQUFhO0lBQzNELElBQUlKO0lBRUpBLGlCQUFpQkksY0FBY1YsTUFBTSxDQUFDLENBQUNXLGlCQUFpQlA7UUFDdEQsTUFBTVEscUJBQXFCUixhQUFhbEIsU0FBUztRQUVqRHlCLGtCQUFrQixBQUFDQSxvQkFBb0IsT0FDcEIsR0FBR0EsZ0JBQWdCLEVBQUUsRUFBRUMsb0JBQW9CLEdBQ3hDQSxvQkFBb0IsR0FBRztRQUU3QyxPQUFPRDtJQUNULEdBQUc7SUFFSEwsaUJBQWlCLENBQUMsQ0FBQyxFQUFFQSxlQUFlLENBQUMsQ0FBQztJQUV0QyxPQUFPQTtBQUNUO0FBRU8sU0FBU2xDLHlDQUF5Q3lDLGVBQWU7SUFDdEUsTUFBTUMsd0JBQXdCRCxnQkFBZ0IzQixTQUFTLElBQ2pENkIsb0JBQW9CLENBQUMsTUFBTSxFQUFFRCxzQkFBc0IsRUFBRSxDQUFDO0lBRTVELE9BQU9DO0FBQ1Q7QUFFTyxTQUFTbkQsMENBQTBDd0IsSUFBSSxFQUFFNEIsSUFBSTtJQUNsRSxNQUFNQyxhQUFhN0IsTUFDYjhCLGFBQWFGLEtBQUs5QixTQUFTLElBQzNCaUMsNkJBQTZCLEdBQUdELFdBQVcsQ0FBQyxFQUFFRCxZQUFZO0lBRWhFLE9BQU9FO0FBQ1Q7QUFFTyxTQUFTMUMsMENBQTBDMkMsUUFBUSxFQUFFQyxnQkFBZ0I7SUFDbEYsSUFBSUg7SUFFSkEsYUFBYSxHQUFHRSxVQUFVO0lBRTFCLElBQUlDLHFCQUFxQixNQUFNO1FBQzdCSCxhQUFhLEdBQUdBLFdBQVcsQ0FBQyxFQUFFRyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25EO0lBRUEsT0FBT0g7QUFDVDtBQUVPLFNBQVN0Qyw0Q0FBNENvQyxJQUFJLEVBQUVNLFFBQVE7SUFDeEUsTUFBTUosYUFBYUYsS0FBSzlCLFNBQVMsSUFDM0JHLGlCQUFpQmlDLFNBQVNwQyxTQUFTLElBQ25DcUMsMkJBQTJCLEdBQUdMLFdBQVcsQ0FBQyxFQUFFN0IsZUFBZSxRQUFRLENBQUM7SUFFMUUsT0FBT2tDO0FBQ1Q7QUFFTyxTQUFTbEQsNENBQTRDaUQsUUFBUSxFQUFFRSxrQkFBa0I7SUFDdEYsTUFBTW5DLGlCQUFpQmlDLFNBQVNwQyxTQUFTLElBQ25DdUMsMkJBQTJCRCxtQkFBbUJ0QyxTQUFTLElBQ3ZEd0MsYUFBYSxDQUFDLEtBQUssRUFBRXJDLGVBQWUsRUFBRSxFQUFFb0MseUJBQXlCLEVBQUUsQ0FBQztJQUUxRSxPQUFPQztBQUNUO0FBRU8sU0FBU2pFLDZDQUE2QzZELFFBQVEsRUFBRUUsa0JBQWtCO0lBQ3ZGLE1BQU1uQyxpQkFBaUJpQyxTQUFTcEMsU0FBUyxJQUNuQ3VDLDJCQUEyQkQsbUJBQW1CdEMsU0FBUyxJQUN2RHlDLGNBQWMsQ0FBQyxNQUFNLEVBQUV0QyxlQUFlLEVBQUUsRUFBRW9DLHlCQUF5QixFQUFFLENBQUM7SUFFNUUsT0FBT0U7QUFDVDtBQUVPLFNBQVM3QywrQ0FBK0M4QyxrQkFBa0I7SUFDL0UsTUFBTU4sV0FBV00sbUJBQW1CQyxXQUFXLElBQ3pDeEMsaUJBQWlCaUMsU0FBU3BDLFNBQVMsSUFDbkNxQywyQkFBMkIsR0FBR2xDLGVBQWUsTUFBTSxDQUFDO0lBRTFELE9BQU9rQztBQUNUO0FBRU8sU0FBUy9ELHlEQUF5RHdELElBQUksRUFBRWMsVUFBVSxFQUFFQyxXQUFXO0lBQ3BHLE1BQU1iLGFBQWFGLEtBQUs5QixTQUFTLElBQzNCOEMsbUJBQW1CRixXQUFXNUMsU0FBUyxJQUN2QzZCLG9CQUFvQmdCLFlBQVk3QyxTQUFTLElBQ3pDdUMsMkJBQTJCLEdBQUdQLFdBQVcsRUFBRSxFQUFFYyxpQkFBaUIsRUFBRSxFQUFFakIsbUJBQW1CO0lBRTNGLE9BQU9VO0FBQ1Q7QUFFTyxTQUFTOUQsNERBQTREc0UsMkJBQTJCO0lBQ3JHLE1BQU1DLCtCQUErQkQsNEJBQTRCakMsTUFBTSxDQUFDLENBQUNrQyw4QkFBOEJDO1FBQ3JHLE1BQU1oQiw2QkFBNkJnQixxQkFBcUJqRCxTQUFTO1FBRWpFZ0QsK0JBQStCLEFBQUNBLGlDQUFpQyxPQUNoQ2YsNkJBQ0MsR0FBR2UsNkJBQTZCLEVBQUUsRUFBRWYsNEJBQTRCO1FBRWxHLE9BQU9lO0lBQ1QsR0FBRztJQUVILE9BQU9BO0FBQ1Q7QUFFTyxTQUFTckQsNERBQTREbUMsSUFBSSxFQUFFb0Isd0JBQXdCO0lBQ3hHLElBQUlDO0lBRUosTUFBTW5CLGFBQWFGLEtBQUs5QixTQUFTO0lBRWpDbUQsNEJBQTRCRCx5QkFBeUJwQyxNQUFNLENBQUMsQ0FBQ3FDLDJCQUEyQlQ7UUFDdEYsTUFBTUwsMkJBQTJCekMsK0NBQStDOEM7UUFFaEZTLDRCQUE0QixBQUFDQSw4QkFBOEIsT0FDekRkLDJCQUNBLEdBQUdjLDBCQUEwQixFQUFFLEVBQUVkLDBCQUEwQjtRQUU3RCxPQUFPYztJQUNULEdBQUcsT0FBTyxHQUFHO0lBRWJBLDRCQUE0QixHQUFHbkIsV0FBVyxDQUFDLEVBQUVtQiwwQkFBMEIsRUFBRSxDQUFDLEVBQUUsR0FBRztJQUUvRSxPQUFPQTtBQUNUO0FBRU8sU0FBU25FLDZEQUE2RDhDLElBQUksRUFBRXNCLEtBQUssRUFBRUMsUUFBUSxFQUFFVCxVQUFVLEVBQUVDLFdBQVc7SUFDekgsTUFBTWIsYUFBYUYsS0FBSzlCLFNBQVMsSUFDM0JzRCxjQUFjRixNQUFNcEQsU0FBUyxJQUM3QnVELGVBQWVGLFdBQ0MsR0FBR0csaUJBQU0sQ0FBQyxDQUFDLENBQUMsR0FDVkMsdUJBQVksRUFDOUJYLG1CQUFtQkYsV0FBVzVDLFNBQVMsSUFDdkM2QixvQkFBb0JnQixZQUFZN0MsU0FBUyxJQUN6QzBELGtCQUFrQixHQUFHSCxlQUFldkIsV0FBVyxDQUFDLEVBQUVzQixZQUFZLENBQUMsRUFBRVIsaUJBQWlCLEVBQUUsRUFBRWpCLG1CQUFtQjtJQUUvRyxPQUFPNkI7QUFDVDtBQUVPLFNBQVN6RSwrREFBK0RtRCxRQUFRLEVBQUV1QixpQkFBaUIsRUFBRXJCLGtCQUFrQjtJQUM1SCxNQUFNbkMsaUJBQWlCaUMsU0FBU3BDLFNBQVMsSUFDbkM0RCwwQkFBMEJELGtCQUFrQjNELFNBQVMsSUFDckR1QywyQkFBMkJELG1CQUFtQnRDLFNBQVMsSUFDdkQ2RCxlQUFlLENBQUMsT0FBTyxFQUFFMUQsZUFBZSxFQUFFLEVBQUVvQyx5QkFBeUIsRUFBRSxFQUFFcUIsd0JBQXdCLENBQUMsQ0FBQztJQUV6RyxPQUFPQztBQUNUIn0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFWFBPUlQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4vc3RyaW5nTGl0ZXJhbFwiO1xuaW1wb3J0IHtyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZX0gZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSBgaWYgKCR7dGVybVN0cmluZ30pIHsgLi4uIH0gZWxzZSB7IC4uLiB9YDtcblxuICByZXR1cm4gdGVybmFyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IG5hbWU7ICAvLy9cblxuICByZXR1cm4gdmFyaWFibGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICBsZXQgdGVybVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB0ZXJtU3RyaW5nID0gcHJvcGVydHlTdHJpbmc7ICAvLy9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCB2YWx1ZVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB2YWx1ZVN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmFsdWVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Cb29sZWFuKGJvb2xlYW4pIHtcbiAgY29uc3QgZXhwcmVzc3Npb25TdHJpbmcgPSBgJHtib29sZWFufWA7XG5cbiAgcmV0dXJuIGV4cHJlc3NzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tSW50ZWdlcihpbnRlZ2VyKSB7XG4gIGNvbnN0IGV4cHJlc3NzaW9uU3RyaW5nID0gYCR7aW50ZWdlcn1gO1xuXG4gIHJldHVybiBleHByZXNzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkodGVybXNBcnJheSkge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zQXJyYXkucmVkdWNlKCh0ZXJtc1N0cmluZywgdGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgdGVybXNTdHJpbmcgPSAodGVybXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgIHRlcm1TdHJpbmcgOlxuICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YDtcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSh2YWx1ZXNBcnJheSkge1xuICBjb25zdCB2YWx1ZXNTdHJpbmcgPSB2YWx1ZXNBcnJheS5yZWR1Y2UoKHZhbHVlc1N0cmluZywgdmFsdWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgdmFsdWVzU3RyaW5nID0gKHZhbHVlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHt2YWx1ZXNTdHJpbmd9LCAke3ZhbHVlU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFsdWVzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHZhbHVlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbFN0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyh2YXJpYWJsZSwgdmFsdWVzKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhbHVlc1N0cmluZyA9IHZhbHVlcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgYWxsU3RyaW5nID0gKHZhbHVlc1N0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgICAgICBgYWxsKCR7dmFyaWFibGVTdHJpbmd9LCAke3ZhbHVlc1N0cmluZ30pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGBhbGwoJHt2YXJpYWJsZVN0cmluZ30pYDtcblxuICByZXR1cm4gYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgbGV0IGV4cHJlc3Npb25TdHJpbmc7XG5cbiAgcHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXhwcmVzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbU5vbWluYWxWYWx1ZShub21pbmFsVmFsdWUpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpLFxuICAgICAgICBwcmltdGl2ZVN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwoc3RyaW5nTGl0ZXJhbCkge1xuICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbChzdHJpbmdMaXRlcmFsKSxcbiAgICAgICAgcHJpbXRpdmVTdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gcHJpbXRpdmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Ob21pbmFsVmFsdWVzKG5vbWluYWxWYWx1ZXMpIHtcbiAgbGV0IHByaW10aXZlU3RyaW5nO1xuXG4gIHByaW10aXZlU3RyaW5nID0gbm9taW5hbFZhbHVlcy5yZWR1Y2UoKHByaW1pdGl2ZVN0cmluZywgbm9taW5hbFZhbHVlKSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlU3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgcHJpbWl0aXZlU3RyaW5nID0gKHByaW1pdGl2ZVN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtwcmltaXRpdmVTdHJpbmd9LCAnJHtub21pbmFsVmFsdWVTdHJpbmd9J2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCcke25vbWluYWxWYWx1ZVN0cmluZ30nYDtcblxuICAgIHJldHVybiBwcmltaXRpdmVTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHByaW10aXZlU3RyaW5nID0gYFske3ByaW10aXZlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0c1N0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyh2YXJpYWJsZSwgdmFsdWVzKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhbHVlc1N0cmluZyA9IHZhbHVlcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhpc3RzU3RyaW5nID0gKHZhbHVlc1N0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgZXhpc3RzKCR7dmFyaWFibGVTdHJpbmd9LCAke3ZhbHVlc1N0cmluZ30pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBleGlzdHMoJHt2YXJpYWJsZVN0cmluZ30pYDtcblxuICByZXR1cm4gZXhpc3RzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXkocmVmZXJlbmNlc0FycmF5KSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNTdHJpbmcgPSByZWZlcmVuY2VzQXJyYXkucmVkdWNlKChyZWZlcmVuY2VzU3RyaW5nLCByZWZlcmVuY2UpID0+IHtcbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICByZWZlcmVuY2VzU3RyaW5nID0gKHJlZmVyZW5jZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtyZWZlcmVuY2VzU3RyaW5nfSwgJHtyZWZlcmVuY2VTdHJpbmd9YDtcblxuICAgIHJldHVybiByZWZlcmVuY2VzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHJlZmVyZW5jZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnRTdHJpbmcgPSByZXR1cm5TdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gYHsgLi4uICR7cmV0dXJuU3RhdGVtZW50U3RyaW5nfSB9YDtcblxuICByZXR1cm4gcmV0dXJuQmxvY2tTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZShuYW1lLCB0eXBlKSB7XG4gIGNvbnN0IG5hbWVTdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyA9IGAke3R5cGVTdHJpbmd9ICR7bmFtZVN0cmluZ31gO1xuXG4gIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lKHR5cGVOYW1lLCBhcmd1bWVudFR5cGVOYW1lKSB7XG4gIGxldCB0eXBlU3RyaW5nO1xuXG4gIHR5cGVTdHJpbmcgPSBgJHt0eXBlTmFtZX1gO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgdHlwZVN0cmluZyA9IGAke3R5cGVTdHJpbmd9PCR7YXJndW1lbnRUeXBlTmFtZX0+YDtcbiAgfVxuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRWYWx1ZXMocmVmZXJlbmNlLCB2YWx1ZXMpIHtcbiAgY29uc3QgdmFsdWVzU3RyaW5nID0gdmFsdWVzLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgJHtyZWZlcmVuY2VTdHJpbmd9KCR7dmFsdWVzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dHlwZVN0cmluZ30gJHt2YXJpYWJsZVN0cmluZ30gPSAuLi4gO2A7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBgU29tZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9KSBgO1xuXG4gIHJldHVybiBzb21lU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gYEV2ZXJ5KCR7dmFyaWFibGVTdHJpbmd9LCAke2Fub255bW91c1Byb2NlZHVyZVN0cmluZ30pIGA7XG5cbiAgcmV0dXJuIGV2ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpIHtcbiAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZUFzc2lnbm1lbnQuZ2V0VmFyaWFibGUoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dmFyaWFibGVTdHJpbmd9ID0gLi4uYDtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAoJHtwYXJhbWV0ZXJzU3RyaW5nfSkgJHtyZXR1cm5CbG9ja1N0cmluZ31gO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nRnJvbU5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheShub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkpIHtcbiAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9IG5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheS5yZWR1Y2UoKG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcsIG5vbWluYWxWYWx1ZVByb3BlcnR5KSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmcgPSBub21pbmFsVmFsdWVQcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgIG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcgPSAobm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ30sICR7bm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmd9YDtcblxuICAgIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcblxuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICB2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LnJlZHVjZSgodmFyaWFibGVBc3NpZ25tZW50c1N0cmluZywgdmFyaWFibGVBc3NpZ25tZW50KSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZyA9ICh2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgOlxuICAgICAgYCR7dmFyaWFibGVBc3NpZ25tZW50c1N0cmluZ30sICR7dmFyaWFibGVBc3NpZ25tZW50U3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAke3ZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmd9IDtgOyAvLy9cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICBleHBvcnRTVHJpbmcgPSBleHBvcnRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtFWFBPUlR9IGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBgJHtleHBvcnRTVHJpbmd9JHt0eXBlU3RyaW5nfSAke2xhYmVsU3RyaW5nfSgke3BhcmFtZXRlcnNTdHJpbmd9KSAke3JldHVybkJsb2NrU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsRXhwcmVzc2lvbiwgYW5vbnltb3VzUHJvY2VkdXJlKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGluaXRpYWxFeHByZXNzaW9uU3RyaW5nID0gaW5pdGlhbEV4cHJlc3Npb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gYFJlZHVjZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9LCAke2luaXRpYWxFeHByZXNzaW9uU3RyaW5nfSlgO1xuXG4gIHJldHVybiByZWR1Y2VTdHJpbmc7XG59XG5cbiJdLCJuYW1lcyI6WyJhbGxTdHJpbmdGcm9tVmFyaWFibGVBbmRWYWx1ZXMiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXhpc3RzU3RyaW5nRnJvbVZhcmlhYmxlQW5kVmFsdWVzIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwibm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ0Zyb21Ob21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZSIsInByaW10aXZlU3RyaW5nRnJvbUJvb2xlYW4iLCJwcmltdGl2ZVN0cmluZ0Zyb21JbnRlZ2VyIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyIsInByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFZhbHVlcyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXkiLCJyZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkiLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0eXBlU3RyaW5nRnJvbVR5cGVOYW1lQW5kQXJndW1lbnRUeXBlTmFtZSIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZXNTdHJpbmdGcm9tVmFsdWVzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidGVybmFyeVN0cmluZyIsIm5hbWUiLCJ2YXJpYWJsZVN0cmluZyIsInByb3BlcnRpZXMiLCJmb3JFYWNoIiwicHJvcGVydHkiLCJwcm9wZXJ0eVN0cmluZyIsInZhbHVlU3RyaW5nIiwiYm9vbGVhbiIsImV4cHJlc3NzaW9uU3RyaW5nIiwiaW50ZWdlciIsInRlcm1zQXJyYXkiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInZhbHVlc0FycmF5IiwidmFsdWVzU3RyaW5nIiwidmFsdWUiLCJ2YXJpYWJsZSIsInZhbHVlcyIsImFsbFN0cmluZyIsIkVNUFRZX1NUUklORyIsImV4cHJlc3Npb25TdHJpbmciLCJub21pbmFsVmFsdWUiLCJzdHJpbmciLCJwcmltdGl2ZVN0cmluZyIsInN0cmluZ0xpdGVyYWwiLCJzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbCIsIm5vbWluYWxWYWx1ZXMiLCJwcmltaXRpdmVTdHJpbmciLCJub21pbmFsVmFsdWVTdHJpbmciLCJleGlzdHNTdHJpbmciLCJyZWZlcmVuY2VzQXJyYXkiLCJyZWZlcmVuY2VzU3RyaW5nIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwicmV0dXJuU3RhdGVtZW50IiwicmV0dXJuU3RhdGVtZW50U3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmciLCJ0eXBlIiwibmFtZVN0cmluZyIsInR5cGVTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyIsInR5cGVOYW1lIiwiYXJndW1lbnRUeXBlTmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJzb21lU3RyaW5nIiwiZXZlcnlTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJnZXRWYXJpYWJsZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInBhcmFtZXRlcnNTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nIiwibm9taW5hbFZhbHVlUHJvcGVydHkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nIiwibGFiZWwiLCJleHBvcnRlZCIsImxhYmVsU3RyaW5nIiwiZXhwb3J0U1RyaW5nIiwiRVhQT1JUIiwicHJvY2VkdXJlU3RyaW5nIiwiaW5pdGlhbEV4cHJlc3Npb24iLCJpbml0aWFsRXhwcmVzc2lvblN0cmluZyIsInJlZHVjZVN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBdUZnQkE7ZUFBQUE7O1FBbUpBQztlQUFBQTs7UUFoQkFDO2VBQUFBOztRQTNFQUM7ZUFBQUE7O1FBOUNBQztlQUFBQTs7UUFrSkFDO2VBQUFBOztRQXJFQUM7ZUFBQUE7O1FBL0hBQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBMERBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQTRFQUM7ZUFBQUE7O1FBbUZBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBeklBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBMkNBQztlQUFBQTs7UUEvTEFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUFnTEFDO2VBQUFBOztRQXJKQUM7ZUFBQUE7O1FBd0NBQztlQUFBQTs7UUFpSUFDO2VBQUFBOztRQXVEQUM7ZUFBQUE7O1FBL0JBQztlQUFBQTs7UUFyTkFDO2VBQUFBOzs7MkJBWHFCOytCQUNHO3lCQUNDO0FBRWxDLFNBQVNQLHNCQUFzQlEsSUFBSTtJQUN4QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTLElBQzNCQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUVGLFdBQVcsc0JBQXNCLENBQUM7SUFFL0QsT0FBT0U7QUFDVDtBQUVPLFNBQVNKLHVCQUF1QkssSUFB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-furtle",
3
3
  "author": "James Smith",
4
- "version": "3.0.521",
4
+ "version": "3.0.524",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-furtle",
7
7
  "description": "Occam's Furtle language.",
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.7.2",
14
- "occam-grammars": "^1.3.690",
15
- "occam-languages": "^3.0.82",
14
+ "occam-grammars": "^1.3.692",
15
+ "occam-languages": "^3.0.83",
16
16
  "occam-lexers": "^23.2.12",
17
17
  "occam-parsers": "^23.2.17",
18
18
  "occam-query": "^4.1.210"
@@ -28,8 +28,8 @@
28
28
  "juxtapose": "^4.0.143",
29
29
  "lively-cli": "^3.0.3",
30
30
  "occam-grammar-utilities": "^8.1.27",
31
- "occam-model": "^1.0.594",
32
- "occam-server": "^7.0.93",
31
+ "occam-model": "^1.0.595",
32
+ "occam-server": "^7.0.94",
33
33
  "watchful-cli": "^1.7.102"
34
34
  },
35
35
  "scripts": {
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
4
+
5
+ import elements from "../elements";
6
+ import Exception from "../exception";
7
+
8
+ import { define } from "../elements";
9
+ import { valueFromBoolean } from "../utilities/value";
10
+ import { LIST_TYPE_NAME, BOOLEAN_TYPE_NAME } from "../typeNames";
11
+
12
+ const { every } = continuationUtilities,
13
+ { unbreakable } = breakPointUtilities;
14
+
15
+ export default define(class All extends Element {
16
+ constructor(context, string, node, breakPoint, values, variable, references) {
17
+ super(context, string, node, breakPoint);
18
+
19
+ this.string = string;
20
+ this.values = values;
21
+ this.variable = variable;
22
+ this.references = references;
23
+ }
24
+
25
+ getValues() {
26
+ return this.values;
27
+ }
28
+
29
+ getVariable() {
30
+ return this.variable;
31
+ }
32
+
33
+ getReferences() {
34
+ return this.references;
35
+ }
36
+
37
+ evaluate = unbreakable(function (context, forward, back) {
38
+ const allString = this.getString();
39
+
40
+ context.trace(`Evaluating the '${allString}' function...`);
41
+
42
+ return this.variable.evaluate(context, (value, back) => {
43
+ const valueType = value.getType(),
44
+ valueTypeListType = valueType.isListType();
45
+
46
+ if (!valueTypeListType) {
47
+ const valueString = value.getString(),
48
+ message = `The '${valueString}' value's '${valueType}' type should be '${LIST_TYPE_NAME}'.`,
49
+ exception = Exception.fromMessage(message);
50
+
51
+ return back(exception);
52
+ }
53
+
54
+ const values = value.lift(context),
55
+ valuesLength = values.length,
56
+ referencesLength = this.references.getLength();
57
+
58
+ if (valuesLength !== referencesLength) {
59
+ const valueString = value.getString(),
60
+ referencesString = this.references.getString(),
61
+ message = `The ${valueString} values and '${referencesString}' function references are not the same length.`,
62
+ exception = Exception.fromMessage(message);
63
+
64
+ return back(exception);
65
+ }
66
+
67
+ return every(values, (value, context, forward, back, index) => {
68
+ const reference = this.references.getReference(index);
69
+
70
+ return this.callProcedure(reference, value, context, (value, back) => {
71
+ const valueType = value.getType(),
72
+ valueTypeBooleanType = valueType.isBooleanType();
73
+
74
+ if (!valueTypeBooleanType) {
75
+ const valueString = value.getString(),
76
+ message = `The '${valueString}' value's '${valueType}' type should be '${BOOLEAN_TYPE_NAME}'.`,
77
+ exception = Exception.fromMessage(message);
78
+
79
+ return back(exception);
80
+ }
81
+
82
+ const primitiveValue = value.getPrimitiveValue(),
83
+ boolean = primitiveValue;
84
+
85
+ if (!boolean) {
86
+ return back();
87
+ }
88
+
89
+ return forward(context, back);
90
+ }, back);
91
+ }, context, (context, back) => {
92
+ const boolean = true,
93
+ value = valueFromBoolean(boolean, context),
94
+ valueString = value.getString();
95
+
96
+ context.trace(`...evaluated the '${allString}' function as '${valueString}'.`);
97
+
98
+ return forward(value, back);
99
+ }, back);
100
+ }, back);
101
+ });
102
+
103
+ callProcedure(reference, value, context, forward, back) {
104
+ let values;
105
+
106
+ const { Values } = elements;
107
+
108
+ values = Values.fromValue(value);
109
+
110
+ values = values.merge(this.values); ///
111
+
112
+ const { ProcedureCall } = elements,
113
+ procedureCall = ProcedureCall.fromReferenceAndValues(reference, values, context);
114
+
115
+ return procedureCall.evaluate(context, forward, back);
116
+ }
117
+
118
+ static name = "All";
119
+ });
@@ -10,7 +10,7 @@ import { define } from "../../elements";
10
10
  import { stringLiteralFromString } from "../../utilities/stringLiteral";
11
11
  import { valueFromBoolean, valueFromStringLiteral, valueFromNodesAndNominalValue } from "../../utilities/value";
12
12
  import { LIST_TYPE_NAME, STRING_TYPE_NAME, BOOLEAN_TYPE_NAME, NOMINAL_VALUE_TYPE_NAME } from "../../typeNames";
13
- import { CONTENT_PARAMETER_NAME, TERMINAL_PARAMETER_NAME, CHILD_NODES_PARAMETER_NAME, NO_WHITESPACE_PARAMETER_NAME } from "../../parameterNames";
13
+ import { TYPE_PARAMETER_NAME, CONTENT_PARAMETER_NAME, TERMINAL_PARAMETER_NAME, CHILD_NODES_PARAMETER_NAME, NO_WHITESPACE_PARAMETER_NAME } from "../../parameterNames";
14
14
 
15
15
  const { breakable } = breakPointUtilities;
16
16
 
@@ -70,6 +70,12 @@ export default define(class ObjectAssignment extends Element {
70
70
  let evaluateNamedBinding;
71
71
 
72
72
  switch (name) {
73
+ case TYPE_PARAMETER_NAME: {
74
+ evaluateNamedBinding = this.evaluateTypeNamedBinding.bind(this);
75
+
76
+ break;
77
+ }
78
+
73
79
  case CONTENT_PARAMETER_NAME: {
74
80
  evaluateNamedBinding = this.evaluateContentNamedBinding.bind(this);
75
81
 
@@ -107,6 +113,47 @@ export default define(class ObjectAssignment extends Element {
107
113
  }, back);
108
114
  }
109
115
 
116
+ evaluateTypeNamedBinding(namedBinding, term, context, forward, back) {
117
+ const type = namedBinding.getType(),
118
+ namedBindingString = namedBinding.getString();
119
+
120
+ context.trace(`Evaluating the type '${namedBindingString}' named binding...`);
121
+
122
+ const typeStringType = type.isStringType();
123
+
124
+ if (!typeStringType) {
125
+ const namedBindingString = namedBinding.getString(),
126
+ message = `The '${namedBindingString}' named binding's type should be '${STRING_TYPE_NAME}'.`,
127
+ exception = Exception.fromMessage(message);
128
+
129
+ return back(exception);
130
+ }
131
+
132
+ const primitiveValue = term.getPrimitiveValue(),
133
+ nominalValue = primitiveValue, ///
134
+ node = nominalValue.getNode(),
135
+ nodeTerminalNode = node.isTerminalNode();
136
+
137
+ if (!nodeTerminalNode) {
138
+ const termString = term.getString(),
139
+ message = `The '${termString}' term's node must be terminal.`,
140
+ exception = Exception.fromMessage(message);
141
+
142
+ return back(exception);
143
+ }
144
+
145
+ const terminalNode = node, ///
146
+ terminalNodeType = terminalNode.getType(),
147
+ string = terminalNodeType, ///
148
+ stringLiteral = stringLiteralFromString(string),
149
+ value = valueFromStringLiteral(stringLiteral, context),
150
+ valueSttring = value.getString();
151
+
152
+ context.debug(`...evaluated the type '${namedBindingString}' named binding as '${valueSttring}'.`);
153
+
154
+ return forward(value, back);
155
+ }
156
+
110
157
  evaluateContentNamedBinding(namedBinding, term, context, forward, back) {
111
158
  const type = namedBinding.getType(),
112
159
  namedBindingString = namedBinding.getString();
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import {Element, breakPointUtilities} from "occam-languages";
3
+ import { Element, breakPointUtilities } from "occam-languages";
4
4
 
5
5
  import { define } from "../elements";
6
6
 
7
- const { breakable } = breakPointUtilities;
7
+ const { unbreakable } = breakPointUtilities;
8
8
 
9
9
  export default define(class Error extends Element {
10
10
  constructor(context, string, node, breakPoint) {
11
11
  super(context, string, node, breakPoint);
12
12
  }
13
13
 
14
- verify = breakable(function (context, forward, back) {
14
+ verify = unbreakable(function (context, forward, back) {
15
15
  const errorString = this.getString(); ///
16
16
 
17
17
  context.warning(`The '${errorString}' error cannot be verified.`);
@@ -6,11 +6,11 @@ import elements from "../elements";
6
6
  import Exception from "../exception";
7
7
 
8
8
  import { define } from "../elements";
9
- import { valueFromNode, valueFromBoolean } from "../utilities/value";
10
9
  import { LIST_TYPE_NAME, BOOLEAN_TYPE_NAME } from "../typeNames";
10
+ import { valueFromBoolean, valueFromNominalValue } from "../utilities/value";
11
11
 
12
12
  const { every } = continuationUtilities,
13
- { breakable } = breakPointUtilities;
13
+ { unbreakable } = breakPointUtilities;
14
14
 
15
15
  export default define(class Every extends Element {
16
16
  constructor(context, string, node, breakPoint, variable, anonymousProcedure) {
@@ -29,10 +29,10 @@ export default define(class Every extends Element {
29
29
  return this.anonymousProcedure;
30
30
  }
31
31
 
32
- evaluate = breakable(function (context, forward, back) {
32
+ evaluate = unbreakable(function (context, forward, back) {
33
33
  const everyString = this.getString();
34
34
 
35
- context.trace(`Evaluating the '${everyString}' every...`);
35
+ context.trace(`Evaluating the '${everyString}' function...`);
36
36
 
37
37
  return this.variable.evaluate(context, (value, back) => {
38
38
  const valueType = value.getType(),
@@ -46,24 +46,26 @@ export default define(class Every extends Element {
46
46
  return back(exception);
47
47
  }
48
48
 
49
- const nodes = value.getNodes();
49
+ const primitiveValue = value.getPrimitiveValue(),
50
+ nominalValues = primitiveValue; ///
50
51
 
51
- return every(nodes, (node, forward, back) => {
52
- return this.evaluateAnonymousProcedure(node, context, forward, back);
53
- }, (boolean, back) => {
54
- const value = valueFromBoolean(boolean, context),
52
+ return every(nominalValues, (nominalValue, context, forward, back) => {
53
+ return this.evaluateAnonymousProcedure(nominalValue, context, forward, back);
54
+ }, context, (context, back) => {
55
+ const boolean = true,
56
+ value = valueFromBoolean(boolean, context),
55
57
  valueString = value.getString();
56
58
 
57
- context.trace(`...evaluated the '${everyString}' every as '${valueString}'.`);
59
+ context.trace(`...evaluated the '${everyString}' function as '${valueString}'.`);
58
60
 
59
61
  return forward(value, back);
60
62
  }, back);
61
63
  }, back);
62
64
  });
63
65
 
64
- evaluateAnonymousProcedure(node, context, forward, back) {
66
+ evaluateAnonymousProcedure(nominalValue, context, forward, back) {
65
67
  const { Values } = elements,
66
- value = valueFromNode(node, context),
68
+ value = valueFromNominalValue(nominalValue, context),
67
69
  values = Values.fromValue(value, context);
68
70
 
69
71
  return this.anonymousProcedure.evaluate(values, context, (value, back) => {
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
4
+
5
+ import { define } from "../elements";
6
+
7
+ const { exists } = continuationUtilities,
8
+ { unbreakable } = breakPointUtilities;
9
+
10
+ export default define(class Exists extends Element {
11
+ constructor(context, string, node, breakPoint, values, variable, references) {
12
+ super(context, string, node, breakPoint);
13
+
14
+ this.string = string;
15
+ this.values = values;
16
+ this.variable = variable;
17
+ this.references = references;
18
+ }
19
+
20
+ getValues() {
21
+ return this.values;
22
+ }
23
+
24
+ getVariable() {
25
+ return this.variable;
26
+ }
27
+
28
+ getReferences() {
29
+ return this.references;
30
+ }
31
+
32
+ evaluate = unbreakable(function (context, forward, back) {
33
+ const existsString = this.getString();
34
+
35
+ context.trace(`Evaluating the '${existsString}' function...`);
36
+
37
+ debugger
38
+
39
+ });
40
+
41
+ static name = "Exists";
42
+ });
@@ -5,13 +5,15 @@ import { Element } from "occam-languages";
5
5
  import { define } from "../elements";
6
6
 
7
7
  export default define(class Expression extends Element {
8
- constructor(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall) {
8
+ constructor(context, string, node, breakPoint, term, some, every, reduce, all, exists, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall) {
9
9
  super(context, string, node, breakPoint);
10
10
 
11
11
  this.term = term;
12
12
  this.some = some;
13
13
  this.every = every;
14
14
  this.reduce = reduce;
15
+ this.all = all;
16
+ this.exists = exists;
15
17
  this.ternary = ternary;
16
18
  this.nodeQuery = nodeQuery;
17
19
  this.nodesQuery = nodesQuery;
@@ -41,6 +43,14 @@ export default define(class Expression extends Element {
41
43
  return this.reduce;
42
44
  }
43
45
 
46
+ getAll() {
47
+ return this.all;
48
+ }
49
+
50
+ getExists() {
51
+ return this.exists;
52
+ }
53
+
44
54
  getTernary() {
45
55
  return this.ternay;
46
56
  }
@@ -98,6 +108,10 @@ export default define(class Expression extends Element {
98
108
  type = this.every.getType();
99
109
  } else if (this.reduce !== null) {
100
110
  type = this.reduce.getType();
111
+ } else if (this.all !== null) {
112
+ type = this.all.getType();
113
+ } else if (this.exists !== null) {
114
+ type = this.exists.getType();
101
115
  } else if (this.ternary !== null) {
102
116
  type = this.ternary.getType();
103
117
  } else if (this.nodeQuery !== null) {
@@ -152,6 +166,10 @@ export default define(class Expression extends Element {
152
166
  return this.every.evaluate(context, forward, back);
153
167
  } else if (this.reduce !== null) {
154
168
  return this.reduce.evaluate(context, forward, back);
169
+ } else if (this.all !== null) {
170
+ return this.all.evaluate(context, forward, back);
171
+ } else if (this.exists !== null) {
172
+ return this.exists.evaluate(context, forward, back);
155
173
  } else if (this.ternary !== null) {
156
174
  return this.ternary.evaluate(context, forward, back);
157
175
  } else if (this.procedureCall !== null) {
@@ -7,7 +7,7 @@ import { instantiate } from "../utilities/context";
7
7
  import { instantiateImportStatement } from "../process/instantiate";
8
8
  import { releaseNameFromJSON, importBindingsFromJSON, releaseNameToReleaseNameJSON, importBindingsToImportBindingsJSON } from "../utilities/json";
9
9
 
10
- const { every } = continuationUtilities,
10
+ const { cut, every } = continuationUtilities,
11
11
  { unbreakable } = breakPointUtilities;
12
12
 
13
13
  export default define(class ImportStatement extends Element {
@@ -45,6 +45,8 @@ export default define(class ImportStatement extends Element {
45
45
  }
46
46
 
47
47
  verify = unbreakable(function (context, forward, back) {
48
+ forward = cut(forward, back); ///
49
+
48
50
  const importStatementString = this.getString(); ///
49
51
 
50
52
  context.trace(`Verifying the '${importStatementString}' import statement...`);
@@ -80,6 +80,8 @@ export default define(class Procedure extends Element {
80
80
  }
81
81
 
82
82
  verify = breakable(function (context, forward, back) {
83
+ forward = cut(forward, back); ///
84
+
83
85
  const procedureString = this.getString();
84
86
 
85
87
  context.trace(`Verifying the '${procedureString}' function...`);
@@ -6,6 +6,7 @@ import Exception from "../exception";
6
6
 
7
7
  import { free } from "../utilities/context";
8
8
  import { define } from "../elements";
9
+ import { procedureCallStringFromReferenceAndValues } from "../utilities/string";
9
10
 
10
11
  export default define(class ProcedureCall extends Element {
11
12
  constructor(context, string, node, breakPoint, reference, values) {
@@ -65,4 +66,17 @@ export default define(class ProcedureCall extends Element {
65
66
  }
66
67
 
67
68
  static name = "ProcedureCall";
69
+
70
+ static fromReferenceAndValues(reference, values, context) {
71
+ const procedureCallString = procedureCallStringFromReferenceAndValues(reference, values),
72
+ node = null,
73
+ string = procedureCallString, ///
74
+ breakPoint = null;
75
+
76
+ context = null;
77
+
78
+ const procedureCall = new ProcedureCall(context, string, node, breakPoint, reference, values);
79
+
80
+ return procedureCall;
81
+ }
68
82
  });