occam-verify-cli 1.0.983 → 1.0.985

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 (423) hide show
  1. package/lib/action/verify.js +22 -27
  2. package/lib/constants.js +1 -41
  3. package/lib/index.js +1 -2
  4. package/lib/utilities/fileContext.js +3 -8
  5. package/lib/utilities/releaseContext.js +2 -2
  6. package/package.json +10 -11
  7. package/src/action/verify.js +8 -18
  8. package/src/constants.js +0 -10
  9. package/src/index.js +0 -2
  10. package/src/utilities/fileContext.js +1 -2
  11. package/src/utilities/releaseContext.js +1 -1
  12. package/lib/context/aphasic.js +0 -27
  13. package/lib/context/bounded.js +0 -244
  14. package/lib/context/branching.js +0 -61
  15. package/lib/context/file/nominal.js +0 -586
  16. package/lib/context/illative.js +0 -28
  17. package/lib/context/liminal.js +0 -200
  18. package/lib/context/literal.js +0 -44
  19. package/lib/context/mnemic.js +0 -454
  20. package/lib/context/nested.js +0 -31
  21. package/lib/context/nominal.js +0 -57
  22. package/lib/context/phaneric.js +0 -44
  23. package/lib/context/thetic.js +0 -28
  24. package/lib/context.js +0 -445
  25. package/lib/element/assertion/contained.js +0 -218
  26. package/lib/element/assertion/defined.js +0 -213
  27. package/lib/element/assertion/property.js +0 -176
  28. package/lib/element/assertion/signature.js +0 -170
  29. package/lib/element/assertion/subproof.js +0 -220
  30. package/lib/element/assertion/type.js +0 -227
  31. package/lib/element/assertion.js +0 -49
  32. package/lib/element/assumption/metaLevel.js +0 -244
  33. package/lib/element/assumption.js +0 -252
  34. package/lib/element/combinator/bracketed.js +0 -36
  35. package/lib/element/combinator.js +0 -104
  36. package/lib/element/conclusion.js +0 -131
  37. package/lib/element/constructor/bracketed.js +0 -57
  38. package/lib/element/constructor.js +0 -129
  39. package/lib/element/declaration/combinator.js +0 -58
  40. package/lib/element/declaration/complexType.js +0 -180
  41. package/lib/element/declaration/constructor.js +0 -93
  42. package/lib/element/declaration/metavariable.js +0 -77
  43. package/lib/element/declaration/property.js +0 -88
  44. package/lib/element/declaration/simpleType.js +0 -148
  45. package/lib/element/declaration/typePrefix.js +0 -53
  46. package/lib/element/declaration/variable.js +0 -99
  47. package/lib/element/declaration.js +0 -15
  48. package/lib/element/deduction.js +0 -131
  49. package/lib/element/derivation.js +0 -46
  50. package/lib/element/equality.js +0 -211
  51. package/lib/element/equivalence.js +0 -200
  52. package/lib/element/error.js +0 -27
  53. package/lib/element/frame.js +0 -238
  54. package/lib/element/hypothesis.js +0 -135
  55. package/lib/element/judgement.js +0 -212
  56. package/lib/element/label.js +0 -135
  57. package/lib/element/metaType.js +0 -57
  58. package/lib/element/metavariable.js +0 -452
  59. package/lib/element/parameter.js +0 -69
  60. package/lib/element/procedureCall.js +0 -116
  61. package/lib/element/procedureReference.js +0 -56
  62. package/lib/element/proof.js +0 -52
  63. package/lib/element/proofAssertion/premise.js +0 -238
  64. package/lib/element/proofAssertion/step.js +0 -235
  65. package/lib/element/proofAssertion/supposition.js +0 -249
  66. package/lib/element/proofAssertion.js +0 -56
  67. package/lib/element/property.js +0 -176
  68. package/lib/element/propertyRelation.js +0 -132
  69. package/lib/element/reference.js +0 -227
  70. package/lib/element/rule.js +0 -242
  71. package/lib/element/section.js +0 -64
  72. package/lib/element/signature.js +0 -195
  73. package/lib/element/statement.js +0 -228
  74. package/lib/element/subDerivation.js +0 -46
  75. package/lib/element/subproof.js +0 -91
  76. package/lib/element/substitution/frame.js +0 -256
  77. package/lib/element/substitution/reference.js +0 -192
  78. package/lib/element/substitution/statement.js +0 -294
  79. package/lib/element/substitution/term.js +0 -266
  80. package/lib/element/substitution.js +0 -183
  81. package/lib/element/term.js +0 -217
  82. package/lib/element/topLevelAssertion/axiom.js +0 -158
  83. package/lib/element/topLevelAssertion/conjecture.js +0 -42
  84. package/lib/element/topLevelAssertion/lemma.js +0 -39
  85. package/lib/element/topLevelAssertion/theorem.js +0 -42
  86. package/lib/element/topLevelAssertion.js +0 -286
  87. package/lib/element/topLevelMetaAssertion/metaLemma.js +0 -42
  88. package/lib/element/topLevelMetaAssertion/metatheorem.js +0 -42
  89. package/lib/element/topLevelMetaAssertion.js +0 -179
  90. package/lib/element/type.js +0 -240
  91. package/lib/element/typePrefix.js +0 -85
  92. package/lib/element/variable.js +0 -206
  93. package/lib/elements.js +0 -27
  94. package/lib/metaTypeNames.js +0 -26
  95. package/lib/metaTypes.js +0 -66
  96. package/lib/node/argument.js +0 -31
  97. package/lib/node/assertion/contained.js +0 -51
  98. package/lib/node/assertion/defined.js +0 -47
  99. package/lib/node/assertion/property.js +0 -36
  100. package/lib/node/assertion/signature.js +0 -32
  101. package/lib/node/assertion/subproof.js +0 -28
  102. package/lib/node/assertion/type.js +0 -32
  103. package/lib/node/assertion.js +0 -18
  104. package/lib/node/assumption/metaLevel.js +0 -27
  105. package/lib/node/assumption.js +0 -27
  106. package/lib/node/body/axiom.js +0 -23
  107. package/lib/node/body/conjecture.js +0 -23
  108. package/lib/node/body/lemma.js +0 -23
  109. package/lib/node/body/metaLemma.js +0 -23
  110. package/lib/node/body/metatheorem.js +0 -23
  111. package/lib/node/body/rule.js +0 -44
  112. package/lib/node/body/theorem.js +0 -23
  113. package/lib/node/body.js +0 -31
  114. package/lib/node/combinator.js +0 -23
  115. package/lib/node/conclusion.js +0 -27
  116. package/lib/node/constructor.js +0 -23
  117. package/lib/node/declaration/combinator.js +0 -28
  118. package/lib/node/declaration/complexType.js +0 -72
  119. package/lib/node/declaration/constructor.js +0 -47
  120. package/lib/node/declaration/metavariable.js +0 -36
  121. package/lib/node/declaration/property.js +0 -44
  122. package/lib/node/declaration/simpleType.js +0 -72
  123. package/lib/node/declaration/typePrefix.js +0 -32
  124. package/lib/node/declaration/variable.js +0 -51
  125. package/lib/node/declaration.js +0 -18
  126. package/lib/node/deduction.js +0 -27
  127. package/lib/node/derivation.js +0 -26
  128. package/lib/node/document.js +0 -18
  129. package/lib/node/equality.js +0 -33
  130. package/lib/node/equivalence.js +0 -23
  131. package/lib/node/equivalences.js +0 -18
  132. package/lib/node/error.js +0 -18
  133. package/lib/node/frame.js +0 -38
  134. package/lib/node/header/axiom.js +0 -28
  135. package/lib/node/header/conjecture.js +0 -23
  136. package/lib/node/header/lemma.js +0 -23
  137. package/lib/node/header/metaLemma.js +0 -23
  138. package/lib/node/header/metatheorem.js +0 -23
  139. package/lib/node/header/rule.js +0 -23
  140. package/lib/node/header/theorem.js +0 -23
  141. package/lib/node/header.js +0 -47
  142. package/lib/node/hypothesis.js +0 -27
  143. package/lib/node/judgement.js +0 -31
  144. package/lib/node/label.js +0 -23
  145. package/lib/node/labels.js +0 -23
  146. package/lib/node/metaArgument.js +0 -23
  147. package/lib/node/metaType.js +0 -30
  148. package/lib/node/metavariable.js +0 -39
  149. package/lib/node/parameter.js +0 -47
  150. package/lib/node/parenthesisedLabel.js +0 -23
  151. package/lib/node/parenthesisedLabels.js +0 -27
  152. package/lib/node/placeholder.js +0 -18
  153. package/lib/node/procedureCall.js +0 -31
  154. package/lib/node/procedureReference.js +0 -30
  155. package/lib/node/proof.js +0 -23
  156. package/lib/node/proofAssertion/premise.js +0 -28
  157. package/lib/node/proofAssertion/step.js +0 -52
  158. package/lib/node/proofAssertion/supposition.js +0 -28
  159. package/lib/node/proofAssertion.js +0 -27
  160. package/lib/node/property.js +0 -30
  161. package/lib/node/propertyRelation.js +0 -31
  162. package/lib/node/qualification.js +0 -27
  163. package/lib/node/reference.js +0 -23
  164. package/lib/node/rule.js +0 -43
  165. package/lib/node/section.js +0 -39
  166. package/lib/node/signature.js +0 -23
  167. package/lib/node/statement.js +0 -103
  168. package/lib/node/subDerivation.js +0 -26
  169. package/lib/node/subproof.js +0 -35
  170. package/lib/node/substitution/frame.js +0 -40
  171. package/lib/node/substitution/reference.js +0 -40
  172. package/lib/node/substitution/statement.js +0 -60
  173. package/lib/node/substitution/term.js +0 -40
  174. package/lib/node/substitution.js +0 -18
  175. package/lib/node/term.js +0 -60
  176. package/lib/node/topLevelAssertion/axiom.js +0 -26
  177. package/lib/node/topLevelAssertion/conjecture.js +0 -26
  178. package/lib/node/topLevelAssertion/lemma.js +0 -26
  179. package/lib/node/topLevelAssertion/theorem.js +0 -26
  180. package/lib/node/topLevelAssertion.js +0 -46
  181. package/lib/node/topLevelMetaAssertion/metaLemma.js +0 -26
  182. package/lib/node/topLevelMetaAssertion/metatheorem.js +0 -26
  183. package/lib/node/topLevelMetaAssertion.js +0 -42
  184. package/lib/node/type.js +0 -60
  185. package/lib/node/typePrefix.js +0 -30
  186. package/lib/node/types.js +0 -23
  187. package/lib/node/variable.js +0 -30
  188. package/lib/nominal/lexer.js +0 -15
  189. package/lib/nominal/parser.js +0 -24
  190. package/lib/nonTerminalNodeMap.js +0 -189
  191. package/lib/pass/zip.js +0 -23
  192. package/lib/preamble.js +0 -73
  193. package/lib/process/assign.js +0 -62
  194. package/lib/process/discharge.js +0 -38
  195. package/lib/process/equate.js +0 -73
  196. package/lib/process/instantiate.js +0 -261
  197. package/lib/process/unification.js +0 -228
  198. package/lib/process/unify.js +0 -336
  199. package/lib/process/validate.js +0 -135
  200. package/lib/process/validation.js +0 -291
  201. package/lib/process/verify.js +0 -205
  202. package/lib/ruleNames.js +0 -350
  203. package/lib/tokenTypes.js +0 -22
  204. package/lib/utilities/assignment.js +0 -47
  205. package/lib/utilities/bnf.js +0 -21
  206. package/lib/utilities/brackets.js +0 -77
  207. package/lib/utilities/breakPoint.js +0 -38
  208. package/lib/utilities/context.js +0 -220
  209. package/lib/utilities/element.js +0 -1851
  210. package/lib/utilities/equivalence.js +0 -27
  211. package/lib/utilities/equivalences.js +0 -134
  212. package/lib/utilities/instance.js +0 -44
  213. package/lib/utilities/json.js +0 -1109
  214. package/lib/utilities/string.js +0 -231
  215. package/lib/utilities/substitutions.js +0 -86
  216. package/lib/utilities/synoptic.js +0 -159
  217. package/lib/utilities/type.js +0 -27
  218. package/src/context/aphasic.js +0 -15
  219. package/src/context/bounded.js +0 -362
  220. package/src/context/branching.js +0 -69
  221. package/src/context/file/nominal.js +0 -955
  222. package/src/context/illative.js +0 -17
  223. package/src/context/liminal.js +0 -280
  224. package/src/context/literal.js +0 -42
  225. package/src/context/mnemic.js +0 -778
  226. package/src/context/nested.js +0 -21
  227. package/src/context/nominal.js +0 -62
  228. package/src/context/phaneric.js +0 -43
  229. package/src/context/thetic.js +0 -17
  230. package/src/context.js +0 -722
  231. package/src/element/assertion/contained.js +0 -313
  232. package/src/element/assertion/defined.js +0 -310
  233. package/src/element/assertion/property.js +0 -252
  234. package/src/element/assertion/signature.js +0 -239
  235. package/src/element/assertion/subproof.js +0 -335
  236. package/src/element/assertion/type.js +0 -328
  237. package/src/element/assertion.js +0 -65
  238. package/src/element/assumption/metaLevel.js +0 -373
  239. package/src/element/assumption.js +0 -374
  240. package/src/element/combinator/bracketed.js +0 -32
  241. package/src/element/combinator.js +0 -145
  242. package/src/element/conclusion.js +0 -185
  243. package/src/element/constructor/bracketed.js +0 -68
  244. package/src/element/constructor.js +0 -188
  245. package/src/element/declaration/combinator.js +0 -66
  246. package/src/element/declaration/complexType.js +0 -257
  247. package/src/element/declaration/constructor.js +0 -122
  248. package/src/element/declaration/metavariable.js +0 -93
  249. package/src/element/declaration/property.js +0 -108
  250. package/src/element/declaration/simpleType.js +0 -208
  251. package/src/element/declaration/typePrefix.js +0 -58
  252. package/src/element/declaration/variable.js +0 -130
  253. package/src/element/declaration.js +0 -7
  254. package/src/element/deduction.js +0 -185
  255. package/src/element/derivation.js +0 -57
  256. package/src/element/equality.js +0 -325
  257. package/src/element/equivalence.js +0 -276
  258. package/src/element/error.js +0 -26
  259. package/src/element/frame.js +0 -356
  260. package/src/element/hypothesis.js +0 -186
  261. package/src/element/judgement.js +0 -303
  262. package/src/element/label.js +0 -186
  263. package/src/element/metaType.js +0 -75
  264. package/src/element/metavariable.js +0 -662
  265. package/src/element/parameter.js +0 -90
  266. package/src/element/procedureCall.js +0 -159
  267. package/src/element/procedureReference.js +0 -71
  268. package/src/element/proof.js +0 -61
  269. package/src/element/proofAssertion/premise.js +0 -354
  270. package/src/element/proofAssertion/step.js +0 -271
  271. package/src/element/proofAssertion/supposition.js +0 -377
  272. package/src/element/proofAssertion.js +0 -74
  273. package/src/element/property.js +0 -258
  274. package/src/element/propertyRelation.js +0 -193
  275. package/src/element/reference.js +0 -345
  276. package/src/element/rule.js +0 -358
  277. package/src/element/section.js +0 -78
  278. package/src/element/signature.js +0 -292
  279. package/src/element/statement.js +0 -358
  280. package/src/element/subDerivation.js +0 -56
  281. package/src/element/subproof.js +0 -116
  282. package/src/element/substitution/frame.js +0 -392
  283. package/src/element/substitution/reference.js +0 -274
  284. package/src/element/substitution/statement.js +0 -452
  285. package/src/element/substitution/term.js +0 -407
  286. package/src/element/substitution.js +0 -261
  287. package/src/element/term.js +0 -339
  288. package/src/element/topLevelAssertion/axiom.js +0 -244
  289. package/src/element/topLevelAssertion/conjecture.js +0 -40
  290. package/src/element/topLevelAssertion/lemma.js +0 -42
  291. package/src/element/topLevelAssertion/theorem.js +0 -40
  292. package/src/element/topLevelAssertion.js +0 -436
  293. package/src/element/topLevelMetaAssertion/metaLemma.js +0 -40
  294. package/src/element/topLevelMetaAssertion/metatheorem.js +0 -40
  295. package/src/element/topLevelMetaAssertion.js +0 -276
  296. package/src/element/type.js +0 -374
  297. package/src/element/typePrefix.js +0 -113
  298. package/src/element/variable.js +0 -259
  299. package/src/elements.js +0 -13
  300. package/src/metaTypeNames.js +0 -5
  301. package/src/metaTypes.js +0 -71
  302. package/src/node/argument.js +0 -30
  303. package/src/node/assertion/contained.js +0 -53
  304. package/src/node/assertion/defined.js +0 -46
  305. package/src/node/assertion/property.js +0 -30
  306. package/src/node/assertion/signature.js +0 -23
  307. package/src/node/assertion/subproof.js +0 -16
  308. package/src/node/assertion/type.js +0 -23
  309. package/src/node/assertion.js +0 -7
  310. package/src/node/assumption/metaLevel.js +0 -23
  311. package/src/node/assumption.js +0 -23
  312. package/src/node/body/axiom.js +0 -7
  313. package/src/node/body/conjecture.js +0 -7
  314. package/src/node/body/lemma.js +0 -7
  315. package/src/node/body/metaLemma.js +0 -7
  316. package/src/node/body/metatheorem.js +0 -7
  317. package/src/node/body/rule.js +0 -42
  318. package/src/node/body/theorem.js +0 -7
  319. package/src/node/body.js +0 -30
  320. package/src/node/combinator.js +0 -16
  321. package/src/node/conclusion.js +0 -23
  322. package/src/node/constructor.js +0 -16
  323. package/src/node/declaration/combinator.js +0 -16
  324. package/src/node/declaration/complexType.js +0 -88
  325. package/src/node/declaration/constructor.js +0 -46
  326. package/src/node/declaration/metavariable.js +0 -30
  327. package/src/node/declaration/property.js +0 -42
  328. package/src/node/declaration/simpleType.js +0 -87
  329. package/src/node/declaration/typePrefix.js +0 -24
  330. package/src/node/declaration/variable.js +0 -53
  331. package/src/node/declaration.js +0 -7
  332. package/src/node/deduction.js +0 -23
  333. package/src/node/derivation.js +0 -19
  334. package/src/node/document.js +0 -7
  335. package/src/node/equality.js +0 -35
  336. package/src/node/equivalence.js +0 -16
  337. package/src/node/equivalences.js +0 -7
  338. package/src/node/error.js +0 -7
  339. package/src/node/frame.js +0 -40
  340. package/src/node/header/axiom.js +0 -16
  341. package/src/node/header/conjecture.js +0 -7
  342. package/src/node/header/lemma.js +0 -7
  343. package/src/node/header/metaLemma.js +0 -7
  344. package/src/node/header/metatheorem.js +0 -7
  345. package/src/node/header/rule.js +0 -7
  346. package/src/node/header/theorem.js +0 -7
  347. package/src/node/header.js +0 -54
  348. package/src/node/hypothesis.js +0 -23
  349. package/src/node/judgement.js +0 -30
  350. package/src/node/label.js +0 -16
  351. package/src/node/labels.js +0 -16
  352. package/src/node/metaArgument.js +0 -16
  353. package/src/node/metaType.js +0 -26
  354. package/src/node/metavariable.js +0 -42
  355. package/src/node/parameter.js +0 -51
  356. package/src/node/parenthesisedLabel.js +0 -16
  357. package/src/node/parenthesisedLabels.js +0 -23
  358. package/src/node/placeholder.js +0 -7
  359. package/src/node/procedureCall.js +0 -30
  360. package/src/node/procedureReference.js +0 -26
  361. package/src/node/proof.js +0 -16
  362. package/src/node/proofAssertion/premise.js +0 -16
  363. package/src/node/proofAssertion/step.js +0 -52
  364. package/src/node/proofAssertion/supposition.js +0 -16
  365. package/src/node/proofAssertion.js +0 -23
  366. package/src/node/property.js +0 -28
  367. package/src/node/propertyRelation.js +0 -30
  368. package/src/node/qualification.js +0 -23
  369. package/src/node/reference.js +0 -16
  370. package/src/node/rule.js +0 -51
  371. package/src/node/section.js +0 -44
  372. package/src/node/signature.js +0 -16
  373. package/src/node/statement.js +0 -167
  374. package/src/node/subDerivation.js +0 -19
  375. package/src/node/subproof.js +0 -35
  376. package/src/node/substitution/frame.js +0 -37
  377. package/src/node/substitution/reference.js +0 -38
  378. package/src/node/substitution/statement.js +0 -70
  379. package/src/node/substitution/term.js +0 -38
  380. package/src/node/substitution.js +0 -7
  381. package/src/node/term.js +0 -75
  382. package/src/node/topLevelAssertion/axiom.js +0 -13
  383. package/src/node/topLevelAssertion/conjecture.js +0 -13
  384. package/src/node/topLevelAssertion/lemma.js +0 -13
  385. package/src/node/topLevelAssertion/theorem.js +0 -13
  386. package/src/node/topLevelAssertion.js +0 -58
  387. package/src/node/topLevelMetaAssertion/metaLemma.js +0 -13
  388. package/src/node/topLevelMetaAssertion/metatheorem.js +0 -13
  389. package/src/node/topLevelMetaAssertion.js +0 -51
  390. package/src/node/type.js +0 -74
  391. package/src/node/typePrefix.js +0 -26
  392. package/src/node/types.js +0 -16
  393. package/src/node/variable.js +0 -26
  394. package/src/nominal/lexer.js +0 -5
  395. package/src/nominal/parser.js +0 -12
  396. package/src/nonTerminalNodeMap.js +0 -261
  397. package/src/pass/zip.js +0 -19
  398. package/src/preamble.js +0 -64
  399. package/src/process/assign.js +0 -53
  400. package/src/process/discharge.js +0 -33
  401. package/src/process/equate.js +0 -94
  402. package/src/process/instantiate.js +0 -198
  403. package/src/process/unification.js +0 -332
  404. package/src/process/unify.js +0 -504
  405. package/src/process/validate.js +0 -174
  406. package/src/process/validation.js +0 -410
  407. package/src/process/verify.js +0 -299
  408. package/src/ruleNames.js +0 -86
  409. package/src/tokenTypes.js +0 -4
  410. package/src/utilities/assignment.js +0 -57
  411. package/src/utilities/bnf.js +0 -20
  412. package/src/utilities/brackets.js +0 -87
  413. package/src/utilities/breakPoint.js +0 -29
  414. package/src/utilities/context.js +0 -223
  415. package/src/utilities/element.js +0 -2293
  416. package/src/utilities/equivalence.js +0 -25
  417. package/src/utilities/equivalences.js +0 -158
  418. package/src/utilities/instance.js +0 -40
  419. package/src/utilities/json.js +0 -1273
  420. package/src/utilities/string.js +0 -282
  421. package/src/utilities/substitutions.js +0 -93
  422. package/src/utilities/synoptic.js +0 -135
  423. package/src/utilities/type.js +0 -19
@@ -1,179 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return TopLevelMetaAssertion;
9
- }
10
- });
11
- const _occamlanguages = require("occam-languages");
12
- const _context = require("../utilities/context");
13
- const _breakPoint = require("../utilities/breakPoint");
14
- const _string = require("../utilities/string");
15
- const _json = require("../utilities/json");
16
- const { asyncForwardsEvery } = _occamlanguages.asynchronousUtilities;
17
- class TopLevelMetaAssertion extends _occamlanguages.Element {
18
- constructor(context, string, node, breakPoint, label, suppositions, deduction, proof, metaLevelAssumptions){
19
- super(context, string, node, breakPoint);
20
- this.label = label;
21
- this.suppositions = suppositions;
22
- this.deduction = deduction;
23
- this.proof = proof;
24
- this.metaLevelAssumptions = metaLevelAssumptions;
25
- }
26
- getLabel() {
27
- return this.label;
28
- }
29
- getSuppositions() {
30
- return this.suppositions;
31
- }
32
- getDeduction() {
33
- return this.deduction;
34
- }
35
- getProof() {
36
- return this.proof;
37
- }
38
- getMetaLevelAssumptions() {
39
- return this.metaLevelAssumptions;
40
- }
41
- getStatement() {
42
- let statement = null;
43
- const unconditional = this.isUnconditional();
44
- if (unconditional) {
45
- statement = this.deduction.getStatement();
46
- }
47
- return statement;
48
- }
49
- getStatements() {
50
- let statements = null;
51
- const unconditional = this.isUnconditional();
52
- if (!unconditional) {
53
- const suppositionStatements = this.suppositions.map((supposition)=>{
54
- const suppositionStatement = supposition.getStatement();
55
- return suppositionStatement;
56
- }), deductionStatement = this.deduction.getStatement();
57
- statements = [
58
- ...suppositionStatements,
59
- deductionStatement
60
- ];
61
- }
62
- return statements;
63
- }
64
- isUnconditional() {
65
- const suppositionsLength = this.suppositions.length, unconditional = suppositionsLength === 0;
66
- return unconditional;
67
- }
68
- compareReference(reference) {
69
- const label = this.getLabel(), labelComparesToRefference = label.compareReference(reference), comparesToReference = labelComparesToRefference; ///
70
- return comparesToReference;
71
- }
72
- async verify(context) {
73
- let verifies = false;
74
- const topLevelMetaAssertionString = this.getString(); ///
75
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta assertion...`);
76
- await (0, _context.encapsulate)(async (context)=>{
77
- const labelVerifies = this.verifyLabel(context);
78
- if (labelVerifies) {
79
- const suppositionsVerify = await this.verifySuppositions(context);
80
- if (suppositionsVerify) {
81
- const deductionVerifies = await this.verifyDeduction(context);
82
- if (deductionVerifies) {
83
- const proofVerifies = await this.verifyProof(context);
84
- if (proofVerifies) {
85
- verifies = true;
86
- }
87
- }
88
- }
89
- }
90
- }, this.metaLevelAssumptions, context);
91
- if (verifies) {
92
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta assertion.`);
93
- }
94
- return verifies;
95
- }
96
- verifyLabel(context) {
97
- let labelVerifies;
98
- const topLevelMetaAssertionString = this.getString(), labelString = this.label.getString();
99
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta-assertion's '${labelString}' label...`);
100
- labelVerifies = this.label.verify();
101
- if (labelVerifies) {
102
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta-assertion's '${labelString}' label.`);
103
- }
104
- return labelVerifies;
105
- }
106
- async verifyProof(context) {
107
- let proofVerifies;
108
- const topLevelMetaAssertionString = this.getString(); ///
109
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta-assertion's proof...`);
110
- const statement = this.deduction.getStatement();
111
- proofVerifies = await this.proof.verify(statement, context);
112
- if (proofVerifies) {
113
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta-assertion's proof.`);
114
- }
115
- return proofVerifies;
116
- }
117
- async verifyDeduction(context) {
118
- let deductionVerifies;
119
- const deductionString = this.deduction.getString(), topLevelMetaAssertionString = this.getString(); ///
120
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta assertion's '${deductionString}' deduction...`);
121
- deductionVerifies = await this.deduction.verify(context);
122
- if (deductionVerifies) {
123
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta assertion's '${deductionString}' deduction.`);
124
- }
125
- return deductionVerifies;
126
- }
127
- async verifySupposition(supposition, context) {
128
- let suppositionVerifies;
129
- const suppositionString = supposition.getString(), topLevelMetaAssertionString = this.getString(); ///
130
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta-assertion's '${suppositionString}' supposition...`);
131
- suppositionVerifies = await supposition.verify(context);
132
- if (suppositionVerifies) {
133
- const subproofOrProofAssertion = supposition; ////
134
- context.assignAssignments();
135
- context.addSubproofOrProofAssertion(subproofOrProofAssertion);
136
- }
137
- if (suppositionVerifies) {
138
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta-assertion's '${suppositionString}' supposition.`);
139
- }
140
- return suppositionVerifies;
141
- }
142
- async verifySuppositions(context) {
143
- let suppositionsVerify;
144
- const topLevelMetaAssertionString = this.getString(); ///
145
- context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta-assertion's suppositions...`);
146
- suppositionsVerify = await asyncForwardsEvery(this.suppositions, async (supposition)=>{
147
- const suppositionVerifies = await this.verifySupposition(supposition, context);
148
- if (suppositionVerifies) {
149
- return true;
150
- }
151
- });
152
- if (suppositionsVerify) {
153
- context.debug(`...verified the '${topLevelMetaAssertionString}' top level meta-assertion's suppositions.`);
154
- }
155
- return suppositionsVerify;
156
- }
157
- toJSON() {
158
- const labelJSON = (0, _json.labelToLabelJSON)(this.label), deductionJSON = (0, _json.deductionToDeductionJSON)(this.deduction), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions), metaLevelAssumptionsJSON = (0, _json.metaLevelAssumptionsToMetaLevelAssumptionsJSON)(this.metaLevelAssumptions), string = this.getString();
159
- let breakPoint;
160
- breakPoint = this.getBreakPoint();
161
- const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
162
- breakPoint = breakPointJSON; ///
163
- const label = labelJSON, deduction = deductionJSON, suppositions = suppositionsJSON, metaLevelAssumptions = metaLevelAssumptionsJSON, json = {
164
- string,
165
- breakPoint,
166
- label,
167
- deduction,
168
- suppositions,
169
- metaLevelAssumptions
170
- };
171
- return json;
172
- }
173
- static fromJSON(Class, json, context) {
174
- const label = (0, _json.labelFromJSON)(json, context), deduction = (0, _json.deductionFromJSON)(json, context), suppositions = (0, _json.suppositionsFromJSON)(json, context), metaLevelAssumptions = (0, _json.metaLevelAssumptionsFromJSON)(json, context), string = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), node = null, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), proof = null, topLevelMetaAssertion = new Class(context, string, node, breakPoint, label, suppositions, deduction, proof, metaLevelAssumptions);
175
- return topLevelMetaAssertion;
176
- }
177
- }
178
-
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsTWV0YUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBlbmNhcHN1bGF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsRnJvbUpTT04sXG4gICAgICAgICBsYWJlbFRvTGFiZWxKU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTixcbiAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04sXG4gICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uc1RvTWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgYXN5bmNGb3J3YXJkc0V2ZXJ5IH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcExldmVsTWV0YUFzc2VydGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmRlZHVjdGlvbiA9IGRlZHVjdGlvbjtcbiAgICB0aGlzLnByb29mID0gcHJvb2Y7XG4gICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0RGVkdWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbjtcbiAgfVxuXG4gIGdldFByb29mKCkge1xuICAgIHJldHVybiB0aGlzLnByb29mO1xuICB9XG5cbiAgZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgICBjb25zdCB1bmNvbmRpdGlvbmFsID0gdGhpcy5pc1VuY29uZGl0aW9uYWwoKTtcblxuICAgIGlmICh1bmNvbmRpdGlvbmFsKSB7XG4gICAgICBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IG51bGw7XG5cbiAgICBjb25zdCB1bmNvbmRpdGlvbmFsID0gdGhpcy5pc1VuY29uZGl0aW9uYWwoKTtcblxuICAgIGlmICghdW5jb25kaXRpb25hbCkge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnRzID0gdGhpcy5zdXBwb3NpdGlvbnMubWFwKChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBzdXBwb3NpdGlvblN0YXRlbWVudDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZGVkdWN0aW9uU3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHN0YXRlbWVudHMgPSBbXG4gICAgICAgIC4uLnN1cHBvc2l0aW9uU3RhdGVtZW50cyxcbiAgICAgICAgZGVkdWN0aW9uU3RhdGVtZW50XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgaXNVbmNvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB1bmNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gdW5jb25kaXRpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKCksXG4gICAgICAgICAgbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSA9IGxhYmVsLmNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBjb21wYXJlc1RvUmVmZXJlbmNlID0gbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9SZWZlcmVuY2U7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXdhaXQgZW5jYXBzdWxhdGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsVmVyaWZpZXMgPSB0aGlzLnZlcmlmeUxhYmVsKGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnNWZXJpZnkgPSBhd2FpdCB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZ5KSB7XG4gICAgICAgICAgY29uc3QgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeURlZHVjdGlvbihjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5UHJvb2YoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlMYWJlbChjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVmVyaWZpZXM7XG5cbiAgICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSB0aGlzLmxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBsYWJlbFZlcmlmaWVzID0gdGhpcy5sYWJlbC52ZXJpZnkoKTtcblxuICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxWZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcztcblxuICAgIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzIHByb29mLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZlZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgZGVkdWN0aW9uVmVyaWZpZXM7XG5cbiAgICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEgYXNzZXJ0aW9uJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMuZGVkdWN0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVkdWN0aW9uVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvblZlcmlmaWVzO1xuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uVmVyaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dClcblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBzdXBwb3NpdGlvbjsgIC8vLy9cblxuICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBzdXBwb3NpdGlvbnNWZXJpZnkgPSBhd2FpdCBhc3luY0ZvcndhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1ZlcmlmeTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbFRvTGFiZWxKU09OKHRoaXMubGFiZWwpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiA9IG1ldGFMZXZlbEFzc3VtcHRpb25zVG9NZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04odGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEpTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuICB9XG59XG4iXSwibmFtZXMiOlsiVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwiYXN5bmNGb3J3YXJkc0V2ZXJ5IiwiYXN5bmNocm9ub3VzVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVsIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImdldExhYmVsIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImdldFN0YXRlbWVudCIsInN0YXRlbWVudCIsInVuY29uZGl0aW9uYWwiLCJpc1VuY29uZGl0aW9uYWwiLCJnZXRTdGF0ZW1lbnRzIiwic3RhdGVtZW50cyIsInN1cHBvc2l0aW9uU3RhdGVtZW50cyIsIm1hcCIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJkZWR1Y3Rpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJjb21wYXJlUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSIsImNvbXBhcmVzVG9SZWZlcmVuY2UiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jYXBzdWxhdGUiLCJsYWJlbFZlcmlmaWVzIiwidmVyaWZ5TGFiZWwiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJkZWR1Y3Rpb25WZXJpZmllcyIsInZlcmlmeURlZHVjdGlvbiIsInByb29mVmVyaWZpZXMiLCJ2ZXJpZnlQcm9vZiIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJkZWR1Y3Rpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwidG9KU09OIiwibGFiZWxKU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNUb01ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbEZyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQXFCQTs7O2dDQWhCMEI7eUJBRW5COzRCQUNtQzt3QkFDYztzQkFRZDtBQUUvRCxNQUFNLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLHFDQUFxQjtBQUVyQyxNQUFNRiw4QkFBOEJHLHVCQUFPO0lBQ3hELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUMxRyxLQUFLLENBQUNSLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDTCxLQUFLO0lBQ25CO0lBRUFNLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ0wsWUFBWTtJQUMxQjtJQUVBTSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNMLFNBQVM7SUFDdkI7SUFFQU0sV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDTCxLQUFLO0lBQ25CO0lBRUFNLDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQ0wsb0JBQW9CO0lBQ2xDO0lBRUFNLGVBQWU7UUFDYixJQUFJQyxZQUFZO1FBRWhCLE1BQU1DLGdCQUFnQixJQUFJLENBQUNDLGVBQWU7UUFFMUMsSUFBSUQsZUFBZTtZQUNqQkQsWUFBWSxJQUFJLENBQUNULFNBQVMsQ0FBQ1EsWUFBWTtRQUN6QztRQUVBLE9BQU9DO0lBQ1Q7SUFFQUcsZ0JBQWdCO1FBQ2QsSUFBSUMsYUFBYTtRQUVqQixNQUFNSCxnQkFB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
@@ -1,240 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _occamlanguages = require("occam-languages");
12
- const _necessary = require("necessary");
13
- const _elements = require("../elements");
14
- const _context = require("../utilities/context");
15
- const _instantiate = require("../process/instantiate");
16
- const _element = require("../utilities/element");
17
- const _type = require("../utilities/type");
18
- const _breakPoint = require("../utilities/breakPoint");
19
- const _json = require("../utilities/json");
20
- const { push, first } = _necessary.arrayUtilities;
21
- const _default = (0, _elements.define)(class Type extends _occamlanguages.Element {
22
- constructor(context, string, node, breakPoint, name, prefixName, superTypes, properties, provisional){
23
- super(context, string, node, breakPoint);
24
- this.name = name;
25
- this.prefixName = prefixName;
26
- this.superTypes = superTypes;
27
- this.properties = properties;
28
- this.provisional = provisional;
29
- }
30
- getName() {
31
- return this.name;
32
- }
33
- getPrefixName() {
34
- return this.prefixName;
35
- }
36
- getSuperTypes() {
37
- return this.superTypes;
38
- }
39
- getTypeNode() {
40
- const node = this.getNode(), typeNode = node; ///
41
- return typeNode;
42
- }
43
- getProperties(includeSuperTypes = true) {
44
- const properties = [];
45
- push(properties, this.properties);
46
- if (includeSuperTypes) {
47
- this.superTypes.forEach((superType)=>{
48
- const superTypeProperties = superType.getProperties();
49
- push(properties, superTypeProperties);
50
- });
51
- }
52
- return properties;
53
- }
54
- isProvisional(includeSuperTypes = true) {
55
- let provisional = this.provisional;
56
- if (includeSuperTypes) {
57
- if (!provisional) {
58
- provisional = this.superTypes.some((superType)=>{
59
- const superTypeProvisional = superType.isProvisional();
60
- if (superTypeProvisional) {
61
- return true;
62
- }
63
- });
64
- }
65
- }
66
- return provisional;
67
- }
68
- setName(name) {
69
- this.name = name;
70
- }
71
- setPrefixName(prefixName) {
72
- this.prefixName = prefixName;
73
- }
74
- setSuperTypes(superTypes) {
75
- this.superTypes = superTypes;
76
- }
77
- setProperties(properties) {
78
- this.properties = properties;
79
- }
80
- setProvisional(provisional) {
81
- this.provisional = provisional;
82
- }
83
- isEstablished(includeSuperTypes = true) {
84
- const provisional = this.isProvisional(includeSuperTypes), established = !provisional;
85
- return established;
86
- }
87
- isPrefixed() {
88
- const prefixed = this.prefixName !== null;
89
- return prefixed;
90
- }
91
- getPrefixedName() {
92
- let prefixedName = null;
93
- const prefixed = this.isPrefixed();
94
- if (prefixed) {
95
- prefixedName = `${this.prefixName}${this.name}`;
96
- }
97
- return prefixedName;
98
- }
99
- getNominalTypeName() {
100
- const prefixed = this.isPrefixed(), nominalTypeName = prefixed ? `${this.prefixName}${this.name}` : this.name;
101
- return nominalTypeName;
102
- }
103
- isBasic() {
104
- let basic = false;
105
- const superTypesLength = this.superTypes.length;
106
- if (superTypesLength === 1) {
107
- const firstSuperType = first(this.superTypes), superType = firstSuperType, baseType = (0, _type.baseTypeFromNothing)();
108
- if (superType === baseType) {
109
- basic = true;
110
- }
111
- }
112
- return basic;
113
- }
114
- isRefined() {
115
- let refined = false;
116
- const superTypesLength = this.superTypes.length;
117
- if (superTypesLength === 1) {
118
- const firstSuperType = first(this.superTypes), superType = firstSuperType, superTypeName = superType.getName();
119
- if (superTypeName === this.name) {
120
- refined = true;
121
- }
122
- }
123
- return refined;
124
- }
125
- isEqualTo(type) {
126
- const equalTo = this === type;
127
- return equalTo;
128
- }
129
- isSubTypeOf(type) {
130
- let subTypeOf;
131
- const baseType = (0, _type.baseTypeFromNothing)();
132
- if (this === baseType) {
133
- subTypeOf = false;
134
- } else {
135
- subTypeOf = this.superTypes.some((superType)=>{
136
- if (superType === type) {
137
- return true;
138
- }
139
- const superTypeSubTypeOfType = superType.isSubTypeOf(type);
140
- if (superTypeSubTypeOfType) {
141
- return true;
142
- }
143
- });
144
- }
145
- return subTypeOf;
146
- }
147
- isSuperTypeOf(type) {
148
- const subTypeOf = type.isSubTypeOf(this), superTypeOf = subTypeOf; ///
149
- return superTypeOf;
150
- }
151
- isEqualToOrSubTypeOf(type) {
152
- const equalTo = this.isEqualTo(type), subTypeOf = this.isSubTypeOf(type), equalToOrSubTypeOf = equalTo || subTypeOf;
153
- return equalToOrSubTypeOf;
154
- }
155
- isEqualToOrSuperTypeOf(type) {
156
- const equalTo = this.isEqualTo(type), superTypeOf = this.isSuperTypeOf(type), equalToOrSuperTypeOf = equalTo || superTypeOf;
157
- return equalToOrSuperTypeOf;
158
- }
159
- isEqualToSubTypeOrSuperTypeOf(type) {
160
- const equalTo = this.isEqualTo(type), subTypeOf = this.isSubTypeOf(type), superTypeOf = this.isSuperTypeOf(type), equalToSubTypeOrSuperTypeOf = equalTo || subTypeOf || superTypeOf;
161
- return equalToSubTypeOrSuperTypeOf;
162
- }
163
- compareTypeName(typeName) {
164
- const nameTypeName = this.name === typeName, comparesToTypeName = nameTypeName; ///
165
- return comparesToTypeName;
166
- }
167
- compareProvisional(provisional, includeSupertypes = true) {
168
- let comparesToProvisional;
169
- const provisionalA = provisional; ///
170
- provisional = this.isProvisional(includeSupertypes);
171
- const provisionalB = provisional; ///
172
- comparesToProvisional = provisionalA === provisionalB;
173
- return comparesToProvisional;
174
- }
175
- compareNominalTypeName(nominalTypeName) {
176
- let comparesToNominalTypeName = false;
177
- const nameNominalTypeName = this.name === nominalTypeName;
178
- if (nameNominalTypeName) {
179
- comparesToNominalTypeName = true;
180
- } else {
181
- const prefixed = this.isPrefixed();
182
- if (prefixed) {
183
- const prefixedName = this.getPrefixedName(), prefixedNameNominalTypeName = prefixedName === nominalTypeName;
184
- if (prefixedNameNominalTypeName) {
185
- comparesToNominalTypeName = true;
186
- }
187
- }
188
- }
189
- return comparesToNominalTypeName;
190
- }
191
- comparePrefixedTypeName(prefixedTypeName) {
192
- let comparesToPrefixedTypeName = false;
193
- const prefixed = this.isPrefixed();
194
- if (prefixed) {
195
- const prefixedName = this.getPrefixedName(), prefixedTypeNamePrefixedName = prefixedTypeName === prefixedName;
196
- if (prefixedTypeNamePrefixedName) {
197
- comparesToPrefixedTypeName = true;
198
- }
199
- }
200
- return comparesToPrefixedTypeName;
201
- }
202
- toJSON(abridged = false) {
203
- const string = this.getString();
204
- let breakPoint;
205
- breakPoint = this.getBreakPoint();
206
- const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
207
- breakPoint = breakPointJSON; ///
208
- const json = {
209
- string,
210
- breakPoint
211
- };
212
- if (!abridged) {
213
- const prefixNameJSON = (0, _json.prefixnameToPrevixNameJSON)(this.prefixName), superTypesJSON = (0, _json.superTypesToSuperTypesJSON)(this.superTypes), propertiesJSON = (0, _json.propertiesToPropertiesJSON)(this.properties), provisinoalJSOM = (0, _json.provisionalToProvisionalJSON)(this.provisional), prefixName = prefixNameJSON, superTypes = superTypesJSON, properties = propertiesJSON, provisional = provisinoalJSOM; ///
214
- Object.assign(json, {
215
- prefixName,
216
- superTypes,
217
- properties,
218
- provisional
219
- });
220
- }
221
- return json;
222
- }
223
- static name = "Type";
224
- static fromJSON(json, context) {
225
- return (0, _context.instantiate)((context)=>{
226
- const { string } = json, typeNode = (0, _instantiate.instantiateType)(string, context), node = typeNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), name = (0, _element.nameFromTypeNode)(typeNode, context), prefixName = (0, _json.prefixNameFromJSON)(json, context), superTypes = (0, _json.superTypesFromJSON)(json, context), properties = (0, _json.propertiesFromJSON)(json, context), provisional = (0, _json.provisionalFromJSON)(json);
227
- context = null; ///
228
- const type = new Type(context, string, node, breakPoint, name, prefixName, superTypes, properties, provisional);
229
- return type;
230
- }, context);
231
- }
232
- static fromName(name, context) {
233
- const string = name, node = null, breakPoint = null, prefixName = null, superTypes = [], properties = [], provisional = false;
234
- context = null;
235
- const type = new Type(context, string, node, breakPoint, name, prefixName, superTypes, properties, provisional);
236
- return type;
237
- }
238
- });
239
-
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUeXBlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyZWFrUG9pbnRcIjtcbmltcG9ydCB7IHByb3BlcnRpZXNGcm9tSlNPTixcbiAgICAgICAgIHByZWZpeE5hbWVGcm9tSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHByb3Zpc2lvbmFsRnJvbUpTT04sXG4gICAgICAgICBwcmVmaXhuYW1lVG9QcmV2aXhOYW1lSlNPTixcbiAgICAgICAgIHN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OLFxuICAgICAgICAgcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04sXG4gICAgICAgICBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCwgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVHlwZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0UHJlZml4TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhOYW1lO1xuICB9XG5cbiAgZ2V0U3VwZXJUeXBlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGVzO1xuICB9XG5cbiAgZ2V0VHlwZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcyhpbmNsdWRlU3VwZXJUeXBlcyA9IHRydWUpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW107XG5cbiAgICBwdXNoKHByb3BlcnRpZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgICBpZiAoaW5jbHVkZVN1cGVyVHlwZXMpIHtcbiAgICAgIHRoaXMuc3VwZXJUeXBlcy5mb3JFYWNoKChzdXBlclR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlUHJvcGVydGllcyA9IHN1cGVyVHlwZS5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgcHVzaChwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbChpbmNsdWRlU3VwZXJUeXBlcyA9IHRydWUpIHtcbiAgICBsZXQgcHJvdmlzaW9uYWwgPSB0aGlzLnByb3Zpc2lvbmFsO1xuXG4gICAgaWYgKGluY2x1ZGVTdXBlclR5cGVzKSB7XG4gICAgICBpZiAoIXByb3Zpc2lvbmFsKSB7XG4gICAgICAgIHByb3Zpc2lvbmFsID0gdGhpcy5zdXBlclR5cGVzLnNvbWUoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cGVyVHlwZVByb3Zpc2lvbmFsID0gc3VwZXJUeXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICAgIGlmIChzdXBlclR5cGVQcm92aXNpb25hbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0UHJlZml4TmFtZShwcmVmaXhOYW1lKSB7XG4gICAgdGhpcy5wcmVmaXhOYW1lID0gcHJlZml4TmFtZTtcbiAgfVxuXG4gIHNldFN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICAgIHRoaXMuc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXM7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBpc0VzdGFibGlzaGVkKGluY2x1ZGVTdXBlclR5cGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsKGluY2x1ZGVTdXBlclR5cGVzKSxcbiAgICAgICAgICBlc3RhYmxpc2hlZCA9ICFwcm92aXNpb25hbDtcblxuICAgIHJldHVybiBlc3RhYmxpc2hlZDtcbiAgfVxuXG4gIGlzUHJlZml4ZWQoKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSAodGhpcy5wcmVmaXhOYW1lICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcmVmaXhlZDtcbiAgfVxuXG4gIGdldFByZWZpeGVkTmFtZSgpIHtcbiAgICBsZXQgcHJlZml4ZWROYW1lID0gbnVsbDtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIHByZWZpeGVkTmFtZSA9IGAke3RoaXMucHJlZml4TmFtZX0ke3RoaXMubmFtZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXhlZE5hbWU7XG4gIH1cblxuICBnZXROb21pbmFsVHlwZU5hbWUoKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSB0aGlzLmlzUHJlZml4ZWQoKSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBwcmVmaXhlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJlZml4TmFtZX0ke3RoaXMubmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lO1xuXG4gICAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbiAgfVxuXG4gIGlzQmFzaWMoKSB7XG4gICAgbGV0IGJhc2ljID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVzTGVuZ3RoID0gdGhpcy5zdXBlclR5cGVzLmxlbmd0aDtcblxuICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdFN1cGVyVHlwZSA9IGZpcnN0KHRoaXMuc3VwZXJUeXBlcyksXG4gICAgICAgICAgICBzdXBlclR5cGUgPSBmaXJzdFN1cGVyVHlwZSwgLy8vXG4gICAgICAgICAgICBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgICAgaWYgKHN1cGVyVHlwZSA9PT0gYmFzZVR5cGUpIHtcbiAgICAgICAgYmFzaWMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNpYztcbiAgfVxuXG4gIGlzUmVmaW5lZCgpIHtcbiAgICBsZXQgcmVmaW5lZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHRoaXMuc3VwZXJUeXBlcy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdXBlclR5cGUgPSBmaXJzdCh0aGlzLnN1cGVyVHlwZXMpLFxuICAgICAgICAgICAgc3VwZXJUeXBlID0gZmlyc3RTdXBlclR5cGUsIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlTmFtZSA9IHN1cGVyVHlwZS5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChzdXBlclR5cGVOYW1lID09PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgcmVmaW5lZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmluZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSAodGhpcyA9PT0gdHlwZSk7XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBsZXQgc3ViVHlwZU9mO1xuXG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICBpZiAodGhpcyA9PT0gYmFzZVR5cGUpIHtcbiAgICAgIHN1YlR5cGVPZiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJUeXBlT2YgPSB0aGlzLnN1cGVyVHlwZXMuc29tZSgoc3VwZXJUeXBlKSA9PiB7IC8vL1xuICAgICAgICBpZiAoc3VwZXJUeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBlclR5cGVTdWJUeXBlT2ZUeXBlID0gc3VwZXJUeXBlLmlzU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IHN1YlR5cGVPZiA9IHR5cGUuaXNTdWJUeXBlT2YodGhpcyksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSBzdWJUeXBlT2Y7ICAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdWJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9PclN1YlR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb09yU3VwZXJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvT3JTdXBlclR5cGVPZiA9IChlcXVhbFRvIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3ViVHlwZU9mID0gdGhpcy5pc1N1YlR5cGVPZih0eXBlKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHRoaXMuaXNTdXBlclR5cGVPZih0eXBlKSxcbiAgICAgICAgICBlcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdWJUeXBlT2YgfHwgc3VwZXJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZjtcbiAgfVxuXG4gIGNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IG5hbWVUeXBlTmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvVHlwZU5hbWUgPSBuYW1lVHlwZU5hbWU7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvVHlwZU5hbWU7XG4gIH1cblxuICBjb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwsIGluY2x1ZGVTdXBlcnR5cGVzID0gdHJ1ZSkge1xuICAgIGxldCBjb21wYXJlc1RvUHJvdmlzaW9uYWw7XG5cbiAgICBjb25zdCBwcm92aXNpb25hbEEgPSBwcm92aXNpb25hbDsgLy8vXG5cbiAgICBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbChpbmNsdWRlU3VwZXJ0eXBlcyk7XG5cbiAgICBjb25zdCBwcm92aXNpb25hbEIgPSBwcm92aXNpb25hbDsgLy8vXG5cbiAgICBjb21wYXJlc1RvUHJvdmlzaW9uYWwgPSAocHJvdmlzaW9uYWxBID09PSBwcm92aXNpb25hbEIpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9Qcm92aXNpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5hbWVOb21pbmFsVHlwZU5hbWUgPSAodGhpcy5uYW1lID09PSBub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKG5hbWVOb21pbmFsVHlwZU5hbWUpIHtcbiAgICAgIGNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHRoaXMuaXNQcmVmaXhlZCgpO1xuXG4gICAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gdGhpcy5nZXRQcmVmaXhlZE5hbWUoKSxcbiAgICAgICAgICAgICAgcHJlZml4ZWROYW1lTm9taW5hbFR5cGVOYW1lID0gKHByZWZpeGVkTmFtZSA9PT0gbm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAocHJlZml4ZWROYW1lTm9taW5hbFR5cGVOYW1lKSB7XG4gICAgICAgICAgY29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb05vbWluYWxUeXBlTmFtZTtcbiAgfVxuXG4gIGNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICBsZXQgY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5pc1ByZWZpeGVkKCk7XG5cbiAgICBpZiAocHJlZml4ZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuZ2V0UHJlZml4ZWROYW1lKCksXG4gICAgICAgICAgICBwcmVmaXhlZFR5cGVOYW1lUHJlZml4ZWROYW1lID0gKHByZWZpeGVkVHlwZU5hbWUgPT09IHByZWZpeGVkTmFtZSk7XG5cbiAgICAgIGlmIChwcmVmaXhlZFR5cGVOYW1lUHJlZml4ZWROYW1lKSB7XG4gICAgICAgIGNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWU7XG4gIH1cblxuICB0b0pTT04oYWJyaWRnZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIGlmICghYWJyaWRnZWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeE5hbWVKU09OID0gcHJlZml4bmFtZVRvUHJldml4TmFtZUpTT04odGhpcy5wcmVmaXhOYW1lKSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04odGhpcy5zdXBlclR5cGVzKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04odGhpcy5wcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIHByb3Zpc2lub2FsSlNPTSA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUpTT04sICAvLy9cbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzSlNPTiwgIC8vL1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLCAgLy8vXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lub2FsSlNPTTsgIC8vL1xuXG4gICAgICBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgcHJlZml4TmFtZSxcbiAgICAgICAgc3VwZXJUeXBlcyxcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgcHJvdmlzaW9uYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICB0eXBlTm9kZSA9IGluc3RhbnRpYXRlVHlwZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbik7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsOyAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZShuYW1lLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RyaW5nID0gbmFtZSwgIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBudWxsLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBmYWxzZTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInB1c2giLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJnZXROYW1lIiwiZ2V0UHJlZml4TmFtZSIsImdldFN1cGVyVHlwZXMiLCJnZXRUeXBlTm9kZSIsImdldE5vZGUiLCJ0eXBlTm9kZSIsImdldFByb3BlcnRpZXMiLCJpbmNsdWRlU3VwZXJUeXBlcyIsImZvckVhY2giLCJzdXBlclR5cGUiLCJzdXBlclR5cGVQcm9wZXJ0aWVzIiwiaXNQcm92aXNpb25hbCIsInNvbWUiLCJzdXBlclR5cGVQcm92aXNpb25hbCIsInNldE5hbWUiLCJzZXRQcmVmaXhOYW1lIiwic2V0U3VwZXJUeXBlcyIsInNldFByb3BlcnRpZXMiLCJzZXRQcm92aXNpb25hbCIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsImlzUHJlZml4ZWQiLCJwcmVmaXhlZCIsImdldFByZWZpeGVkTmFtZSIsInByZWZpeGVkTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImlzQmFzaWMiLCJiYXNpYyIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFN1cGVyVHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsImlzUmVmaW5lZCIsInJlZmluZWQiLCJzdXBlclR5cGVOYW1lIiwiaXNFcXVhbFRvIiwidHlwZSIsImVxdWFsVG8iLCJpc1N1YlR5cGVPZiIsInN1YlR5cGVPZiIsInN1cGVyVHlwZVN1YlR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwic3VwZXJUeXBlT2YiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsImVxdWFsVG9PclN1YlR5cGVPZiIsImlzRXF1YWxUb09yU3VwZXJUeXBlT2YiLCJlcXVhbFRvT3JTdXBlclR5cGVPZiIsImlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mIiwiZXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mIiwiY29tcGFyZVR5cGVOYW1lIiwidHlwZU5hbWUiLCJuYW1lVHlwZU5hbWUiLCJjb21wYXJlc1RvVHlwZU5hbWUiLCJjb21wYXJlUHJvdmlzaW9uYWwiLCJpbmNsdWRlU3VwZXJ0eXBlcyIsImNvbXBhcmVzVG9Qcm92aXNpb25hbCIsInByb3Zpc2lvbmFsQSIsInByb3Zpc2lvbmFsQiIsImNvbXBhcmVOb21pbmFsVHlwZU5hbWUiLCJjb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lIiwibmFtZU5vbWluYWxUeXBlTmFtZSIsInByZWZpeGVkTmFtZU5vbWluYWxUeXBlTmFtZSIsImNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsImNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZVByZWZpeGVkTmFtZSIsInRvSlNPTiIsImFicmlkZ2VkIiwiZ2V0U3RyaW5nIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwicHJlZml4TmFtZUpTT04iLCJwcmVmaXhuYW1lVG9QcmV2aXhOYW1lSlNPTiIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicHJvdmlzaW5vYWxKU09NIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsIk9iamVjdCIsImFzc2lnbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJuYW1lRnJvbVR5cGVOb2RlIiwicHJlZml4TmFtZUZyb21KU09OIiwic3VwZXJUeXBlc0Zyb21KU09OIiwicHJvcGVydGllc0Zyb21KU09OIiwicHJvdmlzaW9uYWxGcm9tSlNPTiIsImZyb21OYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzQkE7OztlQUFBOzs7Z0NBcEJ3QjsyQkFDTzswQkFFUjt5QkFDSzs2QkFDSTt5QkFDQztzQkFDRzs0QkFDMkI7c0JBUWxCO0FBRTdDLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7TUFFdEMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxDQUFFO1FBQ3BHLEtBQUssQ0FBQ1IsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFB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
@@ -1,85 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _occamlanguages = require("occam-languages");
12
- const _elements = require("../elements");
13
- const _context = require("../utilities/context");
14
- const _instantiate = require("../process/instantiate");
15
- const _element = require("../utilities/element");
16
- const _breakPoint = require("../utilities/breakPoint");
17
- const _default = (0, _elements.define)(class TypePrefix extends _occamlanguages.Element {
18
- constructor(context, string, node, breakPoint, name){
19
- super(context, string, node, breakPoint);
20
- this.name = name;
21
- }
22
- getName() {
23
- return this.name;
24
- }
25
- getTypePrefixNode() {
26
- const node = this.getNode(), typePrefixNode = node; ///
27
- return typePrefixNode;
28
- }
29
- getPrefixName() {
30
- const prefixName = this.name; ///
31
- return prefixName;
32
- }
33
- compareTypePrefixName(typePrefixName) {
34
- const comparesToTypePrefixName = this.name === typePrefixName;
35
- return comparesToTypePrefixName;
36
- }
37
- verify(context) {
38
- let verifies = false;
39
- const typePrefixString = this.getString(); ///
40
- context.trace(`Verifying the '${typePrefixString}' type prefix...`);
41
- const typePrefix = context.getTypePrefix();
42
- if (typePrefix === null) {
43
- const typePrefixName = this.name, typePrefixPresent = context.isTypePrefixPresentByTypePrefixName(typePrefixName);
44
- if (!typePrefixPresent) {
45
- const nominalTypeName = typePrefixName, typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
46
- if (!typePresent) {
47
- verifies = true;
48
- } else {
49
- context.debug(`The '${typePrefixString}' type is already present.`);
50
- }
51
- } else {
52
- context.debug(`The '${typePrefixString}' type prefix is already present.`);
53
- }
54
- } else {
55
- context.trace(`The package already has a '${typePrefixString}' type prefix.`);
56
- }
57
- if (verifies) {
58
- context.debug(`...verified the '${typePrefixString}' type prefix.`);
59
- }
60
- return verifies;
61
- }
62
- static name = "TypePrefix";
63
- toJSON() {
64
- const string = this.getString();
65
- let breakPoint;
66
- breakPoint = this.getBreakPoint();
67
- const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
68
- breakPoint = breakPointJSON; ///
69
- const json = {
70
- string,
71
- breakPoint
72
- };
73
- return json;
74
- }
75
- static fromJSON(json, context) {
76
- return (0, _context.instantiate)((context)=>{
77
- const { string } = json, typePrefixNode = (0, _instantiate.instantiateTypePrefix)(string, context), node = typePrefixNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), name = (0, _element.nameFromTypePrefixNode)(typePrefixNode, context);
78
- context = null; ///
79
- const typePrefix = new TypePrefix(context, string, node, breakPoint, name);
80
- return typePrefix;
81
- }, context);
82
- }
83
- });
84
-
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3R5cGVQcmVmaXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVHlwZVByZWZpeCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUeXBlUHJlZml4IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VHlwZVByZWZpeE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVQcmVmaXhOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhOb2RlO1xuICB9XG5cbiAgZ2V0UHJlZml4TmFtZSgpIHtcbiAgICBjb25zdCBwcmVmaXhOYW1lID0gdGhpcy5uYW1lOyAgLy8vXG5cbiAgICByZXR1cm4gcHJlZml4TmFtZTtcbiAgfVxuXG4gIGNvbXBhcmVUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSkge1xuICAgIGNvbnN0IGNvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSA9ICh0aGlzLm5hbWUgPT09IHR5cGVQcmVmaXhOYW1lKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvVHlwZVByZWZpeE5hbWU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVByZWZpeFN0cmluZ30nIHR5cGUgcHJlZml4Li4uYCk7XG5cbiAgICBjb25zdCB0eXBlUHJlZml4ID0gY29udGV4dC5nZXRUeXBlUHJlZml4KCk7XG5cbiAgICBpZiAodHlwZVByZWZpeCA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgdHlwZVByZWZpeFByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKTtcblxuICAgICAgaWYgKCF0eXBlUHJlZml4UHJlc2VudCkge1xuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlUHJlZml4TmFtZSwgIC8vL1xuICAgICAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVByZWZpeFN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVByZWZpeFN0cmluZ30nIHR5cGUgcHJlZml4IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlIHBhY2thZ2UgYWxyZWFkeSBoYXMgYSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZVByZWZpeFN0cmluZ30nIHR5cGUgcHJlZml4LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlUHJlZml4XCI7XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgdHlwZVByZWZpeE5vZGUgPSBpbnN0YW50aWF0ZVR5cGVQcmVmaXgoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDsgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gICAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiVHlwZVByZWZpeCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJuYW1lIiwiZ2V0TmFtZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Tm9kZSIsInR5cGVQcmVmaXhOb2RlIiwiZ2V0UHJlZml4TmFtZSIsInByZWZpeE5hbWUiLCJjb21wYXJlVHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsImNvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSIsInZlcmlmeSIsInZlcmlmaWVzIiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidHlwZVByZWZpeCIsImdldFR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4UHJlc2VudCIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJkZWJ1ZyIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGVQcmVmaXgiLCJicmVha1BvaW50RnJvbUpTT04iLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQUE7OztnQ0FSd0I7MEJBRUQ7eUJBQ0s7NkJBQ1U7eUJBQ0M7NEJBQ3dCO01BRS9ELFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksQ0FBRTtRQUNuRCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtJQUNkO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0QsSUFBSTtJQUNsQjtJQUVBRSxvQkFBb0I7UUFDbEIsTUFBTUosT0FBTyxJQUFJLENBQUNLLE9BQU8sSUFDbkJDLGlCQUFpQk4sTUFBTyxHQUFHO1FBRWpDLE9BQU9NO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTUMsYUFBYSxJQUFJLENBQUNOLElBQUksRUFBRyxHQUFHO1FBRWxDLE9BQU9NO0lBQ1Q7SUFFQUMsc0JBQXNCQyxjQUFjLEVBQUU7UUFDcEMsTUFBTUMsMkJBQTRCLElBQUksQ0FBQ1QsSUFBSSxLQUFLUTtRQUVoRCxPQUFPQztJQUNUO0lBRUFDLE9BQU9kLE9BQU8sRUFBRTtRQUNkLElBQUllLFdBQVc7UUFFZixNQUFNQyxtQkFBbUIsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUUvQ2pCLFFBQVFrQixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLGlCQUFpQixnQkFBZ0IsQ0FBQztRQUVsRSxNQUFNRyxhQUFhbkIsUUFBUW9CLGFBQWE7UUFFeEMsSUFBSUQsZUFBZSxNQUFNO1lBQ3ZCLE1BQU1QLGlCQUFpQixJQUFJLENBQUNSLElBQUksRUFDMUJpQixvQkFBb0JyQixRQUFRc0IsbUNBQW1DLENBQUNWO1lBRXRFLElBQUksQ0FBQ1MsbUJBQW1CO2dCQUN0QixNQUFNRSxrQkFBa0JYLGdCQUNsQlksY0FBY3hCLFFBQVF5Qiw4QkFBOEIsQ0FBQ0Y7Z0JBRTNELElBQUksQ0FBQ0MsYUFBYTtvQkFDaEJULFdBQVc7Z0JBQ2IsT0FBTztvQkFDTGYsUUFBUTBCLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRVYsaUJBQWlCLDBCQUEwQixDQUFDO2dCQUNwRTtZQUNGLE9BQU87Z0JBQ0xoQixRQUFRMEIsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFVixpQkFBaUIsaUNBQWlDLENBQUM7WUFDM0U7UUFDRixPQUFPO1lBQ0xoQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsMkJBQTJCLEVBQUVGLGlCQUFpQixjQUFjLENBQUM7UUFDOUU7UUFFQSxJQUFJRCxVQUFVO1lBQ1pmLFFBQVEwQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRVYsaUJBQWlCLGNBQWMsQ0FBQztRQUNwRTtRQUVBLE9BQU9EO0lBQ1Q7SUFFQSxPQUFPWCxPQUFPLGFBQWE7SUFFM0J1QixTQUFTO1FBQ1AsTUFBTTFCLFNBQVMsSUFBSSxDQUFDZ0IsU0FBUztRQUU3QixJQUFJZDtRQUVKQSxhQUFhLElBQUksQ0FBQ3lCLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCQyxJQUFBQSxzQ0FBMEIsRUFBQzNCO1FBRWxEQSxhQUFhMEIsZ0JBQWlCLEdBQUc7UUFFakMsTUFBTUUsT0FBTztZQUNYOUI7WUFDQUU7UUFDRjtRQUVBLE9BQU80QjtJQUNUO0lBRUEsT0FBT0MsU0FBU0QsSUFBSSxFQUFFL0IsT0FBTyxFQUFFO1FBQzdCLE9BQU9pQyxJQUFBQSxvQkFBVyxFQUFDLENBQUNqQztZQUNsQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHOEIsTUFDYnZCLGlCQUFpQjBCLElBQUFBLGtDQUFxQixFQUFDakMsUUFBUUQsVUFDL0NFLE9BQU9NLGdCQUNQTCxhQUFhZ0MsSUFBQUEsOEJBQWtCLEVBQUNKLE9BQ2hDM0IsT0FBT2dDLElBQUFBLCtCQUFzQixFQUFDNUIsZ0JBQWdCUjtZQUVwREEsVUFBVSxNQUFNLEdBQUc7WUFFbkIsTUFBTW1CLGFBQWEsSUFBSXJCLFdBQVdFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDO1lBRXJFLE9BQU9lO1FBQ1QsR0FBR25CO0lBQ0w7QUFDRiJ9