ruby-wisp-source 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1684) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +28 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +12 -0
  6. data/Rakefile +39 -0
  7. data/VERSION +1 -0
  8. data/lib/wisp/source.rb +7 -0
  9. data/ruby-wisp-source.gemspec +13 -0
  10. data/vendor/History.md +159 -0
  11. data/vendor/LICENSE +24 -0
  12. data/vendor/Makefile +64 -0
  13. data/vendor/Readme.md +615 -0
  14. data/vendor/analyzer.js +385 -0
  15. data/vendor/ast.js +214 -0
  16. data/vendor/backend/javascript/writer.js +212 -0
  17. data/vendor/bin/wisp.js +2 -0
  18. data/vendor/compiler.js +1026 -0
  19. data/vendor/design.md +114 -0
  20. data/vendor/embed.js +2 -0
  21. data/vendor/engine/browser.js +59 -0
  22. data/vendor/engine/node.js +13 -0
  23. data/vendor/interactivate/Makefile +38 -0
  24. data/vendor/interactivate/Readme.md +28 -0
  25. data/vendor/interactivate/build/cache.manifest +12 -0
  26. data/vendor/interactivate/build/codemirror-compressed.js +4 -0
  27. data/vendor/interactivate/build/codemirror.css +248 -0
  28. data/vendor/interactivate/build/main.js +5401 -0
  29. data/vendor/interactivate/build/solarized.css +203 -0
  30. data/vendor/interactivate/index.html +429 -0
  31. data/vendor/interactivate/node_modules/codemirror-activine/License.md +18 -0
  32. data/vendor/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
  33. data/vendor/interactivate/node_modules/codemirror-activine/core.js +33 -0
  34. data/vendor/interactivate/node_modules/codemirror-activine/package.json +36 -0
  35. data/vendor/interactivate/node_modules/codemirror-hashare/License.md +18 -0
  36. data/vendor/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
  37. data/vendor/interactivate/node_modules/codemirror-hashare/core.js +31 -0
  38. data/vendor/interactivate/node_modules/codemirror-hashare/package.json +37 -0
  39. data/vendor/interactivate/node_modules/codemirror-persist/License.md +18 -0
  40. data/vendor/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
  41. data/vendor/interactivate/node_modules/codemirror-persist/core.js +25 -0
  42. data/vendor/interactivate/node_modules/codemirror-persist/package.json +34 -0
  43. data/vendor/interactivate/node_modules/interactivate/History.md +47 -0
  44. data/vendor/interactivate/node_modules/interactivate/License.md +18 -0
  45. data/vendor/interactivate/node_modules/interactivate/Readme.md +11 -0
  46. data/vendor/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
  47. data/vendor/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
  48. data/vendor/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
  49. data/vendor/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
  50. data/vendor/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
  51. data/vendor/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
  52. data/vendor/interactivate/node_modules/interactivate/demo/index.html +115 -0
  53. data/vendor/interactivate/node_modules/interactivate/demo/main.js +39 -0
  54. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
  55. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
  56. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
  57. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
  58. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
  59. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
  60. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
  61. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
  62. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
  63. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
  64. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
  65. data/vendor/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
  66. data/vendor/interactivate/node_modules/interactivate/demo/package.json +21 -0
  67. data/vendor/interactivate/node_modules/interactivate/host/window.js +19 -0
  68. data/vendor/interactivate/node_modules/interactivate/interactivate.js +187 -0
  69. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
  70. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
  71. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
  72. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
  73. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
  74. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
  75. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
  76. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
  77. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
  78. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
  79. data/vendor/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
  80. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
  81. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
  82. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
  83. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
  84. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
  85. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
  86. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
  87. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
  88. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
  89. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
  90. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
  91. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
  92. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
  93. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
  94. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
  95. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
  96. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
  97. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
  98. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
  99. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
  100. data/vendor/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
  101. data/vendor/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
  102. data/vendor/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
  103. data/vendor/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
  104. data/vendor/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
  105. data/vendor/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
  106. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
  107. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
  108. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
  109. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
  110. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
  111. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
  112. data/vendor/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
  113. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
  114. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
  115. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
  116. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
  117. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
  118. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
  119. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
  120. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
  121. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
  122. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
  123. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
  124. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
  125. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
  126. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
  127. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
  128. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
  129. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
  130. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
  131. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
  132. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
  133. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
  134. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
  135. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
  136. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
  137. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
  138. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
  139. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
  140. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
  141. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
  142. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
  143. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
  144. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
  145. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
  146. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
  147. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
  148. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
  149. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
  150. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
  151. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
  152. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
  153. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
  154. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
  155. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
  156. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
  157. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
  158. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
  159. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
  160. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
  161. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
  162. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
  163. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
  164. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
  165. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
  166. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
  167. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
  168. data/vendor/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
  169. data/vendor/interactivate/node_modules/interactivate/output.js +60 -0
  170. data/vendor/interactivate/node_modules/interactivate/package.json +30 -0
  171. data/vendor/interactivate/node_modules/interactivate/render.js +23 -0
  172. data/vendor/interactivate/node_modules/interactivate/view.js +79 -0
  173. data/vendor/interactivate/package.json +22 -0
  174. data/vendor/interactivate/src/host.wisp +84 -0
  175. data/vendor/interactivate/src/main.wisp +38 -0
  176. data/vendor/node_modules/browserify/LICENSE +63 -0
  177. data/vendor/node_modules/browserify/_empty.js +0 -0
  178. data/vendor/node_modules/browserify/bin/advanced.txt +36 -0
  179. data/vendor/node_modules/browserify/bin/cmd.js +150 -0
  180. data/vendor/node_modules/browserify/bin/usage.txt +32 -0
  181. data/vendor/node_modules/browserify/example/api/browser/bar.js +1 -0
  182. data/vendor/node_modules/browserify/example/api/browser/foo.js +5 -0
  183. data/vendor/node_modules/browserify/example/api/browser/main.js +2 -0
  184. data/vendor/node_modules/browserify/example/api/build.js +4 -0
  185. data/vendor/node_modules/browserify/example/multiple_bundles/beep.js +2 -0
  186. data/vendor/node_modules/browserify/example/multiple_bundles/boop.js +2 -0
  187. data/vendor/node_modules/browserify/example/multiple_bundles/build.sh +4 -0
  188. data/vendor/node_modules/browserify/example/multiple_bundles/robot.js +1 -0
  189. data/vendor/node_modules/browserify/example/multiple_bundles/static/beep.html +2 -0
  190. data/vendor/node_modules/browserify/example/multiple_bundles/static/beep.js +6 -0
  191. data/vendor/node_modules/browserify/example/multiple_bundles/static/boop.html +2 -0
  192. data/vendor/node_modules/browserify/example/multiple_bundles/static/boop.js +6 -0
  193. data/vendor/node_modules/browserify/example/multiple_bundles/static/common.js +3 -0
  194. data/vendor/node_modules/browserify/example/source_maps/build.js +10 -0
  195. data/vendor/node_modules/browserify/example/source_maps/build.sh +4 -0
  196. data/vendor/node_modules/browserify/example/source_maps/index.html +11 -0
  197. data/vendor/node_modules/browserify/example/source_maps/js/foo.js +7 -0
  198. data/vendor/node_modules/browserify/example/source_maps/js/main.js +4 -0
  199. data/vendor/node_modules/browserify/example/source_maps/js/wunder/bar.js +8 -0
  200. data/vendor/node_modules/browserify/index.js +352 -0
  201. data/vendor/node_modules/browserify/node_modules/JSONStream/LICENSE.APACHE2 +15 -0
  202. data/vendor/node_modules/browserify/node_modules/JSONStream/LICENSE.MIT +24 -0
  203. data/vendor/node_modules/browserify/node_modules/JSONStream/examples/all_docs.js +13 -0
  204. data/vendor/node_modules/browserify/node_modules/JSONStream/index.js +191 -0
  205. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/LICENSE +24 -0
  206. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/README.markdown +11 -0
  207. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/bench.js +26 -0
  208. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/examples/twitterfeed.js +30 -0
  209. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js +401 -0
  210. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/package.json +40 -0
  211. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic.json +167 -0
  212. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic2.json +180 -0
  213. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/boundary.js +110 -0
  214. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/primitives.js +54 -0
  215. data/vendor/node_modules/browserify/node_modules/JSONStream/node_modules/jsonparse/test/utf8.js +38 -0
  216. data/vendor/node_modules/browserify/node_modules/JSONStream/package.json +43 -0
  217. data/vendor/node_modules/browserify/node_modules/JSONStream/readme.markdown +145 -0
  218. data/vendor/node_modules/browserify/node_modules/JSONStream/test/bool.js +41 -0
  219. data/vendor/node_modules/browserify/node_modules/JSONStream/test/destroy_missing.js +22 -0
  220. data/vendor/node_modules/browserify/node_modules/JSONStream/test/empty.js +44 -0
  221. data/vendor/node_modules/browserify/node_modules/JSONStream/test/fixtures/all_npm.json +4030 -0
  222. data/vendor/node_modules/browserify/node_modules/JSONStream/test/fn.js +39 -0
  223. data/vendor/node_modules/browserify/node_modules/JSONStream/test/multiple_objects.js +42 -0
  224. data/vendor/node_modules/browserify/node_modules/JSONStream/test/multiple_objects_error.js +35 -0
  225. data/vendor/node_modules/browserify/node_modules/JSONStream/test/parsejson.js +28 -0
  226. data/vendor/node_modules/browserify/node_modules/JSONStream/test/stringify.js +41 -0
  227. data/vendor/node_modules/browserify/node_modules/JSONStream/test/stringify_object.js +47 -0
  228. data/vendor/node_modules/browserify/node_modules/JSONStream/test/test.js +35 -0
  229. data/vendor/node_modules/browserify/node_modules/JSONStream/test/test2.js +29 -0
  230. data/vendor/node_modules/browserify/node_modules/JSONStream/test/two-ways.js +41 -0
  231. data/vendor/node_modules/browserify/node_modules/browser-pack/LICENSE +18 -0
  232. data/vendor/node_modules/browserify/node_modules/browser-pack/cmd.js +4 -0
  233. data/vendor/node_modules/browserify/node_modules/browser-pack/example/input.json +13 -0
  234. data/vendor/node_modules/browserify/node_modules/browser-pack/example/output.js +1 -0
  235. data/vendor/node_modules/browserify/node_modules/browser-pack/example/sourcemap/input.json +15 -0
  236. data/vendor/node_modules/browserify/node_modules/browser-pack/example/sourcemap/output.js +6 -0
  237. data/vendor/node_modules/browserify/node_modules/browser-pack/index.js +79 -0
  238. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/LICENSE +23 -0
  239. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/README.md +111 -0
  240. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/example/two-files-short.js +26 -0
  241. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/example/two-files.js +47 -0
  242. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/index.js +97 -0
  243. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/LICENSE +23 -0
  244. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/README.md +85 -0
  245. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/example/comment-to-json.js +15 -0
  246. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/index.js +89 -0
  247. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/package.json +40 -0
  248. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/test/comment-regex.js +25 -0
  249. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/convert-source-map/test/convert-source-map.js +129 -0
  250. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/LICENSE +23 -0
  251. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/README.md +88 -0
  252. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/example/foo-bar.js +8 -0
  253. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/index.js +127 -0
  254. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/CHANGELOG.md +58 -0
  255. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/LICENSE +28 -0
  256. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/Makefile.dryice.js +166 -0
  257. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/README.md +347 -0
  258. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/assert-shim.js +56 -0
  259. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/mini-require.js +152 -0
  260. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  261. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/prefix-utils.jsm +18 -0
  262. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-browser.js +8 -0
  263. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  264. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/suffix-utils.jsm +21 -0
  265. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/test-prefix.js +8 -0
  266. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/build/test-suffix.js +3 -0
  267. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/array-set.js +96 -0
  268. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  269. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/base64.js +42 -0
  270. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  271. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
  272. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  273. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-node.js +353 -0
  274. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/util.js +91 -0
  275. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map.js +8 -0
  276. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  277. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  278. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  279. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/node_modules/amdefine/package.json +40 -0
  280. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/package.json +81 -0
  281. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/run-tests.js +73 -0
  282. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-api.js +26 -0
  283. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  284. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  285. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-base64.js +35 -0
  286. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  287. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  288. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
  289. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  290. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  291. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/test/source-map/util.js +152 -0
  292. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/package.json +49 -0
  293. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/test/inline-source-map.js +247 -0
  294. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/test/source-content.js +129 -0
  295. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/LICENSE +23 -0
  296. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/MOZILLA_LICENSE +28 -0
  297. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/README.md +35 -0
  298. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/base64-vlq.js +108 -0
  299. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/base64.js +35 -0
  300. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/example/one-to-one-mappings.js +5 -0
  301. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/index.js +82 -0
  302. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/package.json +46 -0
  303. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/parse-base64vlq-mappings/test/parse-base64vlq-mappings.js +72 -0
  304. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/package.json +52 -0
  305. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/test/combine-source-map.js +143 -0
  306. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/README.html +1012 -0
  307. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/README.org +593 -0
  308. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/bin/uglifyjs +334 -0
  309. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/docstyle.css +75 -0
  310. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/consolidator.js +1220 -0
  311. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/parse-js.js +1369 -0
  312. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/process.js +2117 -0
  313. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/lib/squeeze-more.js +78 -0
  314. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/package.json +35 -0
  315. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/beautify.js +28 -0
  316. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/testconsolidator.js +1391 -0
  317. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/testparser.js +409 -0
  318. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/1e21.js +1 -0
  319. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  320. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  321. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  322. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  323. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  324. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  325. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  326. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/div-with-regexp.js +1 -0
  327. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  328. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  329. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/if-not.js +1 -0
  330. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  331. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  332. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  333. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/infinite.js +1 -0
  334. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  335. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  336. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  337. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  338. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  339. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  340. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  341. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  342. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  343. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  344. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue278.js +1 -0
  345. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  346. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  347. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  348. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  349. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue349.js +1 -0
  350. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue353.js +1 -0
  351. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue372.js +1 -0
  352. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  353. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  354. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  355. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  356. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  357. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  358. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  359. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  360. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/issues222_324.js +1 -0
  361. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  362. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/null_string.js +1 -0
  363. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  364. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  365. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/whitespace.js +1 -0
  366. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  367. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/1e21.js +1 -0
  368. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  369. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  370. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  371. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  372. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  373. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  374. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  375. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/div-with-regexp.js +1 -0
  376. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  377. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  378. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/if-not.js +1 -0
  379. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  380. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  381. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  382. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/infinite.js +1 -0
  383. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  384. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  385. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  386. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  387. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  388. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  389. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  390. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  391. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  392. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  393. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue278.js +1 -0
  394. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  395. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  396. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  397. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  398. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue349.js +25 -0
  399. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue353.js +4 -0
  400. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue372.js +32 -0
  401. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  402. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  403. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  404. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  405. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  406. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  407. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  408. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  409. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/issues222_324.js +82 -0
  410. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  411. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/null_string.js +1 -0
  412. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  413. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  414. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/whitespace.js +21 -0
  415. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  416. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/test/unit/scripts.js +57 -0
  417. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/hoist.js +33 -0
  418. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/instrument.js +97 -0
  419. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/tmp/test.js +30 -0
  420. data/vendor/node_modules/browserify/node_modules/browser-pack/node_modules/uglify-js/uglify-js.js +18 -0
  421. data/vendor/node_modules/browserify/node_modules/browser-pack/package.json +70 -0
  422. data/vendor/node_modules/browserify/node_modules/browser-pack/prelude.js +42 -0
  423. data/vendor/node_modules/browserify/node_modules/browser-pack/readme.markdown +81 -0
  424. data/vendor/node_modules/browserify/node_modules/browser-pack/test/comment.js +33 -0
  425. data/vendor/node_modules/browserify/node_modules/browser-pack/test/only_execute_entries.js +26 -0
  426. data/vendor/node_modules/browserify/node_modules/browser-pack/test/order.js +38 -0
  427. data/vendor/node_modules/browserify/node_modules/browser-pack/test/pack.js +28 -0
  428. data/vendor/node_modules/browserify/node_modules/browser-pack/test/raw.js +32 -0
  429. data/vendor/node_modules/browserify/node_modules/browser-pack/test/source-maps-existing.js +56 -0
  430. data/vendor/node_modules/browserify/node_modules/browser-pack/test/source-maps.js +113 -0
  431. data/vendor/node_modules/browserify/node_modules/browser-pack/test/this.js +24 -0
  432. data/vendor/node_modules/browserify/node_modules/browser-resolve/README.md +115 -0
  433. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/assert.js +314 -0
  434. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/child_process.js +2 -0
  435. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/dgram.js +0 -0
  436. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/events.js +183 -0
  437. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/fs.js +1 -0
  438. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/https.js +13 -0
  439. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/net.js +1 -0
  440. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/path.js +175 -0
  441. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/process.js +55 -0
  442. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/querystring.js +250 -0
  443. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/stream.js +119 -0
  444. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/string_decoder.js +161 -0
  445. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/sys.js +1 -0
  446. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/timers.js +39 -0
  447. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/tls.js +1 -0
  448. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/tty.js +2 -0
  449. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/url.js +604 -0
  450. data/vendor/node_modules/browserify/node_modules/browser-resolve/builtin/util.js +351 -0
  451. data/vendor/node_modules/browserify/node_modules/browser-resolve/empty.js +0 -0
  452. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/builtin.js +4 -0
  453. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/custom.js +1 -0
  454. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/main.js +1 -0
  455. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom/package.json +7 -0
  456. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/custom.js +5 -0
  457. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/resolve.js +4 -0
  458. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip/main.js +9 -0
  459. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip/package.json +7 -0
  460. data/vendor/node_modules/browserify/node_modules/browser-resolve/example/skip.js +5 -0
  461. data/vendor/node_modules/browserify/node_modules/browser-resolve/index.js +170 -0
  462. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/README.md +11 -0
  463. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/buffer_ieee754.js +84 -0
  464. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/index.js +1317 -0
  465. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/README.md +14 -0
  466. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/lib/b64.js +84 -0
  467. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/package.json +33 -0
  468. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/node_modules/base64-js/test/runner.js +50 -0
  469. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/package.json +49 -0
  470. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/buffer-browserify/test/buffer.js +218 -0
  471. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/LICENCE +19 -0
  472. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/README.md +32 -0
  473. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/index.js +85 -0
  474. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/package.json +80 -0
  475. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/index.js +67 -0
  476. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/static/index.html +12 -0
  477. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/console-browserify/test/static/test-adapter.js +53 -0
  478. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/bundle.js +637 -0
  479. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/index.html +12 -0
  480. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/example/test.js +4 -0
  481. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/index.js +74 -0
  482. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/md5.js +384 -0
  483. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/package.json +37 -0
  484. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/readme.markdown +20 -0
  485. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/rng.js +37 -0
  486. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/sha.js +210 -0
  487. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/crypto-browserify/test/simple.js +35 -0
  488. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/index.html +9 -0
  489. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/main.js +14 -0
  490. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/get/server.js +12 -0
  491. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/index.html +9 -0
  492. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/main.js +18 -0
  493. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/headers/server.js +15 -0
  494. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/data.json +139 -0
  495. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/index.html +9 -0
  496. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/main.js +13 -0
  497. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/LICENSE.APACHE2 +15 -0
  498. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/LICENSE.MIT +24 -0
  499. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/examples/all_docs.js +13 -0
  500. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/index.js +189 -0
  501. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/LICENSE +24 -0
  502. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/README.markdown +11 -0
  503. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/bench.js +26 -0
  504. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/examples/twitterfeed.js +30 -0
  505. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js +379 -0
  506. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/package.json +36 -0
  507. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic.json +167 -0
  508. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/samplejson/basic2.json +180 -0
  509. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/test/primitives.js +54 -0
  510. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/node_modules/jsonparse/test/utf8.js +38 -0
  511. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/package.json +40 -0
  512. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/readme.markdown +145 -0
  513. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/bool.js +41 -0
  514. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/destroy_missing.js +22 -0
  515. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/empty.js +44 -0
  516. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/fixtures/all_npm.json +4030 -0
  517. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/fn.js +39 -0
  518. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/memory.js +69 -0
  519. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/multiple_objects.js +42 -0
  520. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/multiple_objects_error.js +35 -0
  521. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/parsejson.js +28 -0
  522. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/stringify.js +41 -0
  523. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/stringify_object.js +47 -0
  524. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/test.js +35 -0
  525. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/test2.js +29 -0
  526. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/node_modules/JSONStream/test/two-ways.js +41 -0
  527. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/json-stream/server.js +10 -0
  528. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/index.html +9 -0
  529. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/main.js +16 -0
  530. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/post/server.js +19 -0
  531. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/index.html +9 -0
  532. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/main.js +16 -0
  533. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/example/streaming/server.js +21 -0
  534. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/index.js +60 -0
  535. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/lib/request.js +131 -0
  536. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/lib/response.js +119 -0
  537. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/index.js +48 -0
  538. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/package.json +33 -0
  539. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/readme.md +31 -0
  540. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/node_modules/concat-stream/test.js +34 -0
  541. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/package.json +49 -0
  542. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/http-browserify/readme.markdown +128 -0
  543. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/LICENSE +18 -0
  544. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/example/async.js +5 -0
  545. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/example/sync.js +3 -0
  546. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/index.js +5 -0
  547. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js +131 -0
  548. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/core.js +4 -0
  549. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/core.json +38 -0
  550. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/sync.js +99 -0
  551. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/package.json +39 -0
  552. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/readme.markdown +134 -0
  553. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/core.js +12 -0
  554. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/filter.js +17 -0
  555. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/filter_sync.js +15 -0
  556. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/mock.js +68 -0
  557. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/mock_sync.js +68 -0
  558. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
  559. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/doom.js +0 -0
  560. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/package.json +3 -0
  561. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/baz/quux.js +1 -0
  562. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
  563. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
  564. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/cup.coffee +1 -0
  565. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/foo.js +1 -0
  566. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/mug.coffee +0 -0
  567. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/mug.js +0 -0
  568. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
  569. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver/other_path/root.js +0 -0
  570. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver.js +144 -0
  571. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/test/resolver_sync.js +157 -0
  572. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/README.markdown +103 -0
  573. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/bundle.js +473 -0
  574. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/entry.js +6 -0
  575. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/index.html +9 -0
  576. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/example/run/server.js +6 -0
  577. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/index.js +85 -0
  578. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/package.json +46 -0
  579. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/testling/run.js +22 -0
  580. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/vm-browserify/testling/test.sh +11 -0
  581. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/index.js +43 -0
  582. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/package.json +40 -0
  583. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/readme.md +1 -0
  584. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/test/zlib.test.js +65 -0
  585. data/vendor/node_modules/browserify/node_modules/browser-resolve/node_modules/zlib-browserify/zlib.js +55 -0
  586. data/vendor/node_modules/browserify/node_modules/browser-resolve/package.json +45 -0
  587. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/core.js +28 -0
  588. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/false.js +24 -0
  589. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/fixtures/foo.js +1 -0
  590. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/local.js +15 -0
  591. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/mocha.opts +1 -0
  592. data/vendor/node_modules/browserify/node_modules/browser-resolve/test/modules.js +99 -0
  593. data/vendor/node_modules/browserify/node_modules/concat-stream/index.js +50 -0
  594. data/vendor/node_modules/browserify/node_modules/concat-stream/package.json +33 -0
  595. data/vendor/node_modules/browserify/node_modules/concat-stream/readme.md +31 -0
  596. data/vendor/node_modules/browserify/node_modules/concat-stream/test.js +34 -0
  597. data/vendor/node_modules/browserify/node_modules/duplexer/LICENCE +19 -0
  598. data/vendor/node_modules/browserify/node_modules/duplexer/Makefile +4 -0
  599. data/vendor/node_modules/browserify/node_modules/duplexer/README.md +36 -0
  600. data/vendor/node_modules/browserify/node_modules/duplexer/index.js +77 -0
  601. data/vendor/node_modules/browserify/node_modules/duplexer/package.json +46 -0
  602. data/vendor/node_modules/browserify/node_modules/duplexer/test.js +27 -0
  603. data/vendor/node_modules/browserify/node_modules/inherits/README.md +51 -0
  604. data/vendor/node_modules/browserify/node_modules/inherits/inherits.js +29 -0
  605. data/vendor/node_modules/browserify/node_modules/inherits/package.json +29 -0
  606. data/vendor/node_modules/browserify/node_modules/insert-module-globals/LICENSE +18 -0
  607. data/vendor/node_modules/browserify/node_modules/insert-module-globals/bench/results.txt +18 -0
  608. data/vendor/node_modules/browserify/node_modules/insert-module-globals/bench/run.sh +2 -0
  609. data/vendor/node_modules/browserify/node_modules/insert-module-globals/bin/cmd.js +13 -0
  610. data/vendor/node_modules/browserify/node_modules/insert-module-globals/buffer.js +3863 -0
  611. data/vendor/node_modules/browserify/node_modules/insert-module-globals/bundle.sh +4 -0
  612. data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/files/foo/index.js +6 -0
  613. data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/files/main.js +6 -0
  614. data/vendor/node_modules/browserify/node_modules/insert-module-globals/example/insert.js +10 -0
  615. data/vendor/node_modules/browserify/node_modules/insert-module-globals/index.js +102 -0
  616. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/README.markdown +45 -0
  617. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/example/base.js +3 -0
  618. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/example/dir.js +3 -0
  619. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/index.js +29 -0
  620. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/package.json +50 -0
  621. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/commondir/test/dirs.js +66 -0
  622. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/LICENSE +18 -0
  623. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/jquery.js +4 -0
  624. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/results.txt +15 -0
  625. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/bench/run.js +7 -0
  626. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/example/detect.js +6 -0
  627. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/example/src.js +27 -0
  628. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/index.js +166 -0
  629. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/LICENSE +18 -0
  630. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/example/types.js +8 -0
  631. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/index.js +42 -0
  632. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/ChangeLog +18 -0
  633. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/LICENSE.BSD +19 -0
  634. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/README.md +73 -0
  635. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/bin/esparse.js +117 -0
  636. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/bin/esvalidate.js +177 -0
  637. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/component.json +14 -0
  638. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/doc/index.html +473 -0
  639. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/esprima.js +3895 -0
  640. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/detectnestedternary.js +106 -0
  641. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/findbooleantrap.js +173 -0
  642. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/examples/tokendist.js +33 -0
  643. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/index.html +102 -0
  644. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/package.json +47 -0
  645. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/benchmarks.html +58 -0
  646. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/benchmarks.js +334 -0
  647. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compare.html +69 -0
  648. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compare.js +328 -0
  649. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compat.html +40 -0
  650. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/compat.js +239 -0
  651. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.footer.html +3 -0
  652. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.header.html +37 -0
  653. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/coverage.html +4676 -0
  654. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/index.html +37 -0
  655. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/module.html +36 -0
  656. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/module.js +129 -0
  657. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/reflect.js +422 -0
  658. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/run.js +66 -0
  659. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/runner.js +387 -0
  660. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/node_modules/esprima/test/test.js +19764 -0
  661. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/package.json +57 -0
  662. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/readme.markdown +52 -0
  663. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/node_modules/astw/test/parent.js +25 -0
  664. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/package.json +68 -0
  665. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/readme.markdown +99 -0
  666. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/argument.js +17 -0
  667. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/assign_implicit.js +13 -0
  668. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/detect.js +17 -0
  669. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/argument.js +6 -0
  670. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/assign_implicit.js +2 -0
  671. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/detect.js +32 -0
  672. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/named_arg.js +6 -0
  673. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/obj.js +1 -0
  674. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/return_hash.js +5 -0
  675. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/files/right_hand.js +2 -0
  676. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/named_arg.js +17 -0
  677. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/obj.js +16 -0
  678. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/package.json +5 -0
  679. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/return_hash.js +13 -0
  680. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/right_hand.js +16 -0
  681. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/lexical-scope/test/shebang.js +19 -0
  682. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/2132fedf7e11adbdb654aea08615ffea7b84cbf0.patch +25 -0
  683. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/README.md +15 -0
  684. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js +52 -0
  685. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/index.js +2 -0
  686. data/vendor/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/package.json +33 -0
  687. data/vendor/node_modules/browserify/node_modules/insert-module-globals/package.json +59 -0
  688. data/vendor/node_modules/browserify/node_modules/insert-module-globals/readme.markdown +86 -0
  689. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/always/main.js +6 -0
  690. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/always.js +23 -0
  691. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global/filename.js +2 -0
  692. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global/main.js +2 -0
  693. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/global.js +49 -0
  694. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/buffer.js +1 -0
  695. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/foo/buf.js +4 -0
  696. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/foo/index.js +4 -0
  697. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert/main.js +4 -0
  698. data/vendor/node_modules/browserify/node_modules/insert-module-globals/test/insert.js +35 -0
  699. data/vendor/node_modules/browserify/node_modules/module-deps/LICENSE +18 -0
  700. data/vendor/node_modules/browserify/node_modules/module-deps/cmd.js +8 -0
  701. data/vendor/node_modules/browserify/node_modules/module-deps/example/deps.js +8 -0
  702. data/vendor/node_modules/browserify/node_modules/module-deps/example/files/bar.js +3 -0
  703. data/vendor/node_modules/browserify/node_modules/module-deps/example/files/foo.js +5 -0
  704. data/vendor/node_modules/browserify/node_modules/module-deps/example/files/main.js +2 -0
  705. data/vendor/node_modules/browserify/node_modules/module-deps/example/files/xyz.js +2 -0
  706. data/vendor/node_modules/browserify/node_modules/module-deps/index.js +177 -0
  707. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/LICENSE +18 -0
  708. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/example/strings.js +6 -0
  709. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/example/strings_src.js +3 -0
  710. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/index.js +66 -0
  711. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/LICENSE.BSD +19 -0
  712. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/LICENSE.source-map +27 -0
  713. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/README.md +99 -0
  714. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/bin/escodegen.js +43 -0
  715. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/bin/esgenerate.js +43 -0
  716. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/escodegen.js +2245 -0
  717. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/CHANGELOG.md +58 -0
  718. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/LICENSE +28 -0
  719. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/Makefile.dryice.js +166 -0
  720. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/README.md +347 -0
  721. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/assert-shim.js +56 -0
  722. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/mini-require.js +152 -0
  723. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  724. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/prefix-utils.jsm +18 -0
  725. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-browser.js +8 -0
  726. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  727. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/suffix-utils.jsm +21 -0
  728. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/test-prefix.js +8 -0
  729. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/build/test-suffix.js +3 -0
  730. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/array-set.js +96 -0
  731. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  732. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/base64.js +42 -0
  733. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  734. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
  735. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  736. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/source-node.js +353 -0
  737. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map/util.js +91 -0
  738. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/lib/source-map.js +8 -0
  739. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  740. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  741. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  742. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/node_modules/amdefine/package.json +40 -0
  743. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/package.json +81 -0
  744. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/run-tests.js +73 -0
  745. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-api.js +26 -0
  746. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  747. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  748. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64.js +35 -0
  749. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  750. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  751. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
  752. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  753. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  754. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/node_modules/source-map/test/source-map/util.js +152 -0
  755. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/escodegen/package.json +55 -0
  756. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/ChangeLog +18 -0
  757. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/LICENSE.BSD +19 -0
  758. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/README.md +73 -0
  759. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/bin/esparse.js +117 -0
  760. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/bin/esvalidate.js +177 -0
  761. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/component.json +14 -0
  762. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/doc/index.html +473 -0
  763. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/esprima.js +3895 -0
  764. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/detectnestedternary.js +106 -0
  765. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/findbooleantrap.js +173 -0
  766. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/examples/tokendist.js +33 -0
  767. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/index.html +102 -0
  768. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/package.json +47 -0
  769. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/benchmarks.html +58 -0
  770. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/benchmarks.js +334 -0
  771. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compare.html +69 -0
  772. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compare.js +328 -0
  773. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compat.html +40 -0
  774. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/compat.js +239 -0
  775. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.footer.html +3 -0
  776. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.header.html +37 -0
  777. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/coverage.html +4676 -0
  778. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/index.html +37 -0
  779. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/module.html +36 -0
  780. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/module.js +129 -0
  781. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/reflect.js +422 -0
  782. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/run.js +66 -0
  783. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/runner.js +387 -0
  784. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/node_modules/esprima/test/test.js +19764 -0
  785. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/package.json +43 -0
  786. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/readme.markdown +73 -0
  787. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/both.js +26 -0
  788. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/chained.js +9 -0
  789. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/both.js +4 -0
  790. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/chained.js +5 -0
  791. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/nested.js +22 -0
  792. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/shebang.js +5 -0
  793. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/sparse-array.js +3 -0
  794. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/strings.js +13 -0
  795. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/files/word.js +13 -0
  796. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/nested.js +9 -0
  797. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/return.js +9 -0
  798. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/shebang.js +9 -0
  799. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/sparse-array.js +14 -0
  800. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/strings.js +9 -0
  801. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/detective/test/word.js +12 -0
  802. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/LICENSE +18 -0
  803. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/example/async.js +5 -0
  804. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/example/sync.js +3 -0
  805. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/index.js +5 -0
  806. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/async.js +131 -0
  807. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/core.js +4 -0
  808. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/core.json +38 -0
  809. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/lib/sync.js +99 -0
  810. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/package.json +39 -0
  811. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/readme.markdown +134 -0
  812. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/core.js +12 -0
  813. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/filter.js +17 -0
  814. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/filter_sync.js +15 -0
  815. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/mock.js +68 -0
  816. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/mock_sync.js +68 -0
  817. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
  818. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/doom.js +0 -0
  819. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/package.json +3 -0
  820. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/baz/quux.js +1 -0
  821. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
  822. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
  823. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/cup.coffee +1 -0
  824. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/foo.js +1 -0
  825. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/mug.coffee +0 -0
  826. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/mug.js +0 -0
  827. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
  828. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver/other_path/root.js +0 -0
  829. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver.js +144 -0
  830. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/resolve/test/resolver_sync.js +157 -0
  831. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/LICENSE.APACHE2 +15 -0
  832. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/LICENSE.MIT +24 -0
  833. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/index.js +108 -0
  834. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/package.json +50 -0
  835. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/readme.markdown +63 -0
  836. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/auto-destroy.js +30 -0
  837. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/buffering.js +71 -0
  838. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/end.js +45 -0
  839. data/vendor/node_modules/browserify/node_modules/module-deps/node_modules/through/test/index.js +114 -0
  840. data/vendor/node_modules/browserify/node_modules/module-deps/package.json +55 -0
  841. data/vendor/node_modules/browserify/node_modules/module-deps/readme.markdown +135 -0
  842. data/vendor/node_modules/browserify/node_modules/module-deps/test/bundle.js +21 -0
  843. data/vendor/node_modules/browserify/node_modules/module-deps/test/deps.js +42 -0
  844. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/bar.js +3 -0
  845. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/filterable.js +10 -0
  846. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/foo.js +5 -0
  847. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/main.js +2 -0
  848. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/f.js +1 -0
  849. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/main.js +7 -0
  850. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/index.js +1 -0
  851. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/node_modules/insert-ggg/index.js +7 -0
  852. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/g/package.json +6 -0
  853. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/insert-aaa/index.js +7 -0
  854. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/insert-bbb/index.js +7 -0
  855. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_module/node_modules/m/index.js +3 -0
  856. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/f.js +1 -0
  857. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/main.js +7 -0
  858. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/index.js +1 -0
  859. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/package.json +6 -0
  860. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/g/tr_g.js +6 -0
  861. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/node_modules/m/index.js +3 -0
  862. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/tr_a.js +6 -0
  863. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/tr_sh/tr_b.js +6 -0
  864. data/vendor/node_modules/browserify/node_modules/module-deps/test/files/xyz.js +2 -0
  865. data/vendor/node_modules/browserify/node_modules/module-deps/test/filter.js +37 -0
  866. data/vendor/node_modules/browserify/node_modules/module-deps/test/noparse.js +37 -0
  867. data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_fn.js +29 -0
  868. data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_module.js +21 -0
  869. data/vendor/node_modules/browserify/node_modules/module-deps/test/tr_sh.js +21 -0
  870. data/vendor/node_modules/browserify/node_modules/optimist/LICENSE +21 -0
  871. data/vendor/node_modules/browserify/node_modules/optimist/example/bool.js +10 -0
  872. data/vendor/node_modules/browserify/node_modules/optimist/example/boolean_double.js +7 -0
  873. data/vendor/node_modules/browserify/node_modules/optimist/example/boolean_single.js +7 -0
  874. data/vendor/node_modules/browserify/node_modules/optimist/example/default_hash.js +8 -0
  875. data/vendor/node_modules/browserify/node_modules/optimist/example/default_singles.js +7 -0
  876. data/vendor/node_modules/browserify/node_modules/optimist/example/divide.js +8 -0
  877. data/vendor/node_modules/browserify/node_modules/optimist/example/line_count.js +20 -0
  878. data/vendor/node_modules/browserify/node_modules/optimist/example/line_count_options.js +29 -0
  879. data/vendor/node_modules/browserify/node_modules/optimist/example/line_count_wrap.js +29 -0
  880. data/vendor/node_modules/browserify/node_modules/optimist/example/nonopt.js +4 -0
  881. data/vendor/node_modules/browserify/node_modules/optimist/example/reflect.js +2 -0
  882. data/vendor/node_modules/browserify/node_modules/optimist/example/short.js +3 -0
  883. data/vendor/node_modules/browserify/node_modules/optimist/example/string.js +11 -0
  884. data/vendor/node_modules/browserify/node_modules/optimist/example/usage-options.js +19 -0
  885. data/vendor/node_modules/browserify/node_modules/optimist/example/xup.js +10 -0
  886. data/vendor/node_modules/browserify/node_modules/optimist/index.js +478 -0
  887. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/README.markdown +70 -0
  888. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/example/center.js +10 -0
  889. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/example/meat.js +3 -0
  890. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/index.js +76 -0
  891. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/package.json +44 -0
  892. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/break.js +30 -0
  893. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/idleness.txt +63 -0
  894. data/vendor/node_modules/browserify/node_modules/optimist/node_modules/wordwrap/test/wrap.js +31 -0
  895. data/vendor/node_modules/browserify/node_modules/optimist/package.json +45 -0
  896. data/vendor/node_modules/browserify/node_modules/optimist/readme.markdown +487 -0
  897. data/vendor/node_modules/browserify/node_modules/optimist/test/_/argv.js +2 -0
  898. data/vendor/node_modules/browserify/node_modules/optimist/test/_/bin.js +3 -0
  899. data/vendor/node_modules/browserify/node_modules/optimist/test/_.js +71 -0
  900. data/vendor/node_modules/browserify/node_modules/optimist/test/parse.js +446 -0
  901. data/vendor/node_modules/browserify/node_modules/optimist/test/usage.js +292 -0
  902. data/vendor/node_modules/browserify/node_modules/shell-quote/README.markdown +72 -0
  903. data/vendor/node_modules/browserify/node_modules/shell-quote/example/parse.js +3 -0
  904. data/vendor/node_modules/browserify/node_modules/shell-quote/example/quote.js +3 -0
  905. data/vendor/node_modules/browserify/node_modules/shell-quote/index.js +33 -0
  906. data/vendor/node_modules/browserify/node_modules/shell-quote/package.json +46 -0
  907. data/vendor/node_modules/browserify/node_modules/shell-quote/test/parse.js +14 -0
  908. data/vendor/node_modules/browserify/node_modules/shell-quote/test/quote.js +15 -0
  909. data/vendor/node_modules/browserify/node_modules/syntax-error/LICENSE +18 -0
  910. data/vendor/node_modules/browserify/node_modules/syntax-error/example/check.js +12 -0
  911. data/vendor/node_modules/browserify/node_modules/syntax-error/example/src.js +9 -0
  912. data/vendor/node_modules/browserify/node_modules/syntax-error/index.js +54 -0
  913. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/LICENSE.BSD +19 -0
  914. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/README.md +74 -0
  915. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/codemirror.css +112 -0
  916. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/codemirror.js +2972 -0
  917. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/codemirror/javascript.js +360 -0
  918. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/json2.js +487 -0
  919. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/style.css +164 -0
  920. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview-min.js +12 -0
  921. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview-sprite.gif +0 -0
  922. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/treeview.css +7 -0
  923. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/assets/yui/yahoo-dom-event.js +14 -0
  924. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/bin/esparse.js +42 -0
  925. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/changes +92 -0
  926. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/cm +696 -0
  927. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/checkenv.js +42 -0
  928. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/collector.html +82 -0
  929. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/collector.js +170 -0
  930. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/functiontrace.html +106 -0
  931. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/functiontrace.js +123 -0
  932. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/parse.css +82 -0
  933. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/parse.html +352 -0
  934. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/precedence.html +225 -0
  935. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/rewrite.html +120 -0
  936. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/demo/rewrite.js +71 -0
  937. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/esprima.js +3577 -0
  938. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/index.html +103 -0
  939. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/package.json +42 -0
  940. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/Tokenizer.js +646 -0
  941. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/XMLHttpRequest.js +509 -0
  942. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ZeParser.js +2185 -0
  943. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/backbone-0.5.3.js +1158 -0
  944. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/benchmark.js +3261 -0
  945. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/escodegen.js +906 -0
  946. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/esmorph.js +240 -0
  947. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ext-core-3.0.0.js +6579 -0
  948. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/ext-core-3.1.0.js +10255 -0
  949. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery-1.6.4.js +9046 -0
  950. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery-1.7.1.js +9266 -0
  951. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jquery.mobile-1.0.js +6951 -0
  952. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jsdefs.js +731 -0
  953. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jslex.js +588 -0
  954. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/jsparse.js +1921 -0
  955. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/mootools-1.3.2.js +5952 -0
  956. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/mootools-1.4.1.js +6297 -0
  957. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/parse-js.js +1342 -0
  958. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/platform.js +878 -0
  959. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/prototype-1.6.1.js +4874 -0
  960. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/prototype-1.7.0.0.js +6082 -0
  961. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/3rdparty/underscore-1.2.3.js +981 -0
  962. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/benchmarks.html +58 -0
  963. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/benchmarks.js +328 -0
  964. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compare.html +140 -0
  965. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compare.js +270 -0
  966. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compat.html +40 -0
  967. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/compat.js +239 -0
  968. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.footer.html +3 -0
  969. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.header.html +37 -0
  970. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/coverage.html +3617 -0
  971. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/index.html +36 -0
  972. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/reflect.js +403 -0
  973. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/run.js +66 -0
  974. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/test/test.js +16659 -0
  975. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/tools/generate-unicode-regex.py +164 -0
  976. data/vendor/node_modules/browserify/node_modules/syntax-error/node_modules/esprima/tools/update-coverage.sh +28 -0
  977. data/vendor/node_modules/browserify/node_modules/syntax-error/package.json +53 -0
  978. data/vendor/node_modules/browserify/node_modules/syntax-error/readme.markdown +87 -0
  979. data/vendor/node_modules/browserify/node_modules/syntax-error/test/check.js +17 -0
  980. data/vendor/node_modules/browserify/node_modules/syntax-error/test/sources/check.js +9 -0
  981. data/vendor/node_modules/browserify/node_modules/through/LICENSE.APACHE2 +15 -0
  982. data/vendor/node_modules/browserify/node_modules/through/LICENSE.MIT +24 -0
  983. data/vendor/node_modules/browserify/node_modules/through/index.js +103 -0
  984. data/vendor/node_modules/browserify/node_modules/through/package.json +50 -0
  985. data/vendor/node_modules/browserify/node_modules/through/readme.markdown +43 -0
  986. data/vendor/node_modules/browserify/node_modules/through/test/buffering.js +71 -0
  987. data/vendor/node_modules/browserify/node_modules/through/test/end.js +26 -0
  988. data/vendor/node_modules/browserify/node_modules/through/test/index.js +114 -0
  989. data/vendor/node_modules/browserify/node_modules/umd/README.md +46 -0
  990. data/vendor/node_modules/browserify/node_modules/umd/index.js +63 -0
  991. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/README.md +81 -0
  992. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/index.js +39 -0
  993. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/History.md +10 -0
  994. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/Makefile +6 -0
  995. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/Readme.md +44 -0
  996. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/index.js +10 -0
  997. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/callsite/package.json +31 -0
  998. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/LICENSE +18 -0
  999. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/example/async.js +5 -0
  1000. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/example/sync.js +3 -0
  1001. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/index.js +5 -0
  1002. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/async.js +131 -0
  1003. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/core.js +4 -0
  1004. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/core.json +38 -0
  1005. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/lib/sync.js +99 -0
  1006. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/package.json +39 -0
  1007. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/readme.markdown +134 -0
  1008. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/core.js +12 -0
  1009. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/filter.js +17 -0
  1010. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/filter_sync.js +15 -0
  1011. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/mock.js +68 -0
  1012. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/mock_sync.js +68 -0
  1013. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +1 -0
  1014. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/doom.js +0 -0
  1015. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/package.json +3 -0
  1016. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/baz/quux.js +1 -0
  1017. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +1 -0
  1018. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +1 -0
  1019. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/cup.coffee +1 -0
  1020. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/foo.js +1 -0
  1021. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/mug.coffee +0 -0
  1022. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/mug.js +0 -0
  1023. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
  1024. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver/other_path/root.js +0 -0
  1025. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver.js +144 -0
  1026. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/node_modules/resolve/test/resolver_sync.js +157 -0
  1027. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/package.json +43 -0
  1028. data/vendor/node_modules/browserify/node_modules/umd/node_modules/rfile/test/index.js +43 -0
  1029. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/README.md +26 -0
  1030. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/index.js +9 -0
  1031. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/package.json +46 -0
  1032. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/fixture/jquery.js +9597 -0
  1033. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/fixture/jquery.min.js +3 -0
  1034. data/vendor/node_modules/browserify/node_modules/umd/node_modules/ruglify/test/index.js +8 -0
  1035. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/LICENSE.APACHE2 +15 -0
  1036. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/LICENSE.MIT +24 -0
  1037. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/index.js +108 -0
  1038. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/package.json +50 -0
  1039. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/readme.markdown +63 -0
  1040. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/auto-destroy.js +30 -0
  1041. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/buffering.js +71 -0
  1042. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/end.js +45 -0
  1043. data/vendor/node_modules/browserify/node_modules/umd/node_modules/through/test/index.js +114 -0
  1044. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/README.md +544 -0
  1045. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/bin/uglifyjs +370 -0
  1046. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/ast.js +964 -0
  1047. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/compress.js +1968 -0
  1048. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/mozilla-ast.js +265 -0
  1049. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/output.js +1220 -0
  1050. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/parse.js +1407 -0
  1051. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/scope.js +580 -0
  1052. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/sourcemap.js +81 -0
  1053. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/transform.js +218 -0
  1054. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/lib/utils.js +288 -0
  1055. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +58 -0
  1056. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/LICENSE +28 -0
  1057. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js +166 -0
  1058. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/README.md +347 -0
  1059. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js +56 -0
  1060. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/mini-require.js +152 -0
  1061. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  1062. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm +18 -0
  1063. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js +8 -0
  1064. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  1065. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm +21 -0
  1066. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js +8 -0
  1067. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js +3 -0
  1068. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js +96 -0
  1069. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  1070. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js +42 -0
  1071. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  1072. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +426 -0
  1073. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  1074. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js +353 -0
  1075. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js +91 -0
  1076. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/lib/source-map.js +8 -0
  1077. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  1078. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  1079. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  1080. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json +40 -0
  1081. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/package.json +81 -0
  1082. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +73 -0
  1083. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js +26 -0
  1084. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  1085. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  1086. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js +35 -0
  1087. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  1088. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  1089. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js +291 -0
  1090. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  1091. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  1092. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js +152 -0
  1093. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/package.json +48 -0
  1094. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/arrays.js +12 -0
  1095. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/blocks.js +49 -0
  1096. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/conditionals.js +143 -0
  1097. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/dead-code.js +89 -0
  1098. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/debugger.js +24 -0
  1099. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/drop-unused.js +97 -0
  1100. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-105.js +17 -0
  1101. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-12.js +11 -0
  1102. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-22.js +17 -0
  1103. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-44.js +31 -0
  1104. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/issue-59.js +30 -0
  1105. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/labels.js +163 -0
  1106. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/loops.js +123 -0
  1107. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/properties.js +25 -0
  1108. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/sequences.js +161 -0
  1109. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/compress/switch.js +210 -0
  1110. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/test/run-tests.js +170 -0
  1111. data/vendor/node_modules/browserify/node_modules/umd/node_modules/uglify-js/tools/node.js +164 -0
  1112. data/vendor/node_modules/browserify/node_modules/umd/package.json +39 -0
  1113. data/vendor/node_modules/browserify/node_modules/umd/template.js +33 -0
  1114. data/vendor/node_modules/browserify/package.json +65 -0
  1115. data/vendor/node_modules/browserify/readme.markdown +426 -0
  1116. data/vendor/node_modules/browserify/test/backbone.js +22 -0
  1117. data/vendor/node_modules/browserify/test/bin.js +31 -0
  1118. data/vendor/node_modules/browserify/test/bin_entry.js +31 -0
  1119. data/vendor/node_modules/browserify/test/buffer.js +118 -0
  1120. data/vendor/node_modules/browserify/test/bundle_sourcemap.js +30 -0
  1121. data/vendor/node_modules/browserify/test/catch/main.js +1 -0
  1122. data/vendor/node_modules/browserify/test/catch.js +22 -0
  1123. data/vendor/node_modules/browserify/test/circular/a.js +3 -0
  1124. data/vendor/node_modules/browserify/test/circular/b.js +1 -0
  1125. data/vendor/node_modules/browserify/test/circular/main.js +1 -0
  1126. data/vendor/node_modules/browserify/test/circular.js +34 -0
  1127. data/vendor/node_modules/browserify/test/coffee_bin/main.coffee +2 -0
  1128. data/vendor/node_modules/browserify/test/coffee_bin/x.coffee +1 -0
  1129. data/vendor/node_modules/browserify/test/coffee_bin.js +36 -0
  1130. data/vendor/node_modules/browserify/test/comment/main.js +2 -0
  1131. data/vendor/node_modules/browserify/test/comment.js +16 -0
  1132. data/vendor/node_modules/browserify/test/crypto.js +37 -0
  1133. data/vendor/node_modules/browserify/test/dnode.js +27 -0
  1134. data/vendor/node_modules/browserify/test/dollar/dollar/index.js +7 -0
  1135. data/vendor/node_modules/browserify/test/dollar.js +18 -0
  1136. data/vendor/node_modules/browserify/test/entry/main.js +1 -0
  1137. data/vendor/node_modules/browserify/test/entry/one.js +1 -0
  1138. data/vendor/node_modules/browserify/test/entry/two.js +1 -0
  1139. data/vendor/node_modules/browserify/test/entry.js +19 -0
  1140. data/vendor/node_modules/browserify/test/entry_exec/fail.js +1 -0
  1141. data/vendor/node_modules/browserify/test/entry_exec/main.js +1 -0
  1142. data/vendor/node_modules/browserify/test/entry_exec.js +15 -0
  1143. data/vendor/node_modules/browserify/test/error_code/src.js +2 -0
  1144. data/vendor/node_modules/browserify/test/error_code.js +22 -0
  1145. data/vendor/node_modules/browserify/test/export/entry.js +1 -0
  1146. data/vendor/node_modules/browserify/test/export.js +35 -0
  1147. data/vendor/node_modules/browserify/test/fake/fake_fs.js +1 -0
  1148. data/vendor/node_modules/browserify/test/fake/main.js +2 -0
  1149. data/vendor/node_modules/browserify/test/fake.js +15 -0
  1150. data/vendor/node_modules/browserify/test/field/miss.js +1 -0
  1151. data/vendor/node_modules/browserify/test/field/node_modules/z-miss/browser.js +1 -0
  1152. data/vendor/node_modules/browserify/test/field/node_modules/z-miss/main.js +1 -0
  1153. data/vendor/node_modules/browserify/test/field/node_modules/z-miss/package.json +4 -0
  1154. data/vendor/node_modules/browserify/test/field/node_modules/z-object/browser.js +1 -0
  1155. data/vendor/node_modules/browserify/test/field/node_modules/z-object/main.js +1 -0
  1156. data/vendor/node_modules/browserify/test/field/node_modules/z-object/package.json +4 -0
  1157. data/vendor/node_modules/browserify/test/field/node_modules/z-string/browser.js +1 -0
  1158. data/vendor/node_modules/browserify/test/field/node_modules/z-string/main.js +1 -0
  1159. data/vendor/node_modules/browserify/test/field/node_modules/z-string/package.json +4 -0
  1160. data/vendor/node_modules/browserify/test/field/node_modules/z-sub/browser/a.js +1 -0
  1161. data/vendor/node_modules/browserify/test/field/node_modules/z-sub/browser/b.js +1 -0
  1162. data/vendor/node_modules/browserify/test/field/node_modules/z-sub/main.js +1 -0
  1163. data/vendor/node_modules/browserify/test/field/node_modules/z-sub/package.json +4 -0
  1164. data/vendor/node_modules/browserify/test/field/object.js +1 -0
  1165. data/vendor/node_modules/browserify/test/field/string.js +1 -0
  1166. data/vendor/node_modules/browserify/test/field/sub.js +1 -0
  1167. data/vendor/node_modules/browserify/test/field.js +64 -0
  1168. data/vendor/node_modules/browserify/test/file_event.js +33 -0
  1169. data/vendor/node_modules/browserify/test/global/buffer.js +2 -0
  1170. data/vendor/node_modules/browserify/test/global/filename.js +2 -0
  1171. data/vendor/node_modules/browserify/test/global/main.js +2 -0
  1172. data/vendor/node_modules/browserify/test/global/tick.js +3 -0
  1173. data/vendor/node_modules/browserify/test/global.js +54 -0
  1174. data/vendor/node_modules/browserify/test/ignore/main.js +1 -0
  1175. data/vendor/node_modules/browserify/test/ignore/skip.js +1 -0
  1176. data/vendor/node_modules/browserify/test/ignore.js +16 -0
  1177. data/vendor/node_modules/browserify/test/json/beep.json +4 -0
  1178. data/vendor/node_modules/browserify/test/json/main.js +1 -0
  1179. data/vendor/node_modules/browserify/test/json.js +18 -0
  1180. data/vendor/node_modules/browserify/test/maxlisteners/main.js +3 -0
  1181. data/vendor/node_modules/browserify/test/maxlisteners.js +13 -0
  1182. data/vendor/node_modules/browserify/test/multi_bundle/a.js +2 -0
  1183. data/vendor/node_modules/browserify/test/multi_bundle/b.js +5 -0
  1184. data/vendor/node_modules/browserify/test/multi_bundle.js +44 -0
  1185. data/vendor/node_modules/browserify/test/multi_entry/a.js +2 -0
  1186. data/vendor/node_modules/browserify/test/multi_entry/b.js +2 -0
  1187. data/vendor/node_modules/browserify/test/multi_entry/c.js +2 -0
  1188. data/vendor/node_modules/browserify/test/multi_entry.js +25 -0
  1189. data/vendor/node_modules/browserify/test/node_modules/beep/index.js +1 -0
  1190. data/vendor/node_modules/browserify/test/process/main.js +3 -0
  1191. data/vendor/node_modules/browserify/test/process/one.js +1 -0
  1192. data/vendor/node_modules/browserify/test/process/two.js +1 -0
  1193. data/vendor/node_modules/browserify/test/process.js +20 -0
  1194. data/vendor/node_modules/browserify/test/require_cache.js +19 -0
  1195. data/vendor/node_modules/browserify/test/retarget.js +23 -0
  1196. data/vendor/node_modules/browserify/test/reverse_multi_bundle/app.js +22 -0
  1197. data/vendor/node_modules/browserify/test/reverse_multi_bundle/lazy.js +4 -0
  1198. data/vendor/node_modules/browserify/test/reverse_multi_bundle/shared.js +4 -0
  1199. data/vendor/node_modules/browserify/test/reverse_multi_bundle.js +43 -0
  1200. data/vendor/node_modules/browserify/test/shebang/foo.js +2 -0
  1201. data/vendor/node_modules/browserify/test/shebang/main.js +4 -0
  1202. data/vendor/node_modules/browserify/test/shebang.js +11 -0
  1203. data/vendor/node_modules/browserify/test/standalone/main.js +3 -0
  1204. data/vendor/node_modules/browserify/test/standalone/one.js +1 -0
  1205. data/vendor/node_modules/browserify/test/standalone/two.js +1 -0
  1206. data/vendor/node_modules/browserify/test/standalone.js +73 -0
  1207. data/vendor/node_modules/browserify/test/subdep/index.js +1 -0
  1208. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/b.js +1 -0
  1209. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/ignore_me.js +1 -0
  1210. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/a/index.js +1 -0
  1211. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/a/package.json +5 -0
  1212. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/c/index.js +1 -0
  1213. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/c/package.json +5 -0
  1214. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/f/index.js +1 -0
  1215. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/node_modules/z/index.js +1 -0
  1216. data/vendor/node_modules/browserify/test/subdep/node_modules/qq/package.json +3 -0
  1217. data/vendor/node_modules/browserify/test/subdep/package.json +6 -0
  1218. data/vendor/node_modules/browserify/test/subdep.js +16 -0
  1219. data/vendor/node_modules/browserify/test/tr/f.js +1 -0
  1220. data/vendor/node_modules/browserify/test/tr/main.js +7 -0
  1221. data/vendor/node_modules/browserify/test/tr/node_modules/g/index.js +1 -0
  1222. data/vendor/node_modules/browserify/test/tr/node_modules/g/node_modules/insert-ggg/index.js +7 -0
  1223. data/vendor/node_modules/browserify/test/tr/node_modules/g/package.json +6 -0
  1224. data/vendor/node_modules/browserify/test/tr/node_modules/insert-aaa/index.js +7 -0
  1225. data/vendor/node_modules/browserify/test/tr/node_modules/insert-bbb/index.js +7 -0
  1226. data/vendor/node_modules/browserify/test/tr/node_modules/m/index.js +3 -0
  1227. data/vendor/node_modules/browserify/test/tr.js +21 -0
  1228. data/vendor/node_modules/browserify/test/util.js +62 -0
  1229. data/vendor/node_modules/wisp/History.md +152 -0
  1230. data/vendor/node_modules/wisp/LICENSE +24 -0
  1231. data/vendor/node_modules/wisp/Makefile +80 -0
  1232. data/vendor/node_modules/wisp/Readme.md +615 -0
  1233. data/vendor/node_modules/wisp/analyzer.js +385 -0
  1234. data/vendor/node_modules/wisp/ast.js +214 -0
  1235. data/vendor/node_modules/wisp/backend/javascript/writer.js +212 -0
  1236. data/vendor/node_modules/wisp/bin/wisp.js +2 -0
  1237. data/vendor/node_modules/wisp/compiler.js +1028 -0
  1238. data/vendor/node_modules/wisp/design.md +114 -0
  1239. data/vendor/node_modules/wisp/engine/browser.js +65 -0
  1240. data/vendor/node_modules/wisp/engine/node.js +20 -0
  1241. data/vendor/node_modules/wisp/index.html +405 -0
  1242. data/vendor/node_modules/wisp/interactivate/Makefile +38 -0
  1243. data/vendor/node_modules/wisp/interactivate/Readme.md +24 -0
  1244. data/vendor/node_modules/wisp/interactivate/build/cache.manifest +12 -0
  1245. data/vendor/node_modules/wisp/interactivate/build/codemirror-compressed.js +4 -0
  1246. data/vendor/node_modules/wisp/interactivate/build/codemirror.css +248 -0
  1247. data/vendor/node_modules/wisp/interactivate/build/main.js +5430 -0
  1248. data/vendor/node_modules/wisp/interactivate/build/solarized.css +207 -0
  1249. data/vendor/node_modules/wisp/interactivate/host.wisp +83 -0
  1250. data/vendor/node_modules/wisp/interactivate/index.html +392 -0
  1251. data/vendor/node_modules/wisp/interactivate/main.wisp +37 -0
  1252. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/License.md +18 -0
  1253. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
  1254. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/core.js +33 -0
  1255. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-activine/package.json +36 -0
  1256. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/License.md +18 -0
  1257. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
  1258. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/core.js +31 -0
  1259. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-hashare/package.json +37 -0
  1260. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/License.md +18 -0
  1261. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
  1262. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/core.js +25 -0
  1263. data/vendor/node_modules/wisp/interactivate/node_modules/codemirror-persist/package.json +34 -0
  1264. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/History.md +47 -0
  1265. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/License.md +18 -0
  1266. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/Readme.md +11 -0
  1267. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
  1268. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
  1269. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
  1270. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
  1271. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
  1272. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
  1273. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/index.html +115 -0
  1274. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/main.js +39 -0
  1275. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
  1276. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
  1277. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
  1278. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
  1279. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
  1280. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
  1281. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
  1282. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
  1283. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
  1284. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
  1285. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
  1286. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
  1287. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/demo/package.json +21 -0
  1288. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/host/window.js +19 -0
  1289. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/interactivate.js +187 -0
  1290. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
  1291. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
  1292. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
  1293. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
  1294. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
  1295. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
  1296. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
  1297. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
  1298. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
  1299. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
  1300. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
  1301. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
  1302. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
  1303. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
  1304. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
  1305. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
  1306. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
  1307. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
  1308. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
  1309. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
  1310. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
  1311. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
  1312. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
  1313. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
  1314. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
  1315. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
  1316. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
  1317. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
  1318. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
  1319. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
  1320. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
  1321. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
  1322. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
  1323. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
  1324. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
  1325. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
  1326. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
  1327. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
  1328. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
  1329. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
  1330. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
  1331. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
  1332. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
  1333. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
  1334. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
  1335. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
  1336. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
  1337. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
  1338. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
  1339. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
  1340. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
  1341. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
  1342. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
  1343. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
  1344. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
  1345. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
  1346. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
  1347. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
  1348. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
  1349. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
  1350. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
  1351. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
  1352. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
  1353. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
  1354. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
  1355. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
  1356. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
  1357. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
  1358. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
  1359. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
  1360. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
  1361. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
  1362. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
  1363. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
  1364. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
  1365. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
  1366. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
  1367. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
  1368. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
  1369. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
  1370. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
  1371. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
  1372. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
  1373. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
  1374. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
  1375. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
  1376. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
  1377. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
  1378. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
  1379. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
  1380. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
  1381. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
  1382. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
  1383. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
  1384. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
  1385. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
  1386. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
  1387. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
  1388. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
  1389. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
  1390. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/output.js +60 -0
  1391. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/package.json +30 -0
  1392. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/render.js +23 -0
  1393. data/vendor/node_modules/wisp/interactivate/node_modules/interactivate/view.js +79 -0
  1394. data/vendor/node_modules/wisp/interactivate/package.json +22 -0
  1395. data/vendor/node_modules/wisp/package.json +61 -0
  1396. data/vendor/node_modules/wisp/reader.js +785 -0
  1397. data/vendor/node_modules/wisp/repl.js +121 -0
  1398. data/vendor/node_modules/wisp/runtime.js +609 -0
  1399. data/vendor/node_modules/wisp/sequence.js +553 -0
  1400. data/vendor/node_modules/wisp/src/ast.wisp +160 -0
  1401. data/vendor/node_modules/wisp/src/backend/javascript/writer.wisp +161 -0
  1402. data/vendor/node_modules/wisp/src/backend/js/generator.wisp +939 -0
  1403. data/vendor/node_modules/wisp/src/compiler.wisp +1185 -0
  1404. data/vendor/node_modules/wisp/src/drafts.wisp +50 -0
  1405. data/vendor/node_modules/wisp/src/drft.wisp +329 -0
  1406. data/vendor/node_modules/wisp/src/engine/browser.wisp +73 -0
  1407. data/vendor/node_modules/wisp/src/engine/node.wisp +23 -0
  1408. data/vendor/node_modules/wisp/src/extra.wisp +36 -0
  1409. data/vendor/node_modules/wisp/src/reader.wisp +615 -0
  1410. data/vendor/node_modules/wisp/src/repl.wisp +79 -0
  1411. data/vendor/node_modules/wisp/src/runtime.wisp +511 -0
  1412. data/vendor/node_modules/wisp/src/sequence.wisp +416 -0
  1413. data/vendor/node_modules/wisp/src/string.wisp +110 -0
  1414. data/vendor/node_modules/wisp/src/type.wisp +51 -0
  1415. data/vendor/node_modules/wisp/src/wisp.wisp +57 -0
  1416. data/vendor/node_modules/wisp/string.js +96 -0
  1417. data/vendor/node_modules/wisp/support/ambiance.css +119 -0
  1418. data/vendor/node_modules/wisp/support/app.js +3669 -0
  1419. data/vendor/node_modules/wisp/support/codemirror-compressed.js +1 -0
  1420. data/vendor/node_modules/wisp/support/codemirror.css +173 -0
  1421. data/vendor/node_modules/wisp/support/embed.js +71 -0
  1422. data/vendor/node_modules/wisp/support/embed.wisp +74 -0
  1423. data/vendor/node_modules/wisp/support/require.js +35 -0
  1424. data/vendor/node_modules/wisp/test/ast.wisp +58 -0
  1425. data/vendor/node_modules/wisp/test/compiler.wisp +549 -0
  1426. data/vendor/node_modules/wisp/test/reader.wisp +228 -0
  1427. data/vendor/node_modules/wisp/test/runtime.wisp +180 -0
  1428. data/vendor/node_modules/wisp/test/sequence.wisp +338 -0
  1429. data/vendor/node_modules/wisp/test/string.wisp +44 -0
  1430. data/vendor/node_modules/wisp/test/test.wisp +8 -0
  1431. data/vendor/node_modules/wisp/wisp.js +60 -0
  1432. data/vendor/package.json +39 -0
  1433. data/vendor/reader.js +784 -0
  1434. data/vendor/repl.js +116 -0
  1435. data/vendor/runtime.js +613 -0
  1436. data/vendor/sequence.js +555 -0
  1437. data/vendor/src/ast.wisp +162 -0
  1438. data/vendor/src/backend/escodegen/writer.wisp +939 -0
  1439. data/vendor/src/backend/javascript/writer.wisp +164 -0
  1440. data/vendor/src/compiler.wisp +1191 -0
  1441. data/vendor/src/drafts/drafts.wisp +50 -0
  1442. data/vendor/src/drafts/drft.wisp +329 -0
  1443. data/vendor/src/drafts/extra.wisp +36 -0
  1444. data/vendor/src/engine/browser.wisp +67 -0
  1445. data/vendor/src/engine/node.wisp +16 -0
  1446. data/vendor/src/functional-reader.wisp +96 -0
  1447. data/vendor/src/reader.wisp +619 -0
  1448. data/vendor/src/repl.wisp +80 -0
  1449. data/vendor/src/runtime.wisp +512 -0
  1450. data/vendor/src/sequence.wisp +417 -0
  1451. data/vendor/src/string.wisp +111 -0
  1452. data/vendor/src/type.wisp +54 -0
  1453. data/vendor/src/wisp.wisp +58 -0
  1454. data/vendor/string.js +97 -0
  1455. data/vendor/test/ast.wisp +60 -0
  1456. data/vendor/test/compiler.wisp +552 -0
  1457. data/vendor/test/reader.wisp +228 -0
  1458. data/vendor/test/runtime.wisp +180 -0
  1459. data/vendor/test/sequence.wisp +337 -0
  1460. data/vendor/test/string.wisp +45 -0
  1461. data/vendor/test/test.wisp +9 -0
  1462. data/vendor/try/Makefile +27 -0
  1463. data/vendor/try/Readme.md +25 -0
  1464. data/vendor/try/build/codemirror-compressed.js +4 -0
  1465. data/vendor/try/build/codemirror.css +248 -0
  1466. data/vendor/try/build/main.js +3742 -0
  1467. data/vendor/try/build/require.js +35 -0
  1468. data/vendor/try/build/solarized.css +203 -0
  1469. data/vendor/try/index.html +399 -0
  1470. data/vendor/try/node_modules/codemirror-activine/License.md +18 -0
  1471. data/vendor/try/node_modules/codemirror-activine/Readme.md +22 -0
  1472. data/vendor/try/node_modules/codemirror-activine/core.js +33 -0
  1473. data/vendor/try/node_modules/codemirror-activine/package.json +36 -0
  1474. data/vendor/try/node_modules/codemirror-persist/License.md +18 -0
  1475. data/vendor/try/node_modules/codemirror-persist/Readme.md +22 -0
  1476. data/vendor/try/node_modules/codemirror-persist/core.js +25 -0
  1477. data/vendor/try/node_modules/codemirror-persist/package.json +34 -0
  1478. data/vendor/try/node_modules/~wisp/History.md +152 -0
  1479. data/vendor/try/node_modules/~wisp/LICENSE +24 -0
  1480. data/vendor/try/node_modules/~wisp/Makefile +80 -0
  1481. data/vendor/try/node_modules/~wisp/Readme.md +615 -0
  1482. data/vendor/try/node_modules/~wisp/analyzer.js +385 -0
  1483. data/vendor/try/node_modules/~wisp/ast.js +214 -0
  1484. data/vendor/try/node_modules/~wisp/backend/javascript/writer.js +212 -0
  1485. data/vendor/try/node_modules/~wisp/bin/wisp.js +2 -0
  1486. data/vendor/try/node_modules/~wisp/compiler.js +1028 -0
  1487. data/vendor/try/node_modules/~wisp/design.md +114 -0
  1488. data/vendor/try/node_modules/~wisp/engine/browser.js +65 -0
  1489. data/vendor/try/node_modules/~wisp/engine/node.js +20 -0
  1490. data/vendor/try/node_modules/~wisp/index.html +405 -0
  1491. data/vendor/try/node_modules/~wisp/interactivate/Makefile +38 -0
  1492. data/vendor/try/node_modules/~wisp/interactivate/Readme.md +24 -0
  1493. data/vendor/try/node_modules/~wisp/interactivate/build/cache.manifest +12 -0
  1494. data/vendor/try/node_modules/~wisp/interactivate/build/codemirror-compressed.js +4 -0
  1495. data/vendor/try/node_modules/~wisp/interactivate/build/codemirror.css +248 -0
  1496. data/vendor/try/node_modules/~wisp/interactivate/build/main.js +5430 -0
  1497. data/vendor/try/node_modules/~wisp/interactivate/build/solarized.css +207 -0
  1498. data/vendor/try/node_modules/~wisp/interactivate/host.wisp +83 -0
  1499. data/vendor/try/node_modules/~wisp/interactivate/index.html +392 -0
  1500. data/vendor/try/node_modules/~wisp/interactivate/main.wisp +37 -0
  1501. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/License.md +18 -0
  1502. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/Readme.md +22 -0
  1503. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/core.js +33 -0
  1504. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-activine/package.json +36 -0
  1505. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/License.md +18 -0
  1506. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/Readme.md +23 -0
  1507. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/core.js +31 -0
  1508. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-hashare/package.json +37 -0
  1509. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/License.md +18 -0
  1510. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/Readme.md +22 -0
  1511. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/core.js +25 -0
  1512. data/vendor/try/node_modules/~wisp/interactivate/node_modules/codemirror-persist/package.json +34 -0
  1513. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/History.md +47 -0
  1514. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/License.md +18 -0
  1515. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/Readme.md +11 -0
  1516. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/Readme.md +24 -0
  1517. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/cache.manifest +12 -0
  1518. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/codemirror-compressed.js +4 -0
  1519. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/codemirror.css +248 -0
  1520. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/main.js +267 -0
  1521. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/build/solarized.css +207 -0
  1522. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/index.html +115 -0
  1523. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/main.js +39 -0
  1524. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/License.md +18 -0
  1525. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/Readme.md +22 -0
  1526. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/core.js +33 -0
  1527. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-activine/package.json +36 -0
  1528. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/License.md +18 -0
  1529. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/Readme.md +23 -0
  1530. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/core.js +31 -0
  1531. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-hashare/package.json +37 -0
  1532. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/License.md +18 -0
  1533. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/Readme.md +22 -0
  1534. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/core.js +25 -0
  1535. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/node_modules/codemirror-persist/package.json +34 -0
  1536. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/demo/package.json +21 -0
  1537. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/host/window.js +19 -0
  1538. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/interactivate.js +187 -0
  1539. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/History.md +10 -0
  1540. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/License.md +18 -0
  1541. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/Readme.md +68 -0
  1542. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/diff.js +45 -0
  1543. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/index.js +5 -0
  1544. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/package.json +53 -0
  1545. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/patch.js +21 -0
  1546. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/rebase.js +33 -0
  1547. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/diff.js +62 -0
  1548. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/index.js +16 -0
  1549. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/diffpatcher/test/patch.js +54 -0
  1550. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/History.md +15 -0
  1551. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/License.md +18 -0
  1552. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/Readme.md +54 -0
  1553. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/event.js +39 -0
  1554. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/index.js +3 -0
  1555. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/History.md +20 -0
  1556. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/License.md +18 -0
  1557. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/Readme.md +45 -0
  1558. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/end.js +3 -0
  1559. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/index.js +8 -0
  1560. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-error.js +9 -0
  1561. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/is-reduced.js +9 -0
  1562. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/package.json +57 -0
  1563. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduce.js +59 -0
  1564. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reduced.js +15 -0
  1565. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/reducible.js +87 -0
  1566. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/index.js +6 -0
  1567. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reduce.js +116 -0
  1568. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/node_modules/reducible/test/reducible.js +106 -0
  1569. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/package.json +56 -0
  1570. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/dom-reduce/test/index.js +91 -0
  1571. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/History.md +60 -0
  1572. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/License.md +18 -0
  1573. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/Readme.md +125 -0
  1574. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/core.js +227 -0
  1575. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/package.json +93 -0
  1576. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/browser.js +18 -0
  1577. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/common-index.js +3 -0
  1578. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/common.js +270 -0
  1579. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/index.js +3 -0
  1580. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/phantom-index.js +3 -0
  1581. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/tap-index.js +3 -0
  1582. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/method/test/testling-index.js +3 -0
  1583. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/History.md +139 -0
  1584. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/License.md +19 -0
  1585. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/Readme.md +253 -0
  1586. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/capture.js +34 -0
  1587. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/concat.js +37 -0
  1588. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/debug/print.js +45 -0
  1589. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/delay.js +29 -0
  1590. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop-while.js +39 -0
  1591. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/drop.js +40 -0
  1592. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/expand.js +25 -0
  1593. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/filter.js +21 -0
  1594. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/fold.js +55 -0
  1595. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/hub.js +102 -0
  1596. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/index.js +33 -0
  1597. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/into.js +16 -0
  1598. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/map.js +19 -0
  1599. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/merge.js +50 -0
  1600. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/History.md +20 -0
  1601. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/License.md +18 -0
  1602. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/Readme.md +45 -0
  1603. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/end.js +3 -0
  1604. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/index.js +8 -0
  1605. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-error.js +9 -0
  1606. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/is-reduced.js +9 -0
  1607. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/package.json +57 -0
  1608. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduce.js +59 -0
  1609. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reduced.js +15 -0
  1610. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/reducible.js +87 -0
  1611. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/index.js +6 -0
  1612. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reduce.js +116 -0
  1613. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/node_modules/reducible/test/reducible.js +106 -0
  1614. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/package.json +60 -0
  1615. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/reducer.js +51 -0
  1616. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/reductions.js +31 -0
  1617. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/take-while.js +23 -0
  1618. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/take.js +40 -0
  1619. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/benchmark.js +32 -0
  1620. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/capture.js +108 -0
  1621. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/concat.js +104 -0
  1622. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/delay.js +29 -0
  1623. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop-while.js +118 -0
  1624. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/drop.js +89 -0
  1625. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/errors.js +222 -0
  1626. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/filter.js +72 -0
  1627. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/fold.js +111 -0
  1628. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/hub.js +222 -0
  1629. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/index.js +23 -0
  1630. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/into.js +22 -0
  1631. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/map.js +67 -0
  1632. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/merge.js +75 -0
  1633. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/reductions.js +105 -0
  1634. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take-while.js +134 -0
  1635. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/take.js +82 -0
  1636. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/event.js +25 -0
  1637. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/lazy.js +9 -0
  1638. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/node_modules/reducers/test/util/test.js +34 -0
  1639. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/output.js +60 -0
  1640. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/package.json +30 -0
  1641. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/render.js +23 -0
  1642. data/vendor/try/node_modules/~wisp/interactivate/node_modules/interactivate/view.js +79 -0
  1643. data/vendor/try/node_modules/~wisp/interactivate/package.json +22 -0
  1644. data/vendor/try/node_modules/~wisp/package.json +57 -0
  1645. data/vendor/try/node_modules/~wisp/reader.js +785 -0
  1646. data/vendor/try/node_modules/~wisp/repl.js +121 -0
  1647. data/vendor/try/node_modules/~wisp/runtime.js +609 -0
  1648. data/vendor/try/node_modules/~wisp/sequence.js +553 -0
  1649. data/vendor/try/node_modules/~wisp/src/ast.wisp +160 -0
  1650. data/vendor/try/node_modules/~wisp/src/backend/javascript/writer.wisp +161 -0
  1651. data/vendor/try/node_modules/~wisp/src/backend/js/generator.wisp +939 -0
  1652. data/vendor/try/node_modules/~wisp/src/compiler.wisp +1185 -0
  1653. data/vendor/try/node_modules/~wisp/src/drafts.wisp +50 -0
  1654. data/vendor/try/node_modules/~wisp/src/drft.wisp +329 -0
  1655. data/vendor/try/node_modules/~wisp/src/engine/browser.wisp +73 -0
  1656. data/vendor/try/node_modules/~wisp/src/engine/node.wisp +23 -0
  1657. data/vendor/try/node_modules/~wisp/src/extra.wisp +36 -0
  1658. data/vendor/try/node_modules/~wisp/src/reader.wisp +615 -0
  1659. data/vendor/try/node_modules/~wisp/src/repl.wisp +79 -0
  1660. data/vendor/try/node_modules/~wisp/src/runtime.wisp +511 -0
  1661. data/vendor/try/node_modules/~wisp/src/sequence.wisp +416 -0
  1662. data/vendor/try/node_modules/~wisp/src/string.wisp +110 -0
  1663. data/vendor/try/node_modules/~wisp/src/type.wisp +51 -0
  1664. data/vendor/try/node_modules/~wisp/src/wisp.wisp +57 -0
  1665. data/vendor/try/node_modules/~wisp/string.js +96 -0
  1666. data/vendor/try/node_modules/~wisp/support/ambiance.css +119 -0
  1667. data/vendor/try/node_modules/~wisp/support/app.js +3669 -0
  1668. data/vendor/try/node_modules/~wisp/support/codemirror-compressed.js +1 -0
  1669. data/vendor/try/node_modules/~wisp/support/codemirror.css +173 -0
  1670. data/vendor/try/node_modules/~wisp/support/embed.js +71 -0
  1671. data/vendor/try/node_modules/~wisp/support/embed.wisp +74 -0
  1672. data/vendor/try/node_modules/~wisp/support/require.js +35 -0
  1673. data/vendor/try/node_modules/~wisp/test/ast.wisp +58 -0
  1674. data/vendor/try/node_modules/~wisp/test/compiler.wisp +549 -0
  1675. data/vendor/try/node_modules/~wisp/test/reader.wisp +228 -0
  1676. data/vendor/try/node_modules/~wisp/test/runtime.wisp +180 -0
  1677. data/vendor/try/node_modules/~wisp/test/sequence.wisp +338 -0
  1678. data/vendor/try/node_modules/~wisp/test/string.wisp +44 -0
  1679. data/vendor/try/node_modules/~wisp/test/test.wisp +8 -0
  1680. data/vendor/try/node_modules/~wisp/wisp.js +60 -0
  1681. data/vendor/try/package.json +19 -0
  1682. data/vendor/try/src/main.wisp +89 -0
  1683. data/vendor/wisp.js +55 -0
  1684. metadata +1727 -0
@@ -0,0 +1,3669 @@
1
+ require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
2
+ var rest = (require("wisp/sequence")).rest;;
3
+
4
+ var str = (require("wisp/runtime")).str;;
5
+
6
+ var transpile = (require("wisp/engine/browser")).transpile;;
7
+
8
+ var readFromString = (require("wisp/reader")).readFromString;;
9
+
10
+ var compileProgram = (require("wisp/compiler")).compileProgram;;
11
+
12
+ var updatePreview = function updatePreview(editor) {
13
+ clearTimeout(updatePreview.id);
14
+ return (function() {
15
+ var code = editor.getValue();
16
+ localStorage.buffer = code;
17
+ return updatePreview.id = setTimeout(function() {
18
+ return (function() {
19
+ try {
20
+ editor.clearMarker(updatePreview.line || 1);
21
+ return output.setValue(transpile(code));
22
+ } catch (error) {
23
+ updatePreview.line = error.line;
24
+ return editor.setMarker(error.line || 0, "" + "<span title='" + error.message + "'>●</span> %N%");
25
+ }})();
26
+ }, 200);
27
+ })();
28
+ };
29
+ exports.updatePreview = updatePreview;
30
+
31
+ var input = CodeMirror(document.getElementById("input"), {
32
+ "lineNumbers": true,
33
+ "autoClearEmptyLines": true,
34
+ "tabSize": 2,
35
+ "indentWithTabs": false,
36
+ "electricChars": true,
37
+ "mode": "clojure",
38
+ "theme": "ambiance",
39
+ "autofocus": true,
40
+ "fixedGutter": true,
41
+ "matchBrackets": true,
42
+ "value": localStorage.buffer || ((document.getElementById("examples")).innerHTML),
43
+ "onChange": updatePreview,
44
+ "onCursorActivity": function() {
45
+ input.setLineClass(hlLine, null, null);
46
+ return hlLine = input.setLineClass((input.getCursor()).line, null, "activeline");
47
+ },
48
+ "onGutterClick": function() {
49
+ var output = document.getElementById("output");
50
+ var input = document.getElementById("input");
51
+ output.hidden = !(output.hidden);
52
+ return input.style.width = output.hidden ?
53
+ "100%" :
54
+ "50%";
55
+ }
56
+ });
57
+ exports.input = input;
58
+
59
+ var hlLine = input.setLineClass(0, void(0), "activeline");
60
+ exports.hlLine = hlLine;
61
+
62
+ var output = CodeMirror(document.getElementById("output"), {
63
+ "lineNumbers": true,
64
+ "fixedGutter": true,
65
+ "matchBrackets": true,
66
+ "mode": "javascript",
67
+ "theme": "ambiance",
68
+ "readOnly": true
69
+ });
70
+ exports.output = output;
71
+
72
+ setTimeout(updatePreview, 1000, input)
73
+
74
+ },{"wisp/sequence":"zNvMnP","wisp/runtime":"+Sggh0","wisp/engine/browser":"8GaiHy","wisp/reader":"CX0B04","wisp/compiler":"/EiAl9"}],"wisp/runtime":[function(require,module,exports){
75
+ module.exports=require('+Sggh0');
76
+ },{}],"+Sggh0":[function(require,module,exports){
77
+ (function(){var identity = function identity(x) {
78
+ return x;
79
+ };
80
+ exports.identity = identity;
81
+
82
+ var isOdd = function isOdd(n) {
83
+ return n % 2 === 1;
84
+ };
85
+ exports.isOdd = isOdd;
86
+
87
+ var isEven = function isEven(n) {
88
+ return n % 2 === 0;
89
+ };
90
+ exports.isEven = isEven;
91
+
92
+ var isDictionary = function isDictionary(form) {
93
+ return (isObject(form)) && (isObject(Object.getPrototypeOf(form))) && (isNil(Object.getPrototypeOf(Object.getPrototypeOf(form))));
94
+ };
95
+ exports.isDictionary = isDictionary;
96
+
97
+ var dictionary = function dictionary() {
98
+ return (function loop(keyValues, result) {
99
+ var recur = loop;
100
+ while (recur === loop) {
101
+ recur = keyValues.length ?
102
+ (function() {
103
+ (result || 0)[(keyValues || 0)[0]] = (keyValues || 0)[1];
104
+ return (keyValues = keyValues.slice(2), result = result, loop);
105
+ })() :
106
+ result;
107
+ };
108
+ return recur;
109
+ })(Array.prototype.slice.call(arguments), {});
110
+ };
111
+ exports.dictionary = dictionary;
112
+
113
+ var keys = function keys(dictionary) {
114
+ return Object.keys(dictionary);
115
+ };
116
+ exports.keys = keys;
117
+
118
+ var vals = function vals(dictionary) {
119
+ return keys(dictionary).map(function(key) {
120
+ return (dictionary || 0)[key];
121
+ });
122
+ };
123
+ exports.vals = vals;
124
+
125
+ var keyValues = function keyValues(dictionary) {
126
+ return keys(dictionary).map(function(key) {
127
+ return [key, (dictionary || 0)[key]];
128
+ });
129
+ };
130
+ exports.keyValues = keyValues;
131
+
132
+ var merge = function merge() {
133
+ return Object.create(Object.prototype, Array.prototype.slice.call(arguments).reduce(function(descriptor, dictionary) {
134
+ isObject(dictionary) ?
135
+ Object.keys(dictionary).forEach(function(key) {
136
+ return (descriptor || 0)[key] = Object.getOwnPropertyDescriptor(dictionary, key);
137
+ }) :
138
+ void(0);
139
+ return descriptor;
140
+ }, Object.create(Object.prototype)));
141
+ };
142
+ exports.merge = merge;
143
+
144
+ var isContainsVector = function isContainsVector(vector, element) {
145
+ return vector.indexOf(element) >= 0;
146
+ };
147
+ exports.isContainsVector = isContainsVector;
148
+
149
+ var mapDictionary = function mapDictionary(source, f) {
150
+ return Object.keys(source).reduce(function(target, key) {
151
+ (target || 0)[key] = f((source || 0)[key]);
152
+ return target;
153
+ }, {});
154
+ };
155
+ exports.mapDictionary = mapDictionary;
156
+
157
+ var toString = Object.prototype.toString;
158
+ exports.toString = toString;
159
+
160
+ var isFn = typeof(/./) === "function" ?
161
+ function isFn(x) {
162
+ return toString.call(x) === "[object Function]";
163
+ } :
164
+ function isFn(x) {
165
+ return typeof(x) === "function";
166
+ };
167
+ exports.isFn = isFn;
168
+
169
+ var isString = function isString(x) {
170
+ return (typeof(x) === "string") || (toString.call(x) === "[object String]");
171
+ };
172
+ exports.isString = isString;
173
+
174
+ var isNumber = function isNumber(x) {
175
+ return (typeof(x) === "number") || (toString.call(x) === "[object Number]");
176
+ };
177
+ exports.isNumber = isNumber;
178
+
179
+ var isVector = isFn(Array.isArray) ?
180
+ Array.isArray :
181
+ function isVector(x) {
182
+ return toString.call(x) === "[object Array]";
183
+ };
184
+ exports.isVector = isVector;
185
+
186
+ var isDate = function isDate(x) {
187
+ return toString.call(x) === "[object Date]";
188
+ };
189
+ exports.isDate = isDate;
190
+
191
+ var isBoolean = function isBoolean(x) {
192
+ return (x === true) || (x === false) || (toString.call(x) === "[object Boolean]");
193
+ };
194
+ exports.isBoolean = isBoolean;
195
+
196
+ var isRePattern = function isRePattern(x) {
197
+ return toString.call(x) === "[object RegExp]";
198
+ };
199
+ exports.isRePattern = isRePattern;
200
+
201
+ var isObject = function isObject(x) {
202
+ return x && (typeof(x) === "object");
203
+ };
204
+ exports.isObject = isObject;
205
+
206
+ var isNil = function isNil(x) {
207
+ return (x === void(0)) || (x === null);
208
+ };
209
+ exports.isNil = isNil;
210
+
211
+ var isTrue = function isTrue(x) {
212
+ return x === true;
213
+ };
214
+ exports.isTrue = isTrue;
215
+
216
+ var isFalse = function isFalse(x) {
217
+ return x === true;
218
+ };
219
+ exports.isFalse = isFalse;
220
+
221
+ var reFind = function reFind(re, s) {
222
+ var matches = re.exec(s);
223
+ return !(isNil(matches)) ?
224
+ matches.length === 1 ?
225
+ (matches || 0)[0] :
226
+ matches :
227
+ void(0);
228
+ };
229
+ exports.reFind = reFind;
230
+
231
+ var reMatches = function reMatches(pattern, source) {
232
+ var matches = pattern.exec(source);
233
+ return (!(isNil(matches))) && ((matches || 0)[0] === source) ?
234
+ matches.length === 1 ?
235
+ (matches || 0)[0] :
236
+ matches :
237
+ void(0);
238
+ };
239
+ exports.reMatches = reMatches;
240
+
241
+ var rePattern = function rePattern(s) {
242
+ var match = reFind(/^(?:\(\?([idmsux]*)\))?(.*)/, s);
243
+ return new RegExp((match || 0)[2], (match || 0)[1]);
244
+ };
245
+ exports.rePattern = rePattern;
246
+
247
+ var inc = function inc(x) {
248
+ return x + 1;
249
+ };
250
+ exports.inc = inc;
251
+
252
+ var dec = function dec(x) {
253
+ return x - 1;
254
+ };
255
+ exports.dec = dec;
256
+
257
+ var str = function str() {
258
+ return String.prototype.concat.apply("", arguments);
259
+ };
260
+ exports.str = str;
261
+
262
+ var char = function char(code) {
263
+ return String.fromCharCode(code);
264
+ };
265
+ exports.char = char;
266
+
267
+ var int = function int(x) {
268
+ return isNumber(x) ?
269
+ x >= 0 ?
270
+ Math.floor(x) :
271
+ Math.floor(x) :
272
+ x.charCodeAt(0);
273
+ };
274
+ exports.int = int;
275
+
276
+ var subs = function subs(string, start, end) {
277
+ return string.substring(start, end);
278
+ };
279
+ exports.subs = subs;
280
+
281
+ var isPatternEqual = function isPatternEqual(x, y) {
282
+ return (isRePattern(x)) && (isRePattern(y)) && (x.source === y.source) && (x.global === y.global) && (x.multiline === y.multiline) && (x.ignoreCase === y.ignoreCase);
283
+ };
284
+
285
+ var isDateEqual = function isDateEqual(x, y) {
286
+ return (isDate(x)) && (isDate(y)) && (Number(x) === Number(y));
287
+ };
288
+
289
+ var isDictionaryEqual = function isDictionaryEqual(x, y) {
290
+ return (isObject(x)) && (isObject(y)) && ((function() {
291
+ var xKeys = keys(x);
292
+ var yKeys = keys(y);
293
+ var xCount = xKeys.length;
294
+ var yCount = yKeys.length;
295
+ return (xCount === yCount) && ((function loop(index, count, keys) {
296
+ var recur = loop;
297
+ while (recur === loop) {
298
+ recur = index < count ?
299
+ isEquivalent((x || 0)[(keys || 0)[index]], (y || 0)[(keys || 0)[index]]) ?
300
+ (index = inc(index), count = count, keys = keys, loop) :
301
+ false :
302
+ true;
303
+ };
304
+ return recur;
305
+ })(0, xCount, xKeys));
306
+ })());
307
+ };
308
+
309
+ var isVectorEqual = function isVectorEqual(x, y) {
310
+ return (isVector(x)) && (isVector(y)) && (x.length === y.length) && ((function loop(xs, ys, index, count) {
311
+ var recur = loop;
312
+ while (recur === loop) {
313
+ recur = index < count ?
314
+ isEquivalent((xs || 0)[index], (ys || 0)[index]) ?
315
+ (xs = xs, ys = ys, index = inc(index), count = count, loop) :
316
+ false :
317
+ true;
318
+ };
319
+ return recur;
320
+ })(x, y, 0, x.length));
321
+ };
322
+
323
+ var isEquivalent = function isEquivalent(x, y) {
324
+ switch (arguments.length) {
325
+ case 1:
326
+ return true;
327
+ case 2:
328
+ return (x === y) || (isNil(x) ?
329
+ isNil(y) :
330
+ isNil(y) ?
331
+ isNil(x) :
332
+ isString(x) ?
333
+ false :
334
+ isNumber(x) ?
335
+ false :
336
+ isFn(x) ?
337
+ false :
338
+ isBoolean(x) ?
339
+ false :
340
+ isDate(x) ?
341
+ isDateEqual(x, y) :
342
+ isVector(x) ?
343
+ isVectorEqual(x, y, [], []) :
344
+ isRePattern(x) ?
345
+ isPatternEqual(x, y) :
346
+ "else" ?
347
+ isDictionaryEqual(x, y) :
348
+ void(0));
349
+
350
+ default:
351
+ var more = Array.prototype.slice.call(arguments, 2);
352
+ return (function loop(previous, current, index, count) {
353
+ var recur = loop;
354
+ while (recur === loop) {
355
+ recur = (isEquivalent(previous, current)) && (index < count ?
356
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
357
+ true);
358
+ };
359
+ return recur;
360
+ })(x, y, 0, more.length);
361
+ };
362
+ return void(0);
363
+ };
364
+
365
+ var isEqual = isEquivalent;
366
+ exports.isEqual = isEqual;
367
+
368
+ var isStrictEqual = function isStrictEqual(x, y) {
369
+ switch (arguments.length) {
370
+ case 1:
371
+ return true;
372
+ case 2:
373
+ return x === y;
374
+
375
+ default:
376
+ var more = Array.prototype.slice.call(arguments, 2);
377
+ return (function loop(previous, current, index, count) {
378
+ var recur = loop;
379
+ while (recur === loop) {
380
+ recur = (previous === current) && (index < count ?
381
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
382
+ true);
383
+ };
384
+ return recur;
385
+ })(x, y, 0, more.length);
386
+ };
387
+ return void(0);
388
+ };
389
+ exports.isStrictEqual = isStrictEqual;
390
+
391
+ var greaterThan = function greaterThan(x, y) {
392
+ switch (arguments.length) {
393
+ case 1:
394
+ return true;
395
+ case 2:
396
+ return x > y;
397
+
398
+ default:
399
+ var more = Array.prototype.slice.call(arguments, 2);
400
+ return (function loop(previous, current, index, count) {
401
+ var recur = loop;
402
+ while (recur === loop) {
403
+ recur = (previous > current) && (index < count ?
404
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
405
+ true);
406
+ };
407
+ return recur;
408
+ })(x, y, 0, more.length);
409
+ };
410
+ return void(0);
411
+ };
412
+ exports.greaterThan = greaterThan;
413
+
414
+ var notLessThan = function notLessThan(x, y) {
415
+ switch (arguments.length) {
416
+ case 1:
417
+ return true;
418
+ case 2:
419
+ return x >= y;
420
+
421
+ default:
422
+ var more = Array.prototype.slice.call(arguments, 2);
423
+ return (function loop(previous, current, index, count) {
424
+ var recur = loop;
425
+ while (recur === loop) {
426
+ recur = (previous >= current) && (index < count ?
427
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
428
+ true);
429
+ };
430
+ return recur;
431
+ })(x, y, 0, more.length);
432
+ };
433
+ return void(0);
434
+ };
435
+ exports.notLessThan = notLessThan;
436
+
437
+ var lessThan = function lessThan(x, y) {
438
+ switch (arguments.length) {
439
+ case 1:
440
+ return true;
441
+ case 2:
442
+ return x < y;
443
+
444
+ default:
445
+ var more = Array.prototype.slice.call(arguments, 2);
446
+ return (function loop(previous, current, index, count) {
447
+ var recur = loop;
448
+ while (recur === loop) {
449
+ recur = (previous < current) && (index < count ?
450
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
451
+ true);
452
+ };
453
+ return recur;
454
+ })(x, y, 0, more.length);
455
+ };
456
+ return void(0);
457
+ };
458
+ exports.lessThan = lessThan;
459
+
460
+ var notGreaterThan = function notGreaterThan(x, y) {
461
+ switch (arguments.length) {
462
+ case 1:
463
+ return true;
464
+ case 2:
465
+ return x <= y;
466
+
467
+ default:
468
+ var more = Array.prototype.slice.call(arguments, 2);
469
+ return (function loop(previous, current, index, count) {
470
+ var recur = loop;
471
+ while (recur === loop) {
472
+ recur = (previous <= current) && (index < count ?
473
+ (previous = current, current = (more || 0)[index], index = inc(index), count = count, loop) :
474
+ true);
475
+ };
476
+ return recur;
477
+ })(x, y, 0, more.length);
478
+ };
479
+ return void(0);
480
+ };
481
+ exports.notGreaterThan = notGreaterThan;
482
+
483
+ var sum = function sum(a, b, c, d, e, f) {
484
+ switch (arguments.length) {
485
+ case 0:
486
+ return 0;
487
+ case 1:
488
+ return a;
489
+ case 2:
490
+ return a + b;
491
+ case 3:
492
+ return a + b + c;
493
+ case 4:
494
+ return a + b + c + d;
495
+ case 5:
496
+ return a + b + c + d + e;
497
+ case 6:
498
+ return a + b + c + d + e + f;
499
+
500
+ default:
501
+ var more = Array.prototype.slice.call(arguments, 6);
502
+ return (function loop(value, index, count) {
503
+ var recur = loop;
504
+ while (recur === loop) {
505
+ recur = index < count ?
506
+ (value = value + ((more || 0)[index]), index = inc(index), count = count, loop) :
507
+ value;
508
+ };
509
+ return recur;
510
+ })(a + b + c + d + e + f, 0, more.length);
511
+ };
512
+ return void(0);
513
+ };
514
+ exports.sum = sum;
515
+
516
+ var subtract = function subtract(a, b, c, d, e, f) {
517
+ switch (arguments.length) {
518
+ case 0:
519
+ return (function() { throw TypeError("Wrong number of args passed to: -"); })();
520
+ case 1:
521
+ return 0 - a;
522
+ case 2:
523
+ return a - b;
524
+ case 3:
525
+ return a - b - c;
526
+ case 4:
527
+ return a - b - c - d;
528
+ case 5:
529
+ return a - b - c - d - e;
530
+ case 6:
531
+ return a - b - c - d - e - f;
532
+
533
+ default:
534
+ var more = Array.prototype.slice.call(arguments, 6);
535
+ return (function loop(value, index, count) {
536
+ var recur = loop;
537
+ while (recur === loop) {
538
+ recur = index < count ?
539
+ (value = value - ((more || 0)[index]), index = inc(index), count = count, loop) :
540
+ value;
541
+ };
542
+ return recur;
543
+ })(a - b - c - d - e - f, 0, more.length);
544
+ };
545
+ return void(0);
546
+ };
547
+ exports.subtract = subtract;
548
+
549
+ var divide = function divide(a, b, c, d, e, f) {
550
+ switch (arguments.length) {
551
+ case 0:
552
+ return (function() { throw TypeError("Wrong number of args passed to: /"); })();
553
+ case 1:
554
+ return 1 / a;
555
+ case 2:
556
+ return a / b;
557
+ case 3:
558
+ return a / b / c;
559
+ case 4:
560
+ return a / b / c / d;
561
+ case 5:
562
+ return a / b / c / d / e;
563
+ case 6:
564
+ return a / b / c / d / e / f;
565
+
566
+ default:
567
+ var more = Array.prototype.slice.call(arguments, 6);
568
+ return (function loop(value, index, count) {
569
+ var recur = loop;
570
+ while (recur === loop) {
571
+ recur = index < count ?
572
+ (value = value / ((more || 0)[index]), index = inc(index), count = count, loop) :
573
+ value;
574
+ };
575
+ return recur;
576
+ })(a / b / c / d / e / f, 0, more.length);
577
+ };
578
+ return void(0);
579
+ };
580
+ exports.divide = divide;
581
+
582
+ var multiply = function multiply(a, b, c, d, e, f) {
583
+ switch (arguments.length) {
584
+ case 0:
585
+ return 1;
586
+ case 1:
587
+ return a;
588
+ case 2:
589
+ return a * b;
590
+ case 3:
591
+ return a * b * c;
592
+ case 4:
593
+ return a * b * c * d;
594
+ case 5:
595
+ return a * b * c * d * e;
596
+ case 6:
597
+ return a * b * c * d * e * f;
598
+
599
+ default:
600
+ var more = Array.prototype.slice.call(arguments, 6);
601
+ return (function loop(value, index, count) {
602
+ var recur = loop;
603
+ while (recur === loop) {
604
+ recur = index < count ?
605
+ (value = value * ((more || 0)[index]), index = inc(index), count = count, loop) :
606
+ value;
607
+ };
608
+ return recur;
609
+ })(a * b * c * d * e * f, 0, more.length);
610
+ };
611
+ return void(0);
612
+ };
613
+ exports.multiply = multiply;
614
+
615
+ var and = function and(a, b, c, d, e, f) {
616
+ switch (arguments.length) {
617
+ case 0:
618
+ return true;
619
+ case 1:
620
+ return a;
621
+ case 2:
622
+ return a && b;
623
+ case 3:
624
+ return a && b && c;
625
+ case 4:
626
+ return a && b && c && d;
627
+ case 5:
628
+ return a && b && c && d && e;
629
+ case 6:
630
+ return a && b && c && d && e && f;
631
+
632
+ default:
633
+ var more = Array.prototype.slice.call(arguments, 6);
634
+ return (function loop(value, index, count) {
635
+ var recur = loop;
636
+ while (recur === loop) {
637
+ recur = index < count ?
638
+ (value = value && ((more || 0)[index]), index = inc(index), count = count, loop) :
639
+ value;
640
+ };
641
+ return recur;
642
+ })(a && b && c && d && e && f, 0, more.length);
643
+ };
644
+ return void(0);
645
+ };
646
+ exports.and = and;
647
+
648
+ var or = function or(a, b, c, d, e, f) {
649
+ switch (arguments.length) {
650
+ case 0:
651
+ return void(0);
652
+ case 1:
653
+ return a;
654
+ case 2:
655
+ return a || b;
656
+ case 3:
657
+ return a || b || c;
658
+ case 4:
659
+ return a || b || c || d;
660
+ case 5:
661
+ return a || b || c || d || e;
662
+ case 6:
663
+ return a || b || c || d || e || f;
664
+
665
+ default:
666
+ var more = Array.prototype.slice.call(arguments, 6);
667
+ return (function loop(value, index, count) {
668
+ var recur = loop;
669
+ while (recur === loop) {
670
+ recur = index < count ?
671
+ (value = value || ((more || 0)[index]), index = inc(index), count = count, loop) :
672
+ value;
673
+ };
674
+ return recur;
675
+ })(a || b || c || d || e || f, 0, more.length);
676
+ };
677
+ return void(0);
678
+ };
679
+ exports.or = or;
680
+
681
+ var print = function print() {
682
+ var more = Array.prototype.slice.call(arguments, 0);
683
+ return console.log.apply(console.log, more);
684
+ };
685
+ exports.print = print
686
+
687
+ })()
688
+ },{}],"wisp/sequence":[function(require,module,exports){
689
+ module.exports=require('zNvMnP');
690
+ },{}],"zNvMnP":[function(require,module,exports){
691
+ var merge = (require("./runtime")).merge;
692
+ var inc = (require("./runtime")).inc;
693
+ var dec = (require("./runtime")).dec;
694
+ var str = (require("./runtime")).str;
695
+ var keyValues = (require("./runtime")).keyValues;
696
+ var isDictionary = (require("./runtime")).isDictionary;
697
+ var isString = (require("./runtime")).isString;
698
+ var isNumber = (require("./runtime")).isNumber;
699
+ var isFn = (require("./runtime")).isFn;
700
+ var isVector = (require("./runtime")).isVector;
701
+ var isNil = (require("./runtime")).isNil;;
702
+
703
+ var List = function List(head, tail) {
704
+ this.head = head;
705
+ this.tail = tail || (list());
706
+ this.length = inc(count(this.tail));
707
+ return this;
708
+ };
709
+
710
+ List.prototype.length = 0;
711
+
712
+ List.type = "wisp.list";
713
+
714
+ List.prototype.type = List.type;
715
+
716
+ List.prototype.tail = Object.create(List.prototype);
717
+
718
+ List.prototype.toString = function() {
719
+ return (function loop(result, list) {
720
+ var recur = loop;
721
+ while (recur === loop) {
722
+ recur = isEmpty(list) ?
723
+ "" + "(" + (result.substr(1)) + ")" :
724
+ (result = "" + result + " " + (isVector(first(list)) ?
725
+ "" + "[" + (first(list).join(" ")) + "]" :
726
+ isNil(first(list)) ?
727
+ "nil" :
728
+ isString(first(list)) ?
729
+ JSON.stringify(first(list)) :
730
+ isNumber(first(list)) ?
731
+ JSON.stringify(first(list)) :
732
+ first(list)), list = rest(list), loop);
733
+ };
734
+ return recur;
735
+ })("", this);
736
+ };
737
+
738
+ var lazySeqValue = function lazySeqValue(lazySeq) {
739
+ return !(lazySeq.realized) ?
740
+ (lazySeq.realized = true) && (lazySeq.x = lazySeq.x()) :
741
+ lazySeq.x;
742
+ };
743
+
744
+ var LazySeq = function LazySeq(realized, x) {
745
+ this.realized = realized || false;
746
+ this.x = x;
747
+ return this;
748
+ };
749
+
750
+ LazySeq.type = "wisp.lazy.seq";
751
+
752
+ LazySeq.prototype.type = LazySeq.type;
753
+
754
+ var lazySeq = function lazySeq(realized, body) {
755
+ return new LazySeq(realized, body);
756
+ };
757
+ exports.lazySeq = lazySeq;
758
+
759
+ var isLazySeq = function isLazySeq(value) {
760
+ return value && (LazySeq.type === value.type);
761
+ };
762
+ exports.isLazySeq = isLazySeq;
763
+
764
+ undefined;
765
+
766
+ var isList = function isList(value) {
767
+ return value && (List.type === value.type);
768
+ };
769
+ exports.isList = isList;
770
+
771
+ var list = function list() {
772
+ return arguments.length === 0 ?
773
+ Object.create(List.prototype) :
774
+ Array.prototype.slice.call(arguments).reduceRight(function(tail, head) {
775
+ return cons(head, tail);
776
+ }, list());
777
+ };
778
+ exports.list = list;
779
+
780
+ var cons = function cons(head, tail) {
781
+ return new List(head, tail);
782
+ };
783
+ exports.cons = cons;
784
+
785
+ var reverseList = function reverseList(sequence) {
786
+ return (function loop(items, source) {
787
+ var recur = loop;
788
+ while (recur === loop) {
789
+ recur = isEmpty(source) ?
790
+ list.apply(list, items) :
791
+ (items = [first(source)].concat(items), source = rest(source), loop);
792
+ };
793
+ return recur;
794
+ })([], sequence);
795
+ };
796
+
797
+ var isSequential = function isSequential(x) {
798
+ return (isList(x)) || (isVector(x)) || (isLazySeq(x)) || (isDictionary(x)) || (isString(x));
799
+ };
800
+ exports.isSequential = isSequential;
801
+
802
+ var reverse = function reverse(sequence) {
803
+ return isList(sequence) ?
804
+ reverseList(sequence) :
805
+ isVector(sequence) ?
806
+ sequence.reverse() :
807
+ isNil(sequence) ?
808
+ list() :
809
+ "else" ?
810
+ reverse(seq(sequence)) :
811
+ void(0);
812
+ };
813
+ exports.reverse = reverse;
814
+
815
+ var map = function map(f, sequence) {
816
+ return isVector(sequence) ?
817
+ sequence.map(f) :
818
+ isList(sequence) ?
819
+ mapList(f, sequence) :
820
+ isNil(sequence) ?
821
+ list() :
822
+ "else" ?
823
+ map(f, seq(sequence)) :
824
+ void(0);
825
+ };
826
+ exports.map = map;
827
+
828
+ var mapList = function mapList(f, sequence) {
829
+ return (function loop(result, items) {
830
+ var recur = loop;
831
+ while (recur === loop) {
832
+ recur = isEmpty(items) ?
833
+ reverse(result) :
834
+ (result = cons(f(first(items)), result), items = rest(items), loop);
835
+ };
836
+ return recur;
837
+ })(list(), sequence);
838
+ };
839
+
840
+ var filter = function filter(isF, sequence) {
841
+ return isVector(sequence) ?
842
+ sequence.filter(isF) :
843
+ isList(sequence) ?
844
+ filterList(isF, sequence) :
845
+ isNil(sequence) ?
846
+ list() :
847
+ "else" ?
848
+ filter(isF, seq(sequence)) :
849
+ void(0);
850
+ };
851
+ exports.filter = filter;
852
+
853
+ var filterList = function filterList(isF, sequence) {
854
+ return (function loop(result, items) {
855
+ var recur = loop;
856
+ while (recur === loop) {
857
+ recur = isEmpty(items) ?
858
+ reverse(result) :
859
+ (result = isF(first(items)) ?
860
+ cons(first(items), result) :
861
+ result, items = rest(items), loop);
862
+ };
863
+ return recur;
864
+ })(list(), sequence);
865
+ };
866
+
867
+ var reduce = function reduce(f) {
868
+ var params = Array.prototype.slice.call(arguments, 1);
869
+ return (function() {
870
+ var hasInitial = count(params) >= 2;
871
+ var initial = hasInitial ?
872
+ first(params) :
873
+ void(0);
874
+ var sequence = hasInitial ?
875
+ second(params) :
876
+ first(params);
877
+ return isNil(sequence) ?
878
+ initial :
879
+ isVector(sequence) ?
880
+ hasInitial ?
881
+ sequence.reduce(f, initial) :
882
+ sequence.reduce(f) :
883
+ isList(sequence) ?
884
+ hasInitial ?
885
+ reduceList(f, initial, sequence) :
886
+ reduceList(f, first(sequence), rest(sequence)) :
887
+ "else" ?
888
+ reduce(f, initial, seq(sequence)) :
889
+ void(0);
890
+ })();
891
+ };
892
+ exports.reduce = reduce;
893
+
894
+ var reduceList = function reduceList(f, initial, sequence) {
895
+ return (function loop(result, items) {
896
+ var recur = loop;
897
+ while (recur === loop) {
898
+ recur = isEmpty(items) ?
899
+ result :
900
+ (result = f(result, first(items)), items = rest(items), loop);
901
+ };
902
+ return recur;
903
+ })(initial, sequence);
904
+ };
905
+
906
+ var count = function count(sequence) {
907
+ return isNil(sequence) ?
908
+ 0 :
909
+ (seq(sequence)).length;
910
+ };
911
+ exports.count = count;
912
+
913
+ var isEmpty = function isEmpty(sequence) {
914
+ return count(sequence) === 0;
915
+ };
916
+ exports.isEmpty = isEmpty;
917
+
918
+ var first = function first(sequence) {
919
+ return isNil(sequence) ?
920
+ void(0) :
921
+ isList(sequence) ?
922
+ sequence.head :
923
+ (isVector(sequence)) || (isString(sequence)) ?
924
+ (sequence || 0)[0] :
925
+ isLazySeq(sequence) ?
926
+ first(lazySeqValue(sequence)) :
927
+ "else" ?
928
+ first(seq(sequence)) :
929
+ void(0);
930
+ };
931
+ exports.first = first;
932
+
933
+ var second = function second(sequence) {
934
+ return isNil(sequence) ?
935
+ void(0) :
936
+ isList(sequence) ?
937
+ first(rest(sequence)) :
938
+ (isVector(sequence)) || (isString(sequence)) ?
939
+ (sequence || 0)[1] :
940
+ isLazySeq(sequence) ?
941
+ second(lazySeqValue(sequence)) :
942
+ "else" ?
943
+ first(rest(seq(sequence))) :
944
+ void(0);
945
+ };
946
+ exports.second = second;
947
+
948
+ var third = function third(sequence) {
949
+ return isNil(sequence) ?
950
+ void(0) :
951
+ isList(sequence) ?
952
+ first(rest(rest(sequence))) :
953
+ (isVector(sequence)) || (isString(sequence)) ?
954
+ (sequence || 0)[2] :
955
+ isLazySeq(sequence) ?
956
+ third(lazySeqValue(sequence)) :
957
+ "else" ?
958
+ second(rest(seq(sequence))) :
959
+ void(0);
960
+ };
961
+ exports.third = third;
962
+
963
+ var rest = function rest(sequence) {
964
+ return isNil(sequence) ?
965
+ list() :
966
+ isList(sequence) ?
967
+ sequence.tail :
968
+ (isVector(sequence)) || (isString(sequence)) ?
969
+ sequence.slice(1) :
970
+ isLazySeq(sequence) ?
971
+ rest(lazySeqValue(sequence)) :
972
+ "else" ?
973
+ rest(seq(sequence)) :
974
+ void(0);
975
+ };
976
+ exports.rest = rest;
977
+
978
+ var lastOfList = function lastOfList(list) {
979
+ return (function loop(item, items) {
980
+ var recur = loop;
981
+ while (recur === loop) {
982
+ recur = isEmpty(items) ?
983
+ item :
984
+ (item = first(items), items = rest(items), loop);
985
+ };
986
+ return recur;
987
+ })(first(list), rest(list));
988
+ };
989
+
990
+ var last = function last(sequence) {
991
+ return (isVector(sequence)) || (isString(sequence)) ?
992
+ (sequence || 0)[dec(count(sequence))] :
993
+ isList(sequence) ?
994
+ lastOfList(sequence) :
995
+ isNil(sequence) ?
996
+ void(0) :
997
+ isLazySeq(sequence) ?
998
+ last(lazySeqValue(sequence)) :
999
+ "else" ?
1000
+ last(seq(sequence)) :
1001
+ void(0);
1002
+ };
1003
+ exports.last = last;
1004
+
1005
+ var butlast = function butlast(sequence) {
1006
+ var items = isNil(sequence) ?
1007
+ void(0) :
1008
+ isString(sequence) ?
1009
+ subs(sequence, 0, dec(count(sequence))) :
1010
+ isVector(sequence) ?
1011
+ sequence.slice(0, dec(count(sequence))) :
1012
+ isList(sequence) ?
1013
+ list.apply(list, butlast(vec(sequence))) :
1014
+ isLazySeq(sequence) ?
1015
+ butlast(lazySeqValue(sequence)) :
1016
+ "else" ?
1017
+ butlast(seq(sequence)) :
1018
+ void(0);
1019
+ return !((isNil(items)) || (isEmpty(items))) ?
1020
+ items :
1021
+ void(0);
1022
+ };
1023
+ exports.butlast = butlast;
1024
+
1025
+ var take = function take(n, sequence) {
1026
+ return isNil(sequence) ?
1027
+ list() :
1028
+ isVector(sequence) ?
1029
+ takeFromVector(n, sequence) :
1030
+ isList(sequence) ?
1031
+ takeFromList(n, sequence) :
1032
+ isLazySeq(sequence) ?
1033
+ take(n, lazySeqValue(sequence)) :
1034
+ "else" ?
1035
+ take(n, seq(sequence)) :
1036
+ void(0);
1037
+ };
1038
+ exports.take = take;
1039
+
1040
+ var takeVectorWhile = function takeVectorWhile(predicate, vector) {
1041
+ return (function loop(result, tail, head) {
1042
+ var recur = loop;
1043
+ while (recur === loop) {
1044
+ recur = (!(isEmpty(tail))) && (predicate(head)) ?
1045
+ (result = conj(result, head), tail = rest(tail), head = first(tail), loop) :
1046
+ result;
1047
+ };
1048
+ return recur;
1049
+ })([], vector, first(vector));
1050
+ };
1051
+
1052
+ var takeListWhile = function takeListWhile(predicate, items) {
1053
+ return (function loop(result, tail, head) {
1054
+ var recur = loop;
1055
+ while (recur === loop) {
1056
+ recur = (!(isEmpty(tail))) && (isPredicate(head)) ?
1057
+ (result = conj(result, head), tail = rest(tail), head = first(tail), loop) :
1058
+ list.apply(list, result);
1059
+ };
1060
+ return recur;
1061
+ })([], items, first(items));
1062
+ };
1063
+
1064
+ var takeWhile = function takeWhile(predicate, sequence) {
1065
+ return isNil(sequence) ?
1066
+ list() :
1067
+ isVector(sequence) ?
1068
+ takeVectorWhile(predicate, sequence) :
1069
+ isList(sequence) ?
1070
+ takeVectorWhile(predicate, sequence) :
1071
+ "else" ?
1072
+ takeWhile(predicate, lazySeqValue(sequence)) :
1073
+ void(0);
1074
+ };
1075
+ exports.takeWhile = takeWhile;
1076
+
1077
+ var takeFromVector = function takeFromVector(n, vector) {
1078
+ return vector.slice(0, n);
1079
+ };
1080
+
1081
+ var takeFromList = function takeFromList(n, sequence) {
1082
+ return (function loop(taken, items, n) {
1083
+ var recur = loop;
1084
+ while (recur === loop) {
1085
+ recur = (n === 0) || (isEmpty(items)) ?
1086
+ reverse(taken) :
1087
+ (taken = cons(first(items), taken), items = rest(items), n = dec(n), loop);
1088
+ };
1089
+ return recur;
1090
+ })(list(), sequence, n);
1091
+ };
1092
+
1093
+ var dropFromList = function dropFromList(n, sequence) {
1094
+ return (function loop(left, items) {
1095
+ var recur = loop;
1096
+ while (recur === loop) {
1097
+ recur = (left < 1) || (isEmpty(items)) ?
1098
+ items :
1099
+ (left = dec(left), items = rest(items), loop);
1100
+ };
1101
+ return recur;
1102
+ })(n, sequence);
1103
+ };
1104
+
1105
+ var drop = function drop(n, sequence) {
1106
+ return n <= 0 ?
1107
+ sequence :
1108
+ isString(sequence) ?
1109
+ sequence.substr(n) :
1110
+ isVector(sequence) ?
1111
+ sequence.slice(n) :
1112
+ isList(sequence) ?
1113
+ dropFromList(n, sequence) :
1114
+ isNil(sequence) ?
1115
+ list() :
1116
+ isLazySeq(sequence) ?
1117
+ drop(n, lazySeqValue(sequence)) :
1118
+ "else" ?
1119
+ drop(n, seq(sequence)) :
1120
+ void(0);
1121
+ };
1122
+ exports.drop = drop;
1123
+
1124
+ var conjList = function conjList(sequence, items) {
1125
+ return reduce(function(result, item) {
1126
+ return cons(item, result);
1127
+ }, sequence, items);
1128
+ };
1129
+
1130
+ var conj = function conj(sequence) {
1131
+ var items = Array.prototype.slice.call(arguments, 1);
1132
+ return isVector(sequence) ?
1133
+ sequence.concat(items) :
1134
+ isString(sequence) ?
1135
+ "" + sequence + (str.apply(str, items)) :
1136
+ isNil(sequence) ?
1137
+ list.apply(list, reverse(items)) :
1138
+ (isList(sequence)) || (isLazySeq()) ?
1139
+ conjList(sequence, items) :
1140
+ isDictionary(sequence) ?
1141
+ merge(sequence, merge.apply(merge, items)) :
1142
+ "else" ?
1143
+ (function() { throw TypeError("" + "Type can't be conjoined " + sequence); })() :
1144
+ void(0);
1145
+ };
1146
+ exports.conj = conj;
1147
+
1148
+ var concat = function concat() {
1149
+ var sequences = Array.prototype.slice.call(arguments, 0);
1150
+ return reverse(reduce(function(result, sequence) {
1151
+ return reduce(function(result, item) {
1152
+ return cons(item, result);
1153
+ }, result, seq(sequence));
1154
+ }, list(), sequences));
1155
+ };
1156
+ exports.concat = concat;
1157
+
1158
+ var seq = function seq(sequence) {
1159
+ return isNil(sequence) ?
1160
+ void(0) :
1161
+ (isVector(sequence)) || (isList(sequence)) || (isLazySeq(sequence)) ?
1162
+ sequence :
1163
+ isString(sequence) ?
1164
+ Array.prototype.slice.call(sequence) :
1165
+ isDictionary(sequence) ?
1166
+ keyValues(sequence) :
1167
+ "default" ?
1168
+ (function() { throw TypeError("" + "Can not seq " + sequence); })() :
1169
+ void(0);
1170
+ };
1171
+ exports.seq = seq;
1172
+
1173
+ var isSeq = function isSeq(sequence) {
1174
+ return (isList(sequence)) || (isLazySeq(sequence));
1175
+ };
1176
+ exports.isSeq = isSeq;
1177
+
1178
+ var listToVector = function listToVector(source) {
1179
+ return (function loop(result, list) {
1180
+ var recur = loop;
1181
+ while (recur === loop) {
1182
+ recur = isEmpty(list) ?
1183
+ result :
1184
+ (result = (function() {
1185
+ result.push(first(list));
1186
+ return result;
1187
+ })(), list = rest(list), loop);
1188
+ };
1189
+ return recur;
1190
+ })([], source);
1191
+ };
1192
+
1193
+ var vec = function vec(sequence) {
1194
+ return isNil(sequence) ?
1195
+ [] :
1196
+ isVector(sequence) ?
1197
+ sequence :
1198
+ isList(sequence) ?
1199
+ listToVector(sequence) :
1200
+ "else" ?
1201
+ vec(seq(sequence)) :
1202
+ void(0);
1203
+ };
1204
+ exports.vec = vec;
1205
+
1206
+ var sort = function sort(f, items) {
1207
+ var hasComparator = isFn(f);
1208
+ var items = (!(hasComparator)) && (isNil(items)) ?
1209
+ f :
1210
+ items;
1211
+ var compare = hasComparator ?
1212
+ function(a, b) {
1213
+ return f(a, b) ?
1214
+ 0 :
1215
+ 1;
1216
+ } :
1217
+ void(0);
1218
+ return isNil(items) ?
1219
+ list() :
1220
+ isVector(items) ?
1221
+ items.sort(compare) :
1222
+ isList(items) ?
1223
+ list.apply(list, vec(items).sort(compare)) :
1224
+ isDictionary(items) ?
1225
+ seq(items).sort(compare) :
1226
+ "else" ?
1227
+ sort(f, seq(items)) :
1228
+ void(0);
1229
+ };
1230
+ exports.sort = sort;
1231
+
1232
+ var repeat = function repeat(n, x) {
1233
+ return (function loop(n, result) {
1234
+ var recur = loop;
1235
+ while (recur === loop) {
1236
+ recur = n <= 0 ?
1237
+ result :
1238
+ (n = dec(n), result = conj(result, x), loop);
1239
+ };
1240
+ return recur;
1241
+ })(n, []);
1242
+ };
1243
+ exports.repeat = repeat
1244
+
1245
+ },{"./runtime":"+Sggh0"}],"wisp/string":[function(require,module,exports){
1246
+ module.exports=require('BIHQiq');
1247
+ },{}],"BIHQiq":[function(require,module,exports){
1248
+ var isString = (require("./runtime")).isString;
1249
+ var isNil = (require("./runtime")).isNil;
1250
+ var reMatches = (require("./runtime")).reMatches;
1251
+ var subs = (require("./runtime")).subs;
1252
+ var str = (require("./runtime")).str;;
1253
+
1254
+ var isEmpty = (require("./sequence")).isEmpty;
1255
+ var vec = (require("./sequence")).vec;;
1256
+
1257
+ var split = function split(string, pattern, limit) {
1258
+ return string.split(pattern, limit);
1259
+ };
1260
+ exports.split = split;
1261
+
1262
+ var join = function join(separator, coll) {
1263
+ switch (arguments.length) {
1264
+ case 1:
1265
+ var coll = separator;
1266
+ return str.apply(str, vec(coll));
1267
+ case 2:
1268
+ return vec(coll).join(separator);
1269
+
1270
+ default:
1271
+ (function() { throw Error("Invalid arity"); })()
1272
+ };
1273
+ return void(0);
1274
+ };
1275
+ exports.join = join;
1276
+
1277
+ var upperCase = function upperCase(string) {
1278
+ return string.toUpperCase();
1279
+ };
1280
+ exports.upperCase = upperCase;
1281
+
1282
+ var upperCase = function upperCase(string) {
1283
+ return string.toUpperCase();
1284
+ };
1285
+ exports.upperCase = upperCase;
1286
+
1287
+ var lowerCase = function lowerCase(string) {
1288
+ return string.toLowerCase();
1289
+ };
1290
+ exports.lowerCase = lowerCase;
1291
+
1292
+ var capitalize = function capitalize(string) {
1293
+ return count(string) < 2 ?
1294
+ upperCase(string) :
1295
+ "" + (upperCase(subs(s, 0, 1))) + (lowerCase(subs(s, 1)));
1296
+ };
1297
+ exports.capitalize = capitalize;
1298
+
1299
+ var replace = function replace(string, match, replacement) {
1300
+ return string.replace(match, replacement);
1301
+ };
1302
+ exports.replace = replace;
1303
+
1304
+ var __LEFTSPACES__ = /^\s\s*/;
1305
+ exports.__LEFTSPACES__ = __LEFTSPACES__;
1306
+
1307
+ var __RIGHTSPACES__ = /\s\s*$/;
1308
+ exports.__RIGHTSPACES__ = __RIGHTSPACES__;
1309
+
1310
+ var __SPACES__ = /^\s\s*$/;
1311
+ exports.__SPACES__ = __SPACES__;
1312
+
1313
+ var triml = isNil("".trimLeft) ?
1314
+ function(string) {
1315
+ return string.replace(__LEFTSPACES__, "");
1316
+ } :
1317
+ function triml(string) {
1318
+ return string.trimLeft();
1319
+ };
1320
+ exports.triml = triml;
1321
+
1322
+ var trimr = isNil("".trimRight) ?
1323
+ function(string) {
1324
+ return string.replace(__RIGHTSPACES__, "");
1325
+ } :
1326
+ function trimr(string) {
1327
+ return string.trimRight();
1328
+ };
1329
+ exports.trimr = trimr;
1330
+
1331
+ var trim = isNil("".trim) ?
1332
+ function(string) {
1333
+ return string.replace(__LEFTSPACES__).replace(__RIGHTSPACES__);
1334
+ } :
1335
+ function trim(string) {
1336
+ return string.trim();
1337
+ };
1338
+ exports.trim = trim;
1339
+
1340
+ var isBlank = function isBlank(string) {
1341
+ return (isNil(string)) || (isEmpty(string)) || (reMatches(__SPACES__, string));
1342
+ };
1343
+ exports.isBlank = isBlank
1344
+
1345
+ },{"./runtime":"+Sggh0","./sequence":"zNvMnP"}],"wisp/reader":[function(require,module,exports){
1346
+ module.exports=require('CX0B04');
1347
+ },{}],"CX0B04":[function(require,module,exports){
1348
+ var lazySeq = (require("./sequence")).lazySeq;
1349
+ var sort = (require("./sequence")).sort;
1350
+ var butlast = (require("./sequence")).butlast;
1351
+ var last = (require("./sequence")).last;
1352
+ var concat = (require("./sequence")).concat;
1353
+ var rest = (require("./sequence")).rest;
1354
+ var conj = (require("./sequence")).conj;
1355
+ var cons = (require("./sequence")).cons;
1356
+ var vec = (require("./sequence")).vec;
1357
+ var map = (require("./sequence")).map;
1358
+ var rest = (require("./sequence")).rest;
1359
+ var third = (require("./sequence")).third;
1360
+ var second = (require("./sequence")).second;
1361
+ var first = (require("./sequence")).first;
1362
+ var isEmpty = (require("./sequence")).isEmpty;
1363
+ var count = (require("./sequence")).count;
1364
+ var isList = (require("./sequence")).isList;
1365
+ var list = (require("./sequence")).list;;
1366
+
1367
+ var isStrictEqual = (require("./runtime")).isStrictEqual;
1368
+ var isEqual = (require("./runtime")).isEqual;
1369
+ var vals = (require("./runtime")).vals;
1370
+ var char = (require("./runtime")).char;
1371
+ var subs = (require("./runtime")).subs;
1372
+ var str = (require("./runtime")).str;
1373
+ var reFind = (require("./runtime")).reFind;
1374
+ var reMatches = (require("./runtime")).reMatches;
1375
+ var rePattern = (require("./runtime")).rePattern;
1376
+ var isDictionary = (require("./runtime")).isDictionary;
1377
+ var isObject = (require("./runtime")).isObject;
1378
+ var isBoolean = (require("./runtime")).isBoolean;
1379
+ var isNumber = (require("./runtime")).isNumber;
1380
+ var isString = (require("./runtime")).isString;
1381
+ var isVector = (require("./runtime")).isVector;
1382
+ var dec = (require("./runtime")).dec;
1383
+ var inc = (require("./runtime")).inc;
1384
+ var isNil = (require("./runtime")).isNil;
1385
+ var keys = (require("./runtime")).keys;
1386
+ var dictionary = (require("./runtime")).dictionary;
1387
+ var isOdd = (require("./runtime")).isOdd;;
1388
+
1389
+ var gensym = (require("./ast")).gensym;
1390
+ var name = (require("./ast")).name;
1391
+ var withMeta = (require("./ast")).withMeta;
1392
+ var meta = (require("./ast")).meta;
1393
+ var keyword = (require("./ast")).keyword;
1394
+ var isKeyword = (require("./ast")).isKeyword;
1395
+ var symbol = (require("./ast")).symbol;
1396
+ var isSymbol = (require("./ast")).isSymbol;;
1397
+
1398
+ var join = (require("./string")).join;
1399
+ var split = (require("./string")).split;;
1400
+
1401
+ var pushBackReader = function pushBackReader(source, uri) {
1402
+ return {
1403
+ "lines": split(source, "\n"),
1404
+ "buffer": "",
1405
+ "uri": uri,
1406
+ "column": -1,
1407
+ "line": 0
1408
+ };
1409
+ };
1410
+ exports.pushBackReader = pushBackReader;
1411
+
1412
+ var peekChar = function peekChar(reader) {
1413
+ var line = ((reader || 0)["lines"])[(reader || 0)["line"]];
1414
+ var column = inc((reader || 0)["column"]);
1415
+ return isNil(line) ?
1416
+ void(0) :
1417
+ (line[column]) || "\n";
1418
+ };
1419
+ exports.peekChar = peekChar;
1420
+
1421
+ var readChar = function readChar(reader) {
1422
+ var ch = peekChar(reader);
1423
+ isNewline(peekChar(reader)) ?
1424
+ (function() {
1425
+ (reader || 0)["line"] = inc((reader || 0)["line"]);
1426
+ return (reader || 0)["column"] = -1;
1427
+ })() :
1428
+ (reader || 0)["column"] = inc((reader || 0)["column"]);
1429
+ return ch;
1430
+ };
1431
+ exports.readChar = readChar;
1432
+
1433
+ var isNewline = function isNewline(ch) {
1434
+ return "\n" === ch;
1435
+ };
1436
+ exports.isNewline = isNewline;
1437
+
1438
+ var isBreakingWhitespace = function isBreakingWhitespace(ch) {
1439
+ return (ch === " ") || (ch === "\t") || (ch === "\n") || (ch === "\r");
1440
+ };
1441
+ exports.isBreakingWhitespace = isBreakingWhitespace;
1442
+
1443
+ var isWhitespace = function isWhitespace(ch) {
1444
+ return (isBreakingWhitespace(ch)) || ("," === ch);
1445
+ };
1446
+ exports.isWhitespace = isWhitespace;
1447
+
1448
+ var isNumeric = function isNumeric(ch) {
1449
+ return (ch === "0") || (ch === "1") || (ch === "2") || (ch === "3") || (ch === "4") || (ch === "5") || (ch === "6") || (ch === "7") || (ch === "8") || (ch === "9");
1450
+ };
1451
+ exports.isNumeric = isNumeric;
1452
+
1453
+ var isCommentPrefix = function isCommentPrefix(ch) {
1454
+ return ";" === ch;
1455
+ };
1456
+ exports.isCommentPrefix = isCommentPrefix;
1457
+
1458
+ var isNumberLiteral = function isNumberLiteral(reader, initch) {
1459
+ return (isNumeric(initch)) || ((("+" === initch) || ("-" === initch)) && (isNumeric(peekChar(reader))));
1460
+ };
1461
+ exports.isNumberLiteral = isNumberLiteral;
1462
+
1463
+ var readerError = function readerError(reader, message) {
1464
+ var text = "" + message + "\n" + "line:" + ((reader || 0)["line"]) + "\n" + "column:" + ((reader || 0)["column"]);
1465
+ var error = SyntaxError(text, (reader || 0)["uri"]);
1466
+ error.line = (reader || 0)["line"];
1467
+ error.column = (reader || 0)["column"];
1468
+ error.uri = (reader || 0)["uri"];
1469
+ return (function() { throw error; })();
1470
+ };
1471
+ exports.readerError = readerError;
1472
+
1473
+ var isMacroTerminating = function isMacroTerminating(ch) {
1474
+ return (!(ch === "#")) && (!(ch === "'")) && (!(ch === ":")) && (macros(ch));
1475
+ };
1476
+ exports.isMacroTerminating = isMacroTerminating;
1477
+
1478
+ var readToken = function readToken(reader, initch) {
1479
+ return (function loop(buffer, ch) {
1480
+ var recur = loop;
1481
+ while (recur === loop) {
1482
+ recur = (isNil(ch)) || (isWhitespace(ch)) || (isMacroTerminating(ch)) ?
1483
+ buffer :
1484
+ (buffer = "" + buffer + (readChar(reader)), ch = peekChar(reader), loop);
1485
+ };
1486
+ return recur;
1487
+ })(initch, peekChar(reader));
1488
+ };
1489
+ exports.readToken = readToken;
1490
+
1491
+ var skipLine = function skipLine(reader, _) {
1492
+ return (function loop() {
1493
+ var recur = loop;
1494
+ while (recur === loop) {
1495
+ recur = (function() {
1496
+ var ch = readChar(reader);
1497
+ return (ch === "\n") || (ch === "\r") || (isNil(ch)) ?
1498
+ reader :
1499
+ (loop);
1500
+ })();
1501
+ };
1502
+ return recur;
1503
+ })();
1504
+ };
1505
+ exports.skipLine = skipLine;
1506
+
1507
+ var intPattern = rePattern("^([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)(N)?$");
1508
+ exports.intPattern = intPattern;
1509
+
1510
+ var ratioPattern = rePattern("([-+]?[0-9]+)/([0-9]+)");
1511
+ exports.ratioPattern = ratioPattern;
1512
+
1513
+ var floatPattern = rePattern("([-+]?[0-9]+(\\.[0-9]*)?([eE][-+]?[0-9]+)?)(M)?");
1514
+ exports.floatPattern = floatPattern;
1515
+
1516
+ var matchInt = function matchInt(s) {
1517
+ var groups = reFind(intPattern, s);
1518
+ var group3 = groups[2];
1519
+ return !((isNil(group3)) || (count(group3) < 1)) ?
1520
+ 0 :
1521
+ (function() {
1522
+ var negate = "-" === groups[1] ?
1523
+ -1 :
1524
+ 1;
1525
+ var a = groups[3] ?
1526
+ [groups[3], 10] :
1527
+ groups[4] ?
1528
+ [groups[4], 16] :
1529
+ groups[5] ?
1530
+ [groups[5], 8] :
1531
+ groups[7] ?
1532
+ [groups[7], parseInt(groups[7])] :
1533
+ "else" ?
1534
+ [void(0), void(0)] :
1535
+ void(0);
1536
+ var n = a[0];
1537
+ var radix = a[1];
1538
+ return isNil(n) ?
1539
+ void(0) :
1540
+ negate * (parseInt(n, radix));
1541
+ })();
1542
+ };
1543
+ exports.matchInt = matchInt;
1544
+
1545
+ var matchRatio = function matchRatio(s) {
1546
+ var groups = reFind(ratioPattern, s);
1547
+ var numinator = groups[1];
1548
+ var denominator = groups[2];
1549
+ return (parseInt(numinator)) / (parseInt(denominator));
1550
+ };
1551
+ exports.matchRatio = matchRatio;
1552
+
1553
+ var matchFloat = function matchFloat(s) {
1554
+ return parseFloat(s);
1555
+ };
1556
+ exports.matchFloat = matchFloat;
1557
+
1558
+ var matchNumber = function matchNumber(s) {
1559
+ return reMatches(intPattern, s) ?
1560
+ matchInt(s) :
1561
+ reMatches(ratioPattern, s) ?
1562
+ matchRatio(s) :
1563
+ reMatches(floatPattern, s) ?
1564
+ matchFloat(s) :
1565
+ void(0);
1566
+ };
1567
+ exports.matchNumber = matchNumber;
1568
+
1569
+ var escapeCharMap = function escapeCharMap(c) {
1570
+ return c === "t" ?
1571
+ "\t" :
1572
+ c === "r" ?
1573
+ "\r" :
1574
+ c === "n" ?
1575
+ "\n" :
1576
+ c === "\\" ?
1577
+ "\\" :
1578
+ c === "\"" ?
1579
+ "\"" :
1580
+ c === "b" ?
1581
+ "" :
1582
+ c === "f" ?
1583
+ " " :
1584
+ "else" ?
1585
+ void(0) :
1586
+ void(0);
1587
+ };
1588
+ exports.escapeCharMap = escapeCharMap;
1589
+
1590
+ var read2Chars = function read2Chars(reader) {
1591
+ return "" + (readChar(reader)) + (readChar(reader));
1592
+ };
1593
+ exports.read2Chars = read2Chars;
1594
+
1595
+ var read4Chars = function read4Chars(reader) {
1596
+ return "" + (readChar(reader)) + (readChar(reader)) + (readChar(reader)) + (readChar(reader));
1597
+ };
1598
+ exports.read4Chars = read4Chars;
1599
+
1600
+ var unicode2Pattern = rePattern("[0-9A-Fa-f]{2}");
1601
+ exports.unicode2Pattern = unicode2Pattern;
1602
+
1603
+ var unicode4Pattern = rePattern("[0-9A-Fa-f]{4}");
1604
+ exports.unicode4Pattern = unicode4Pattern;
1605
+
1606
+ var validateUnicodeEscape = function validateUnicodeEscape(unicodePattern, reader, escapeChar, unicodeStr) {
1607
+ return reMatches(unicodePattern, unicodeStr) ?
1608
+ unicodeStr :
1609
+ readerError(reader, "" + "Unexpected unicode escape " + "\\" + escapeChar + unicodeStr);
1610
+ };
1611
+ exports.validateUnicodeEscape = validateUnicodeEscape;
1612
+
1613
+ var makeUnicodeChar = function makeUnicodeChar(codeStr, base) {
1614
+ var base = base || 16;
1615
+ var code = parseInt(codeStr, base);
1616
+ return char(code);
1617
+ };
1618
+ exports.makeUnicodeChar = makeUnicodeChar;
1619
+
1620
+ var escapeChar = function escapeChar(buffer, reader) {
1621
+ var ch = readChar(reader);
1622
+ var mapresult = escapeCharMap(ch);
1623
+ return mapresult ?
1624
+ mapresult :
1625
+ ch === "x" ?
1626
+ makeUnicodeChar(validateUnicodeEscape(unicode2Pattern, reader, ch, read2Chars(reader))) :
1627
+ ch === "u" ?
1628
+ makeUnicodeChar(validateUnicodeEscape(unicode4Pattern, reader, ch, read4Chars(reader))) :
1629
+ isNumeric(ch) ?
1630
+ char(ch) :
1631
+ "else" ?
1632
+ readerError(reader, "" + "Unexpected unicode escape " + "\\" + ch) :
1633
+ void(0);
1634
+ };
1635
+ exports.escapeChar = escapeChar;
1636
+
1637
+ var readPast = function readPast(predicate, reader) {
1638
+ return (function loop(_) {
1639
+ var recur = loop;
1640
+ while (recur === loop) {
1641
+ recur = predicate(peekChar(reader)) ?
1642
+ (_ = readChar(reader), loop) :
1643
+ peekChar(reader);
1644
+ };
1645
+ return recur;
1646
+ })(void(0));
1647
+ };
1648
+ exports.readPast = readPast;
1649
+
1650
+ var readDelimitedList = function readDelimitedList(delim, reader, isRecursive) {
1651
+ return (function loop(form) {
1652
+ var recur = loop;
1653
+ while (recur === loop) {
1654
+ recur = (function() {
1655
+ var ch = readPast(isWhitespace, reader);
1656
+ !(ch) ?
1657
+ readerError(reader, "EOF") :
1658
+ void(0);
1659
+ return delim === ch ?
1660
+ (function() {
1661
+ readChar(reader);
1662
+ return form;
1663
+ })() :
1664
+ (function() {
1665
+ var macro = macros(ch);
1666
+ return macro ?
1667
+ (function() {
1668
+ var result = macro(reader, readChar(reader));
1669
+ return (form = result === reader ?
1670
+ form :
1671
+ conj(form, result), loop);
1672
+ })() :
1673
+ (function() {
1674
+ var o = read(reader, true, void(0), isRecursive);
1675
+ return (form = o === reader ?
1676
+ form :
1677
+ conj(form, o), loop);
1678
+ })();
1679
+ })();
1680
+ })();
1681
+ };
1682
+ return recur;
1683
+ })([]);
1684
+ };
1685
+ exports.readDelimitedList = readDelimitedList;
1686
+
1687
+ var notImplemented = function notImplemented(reader, ch) {
1688
+ return readerError(reader, "" + "Reader for " + ch + " not implemented yet");
1689
+ };
1690
+ exports.notImplemented = notImplemented;
1691
+
1692
+ var readDispatch = function readDispatch(reader, _) {
1693
+ var ch = readChar(reader);
1694
+ var dm = dispatchMacros(ch);
1695
+ return dm ?
1696
+ dm(reader, _) :
1697
+ (function() {
1698
+ var object = maybeReadTaggedType(reader, ch);
1699
+ return object ?
1700
+ object :
1701
+ readerError(reader, "No dispatch macro for ", ch);
1702
+ })();
1703
+ };
1704
+ exports.readDispatch = readDispatch;
1705
+
1706
+ var readUnmatchedDelimiter = function readUnmatchedDelimiter(rdr, ch) {
1707
+ return readerError(rdr, "Unmached delimiter ", ch);
1708
+ };
1709
+ exports.readUnmatchedDelimiter = readUnmatchedDelimiter;
1710
+
1711
+ var readList = function readList(reader, _) {
1712
+ var form = readDelimitedList(")", reader, true);
1713
+ return withMeta(list.apply(list, form), meta(form));
1714
+ };
1715
+ exports.readList = readList;
1716
+
1717
+ var readComment = function readComment(reader, _) {
1718
+ return (function loop(buffer, ch) {
1719
+ var recur = loop;
1720
+ while (recur === loop) {
1721
+ recur = (isNil(ch)) || ("\n" === ch) ?
1722
+ reader || (list(symbol(void(0), "comment"), buffer)) :
1723
+ ("\\" === ch) ?
1724
+ (buffer = "" + buffer + (escapeChar(buffer, reader)), ch = readChar(reader), loop) :
1725
+ "else" ?
1726
+ (buffer = "" + buffer + ch, ch = readChar(reader), loop) :
1727
+ void(0);
1728
+ };
1729
+ return recur;
1730
+ })("", readChar(reader));
1731
+ };
1732
+ exports.readComment = readComment;
1733
+
1734
+ var readVector = function readVector(reader) {
1735
+ return readDelimitedList("]", reader, true);
1736
+ };
1737
+ exports.readVector = readVector;
1738
+
1739
+ var readMap = function readMap(reader) {
1740
+ var form = readDelimitedList("}", reader, true);
1741
+ return isOdd(count(form)) ?
1742
+ readerError(reader, "Map literal must contain an even number of forms") :
1743
+ withMeta(dictionary.apply(dictionary, form), meta(form));
1744
+ };
1745
+ exports.readMap = readMap;
1746
+
1747
+ var readSet = function readSet(reader, _) {
1748
+ var form = readDelimitedList("}", reader, true);
1749
+ return withMeta(concat([symbol(void(0), "set")], form), meta(form));
1750
+ };
1751
+ exports.readSet = readSet;
1752
+
1753
+ var readNumber = function readNumber(reader, initch) {
1754
+ return (function loop(buffer, ch) {
1755
+ var recur = loop;
1756
+ while (recur === loop) {
1757
+ recur = (isNil(ch)) || (isWhitespace(ch)) || (macros(ch)) ?
1758
+ (function() {
1759
+ var match = matchNumber(buffer);
1760
+ return isNil(match) ?
1761
+ readerError(reader, "Invalid number format [", buffer, "]") :
1762
+ match;
1763
+ })() :
1764
+ (buffer = "" + buffer + (readChar(reader)), ch = peekChar(reader), loop);
1765
+ };
1766
+ return recur;
1767
+ })(initch, peekChar(reader));
1768
+ };
1769
+ exports.readNumber = readNumber;
1770
+
1771
+ var readString = function readString(reader) {
1772
+ return (function loop(buffer, ch) {
1773
+ var recur = loop;
1774
+ while (recur === loop) {
1775
+ recur = isNil(ch) ?
1776
+ readerError(reader, "EOF while reading string") :
1777
+ "\\" === ch ?
1778
+ (buffer = "" + buffer + (escapeChar(buffer, reader)), ch = readChar(reader), loop) :
1779
+ "\"" === ch ?
1780
+ buffer :
1781
+ "default" ?
1782
+ (buffer = "" + buffer + ch, ch = readChar(reader), loop) :
1783
+ void(0);
1784
+ };
1785
+ return recur;
1786
+ })("", readChar(reader));
1787
+ };
1788
+ exports.readString = readString;
1789
+
1790
+ var readUnquote = function readUnquote(reader) {
1791
+ var ch = peekChar(reader);
1792
+ return !(ch) ?
1793
+ readerError(reader, "EOF while reading character") :
1794
+ ch === "@" ?
1795
+ (function() {
1796
+ readChar(reader);
1797
+ return list(symbol(void(0), "unquote-splicing"), read(reader, true, void(0), true));
1798
+ })() :
1799
+ list(symbol(void(0), "unquote"), read(reader, true, void(0), true));
1800
+ };
1801
+ exports.readUnquote = readUnquote;
1802
+
1803
+ var specialSymbols = function specialSymbols(text, notFound) {
1804
+ return text === "nil" ?
1805
+ void(0) :
1806
+ text === "true" ?
1807
+ true :
1808
+ text === "false" ?
1809
+ false :
1810
+ "else" ?
1811
+ notFound :
1812
+ void(0);
1813
+ };
1814
+ exports.specialSymbols = specialSymbols;
1815
+
1816
+ var readSymbol = function readSymbol(reader, initch) {
1817
+ var token = readToken(reader, initch);
1818
+ var parts = split(token, "/");
1819
+ var hasNs = (count(parts) > 1) && (count(token) > 1);
1820
+ var ns = first(parts);
1821
+ var name = join("/", rest(parts));
1822
+ return hasNs ?
1823
+ symbol(ns, name) :
1824
+ specialSymbols(token, symbol(token));
1825
+ };
1826
+ exports.readSymbol = readSymbol;
1827
+
1828
+ var readKeyword = function readKeyword(reader, initch) {
1829
+ var token = readToken(reader, readChar(reader));
1830
+ var parts = split(token, "/");
1831
+ var name = last(parts);
1832
+ var ns = count(parts) > 1 ?
1833
+ join("/", butlast(parts)) :
1834
+ void(0);
1835
+ var issue = last(ns) === ":" ?
1836
+ "namespace can't ends with \":\"" :
1837
+ last(name) === ":" ?
1838
+ "name can't end with \":\"" :
1839
+ last(name) === "/" ?
1840
+ "name can't end with \"/\"" :
1841
+ count(split(token, "::")) > 1 ?
1842
+ "name can't contain \"::\"" :
1843
+ void(0);
1844
+ return issue ?
1845
+ readerError(reader, "Invalid token (", issue, "): ", token) :
1846
+ (!(ns)) && (first(name) === ":") ?
1847
+ keyword(rest(name)) :
1848
+ keyword(ns, name);
1849
+ };
1850
+ exports.readKeyword = readKeyword;
1851
+
1852
+ var desugarMeta = function desugarMeta(f) {
1853
+ return isKeyword(f) ?
1854
+ dictionary(name(f), true) :
1855
+ isSymbol(f) ?
1856
+ {
1857
+ "tag": f
1858
+ } :
1859
+ isString(f) ?
1860
+ {
1861
+ "tag": f
1862
+ } :
1863
+ "else" ?
1864
+ f :
1865
+ void(0);
1866
+ };
1867
+ exports.desugarMeta = desugarMeta;
1868
+
1869
+ var wrappingReader = function wrappingReader(prefix) {
1870
+ return function(reader) {
1871
+ return list(prefix, read(reader, true, void(0), true));
1872
+ };
1873
+ };
1874
+ exports.wrappingReader = wrappingReader;
1875
+
1876
+ var throwingReader = function throwingReader(msg) {
1877
+ return function(reader) {
1878
+ return readerError(reader, msg);
1879
+ };
1880
+ };
1881
+ exports.throwingReader = throwingReader;
1882
+
1883
+ var readMeta = function readMeta(reader, _) {
1884
+ var metadata = desugarMeta(read(reader, true, void(0), true));
1885
+ !(isDictionary(metadata)) ?
1886
+ readerError(reader, "Metadata must be Symbol, Keyword, String or Map") :
1887
+ void(0);
1888
+ return (function() {
1889
+ var form = read(reader, true, void(0), true);
1890
+ return isObject(form) ?
1891
+ withMeta(form, conj(metadata, meta(form))) :
1892
+ form;
1893
+ })();
1894
+ };
1895
+ exports.readMeta = readMeta;
1896
+
1897
+ var readRegex = function readRegex(reader) {
1898
+ return (function loop(buffer, ch) {
1899
+ var recur = loop;
1900
+ while (recur === loop) {
1901
+ recur = isNil(ch) ?
1902
+ readerError(reader, "EOF while reading string") :
1903
+ "\\" === ch ?
1904
+ (buffer = "" + buffer + ch + (readChar(reader)), ch = readChar(reader), loop) :
1905
+ "\"" === ch ?
1906
+ rePattern(buffer) :
1907
+ "default" ?
1908
+ (buffer = "" + buffer + ch, ch = readChar(reader), loop) :
1909
+ void(0);
1910
+ };
1911
+ return recur;
1912
+ })("", readChar(reader));
1913
+ };
1914
+ exports.readRegex = readRegex;
1915
+
1916
+ var readParam = function readParam(reader, initch) {
1917
+ var form = readSymbol(reader, initch);
1918
+ return isEqual(form, symbol("%")) ?
1919
+ symbol("%1") :
1920
+ form;
1921
+ };
1922
+ exports.readParam = readParam;
1923
+
1924
+ var isParam = function isParam(form) {
1925
+ return (isSymbol(form)) && ("%" === first(name(form)));
1926
+ };
1927
+ exports.isParam = isParam;
1928
+
1929
+ var lambdaParamsHash = function lambdaParamsHash(form) {
1930
+ return isParam(form) ?
1931
+ dictionary(form, form) :
1932
+ (isDictionary(form)) || (isVector(form)) || (isList(form)) ?
1933
+ conj.apply(conj, map(lambdaParamsHash, vec(form))) :
1934
+ "else" ?
1935
+ {} :
1936
+ void(0);
1937
+ };
1938
+ exports.lambdaParamsHash = lambdaParamsHash;
1939
+
1940
+ var lambdaParams = function lambdaParams(body) {
1941
+ var names = sort(vals(lambdaParamsHash(body)));
1942
+ var variadic = isEqual(first(names), symbol("%&"));
1943
+ var n = variadic && (count(names) === 1) ?
1944
+ 0 :
1945
+ parseInt(rest(name(last(names))));
1946
+ var params = (function loop(names, i) {
1947
+ var recur = loop;
1948
+ while (recur === loop) {
1949
+ recur = i <= n ?
1950
+ (names = conj(names, symbol("" + "%" + i)), i = inc(i), loop) :
1951
+ names;
1952
+ };
1953
+ return recur;
1954
+ })([], 1);
1955
+ return variadic ?
1956
+ conj(params, symbol(void(0), "&"), symbol(void(0), "%&")) :
1957
+ names;
1958
+ };
1959
+ exports.lambdaParams = lambdaParams;
1960
+
1961
+ var readLambda = function readLambda(reader) {
1962
+ var body = readList(reader);
1963
+ return list(symbol(void(0), "fn"), lambdaParams(body), body);
1964
+ };
1965
+ exports.readLambda = readLambda;
1966
+
1967
+ var readDiscard = function readDiscard(reader, _) {
1968
+ read(reader, true, void(0), true);
1969
+ return reader;
1970
+ };
1971
+ exports.readDiscard = readDiscard;
1972
+
1973
+ var macros = function macros(c) {
1974
+ return c === "\"" ?
1975
+ readString :
1976
+ c === ":" ?
1977
+ readKeyword :
1978
+ c === ";" ?
1979
+ readComment :
1980
+ c === "'" ?
1981
+ wrappingReader(symbol(void(0), "quote")) :
1982
+ c === "@" ?
1983
+ wrappingReader(symbol(void(0), "deref")) :
1984
+ c === "^" ?
1985
+ readMeta :
1986
+ c === "`" ?
1987
+ wrappingReader(symbol(void(0), "syntax-quote")) :
1988
+ c === "~" ?
1989
+ readUnquote :
1990
+ c === "(" ?
1991
+ readList :
1992
+ c === ")" ?
1993
+ readUnmatchedDelimiter :
1994
+ c === "[" ?
1995
+ readVector :
1996
+ c === "]" ?
1997
+ readUnmatchedDelimiter :
1998
+ c === "{" ?
1999
+ readMap :
2000
+ c === "}" ?
2001
+ readUnmatchedDelimiter :
2002
+ c === "\\" ?
2003
+ readChar :
2004
+ c === "%" ?
2005
+ readParam :
2006
+ c === "#" ?
2007
+ readDispatch :
2008
+ "else" ?
2009
+ void(0) :
2010
+ void(0);
2011
+ };
2012
+ exports.macros = macros;
2013
+
2014
+ var dispatchMacros = function dispatchMacros(s) {
2015
+ return s === "{" ?
2016
+ readSet :
2017
+ s === "(" ?
2018
+ readLambda :
2019
+ s === "<" ?
2020
+ throwingReader("Unreadable form") :
2021
+ s === "\"" ?
2022
+ readRegex :
2023
+ s === "!" ?
2024
+ readComment :
2025
+ s === "_" ?
2026
+ readDiscard :
2027
+ "else" ?
2028
+ void(0) :
2029
+ void(0);
2030
+ };
2031
+ exports.dispatchMacros = dispatchMacros;
2032
+
2033
+ var readForm = function readForm(reader, ch) {
2034
+ var start = {
2035
+ "line": (reader || 0)["line"],
2036
+ "column": (reader || 0)["column"]
2037
+ };
2038
+ var readMacro = macros(ch);
2039
+ var form = readMacro ?
2040
+ readMacro(reader, ch) :
2041
+ isNumberLiteral(reader, ch) ?
2042
+ readNumber(reader, ch) :
2043
+ "else" ?
2044
+ readSymbol(reader, ch) :
2045
+ void(0);
2046
+ return form === reader ?
2047
+ form :
2048
+ !((isString(form)) || (isNumber(form)) || (isBoolean(form)) || (isNil(form)) || (isKeyword(form))) ?
2049
+ withMeta(form, conj({
2050
+ "start": start,
2051
+ "end": {
2052
+ "line": (reader || 0)["line"],
2053
+ "column": (reader || 0)["column"]
2054
+ }
2055
+ }, meta(form))) :
2056
+ "else" ?
2057
+ form :
2058
+ void(0);
2059
+ };
2060
+ exports.readForm = readForm;
2061
+
2062
+ var read = function read(reader, eofIsError, sentinel, isRecursive) {
2063
+ return (function loop() {
2064
+ var recur = loop;
2065
+ while (recur === loop) {
2066
+ recur = (function() {
2067
+ var ch = readChar(reader);
2068
+ var form = isNil(ch) ?
2069
+ eofIsError ?
2070
+ readerError(reader, "EOF") :
2071
+ sentinel :
2072
+ isWhitespace(ch) ?
2073
+ reader :
2074
+ isCommentPrefix(ch) ?
2075
+ read(readComment(reader, ch), eofIsError, sentinel, isRecursive) :
2076
+ "else" ?
2077
+ readForm(reader, ch) :
2078
+ void(0);
2079
+ return form === reader ?
2080
+ (loop) :
2081
+ form;
2082
+ })();
2083
+ };
2084
+ return recur;
2085
+ })();
2086
+ };
2087
+ exports.read = read;
2088
+
2089
+ var read_ = function read_(source, uri) {
2090
+ var reader = pushBackReader(source, uri);
2091
+ var eof = gensym();
2092
+ return (function loop(forms, form) {
2093
+ var recur = loop;
2094
+ while (recur === loop) {
2095
+ recur = form === eof ?
2096
+ forms :
2097
+ (forms = conj(forms, form), form = read(reader, false, eof, false), loop);
2098
+ };
2099
+ return recur;
2100
+ })([], read(reader, false, eof, false));
2101
+ };
2102
+ exports.read_ = read_;
2103
+
2104
+ var readFromString = function readFromString(source, uri) {
2105
+ var reader = pushBackReader(source, uri);
2106
+ return read(reader, true, void(0), false);
2107
+ };
2108
+ exports.readFromString = readFromString;
2109
+
2110
+ var readUuid = function readUuid(uuid) {
2111
+ return isString(uuid) ?
2112
+ list(symbol(void(0), "UUID."), uuid) :
2113
+ readerError(void(0), "UUID literal expects a string as its representation.");
2114
+ };
2115
+
2116
+ var readQueue = function readQueue(items) {
2117
+ return isVector(items) ?
2118
+ list(symbol(void(0), "PersistentQueue."), items) :
2119
+ readerError(void(0), "Queue literal expects a vector for its elements.");
2120
+ };
2121
+
2122
+ var __tagTable__ = dictionary("uuid", readUuid, "queue", readQueue);
2123
+ exports.__tagTable__ = __tagTable__;
2124
+
2125
+ var maybeReadTaggedType = function maybeReadTaggedType(reader, initch) {
2126
+ var tag = readSymbol(reader, initch);
2127
+ var pfn = (__tagTable__ || 0)[name(tag)];
2128
+ return pfn ?
2129
+ pfn(read(reader, true, void(0), false)) :
2130
+ readerError(reader, "" + "Could not find tag parser for " + (name(tag)) + " in " + ("" + (keys(__tagTable__))));
2131
+ };
2132
+ exports.maybeReadTaggedType = maybeReadTaggedType
2133
+
2134
+ },{"./sequence":"zNvMnP","./runtime":"+Sggh0","./ast":"dcWfTp","./string":"BIHQiq"}],"wisp/ast":[function(require,module,exports){
2135
+ module.exports=require('dcWfTp');
2136
+ },{}],"dcWfTp":[function(require,module,exports){
2137
+ var vec = (require("./sequence")).vec;
2138
+ var map = (require("./sequence")).map;
2139
+ var last = (require("./sequence")).last;
2140
+ var count = (require("./sequence")).count;
2141
+ var second = (require("./sequence")).second;
2142
+ var first = (require("./sequence")).first;
2143
+ var isSequential = (require("./sequence")).isSequential;
2144
+ var isList = (require("./sequence")).isList;;
2145
+
2146
+ var join = (require("./string")).join;
2147
+ var split = (require("./string")).split;;
2148
+
2149
+ var isEqual = (require("./runtime")).isEqual;
2150
+ var subs = (require("./runtime")).subs;
2151
+ var inc = (require("./runtime")).inc;
2152
+ var str = (require("./runtime")).str;
2153
+ var isDictionary = (require("./runtime")).isDictionary;
2154
+ var isRePattern = (require("./runtime")).isRePattern;
2155
+ var isDate = (require("./runtime")).isDate;
2156
+ var isObject = (require("./runtime")).isObject;
2157
+ var isBoolean = (require("./runtime")).isBoolean;
2158
+ var isString = (require("./runtime")).isString;
2159
+ var isNumber = (require("./runtime")).isNumber;
2160
+ var isVector = (require("./runtime")).isVector;
2161
+ var isNil = (require("./runtime")).isNil;;
2162
+
2163
+ var withMeta = function withMeta(value, metadata) {
2164
+ Object.defineProperty(value, "metadata", {
2165
+ "value": metadata,
2166
+ "configurable": true
2167
+ });
2168
+ return value;
2169
+ };
2170
+ exports.withMeta = withMeta;
2171
+
2172
+ var meta = function meta(value) {
2173
+ return isObject(value) ?
2174
+ value.metadata :
2175
+ void(0);
2176
+ };
2177
+ exports.meta = meta;
2178
+
2179
+ var __nsSeparator__ = "⁄";
2180
+ exports.__nsSeparator__ = __nsSeparator__;
2181
+
2182
+ var Symbol = function Symbol(namespace, name) {
2183
+ this.namespace = namespace;
2184
+ this.name = name;
2185
+ return this;
2186
+ };
2187
+
2188
+ Symbol.type = "wisp.symbol";
2189
+
2190
+ Symbol.prototype.type = Symbol.type;
2191
+
2192
+ Symbol.prototype.toString = function() {
2193
+ var ns = namespace(this);
2194
+ return ns ?
2195
+ "" + ns + "/" + (name(this)) :
2196
+ "" + (name(this));
2197
+ };
2198
+
2199
+ var symbol = function symbol(ns, id) {
2200
+ return isSymbol(ns) ?
2201
+ ns :
2202
+ isKeyword(ns) ?
2203
+ new Symbol(namespace(ns), name(ns)) :
2204
+ isNil(id) ?
2205
+ new Symbol(void(0), ns) :
2206
+ "else" ?
2207
+ new Symbol(ns, id) :
2208
+ void(0);
2209
+ };
2210
+ exports.symbol = symbol;
2211
+
2212
+ var isSymbol = function isSymbol(x) {
2213
+ return x && (Symbol.type === x.type);
2214
+ };
2215
+ exports.isSymbol = isSymbol;
2216
+
2217
+ var isKeyword = function isKeyword(x) {
2218
+ return (isString(x)) && (count(x) > 1) && (first(x) === "꞉");
2219
+ };
2220
+ exports.isKeyword = isKeyword;
2221
+
2222
+ var keyword = function keyword(ns, id) {
2223
+ return isKeyword(ns) ?
2224
+ ns :
2225
+ isSymbol(ns) ?
2226
+ "" + "꞉" + (name(ns)) :
2227
+ isNil(id) ?
2228
+ "" + "꞉" + ns :
2229
+ isNil(ns) ?
2230
+ "" + "꞉" + id :
2231
+ "else" ?
2232
+ "" + "꞉" + ns + __nsSeparator__ + id :
2233
+ void(0);
2234
+ };
2235
+ exports.keyword = keyword;
2236
+
2237
+ var keywordName = function keywordName(value) {
2238
+ return last(split(subs(value, 1), __nsSeparator__));
2239
+ };
2240
+
2241
+ var name = function name(value) {
2242
+ return isSymbol(value) ?
2243
+ value.name :
2244
+ isKeyword(value) ?
2245
+ keywordName(value) :
2246
+ isString(value) ?
2247
+ value :
2248
+ "else" ?
2249
+ (function() { throw new TypeError("" + "Doesn't support name: " + value); })() :
2250
+ void(0);
2251
+ };
2252
+ exports.name = name;
2253
+
2254
+ var keywordNamespace = function keywordNamespace(x) {
2255
+ var parts = split(subs(x, 1), __nsSeparator__);
2256
+ return count(parts) > 1 ?
2257
+ (parts || 0)[0] :
2258
+ void(0);
2259
+ };
2260
+
2261
+ var namespace = function namespace(x) {
2262
+ return isSymbol(x) ?
2263
+ x.namespace :
2264
+ isKeyword(x) ?
2265
+ keywordNamespace(x) :
2266
+ "else" ?
2267
+ (function() { throw new TypeError("" + "Doesn't supports namespace: " + x); })() :
2268
+ void(0);
2269
+ };
2270
+ exports.namespace = namespace;
2271
+
2272
+ var gensym = function gensym(prefix) {
2273
+ return symbol("" + (isNil(prefix) ?
2274
+ "G__" :
2275
+ prefix) + (gensym.base = gensym.base + 1));
2276
+ };
2277
+ exports.gensym = gensym;
2278
+
2279
+ gensym.base = 0;
2280
+
2281
+ var isUnquote = function isUnquote(form) {
2282
+ return (isList(form)) && (isEqual(first(form), symbol(void(0), "unquote")));
2283
+ };
2284
+ exports.isUnquote = isUnquote;
2285
+
2286
+ var isUnquoteSplicing = function isUnquoteSplicing(form) {
2287
+ return (isList(form)) && (isEqual(first(form), symbol(void(0), "unquote-splicing")));
2288
+ };
2289
+ exports.isUnquoteSplicing = isUnquoteSplicing;
2290
+
2291
+ var isQuote = function isQuote(form) {
2292
+ return (isList(form)) && (isEqual(first(form), symbol(void(0), "quote")));
2293
+ };
2294
+ exports.isQuote = isQuote;
2295
+
2296
+ var isSyntaxQuote = function isSyntaxQuote(form) {
2297
+ return (isList(form)) && (isEqual(first(form), symbol(void(0), "syntax-quote")));
2298
+ };
2299
+ exports.isSyntaxQuote = isSyntaxQuote;
2300
+
2301
+ var normalize = function normalize(n, len) {
2302
+ return (function loop(ns) {
2303
+ var recur = loop;
2304
+ while (recur === loop) {
2305
+ recur = count(ns) < len ?
2306
+ (ns = "" + "0" + ns, loop) :
2307
+ ns;
2308
+ };
2309
+ return recur;
2310
+ })("" + n);
2311
+ };
2312
+
2313
+ var quoteString = function quoteString(s) {
2314
+ s = join("\\\"", split(s, "\""));
2315
+ s = join("\\\\", split(s, "\\"));
2316
+ s = join("\\b", split(s, ""));
2317
+ s = join("\\f", split(s, " "));
2318
+ s = join("\\n", split(s, "\n"));
2319
+ s = join("\\r", split(s, "\r"));
2320
+ s = join("\\t", split(s, "\t"));
2321
+ return "" + "\"" + s + "\"";
2322
+ };
2323
+ exports.quoteString = quoteString;
2324
+
2325
+ var prStr = function prStr(x) {
2326
+ return isNil(x) ?
2327
+ "nil" :
2328
+ isKeyword(x) ?
2329
+ namespace(x) ?
2330
+ "" + ":" + (namespace(x)) + "/" + (name(x)) :
2331
+ "" + ":" + (name(x)) :
2332
+ isString(x) ?
2333
+ quoteString(x) :
2334
+ isDate(x) ?
2335
+ "" + "#inst \"" + (x.getUTCFullYear()) + "-" + (normalize(inc(x.getUTCMonth()), 2)) + "-" + (normalize(x.getUTCDate(), 2)) + "T" + (normalize(x.getUTCHours(), 2)) + ":" + (normalize(x.getUTCMinutes(), 2)) + ":" + (normalize(x.getUTCSeconds(), 2)) + "." + (normalize(x.getUTCMilliseconds(), 3)) + "-" + "00:00\"" :
2336
+ isVector(x) ?
2337
+ "" + "[" + (join(" ", map(prStr, vec(x)))) + "]" :
2338
+ isDictionary(x) ?
2339
+ "" + "{" + (join(", ", map(function(pair) {
2340
+ return "" + (prStr(first(pair))) + " " + (prStr(second(pair)));
2341
+ }, x))) + "}" :
2342
+ isSequential(x) ?
2343
+ "" + "(" + (join(" ", map(prStr, vec(x)))) + ")" :
2344
+ isRePattern(x) ?
2345
+ "" + "#\"" + (join("\\/", split(x.source, "/"))) + "\"" :
2346
+ "else" ?
2347
+ "" + x :
2348
+ void(0);
2349
+ };
2350
+ exports.prStr = prStr
2351
+
2352
+ },{"./sequence":"zNvMnP","./string":"BIHQiq","./runtime":"+Sggh0"}],"wisp/compiler":[function(require,module,exports){
2353
+ module.exports=require('/EiAl9');
2354
+ },{}],"/EiAl9":[function(require,module,exports){
2355
+ var readFromString = (require("./reader")).readFromString;;
2356
+
2357
+ var prStr = (require("./ast")).prStr;
2358
+ var gensym = (require("./ast")).gensym;
2359
+ var name = (require("./ast")).name;
2360
+ var isSyntaxQuote = (require("./ast")).isSyntaxQuote;
2361
+ var isQuote = (require("./ast")).isQuote;
2362
+ var isUnquoteSplicing = (require("./ast")).isUnquoteSplicing;
2363
+ var isUnquote = (require("./ast")).isUnquote;
2364
+ var namespace = (require("./ast")).namespace;
2365
+ var keyword = (require("./ast")).keyword;
2366
+ var isKeyword = (require("./ast")).isKeyword;
2367
+ var symbol = (require("./ast")).symbol;
2368
+ var isSymbol = (require("./ast")).isSymbol;
2369
+ var withMeta = (require("./ast")).withMeta;
2370
+ var meta = (require("./ast")).meta;;
2371
+
2372
+ var concat = (require("./sequence")).concat;
2373
+ var take = (require("./sequence")).take;
2374
+ var filter = (require("./sequence")).filter;
2375
+ var map = (require("./sequence")).map;
2376
+ var repeat = (require("./sequence")).repeat;
2377
+ var last = (require("./sequence")).last;
2378
+ var vec = (require("./sequence")).vec;
2379
+ var reduce = (require("./sequence")).reduce;
2380
+ var reverse = (require("./sequence")).reverse;
2381
+ var conj = (require("./sequence")).conj;
2382
+ var cons = (require("./sequence")).cons;
2383
+ var rest = (require("./sequence")).rest;
2384
+ var third = (require("./sequence")).third;
2385
+ var second = (require("./sequence")).second;
2386
+ var first = (require("./sequence")).first;
2387
+ var list = (require("./sequence")).list;
2388
+ var isList = (require("./sequence")).isList;
2389
+ var count = (require("./sequence")).count;
2390
+ var isEmpty = (require("./sequence")).isEmpty;;
2391
+
2392
+ var isStrictEqual = (require("./runtime")).isStrictEqual;
2393
+ var isEqual = (require("./runtime")).isEqual;
2394
+ var int = (require("./runtime")).int;
2395
+ var char = (require("./runtime")).char;
2396
+ var str = (require("./runtime")).str;
2397
+ var dec = (require("./runtime")).dec;
2398
+ var inc = (require("./runtime")).inc;
2399
+ var isRePattern = (require("./runtime")).isRePattern;
2400
+ var isNil = (require("./runtime")).isNil;
2401
+ var isFalse = (require("./runtime")).isFalse;
2402
+ var isTrue = (require("./runtime")).isTrue;
2403
+ var reFind = (require("./runtime")).reFind;
2404
+ var subs = (require("./runtime")).subs;
2405
+ var isBoolean = (require("./runtime")).isBoolean;
2406
+ var isVector = (require("./runtime")).isVector;
2407
+ var isNumber = (require("./runtime")).isNumber;
2408
+ var isString = (require("./runtime")).isString;
2409
+ var mapDictionary = (require("./runtime")).mapDictionary;
2410
+ var isContainsVector = (require("./runtime")).isContainsVector;
2411
+ var vals = (require("./runtime")).vals;
2412
+ var keys = (require("./runtime")).keys;
2413
+ var merge = (require("./runtime")).merge;
2414
+ var dictionary = (require("./runtime")).dictionary;
2415
+ var isDictionary = (require("./runtime")).isDictionary;
2416
+ var isOdd = (require("./runtime")).isOdd;;
2417
+
2418
+ var replace = (require("./string")).replace;
2419
+ var upperCase = (require("./string")).upperCase;
2420
+ var join = (require("./string")).join;
2421
+ var split = (require("./string")).split;;
2422
+
2423
+ var writeBoolean = (require("./backend/javascript/writer")).writeBoolean;
2424
+ var writeNumber = (require("./backend/javascript/writer")).writeNumber;
2425
+ var writeString = (require("./backend/javascript/writer")).writeString;
2426
+ var writeNumber = (require("./backend/javascript/writer")).writeNumber;
2427
+ var writeComment = (require("./backend/javascript/writer")).writeComment;
2428
+ var writeNil = (require("./backend/javascript/writer")).writeNil;
2429
+ var writeSymbol = (require("./backend/javascript/writer")).writeSymbol;
2430
+ var writeKeyword = (require("./backend/javascript/writer")).writeKeyword;
2431
+ var writeKeywordReference = (require("./backend/javascript/writer")).writeKeywordReference;
2432
+ var writeReference = (require("./backend/javascript/writer")).writeReference;;
2433
+
2434
+ var isSelfEvaluating = function isSelfEvaluating(form) {
2435
+ return (isNumber(form)) || ((isString(form)) && (!(isSymbol(form))) && (!(isKeyword(form)))) || (isBoolean(form)) || (isNil(form)) || (isRePattern(form));
2436
+ };
2437
+ exports.isSelfEvaluating = isSelfEvaluating;
2438
+
2439
+ var __macros__ = {};
2440
+ exports.__macros__ = __macros__;
2441
+
2442
+ var executeMacro = function executeMacro(name, form) {
2443
+ return (__macros__ || 0)[name].apply((__macros__ || 0)[name], vec(form));
2444
+ };
2445
+ exports.executeMacro = executeMacro;
2446
+
2447
+ var installMacro = function installMacro(name, macroFn) {
2448
+ return (__macros__ || 0)[name] = macroFn;
2449
+ };
2450
+ exports.installMacro = installMacro;
2451
+
2452
+ var isMacro = function isMacro(name) {
2453
+ return (isSymbol(name)) && ((__macros__ || 0)[name]) && true;
2454
+ };
2455
+ exports.isMacro = isMacro;
2456
+
2457
+ var makeMacro = function makeMacro(pattern, body) {
2458
+ var macroFn = concat(list(symbol(void(0), "fn"), pattern), body);
2459
+ return eval("" + "(" + (compile(macroexpand(macroFn))) + ")");
2460
+ };
2461
+ exports.makeMacro = makeMacro;
2462
+
2463
+ installMacro(symbol(void(0), "defmacro"), function(name, signature) {
2464
+ var body = Array.prototype.slice.call(arguments, 2);
2465
+ return installMacro(name, makeMacro(signature, body));
2466
+ });
2467
+
2468
+ var __specials__ = {};
2469
+ exports.__specials__ = __specials__;
2470
+
2471
+ var installSpecial = function installSpecial(name, f, validator) {
2472
+ return (__specials__ || 0)[name] = function(form) {
2473
+ validator ?
2474
+ validator(form) :
2475
+ void(0);
2476
+ return f(withMeta(rest(form), meta(form)));
2477
+ };
2478
+ };
2479
+ exports.installSpecial = installSpecial;
2480
+
2481
+ var isSpecial = function isSpecial(name) {
2482
+ return (isSymbol(name)) && ((__specials__ || 0)[name]) && true;
2483
+ };
2484
+ exports.isSpecial = isSpecial;
2485
+
2486
+ var executeSpecial = function executeSpecial(name, form) {
2487
+ return ((__specials__ || 0)[name])(form);
2488
+ };
2489
+ exports.executeSpecial = executeSpecial;
2490
+
2491
+ var opt = function opt(argument, fallback) {
2492
+ return (isNil(argument)) || (isEmpty(argument)) ?
2493
+ fallback :
2494
+ first(argument);
2495
+ };
2496
+ exports.opt = opt;
2497
+
2498
+ var applyForm = function applyForm(fnName, form, isQuoted) {
2499
+ return cons(fnName, isQuoted ?
2500
+ map(function(e) {
2501
+ return list(symbol(void(0), "quote"), e);
2502
+ }, form) :
2503
+ form, form);
2504
+ };
2505
+ exports.applyForm = applyForm;
2506
+
2507
+ var applyUnquotedForm = function applyUnquotedForm(fnName, form) {
2508
+ return cons(fnName, map(function(e) {
2509
+ return isUnquote(e) ?
2510
+ second(e) :
2511
+ (isList(e)) && (isKeyword(first(e))) ?
2512
+ list(symbol(void(0), "syntax-quote"), second(e)) :
2513
+ list(symbol(void(0), "syntax-quote"), e);
2514
+ }, form));
2515
+ };
2516
+ exports.applyUnquotedForm = applyUnquotedForm;
2517
+
2518
+ var splitSplices = function splitSplices(form, fnName) {
2519
+ var makeSplice = function makeSplice(form) {
2520
+ return (isSelfEvaluating(form)) || (isSymbol(form)) ?
2521
+ applyUnquotedForm(fnName, list(form)) :
2522
+ applyUnquotedForm(fnName, form);
2523
+ };
2524
+ return (function loop(nodes, slices, acc) {
2525
+ var recur = loop;
2526
+ while (recur === loop) {
2527
+ recur = isEmpty(nodes) ?
2528
+ reverse(isEmpty(acc) ?
2529
+ slices :
2530
+ cons(makeSplice(reverse(acc)), slices)) :
2531
+ (function() {
2532
+ var node = first(nodes);
2533
+ return isUnquoteSplicing(node) ?
2534
+ (nodes = rest(nodes), slices = cons(second(node), isEmpty(acc) ?
2535
+ slices :
2536
+ cons(makeSplice(reverse(acc)), slices)), acc = list(), loop) :
2537
+ (nodes = rest(nodes), slices = slices, acc = cons(node, acc), loop);
2538
+ })();
2539
+ };
2540
+ return recur;
2541
+ })(form, list(), list());
2542
+ };
2543
+ exports.splitSplices = splitSplices;
2544
+
2545
+ var syntaxQuoteSplit = function syntaxQuoteSplit(appendName, fnName, form) {
2546
+ var slices = splitSplices(form, fnName);
2547
+ var n = count(slices);
2548
+ return n === 0 ?
2549
+ list(fnName) :
2550
+ n === 1 ?
2551
+ first(slices) :
2552
+ "default" ?
2553
+ applyForm(appendName, slices) :
2554
+ void(0);
2555
+ };
2556
+ exports.syntaxQuoteSplit = syntaxQuoteSplit;
2557
+
2558
+ var compileObject = function compileObject(form, isQuoted) {
2559
+ return isKeyword(form) ?
2560
+ writeKeyword(form) :
2561
+ isSymbol(form) ?
2562
+ writeSymbol(form) :
2563
+ isNumber(form) ?
2564
+ writeNumber(form) :
2565
+ isString(form) ?
2566
+ writeString(form) :
2567
+ isBoolean(form) ?
2568
+ writeBoolean(form) :
2569
+ isNil(form) ?
2570
+ writeNil(form) :
2571
+ isRePattern(form) ?
2572
+ compileRePattern(form) :
2573
+ isVector(form) ?
2574
+ compile(applyForm(symbol(void(0), "vector"), list.apply(list, form), isQuoted)) :
2575
+ isList(form) ?
2576
+ compile(applyForm(symbol(void(0), "list"), form, isQuoted)) :
2577
+ isDictionary(form) ?
2578
+ compileDictionary(isQuoted ?
2579
+ mapDictionary(form, function(x) {
2580
+ return list(symbol(void(0), "quote"), x);
2581
+ }) :
2582
+ form) :
2583
+ void(0);
2584
+ };
2585
+ exports.compileObject = compileObject;
2586
+
2587
+ var compileSyntaxQuotedVector = function compileSyntaxQuotedVector(form) {
2588
+ var concatForm = syntaxQuoteSplit(symbol(void(0), "concat"), symbol(void(0), "vector"), list.apply(list, form));
2589
+ return compile(count(concatForm) > 1 ?
2590
+ list(symbol(void(0), "vec"), concatForm) :
2591
+ concatForm);
2592
+ };
2593
+ exports.compileSyntaxQuotedVector = compileSyntaxQuotedVector;
2594
+
2595
+ var compileSyntaxQuoted = function compileSyntaxQuoted(form) {
2596
+ return isList(form) ?
2597
+ compile(syntaxQuoteSplit(symbol(void(0), "concat"), symbol(void(0), "list"), form)) :
2598
+ isVector(form) ?
2599
+ compileSyntaxQuotedVector(form) :
2600
+ "else" ?
2601
+ compileObject(form) :
2602
+ void(0);
2603
+ };
2604
+ exports.compileSyntaxQuoted = compileSyntaxQuoted;
2605
+
2606
+ var compile = function compile(form) {
2607
+ return isSelfEvaluating(form) ?
2608
+ compileObject(form) :
2609
+ isSymbol(form) ?
2610
+ writeReference(form) :
2611
+ isKeyword(form) ?
2612
+ writeKeywordReference(form) :
2613
+ isVector(form) ?
2614
+ compileObject(form) :
2615
+ isDictionary(form) ?
2616
+ compileObject(form) :
2617
+ isList(form) ?
2618
+ (function() {
2619
+ var head = first(form);
2620
+ return isEmpty(form) ?
2621
+ compileObject(form, true) :
2622
+ isQuote(form) ?
2623
+ compileObject(second(form), true) :
2624
+ isSyntaxQuote(form) ?
2625
+ compileSyntaxQuoted(second(form)) :
2626
+ isSpecial(head) ?
2627
+ executeSpecial(head, form) :
2628
+ isKeyword(head) ?
2629
+ compile(list(symbol(void(0), "get"), second(form), head)) :
2630
+ "else" ?
2631
+ (function() {
2632
+ return !((isSymbol(head)) || (isList(head))) ?
2633
+ (function() { throw compilerError(form, "" + "operator is not a procedure: " + head); })() :
2634
+ compileInvoke(form);
2635
+ })() :
2636
+ void(0);
2637
+ })() :
2638
+ void(0);
2639
+ };
2640
+ exports.compile = compile;
2641
+
2642
+ var compile_ = function compile_(forms) {
2643
+ return reduce(function(result, form) {
2644
+ return "" + result + (isEmpty(result) ?
2645
+ "" :
2646
+ ";\n\n") + (compile(isList(form) ?
2647
+ withMeta(macroexpand(form), conj({
2648
+ "top": true
2649
+ }, meta(form))) :
2650
+ form));
2651
+ }, "", forms);
2652
+ };
2653
+ exports.compile_ = compile_;
2654
+
2655
+ var compileProgram = function compileProgram(forms) {
2656
+ return reduce(function(result, form) {
2657
+ return "" + result + (isEmpty(result) ?
2658
+ "" :
2659
+ ";\n\n") + (compile(isList(form) ?
2660
+ withMeta(macroexpand(form), conj({
2661
+ "top": true
2662
+ }, meta(form))) :
2663
+ form));
2664
+ }, "", forms);
2665
+ };
2666
+ exports.compileProgram = compileProgram;
2667
+
2668
+ var macroexpand1 = function macroexpand1(form) {
2669
+ return isList(form) ?
2670
+ (function() {
2671
+ var op = first(form);
2672
+ var id = isSymbol(op) ?
2673
+ name(op) :
2674
+ void(0);
2675
+ return isSpecial(op) ?
2676
+ form :
2677
+ isMacro(op) ?
2678
+ executeMacro(op, rest(form)) :
2679
+ (isSymbol(op)) && (!(id === ".")) ?
2680
+ first(id) === "." ?
2681
+ count(form) < 2 ?
2682
+ (function() { throw Error("Malformed member expression, expecting (.member target ...)"); })() :
2683
+ cons(symbol(void(0), "."), cons(second(form), cons(symbol(subs(id, 1)), rest(rest(form))))) :
2684
+ last(id) === "." ?
2685
+ cons(symbol(void(0), "new"), cons(symbol(subs(id, 0, dec(count(id)))), rest(form))) :
2686
+ form :
2687
+ "else" ?
2688
+ form :
2689
+ void(0);
2690
+ })() :
2691
+ form;
2692
+ };
2693
+ exports.macroexpand1 = macroexpand1;
2694
+
2695
+ var macroexpand = function macroexpand(form) {
2696
+ return (function loop(original, expanded) {
2697
+ var recur = loop;
2698
+ while (recur === loop) {
2699
+ recur = original === expanded ?
2700
+ original :
2701
+ (original = expanded, expanded = macroexpand1(expanded), loop);
2702
+ };
2703
+ return recur;
2704
+ })(form, macroexpand1(form));
2705
+ };
2706
+ exports.macroexpand = macroexpand;
2707
+
2708
+ var _lineBreakPattern_ = /\n(?=[^\n])/m;
2709
+ exports._lineBreakPattern_ = _lineBreakPattern_;
2710
+
2711
+ var indent = function indent(code, indentation) {
2712
+ return join(indentation, split(code, _lineBreakPattern_));
2713
+ };
2714
+ exports.indent = indent;
2715
+
2716
+ var compileTemplate = function compileTemplate(form) {
2717
+ var indentPattern = /\n *$/;
2718
+ var getIndentation = function(code) {
2719
+ return (reFind(indentPattern, code)) || "\n";
2720
+ };
2721
+ return (function loop(code, parts, values) {
2722
+ var recur = loop;
2723
+ while (recur === loop) {
2724
+ recur = count(parts) > 1 ?
2725
+ (code = "" + code + (first(parts)) + (indent("" + (first(values)), getIndentation(first(parts)))), parts = rest(parts), values = rest(values), loop) :
2726
+ "" + code + (first(parts));
2727
+ };
2728
+ return recur;
2729
+ })("", split(first(form), "~{}"), rest(form));
2730
+ };
2731
+ exports.compileTemplate = compileTemplate;
2732
+
2733
+ var compileDef = function compileDef(form) {
2734
+ var id = first(form);
2735
+ var isExport = ((((meta(form)) || {}) || 0)["top"]) && (!((((meta(id)) || {}) || 0)["private"]));
2736
+ var attribute = symbol(namespace(id), "" + "-" + (name(id)));
2737
+ return isExport ?
2738
+ compileTemplate(list("var ~{};\n~{}", compile(cons(symbol(void(0), "set!"), form)), compile(list(symbol(void(0), "set!"), list(symbol(void(0), "."), symbol(void(0), "exports"), attribute), id)))) :
2739
+ compileTemplate(list("var ~{}", compile(cons(symbol(void(0), "set!"), form))));
2740
+ };
2741
+ exports.compileDef = compileDef;
2742
+
2743
+ var compileIfElse = function compileIfElse(form) {
2744
+ var condition = macroexpand(first(form));
2745
+ var thenExpression = macroexpand(second(form));
2746
+ var elseExpression = macroexpand(third(form));
2747
+ return compileTemplate(list((isList(elseExpression)) && (isEqual(first(elseExpression), symbol(void(0), "if"))) ?
2748
+ "~{} ?\n ~{} :\n~{}" :
2749
+ "~{} ?\n ~{} :\n ~{}", compile(condition), compile(thenExpression), compile(elseExpression)));
2750
+ };
2751
+ exports.compileIfElse = compileIfElse;
2752
+
2753
+ var compileDictionary = function compileDictionary(form) {
2754
+ var body = (function loop(body, names) {
2755
+ var recur = loop;
2756
+ while (recur === loop) {
2757
+ recur = isEmpty(names) ?
2758
+ body :
2759
+ (body = "" + (isNil(body) ?
2760
+ "" :
2761
+ "" + body + ",\n") + (compileTemplate(list("~{}: ~{}", compile(first(names)), compile(macroexpand((form || 0)[first(names)]))))), names = rest(names), loop);
2762
+ };
2763
+ return recur;
2764
+ })(void(0), keys(form));
2765
+ return isNil(body) ?
2766
+ "{}" :
2767
+ compileTemplate(list("{\n ~{}\n}", body));
2768
+ };
2769
+ exports.compileDictionary = compileDictionary;
2770
+
2771
+ var desugarFnName = function desugarFnName(form) {
2772
+ return (isSymbol(first(form))) || (isNil(first(form))) ?
2773
+ form :
2774
+ cons(void(0), form);
2775
+ };
2776
+ exports.desugarFnName = desugarFnName;
2777
+
2778
+ var desugarFnDoc = function desugarFnDoc(form) {
2779
+ return (isString(second(form))) || (isNil(second(form))) ?
2780
+ form :
2781
+ cons(first(form), cons(void(0), rest(form)));
2782
+ };
2783
+ exports.desugarFnDoc = desugarFnDoc;
2784
+
2785
+ var desugarFnAttrs = function desugarFnAttrs(form) {
2786
+ return (isDictionary(third(form))) || (isNil(third(form))) ?
2787
+ form :
2788
+ cons(first(form), cons(second(form), cons(void(0), rest(rest(form)))));
2789
+ };
2790
+ exports.desugarFnAttrs = desugarFnAttrs;
2791
+
2792
+ var compileDesugaredFn = function compileDesugaredFn(name, doc, attrs, params, body) {
2793
+ return compileTemplate(isNil(name) ?
2794
+ list("function(~{}) {\n ~{}\n}", join(", ", map(compile, (params || 0)["names"])), compileFnBody(map(macroexpand, body), params)) :
2795
+ list("function ~{}(~{}) {\n ~{}\n}", compile(name), join(", ", map(compile, (params || 0)["names"])), compileFnBody(map(macroexpand, body), params)));
2796
+ };
2797
+ exports.compileDesugaredFn = compileDesugaredFn;
2798
+
2799
+ var compileStatements = function compileStatements(form, prefix) {
2800
+ return (function loop(result, expression, expressions) {
2801
+ var recur = loop;
2802
+ while (recur === loop) {
2803
+ recur = isEmpty(expressions) ?
2804
+ "" + result + (isNil(prefix) ?
2805
+ "" :
2806
+ prefix) + (compile(macroexpand(expression))) + ";" :
2807
+ (result = "" + result + (compile(macroexpand(expression))) + ";\n", expression = first(expressions), expressions = rest(expressions), loop);
2808
+ };
2809
+ return recur;
2810
+ })("", first(form), rest(form));
2811
+ };
2812
+ exports.compileStatements = compileStatements;
2813
+
2814
+ var compileFnBody = function compileFnBody(form, params) {
2815
+ return (isDictionary(params)) && ((params || 0)["rest"]) ?
2816
+ compileStatements(cons(list(symbol(void(0), "def"), (params || 0)["rest"], list(symbol(void(0), "Array.prototype.slice.call"), symbol(void(0), "arguments"), (params || 0)["arity"])), form), "return ") :
2817
+ (count(form) === 1) && (isList(first(form))) && (isEqual(first(first(form)), symbol(void(0), "do"))) ?
2818
+ compileFnBody(rest(first(form)), params) :
2819
+ compileStatements(form, "return ");
2820
+ };
2821
+ exports.compileFnBody = compileFnBody;
2822
+
2823
+ var desugarParams = function desugarParams(params) {
2824
+ return (function loop(names, params) {
2825
+ var recur = loop;
2826
+ while (recur === loop) {
2827
+ recur = isEmpty(params) ?
2828
+ {
2829
+ "names": names,
2830
+ "arity": count(names),
2831
+ "rest": void(0)
2832
+ } :
2833
+ isEqual(first(params), symbol(void(0), "&")) ?
2834
+ isEqual(count(params), 1) ?
2835
+ {
2836
+ "names": names,
2837
+ "arity": count(names),
2838
+ "rest": void(0)
2839
+ } :
2840
+ isEqual(count(params), 2) ?
2841
+ {
2842
+ "names": names,
2843
+ "arity": count(names),
2844
+ "rest": second(params)
2845
+ } :
2846
+ "else" ?
2847
+ (function() { throw TypeError("Unexpected number of parameters after &"); })() :
2848
+ void(0) :
2849
+ "else" ?
2850
+ (names = conj(names, first(params)), params = rest(params), loop) :
2851
+ void(0);
2852
+ };
2853
+ return recur;
2854
+ })([], params);
2855
+ };
2856
+ exports.desugarParams = desugarParams;
2857
+
2858
+ var analyzeOverloadedFn = function analyzeOverloadedFn(name, doc, attrs, overloads) {
2859
+ return map(function(overload) {
2860
+ var params = desugarParams(first(overload));
2861
+ return {
2862
+ "rest": (params || 0)["rest"],
2863
+ "names": (params || 0)["names"],
2864
+ "arity": (params || 0)["arity"],
2865
+ "body": rest(overload)
2866
+ };
2867
+ }, overloads);
2868
+ };
2869
+ exports.analyzeOverloadedFn = analyzeOverloadedFn;
2870
+
2871
+ var compileOverloadedFn = function compileOverloadedFn(name, doc, attrs, overloads) {
2872
+ var methods = analyzeOverloadedFn(name, doc, attrs, overloads);
2873
+ var fixedMethods = filter(function(method) {
2874
+ return !((method || 0)["rest"]);
2875
+ }, methods);
2876
+ var variadic = first(filter(function(method) {
2877
+ return (method || 0)["rest"];
2878
+ }, methods));
2879
+ var names = reduce(function(names, params) {
2880
+ return count(names) > (params || 0)["arity"] ?
2881
+ names :
2882
+ (params || 0)["names"];
2883
+ }, [], methods);
2884
+ return list(symbol(void(0), "fn"), name, doc, attrs, names, list(symbol(void(0), "raw*"), compileSwitch(symbol(void(0), "arguments.length"), map(function(method) {
2885
+ return cons((method || 0)["arity"], list(symbol(void(0), "raw*"), compileFnBody(concat(compileRebind(names, (method || 0)["names"]), (method || 0)["body"]))));
2886
+ }, fixedMethods), isNil(variadic) ?
2887
+ list(symbol(void(0), "throw"), list(symbol(void(0), "Error"), "Invalid arity")) :
2888
+ list(symbol(void(0), "raw*"), compileFnBody(concat(compileRebind(cons(list(symbol(void(0), "Array.prototype.slice.call"), symbol(void(0), "arguments"), (variadic || 0)["arity"]), names), cons((variadic || 0)["rest"], (variadic || 0)["names"])), (variadic || 0)["body"]))))), void(0));
2889
+ };
2890
+ exports.compileOverloadedFn = compileOverloadedFn;
2891
+
2892
+ var compileRebind = function compileRebind(bindings, names) {
2893
+ return (function loop(form, bindings, names) {
2894
+ var recur = loop;
2895
+ while (recur === loop) {
2896
+ recur = isEmpty(names) ?
2897
+ reverse(form) :
2898
+ (form = isEqual(first(names), first(bindings)) ?
2899
+ form :
2900
+ cons(list(symbol(void(0), "def"), first(names), first(bindings)), form), bindings = rest(bindings), names = rest(names), loop);
2901
+ };
2902
+ return recur;
2903
+ })(list(), bindings, names);
2904
+ };
2905
+ exports.compileRebind = compileRebind;
2906
+
2907
+ var compileSwitchCases = function compileSwitchCases(cases) {
2908
+ return reduce(function(form, caseExpression) {
2909
+ return "" + form + (compileTemplate(list("case ~{}:\n ~{}\n", compile(macroexpand(first(caseExpression))), compile(macroexpand(rest(caseExpression))))));
2910
+ }, "", cases);
2911
+ };
2912
+ exports.compileSwitchCases = compileSwitchCases;
2913
+
2914
+ var compileSwitch = function compileSwitch(value, cases, defaultCase) {
2915
+ return compileTemplate(list("switch (~{}) {\n ~{}\n default:\n ~{}\n}", compile(macroexpand(value)), compileSwitchCases(cases), compile(macroexpand(defaultCase))));
2916
+ };
2917
+ exports.compileSwitch = compileSwitch;
2918
+
2919
+ var compileFn = function compileFn(form) {
2920
+ var signature = desugarFnAttrs(desugarFnDoc(desugarFnName(form)));
2921
+ var name = first(signature);
2922
+ var doc = second(signature);
2923
+ var attrs = third(signature);
2924
+ return isVector(third(rest(signature))) ?
2925
+ compileDesugaredFn(name, doc, attrs, desugarParams(third(rest(signature))), rest(rest(rest(rest(signature))))) :
2926
+ compile(compileOverloadedFn(name, doc, attrs, rest(rest(rest(signature)))));
2927
+ };
2928
+ exports.compileFn = compileFn;
2929
+
2930
+ var compileInvoke = function compileInvoke(form) {
2931
+ return compileTemplate(list(isList(first(form)) ?
2932
+ "(~{})(~{})" :
2933
+ "~{}(~{})", compile(first(form)), compileGroup(rest(form))));
2934
+ };
2935
+ exports.compileInvoke = compileInvoke;
2936
+
2937
+ var compileGroup = function compileGroup(form, wrap) {
2938
+ return wrap ?
2939
+ "" + "(" + (compileGroup(form)) + ")" :
2940
+ join(", ", vec(map(compile, map(macroexpand, form))));
2941
+ };
2942
+ exports.compileGroup = compileGroup;
2943
+
2944
+ var compileDo = function compileDo(form) {
2945
+ return compile(list(cons(symbol(void(0), "fn"), cons([], form))));
2946
+ };
2947
+ exports.compileDo = compileDo;
2948
+
2949
+ var defineBindings = function defineBindings(form) {
2950
+ return (function loop(defs, bindings) {
2951
+ var recur = loop;
2952
+ while (recur === loop) {
2953
+ recur = count(bindings) === 0 ?
2954
+ reverse(defs) :
2955
+ (defs = cons(list(symbol(void(0), "def"), (bindings || 0)[0], (bindings || 0)[1]), defs), bindings = rest(rest(bindings)), loop);
2956
+ };
2957
+ return recur;
2958
+ })(list(), form);
2959
+ };
2960
+ exports.defineBindings = defineBindings;
2961
+
2962
+ var compileThrow = function compileThrow(form) {
2963
+ return compileTemplate(list("(function() { throw ~{}; })()", compile(macroexpand(first(form)))));
2964
+ };
2965
+ exports.compileThrow = compileThrow;
2966
+
2967
+ var compileSet = function compileSet(form) {
2968
+ return compileTemplate(list("~{} = ~{}", compile(macroexpand(first(form))), compile(macroexpand(second(form)))));
2969
+ };
2970
+ exports.compileSet = compileSet;
2971
+
2972
+ var compileVector = function compileVector(form) {
2973
+ return compileTemplate(list("[~{}]", compileGroup(form)));
2974
+ };
2975
+ exports.compileVector = compileVector;
2976
+
2977
+ var compileTry = function compileTry(form) {
2978
+ return (function loop(tryExprs, catchExprs, finallyExprs, exprs) {
2979
+ var recur = loop;
2980
+ while (recur === loop) {
2981
+ recur = isEmpty(exprs) ?
2982
+ isEmpty(catchExprs) ?
2983
+ compileTemplate(list("(function() {\ntry {\n ~{}\n} finally {\n ~{}\n}})()", compileFnBody(tryExprs), compileFnBody(finallyExprs))) :
2984
+ isEmpty(finallyExprs) ?
2985
+ compileTemplate(list("(function() {\ntry {\n ~{}\n} catch (~{}) {\n ~{}\n}})()", compileFnBody(tryExprs), compile(first(catchExprs)), compileFnBody(rest(catchExprs)))) :
2986
+ compileTemplate(list("(function() {\ntry {\n ~{}\n} catch (~{}) {\n ~{}\n} finally {\n ~{}\n}})()", compileFnBody(tryExprs), compile(first(catchExprs)), compileFnBody(rest(catchExprs)), compileFnBody(finallyExprs))) :
2987
+ isEqual(first(first(exprs)), symbol(void(0), "catch")) ?
2988
+ (tryExprs = tryExprs, catchExprs = rest(first(exprs)), finallyExprs = finallyExprs, exprs = rest(exprs), loop) :
2989
+ isEqual(first(first(exprs)), symbol(void(0), "finally")) ?
2990
+ (tryExprs = tryExprs, catchExprs = catchExprs, finallyExprs = rest(first(exprs)), exprs = rest(exprs), loop) :
2991
+ (tryExprs = cons(first(exprs), tryExprs), catchExprs = catchExprs, finallyExprs = finallyExprs, exprs = rest(exprs), loop);
2992
+ };
2993
+ return recur;
2994
+ })(list(), list(), list(), reverse(form));
2995
+ };
2996
+ exports.compileTry = compileTry;
2997
+
2998
+ var compileProperty = function compileProperty(form) {
2999
+ return (name(second(form)))[0] === "-" ?
3000
+ compileTemplate(list(isList(first(form)) ?
3001
+ "(~{}).~{}" :
3002
+ "~{}.~{}", compile(macroexpand(first(form))), compile(macroexpand(symbol(subs(name(second(form)), 1)))))) :
3003
+ compileTemplate(list("~{}.~{}(~{})", compile(macroexpand(first(form))), compile(macroexpand(second(form))), compileGroup(rest(rest(form)))));
3004
+ };
3005
+ exports.compileProperty = compileProperty;
3006
+
3007
+ var compileApply = function compileApply(form) {
3008
+ return compile(list(symbol(void(0), "."), first(form), symbol(void(0), "apply"), first(form), second(form)));
3009
+ };
3010
+ exports.compileApply = compileApply;
3011
+
3012
+ var compileNew = function compileNew(form) {
3013
+ return compileTemplate(list("new ~{}", compile(form)));
3014
+ };
3015
+ exports.compileNew = compileNew;
3016
+
3017
+ var compileAget = function compileAget(form) {
3018
+ var target = macroexpand(first(form));
3019
+ var attribute = macroexpand(second(form));
3020
+ var notFound = third(form);
3021
+ var template = isList(target) ?
3022
+ "(~{})[~{}]" :
3023
+ "~{}[~{}]";
3024
+ return notFound ?
3025
+ compile(list(symbol(void(0), "or"), list(symbol(void(0), "get"), first(form), second(form)), macroexpand(notFound))) :
3026
+ compileTemplate(list(template, compile(target), compile(attribute)));
3027
+ };
3028
+ exports.compileAget = compileAget;
3029
+
3030
+ var compileGet = function compileGet(form) {
3031
+ return compileAget(cons(list(symbol(void(0), "or"), first(form), 0), rest(form)));
3032
+ };
3033
+ exports.compileGet = compileGet;
3034
+
3035
+ var compileInstance = function compileInstance(form) {
3036
+ return compileTemplate(list("~{} instanceof ~{}", compile(macroexpand(second(form))), compile(macroexpand(first(form)))));
3037
+ };
3038
+ exports.compileInstance = compileInstance;
3039
+
3040
+ var compileNot = function compileNot(form) {
3041
+ return compileTemplate(list("!(~{})", compile(macroexpand(first(form)))));
3042
+ };
3043
+ exports.compileNot = compileNot;
3044
+
3045
+ var compileLoop = function compileLoop(form) {
3046
+ var bindings = (function loop(names, values, tokens) {
3047
+ var recur = loop;
3048
+ while (recur === loop) {
3049
+ recur = isEmpty(tokens) ?
3050
+ {
3051
+ "names": names,
3052
+ "values": values
3053
+ } :
3054
+ (names = conj(names, first(tokens)), values = conj(values, second(tokens)), tokens = rest(rest(tokens)), loop);
3055
+ };
3056
+ return recur;
3057
+ })([], [], first(form));
3058
+ var names = (bindings || 0)["names"];
3059
+ var values = (bindings || 0)["values"];
3060
+ var body = rest(form);
3061
+ return compile(cons(cons(symbol(void(0), "fn"), cons(symbol(void(0), "loop"), cons(names, compileRecur(names, body)))), list.apply(list, values)));
3062
+ };
3063
+ exports.compileLoop = compileLoop;
3064
+
3065
+ var rebindBindings = function rebindBindings(names, values) {
3066
+ return (function loop(result, names, values) {
3067
+ var recur = loop;
3068
+ while (recur === loop) {
3069
+ recur = isEmpty(names) ?
3070
+ reverse(result) :
3071
+ (result = cons(list(symbol(void(0), "set!"), first(names), first(values)), result), names = rest(names), values = rest(values), loop);
3072
+ };
3073
+ return recur;
3074
+ })(list(), names, values);
3075
+ };
3076
+ exports.rebindBindings = rebindBindings;
3077
+
3078
+ var expandRecur = function expandRecur(names, body) {
3079
+ return map(function(form) {
3080
+ return isList(form) ?
3081
+ isEqual(first(form), symbol(void(0), "recur")) ?
3082
+ list(symbol(void(0), "raw*"), compileGroup(concat(rebindBindings(names, rest(form)), list(symbol(void(0), "loop"))), true)) :
3083
+ expandRecur(names, form) :
3084
+ form;
3085
+ }, body);
3086
+ };
3087
+ exports.expandRecur = expandRecur;
3088
+
3089
+ var compileRecur = function compileRecur(names, body) {
3090
+ return list(list(symbol(void(0), "raw*"), compileTemplate(list("var recur = loop;\nwhile (recur === loop) {\n recur = ~{}\n}", compileStatements(expandRecur(names, body))))), symbol(void(0), "recur"));
3091
+ };
3092
+ exports.compileRecur = compileRecur;
3093
+
3094
+ var compileRaw = function compileRaw(form) {
3095
+ return first(form);
3096
+ };
3097
+ exports.compileRaw = compileRaw;
3098
+
3099
+ installSpecial(symbol(void(0), "set!"), compileSet);
3100
+
3101
+ installSpecial(symbol(void(0), "get"), compileGet);
3102
+
3103
+ installSpecial(symbol(void(0), "aget"), compileAget);
3104
+
3105
+ installSpecial(symbol(void(0), "def"), compileDef);
3106
+
3107
+ installSpecial(symbol(void(0), "if"), compileIfElse);
3108
+
3109
+ installSpecial(symbol(void(0), "do"), compileDo);
3110
+
3111
+ installSpecial(symbol(void(0), "do*"), compileStatements);
3112
+
3113
+ installSpecial(symbol(void(0), "fn"), compileFn);
3114
+
3115
+ installSpecial(symbol(void(0), "throw"), compileThrow);
3116
+
3117
+ installSpecial(symbol(void(0), "vector"), compileVector);
3118
+
3119
+ installSpecial(symbol(void(0), "try"), compileTry);
3120
+
3121
+ installSpecial(symbol(void(0), "."), compileProperty);
3122
+
3123
+ installSpecial(symbol(void(0), "apply"), compileApply);
3124
+
3125
+ installSpecial(symbol(void(0), "new"), compileNew);
3126
+
3127
+ installSpecial(symbol(void(0), "instance?"), compileInstance);
3128
+
3129
+ installSpecial(symbol(void(0), "not"), compileNot);
3130
+
3131
+ installSpecial(symbol(void(0), "loop"), compileLoop);
3132
+
3133
+ installSpecial(symbol(void(0), "raw*"), compileRaw);
3134
+
3135
+ installSpecial(symbol(void(0), "comment"), writeComment);
3136
+
3137
+ var compileRePattern = function compileRePattern(form) {
3138
+ return "" + form;
3139
+ };
3140
+ exports.compileRePattern = compileRePattern;
3141
+
3142
+ var installNative = function installNative(alias, operator, validator, fallback) {
3143
+ return installSpecial(alias, function(form) {
3144
+ return isEmpty(form) ?
3145
+ fallback :
3146
+ reduce(function(left, right) {
3147
+ return compileTemplate(list("~{} ~{} ~{}", left, name(operator), right));
3148
+ }, map(function(operand) {
3149
+ return compileTemplate(list(isList(operand) ?
3150
+ "(~{})" :
3151
+ "~{}", compile(macroexpand(operand))));
3152
+ }, form));
3153
+ }, validator);
3154
+ };
3155
+ exports.installNative = installNative;
3156
+
3157
+ var installOperator = function installOperator(alias, operator) {
3158
+ return installSpecial(alias, function(form) {
3159
+ return (function loop(result, left, right, operands) {
3160
+ var recur = loop;
3161
+ while (recur === loop) {
3162
+ recur = isEmpty(operands) ?
3163
+ "" + result + (compileTemplate(list("~{} ~{} ~{}", compile(macroexpand(left)), name(operator), compile(macroexpand(right))))) :
3164
+ (result = "" + result + (compileTemplate(list("~{} ~{} ~{} && ", compile(macroexpand(left)), name(operator), compile(macroexpand(right))))), left = right, right = first(operands), operands = rest(operands), loop);
3165
+ };
3166
+ return recur;
3167
+ })("", first(form), second(form), rest(rest(form)));
3168
+ }, verifyTwo);
3169
+ };
3170
+ exports.installOperator = installOperator;
3171
+
3172
+ var compilerError = function compilerError(form, message) {
3173
+ var error = Error("" + message);
3174
+ error.line = 1;
3175
+ return (function() { throw error; })();
3176
+ };
3177
+ exports.compilerError = compilerError;
3178
+
3179
+ var verifyTwo = function verifyTwo(form) {
3180
+ return (isEmpty(rest(form))) || (isEmpty(rest(rest(form)))) ?
3181
+ (function() { throw compilerError(form, "" + (first(form)) + " form requires at least two operands"); })() :
3182
+ void(0);
3183
+ };
3184
+ exports.verifyTwo = verifyTwo;
3185
+
3186
+ installNative(symbol(void(0), "+"), symbol(void(0), "+"), void(0), 0);
3187
+
3188
+ installNative(symbol(void(0), "-"), symbol(void(0), "-"), void(0), "NaN");
3189
+
3190
+ installNative(symbol(void(0), "*"), symbol(void(0), "*"), void(0), 1);
3191
+
3192
+ installNative(symbol(void(0), "/"), symbol(void(0), "/"), verifyTwo);
3193
+
3194
+ installNative(symbol(void(0), "mod"), symbol("%"), verifyTwo);
3195
+
3196
+ installNative(symbol(void(0), "and"), symbol(void(0), "&&"));
3197
+
3198
+ installNative(symbol(void(0), "or"), symbol(void(0), "||"));
3199
+
3200
+ installOperator(symbol(void(0), "not="), symbol(void(0), "!="));
3201
+
3202
+ installOperator(symbol(void(0), "=="), symbol(void(0), "==="));
3203
+
3204
+ installOperator(symbol(void(0), "identical?"), symbol(void(0), "==="));
3205
+
3206
+ installOperator(symbol(void(0), ">"), symbol(void(0), ">"));
3207
+
3208
+ installOperator(symbol(void(0), ">="), symbol(void(0), ">="));
3209
+
3210
+ installOperator(symbol(void(0), "<"), symbol(void(0), "<"));
3211
+
3212
+ installOperator(symbol(void(0), "<="), symbol(void(0), "<="));
3213
+
3214
+ installNative(symbol(void(0), "bit-and"), symbol(void(0), "&"), verifyTwo);
3215
+
3216
+ installNative(symbol(void(0), "bit-or"), symbol(void(0), "|"), verifyTwo);
3217
+
3218
+ installNative(symbol(void(0), "bit-xor"), symbol("^"));
3219
+
3220
+ installNative(symbol(void(0), "bit-not"), symbol("~"), verifyTwo);
3221
+
3222
+ installNative(symbol(void(0), "bit-shift-left"), symbol(void(0), "<<"), verifyTwo);
3223
+
3224
+ installNative(symbol(void(0), "bit-shift-right"), symbol(void(0), ">>"), verifyTwo);
3225
+
3226
+ installNative(symbol(void(0), "bit-shift-right-zero-fil"), symbol(void(0), ">>>"), verifyTwo);
3227
+
3228
+ installMacro(symbol(void(0), "str"), function str() {
3229
+ var forms = Array.prototype.slice.call(arguments, 0);
3230
+ return concat(list(symbol(void(0), "+"), ""), forms);
3231
+ });
3232
+
3233
+ installMacro(symbol(void(0), "let"), function letMacro(bindings) {
3234
+ var body = Array.prototype.slice.call(arguments, 1);
3235
+ return cons(symbol(void(0), "do"), concat(defineBindings(bindings), body));
3236
+ });
3237
+
3238
+ installMacro(symbol(void(0), "cond"), function cond() {
3239
+ var clauses = Array.prototype.slice.call(arguments, 0);
3240
+ return !(isEmpty(clauses)) ?
3241
+ list(symbol(void(0), "if"), first(clauses), isEmpty(rest(clauses)) ?
3242
+ (function() { throw Error("cond requires an even number of forms"); })() :
3243
+ second(clauses), cons(symbol(void(0), "cond"), rest(rest(clauses)))) :
3244
+ void(0);
3245
+ });
3246
+
3247
+ installMacro(symbol(void(0), "defn"), function defn(name) {
3248
+ var body = Array.prototype.slice.call(arguments, 1);
3249
+ return list(symbol(void(0), "def"), name, concat(list(symbol(void(0), "fn"), name), body));
3250
+ });
3251
+
3252
+ installMacro(symbol(void(0), "defn-"), function defn(name) {
3253
+ var body = Array.prototype.slice.call(arguments, 1);
3254
+ return concat(list(symbol(void(0), "defn"), withMeta(name, conj({
3255
+ "private": true
3256
+ }, meta(name)))), body);
3257
+ });
3258
+
3259
+ installMacro(symbol(void(0), "assert"), function assert(x, message) {
3260
+ var title = message || "";
3261
+ var assertion = prStr(x);
3262
+ var uri = (x || 0)["uri"];
3263
+ var form = isList(x) ?
3264
+ second(x) :
3265
+ x;
3266
+ return list(symbol(void(0), "do"), list(symbol(void(0), "if"), list(symbol(void(0), "and"), list(symbol(void(0), "not"), list(symbol(void(0), "identical?"), list(symbol(void(0), "typeof"), symbol(void(0), "**verbose**")), "undefined")), symbol(void(0), "**verbose**")), list(symbol(void(0), ".log"), symbol(void(0), "console"), "Assert:", assertion)), list(symbol(void(0), "if"), list(symbol(void(0), "not"), x), list(symbol(void(0), "throw"), list(symbol(void(0), "Error."), list(symbol(void(0), "str"), "Assert failed: ", title, "\n\nAssertion:\n\n", assertion, "\n\nActual:\n\n", form, "\n--------------\n"), uri))));
3267
+ });
3268
+
3269
+ installMacro(symbol(void(0), "import"), function(imports, path) {
3270
+ return isNil(path) ?
3271
+ list(symbol(void(0), "require"), imports) :
3272
+ isSymbol(imports) ?
3273
+ list(symbol(void(0), "def"), withMeta(imports, {
3274
+ "private": true
3275
+ }), list(symbol(void(0), "require"), path)) :
3276
+ (function loop(form, names) {
3277
+ var recur = loop;
3278
+ while (recur === loop) {
3279
+ recur = isEmpty(names) ?
3280
+ concat(list(symbol(void(0), "do*")), form) :
3281
+ (function() {
3282
+ var alias = first(names);
3283
+ var id = symbol("" + ".-" + (name(alias)));
3284
+ return (form = cons(list(symbol(void(0), "def"), withMeta(alias, {
3285
+ "private": true
3286
+ }), list(id, list(symbol(void(0), "require"), path))), form), names = rest(names), loop);
3287
+ })();
3288
+ };
3289
+ return recur;
3290
+ })(list(), imports);
3291
+ });
3292
+
3293
+ var expandNs = function expandNs(id) {
3294
+ var params = Array.prototype.slice.call(arguments, 1);
3295
+ return (function() {
3296
+ var ns = "" + id;
3297
+ var requirer = split(ns, ".");
3298
+ var doc = isString(first(params)) ?
3299
+ first(params) :
3300
+ void(0);
3301
+ var args = doc ?
3302
+ rest(params) :
3303
+ params;
3304
+ var parseReferences = function(forms) {
3305
+ return reduce(function(references, form) {
3306
+ (references || 0)[name(first(form))] = vec(rest(form));
3307
+ return references;
3308
+ }, {}, forms);
3309
+ };
3310
+ var references = parseReferences(args);
3311
+ var idToPath = function idToPath(id) {
3312
+ var requirement = split("" + id, ".");
3313
+ var isRelative = first(requirer) === first(requirement);
3314
+ return isRelative ?
3315
+ (function loop(from, to) {
3316
+ var recur = loop;
3317
+ while (recur === loop) {
3318
+ recur = first(from) === first(to) ?
3319
+ (from = rest(from), to = rest(to), loop) :
3320
+ join("/", concat(["."], repeat(dec(count(from)), ".."), to));
3321
+ };
3322
+ return recur;
3323
+ })(requirer, requirement) :
3324
+ join("/", requirement);
3325
+ };
3326
+ var makeRequire = function(from, as, name) {
3327
+ var path = idToPath(from);
3328
+ var requirement = name ?
3329
+ list(symbol(void(0), "."), list(symbol(void(0), "require"), path), symbol(void(0), "" + "-" + name)) :
3330
+ list(symbol(void(0), "require"), path);
3331
+ return as ?
3332
+ list(symbol(void(0), "def"), as, requirement) :
3333
+ requirement;
3334
+ };
3335
+ var expandRequirement = function(form) {
3336
+ var from = first(form);
3337
+ var as = ("꞉as" === second(form)) && (third(form));
3338
+ return makeRequire(from, as);
3339
+ };
3340
+ var expandUse = function(form) {
3341
+ var from = first(form);
3342
+ var directives = dictionary.apply(dictionary, vec(rest(form)));
3343
+ var names = (directives || 0)["꞉only"];
3344
+ var renames = (directives || 0)["꞉rename"];
3345
+ var namedImports = names && (map(function(name) {
3346
+ return makeRequire(from, name, name);
3347
+ }, names));
3348
+ var renamedImports = renames && (map(function(pair) {
3349
+ return makeRequire(from, second(pair), first(pair));
3350
+ }, renames));
3351
+ (function() {
3352
+ (!(typeof(__verbose__) === "undefined")) && __verbose__ ?
3353
+ console.log("Assert:", "(or names renames)") :
3354
+ void(0);
3355
+ return !(names || renames) ?
3356
+ (function() { throw new Error("" + "Assert failed: " + ("" + "Only [my.lib :only [foo bar]] form & " + "[clojure.string :rename {replace str-replace} are supported") + "\n\nAssertion:\n\n" + "(or names renames)" + "\n\nActual:\n\n" + names + "\n--------------\n", void(0)); })() :
3357
+ void(0);
3358
+ })();
3359
+ return concat([], namedImports, renamedImports);
3360
+ };
3361
+ var requireForms = (references || 0)["require"];
3362
+ var useForms = (references || 0)["use"];
3363
+ var requirements = requireForms ?
3364
+ map(expandRequirement, requireForms) :
3365
+ void(0);
3366
+ var uses = useForms ?
3367
+ concat.apply(concat, map(expandUse, useForms)) :
3368
+ void(0);
3369
+ return concat(list(symbol(void(0), "do*"), list(symbol(void(0), "def"), symbol(void(0), "*ns*"), ns), list(symbol(void(0), "set!"), list(symbol(void(0), ".-namespace"), symbol(void(0), "module")), symbol(void(0), "*ns*"))), doc ?
3370
+ [list(symbol(void(0), "set!"), list(symbol(void(0), ".-description"), symbol(void(0), "module")), doc)] :
3371
+ void(0), requirements, uses);
3372
+ })();
3373
+ };
3374
+ exports.expandNs = expandNs;
3375
+
3376
+ installMacro(symbol(void(0), "ns"), expandNs);
3377
+
3378
+ installMacro(symbol(void(0), "print"), function() {
3379
+ var more = Array.prototype.slice.call(arguments, 0);
3380
+ "Prints the object(s) to the output for human consumption.";
3381
+ return concat(list(symbol(void(0), ".log"), symbol(void(0), "console")), more);
3382
+ })
3383
+
3384
+ },{"./reader":"CX0B04","./ast":"dcWfTp","./sequence":"zNvMnP","./runtime":"+Sggh0","./string":"BIHQiq","./backend/javascript/writer":2}],"wisp/engine/browser":[function(require,module,exports){
3385
+ module.exports=require('8GaiHy');
3386
+ },{}],"8GaiHy":[function(require,module,exports){
3387
+ var str = (require("../runtime")).str;;
3388
+
3389
+ var rest = (require("../sequence")).rest;;
3390
+
3391
+ var readFromString = (require("../reader")).readFromString;;
3392
+
3393
+ var compileProgram = (require("../compiler")).compileProgram;;
3394
+
3395
+ var transpile = function transpile(source, uri) {
3396
+ return "" + (compileProgram(rest(readFromString("" + "(do " + source + ")", uri)))) + "\n";
3397
+ };
3398
+ exports.transpile = transpile;
3399
+
3400
+ var evaluate = function evaluate(code, url) {
3401
+ return eval(transpile(code, url));
3402
+ };
3403
+ exports.evaluate = evaluate;
3404
+
3405
+ var run = function run(code, url) {
3406
+ return (Function(transpile(code, url)))();
3407
+ };
3408
+ exports.run = run;
3409
+
3410
+ var load = function load(url, callback) {
3411
+ var request = window.XMLHttpRequest ?
3412
+ new XMLHttpRequest() :
3413
+ new ActiveXObject("Microsoft.XMLHTTP");
3414
+ request.open("GET", url, true);
3415
+ request.overrideMimeType ?
3416
+ request.overrideMimeType("application/wisp") :
3417
+ void(0);
3418
+ request.onreadystatechange = function() {
3419
+ return request.readyState === 4 ?
3420
+ (request.status === 0) || (request.status === 200) ?
3421
+ callback(run(request.responseText, url)) :
3422
+ callback("Could not load") :
3423
+ void(0);
3424
+ };
3425
+ return request.send(null);
3426
+ };
3427
+ exports.load = load;
3428
+
3429
+ var runScripts = function runScripts() {
3430
+ var scripts = Array.prototype.filter.call(document.getElementsByTagName("script"), function(script) {
3431
+ return script.type === "application/wisp";
3432
+ });
3433
+ var next = function next() {
3434
+ return scripts.length ?
3435
+ (function() {
3436
+ var script = scripts.shift();
3437
+ return script.src ?
3438
+ load(script.src, next) :
3439
+ next(run(script.innerHTML));
3440
+ })() :
3441
+ void(0);
3442
+ };
3443
+ return next();
3444
+ };
3445
+ exports.runScripts = runScripts;
3446
+
3447
+ (document.readyState === "complete") || (document.readyState === "interactive") ?
3448
+ runScripts() :
3449
+ window.addEventListener ?
3450
+ window.addEventListener("DOMContentLoaded", runScripts, false) :
3451
+ window.attachEvent("onload", runScripts)
3452
+
3453
+ },{"../runtime":"+Sggh0","../sequence":"zNvMnP","../reader":"CX0B04","../compiler":"/EiAl9"}],2:[function(require,module,exports){
3454
+ var isKeyword = (require("../../ast")).isKeyword;
3455
+ var isSymbol = (require("../../ast")).isSymbol;
3456
+ var symbol = (require("../../ast")).symbol;
3457
+ var namespace = (require("../../ast")).namespace;
3458
+ var name = (require("../../ast")).name;;
3459
+
3460
+ var isEmpty = (require("../../sequence")).isEmpty;
3461
+ var reduce = (require("../../sequence")).reduce;
3462
+ var last = (require("../../sequence")).last;
3463
+ var count = (require("../../sequence")).count;
3464
+ var map = (require("../../sequence")).map;
3465
+ var vec = (require("../../sequence")).vec;
3466
+ var isList = (require("../../sequence")).isList;
3467
+ var rest = (require("../../sequence")).rest;
3468
+ var first = (require("../../sequence")).first;
3469
+ var list = (require("../../sequence")).list;;
3470
+
3471
+ var subs = (require("../../runtime")).subs;
3472
+ var dec = (require("../../runtime")).dec;
3473
+ var reFind = (require("../../runtime")).reFind;
3474
+ var isRePattern = (require("../../runtime")).isRePattern;
3475
+ var isBoolean = (require("../../runtime")).isBoolean;
3476
+ var isDictionary = (require("../../runtime")).isDictionary;
3477
+ var isVector = (require("../../runtime")).isVector;
3478
+ var isNumber = (require("../../runtime")).isNumber;
3479
+ var isString = (require("../../runtime")).isString;
3480
+ var isNil = (require("../../runtime")).isNil;
3481
+ var isTrue = (require("../../runtime")).isTrue;;
3482
+
3483
+ var upperCase = (require("../../string")).upperCase;
3484
+ var split = (require("../../string")).split;
3485
+ var join = (require("../../string")).join;
3486
+ var replace = (require("../../string")).replace;;
3487
+
3488
+ var writeReference = function writeReference(form) {
3489
+ "Translates references from clojure convention to JS:\n\n **macros** __macros__\n list->vector listToVector\n set! set\n foo_bar foo_bar\n number? isNumber\n create-server createServer";
3490
+ return (function() {
3491
+ var id = name(form);
3492
+ id = id === "*" ?
3493
+ "multiply" :
3494
+ id === "/" ?
3495
+ "divide" :
3496
+ id === "+" ?
3497
+ "sum" :
3498
+ id === "-" ?
3499
+ "subtract" :
3500
+ id === "=" ?
3501
+ "equal?" :
3502
+ id === "==" ?
3503
+ "strict-equal?" :
3504
+ id === "<=" ?
3505
+ "not-greater-than" :
3506
+ id === ">=" ?
3507
+ "not-less-than" :
3508
+ id === ">" ?
3509
+ "greater-than" :
3510
+ id === "<" ?
3511
+ "less-than" :
3512
+ "else" ?
3513
+ id :
3514
+ void(0);
3515
+ id = join("_", split(id, "*"));
3516
+ id = join("-to-", split(id, "->"));
3517
+ id = join(split(id, "!"));
3518
+ id = join("$", split(id, "%"));
3519
+ id = join("-plus-", split(id, "+"));
3520
+ id = join("-and-", split(id, "&"));
3521
+ id = last(id) === "?" ?
3522
+ "" + "is-" + (subs(id, 0, dec(count(id)))) :
3523
+ id;
3524
+ id = reduce(function(result, key) {
3525
+ return "" + result + ((!(isEmpty(result))) && (!(isEmpty(key))) ?
3526
+ "" + (upperCase((key || 0)[0])) + (subs(key, 1)) :
3527
+ key);
3528
+ }, "", split(id, "-"));
3529
+ return id;
3530
+ })();
3531
+ };
3532
+ exports.writeReference = writeReference;
3533
+
3534
+ var writeKeywordReference = function writeKeywordReference(form) {
3535
+ return "" + "\"" + (name(form)) + "\"";
3536
+ };
3537
+ exports.writeKeywordReference = writeKeywordReference;
3538
+
3539
+ var writeKeyword = function writeKeyword(form) {
3540
+ return "" + "\"" + "꞉" + (name(form)) + "\"";
3541
+ };
3542
+ exports.writeKeyword = writeKeyword;
3543
+
3544
+ var writeSymbol = function writeSymbol(form) {
3545
+ return write(list(symbol(void(0), "symbol"), namespace(form), name(form)));
3546
+ };
3547
+ exports.writeSymbol = writeSymbol;
3548
+
3549
+ var writeNil = function writeNil(form) {
3550
+ return "void(0)";
3551
+ };
3552
+ exports.writeNil = writeNil;
3553
+
3554
+ var writeNumber = function writeNumber(form) {
3555
+ return form;
3556
+ };
3557
+ exports.writeNumber = writeNumber;
3558
+
3559
+ var writeBoolean = function writeBoolean(form) {
3560
+ return isTrue(form) ?
3561
+ "true" :
3562
+ "false";
3563
+ };
3564
+ exports.writeBoolean = writeBoolean;
3565
+
3566
+ var writeString = function writeString(form) {
3567
+ form = replace(form, RegExp("\\\\", "g"), "\\\\");
3568
+ form = replace(form, RegExp("\n", "g"), "\\n");
3569
+ form = replace(form, RegExp("\r", "g"), "\\r");
3570
+ form = replace(form, RegExp("\t", "g"), "\\t");
3571
+ form = replace(form, RegExp("\"", "g"), "\\\"");
3572
+ return "" + "\"" + form + "\"";
3573
+ };
3574
+ exports.writeString = writeString;
3575
+
3576
+ var writeTemplate = function writeTemplate() {
3577
+ var form = Array.prototype.slice.call(arguments, 0);
3578
+ return (function() {
3579
+ var indentPattern = /\n *$/;
3580
+ var lineBreakPatter = RegExp("\n", "g");
3581
+ var getIndentation = function(code) {
3582
+ return (reFind(indentPattern, code)) || "\n";
3583
+ };
3584
+ return (function loop(code, parts, values) {
3585
+ var recur = loop;
3586
+ while (recur === loop) {
3587
+ recur = count(parts) > 1 ?
3588
+ (code = "" + code + (first(parts)) + (replace("" + "" + (first(values)), lineBreakPatter, getIndentation(first(parts)))), parts = rest(parts), values = rest(values), loop) :
3589
+ "" + code + (first(parts));
3590
+ };
3591
+ return recur;
3592
+ })("", split(first(form), "~{}"), rest(form));
3593
+ })();
3594
+ };
3595
+ exports.writeTemplate = writeTemplate;
3596
+
3597
+ var writeGroup = function writeGroup() {
3598
+ var forms = Array.prototype.slice.call(arguments, 0);
3599
+ return join(", ", forms);
3600
+ };
3601
+ exports.writeGroup = writeGroup;
3602
+
3603
+ var writeInvoke = function writeInvoke(callee) {
3604
+ var params = Array.prototype.slice.call(arguments, 1);
3605
+ return writeTemplate("~{}(~{})", callee, writeGroup.apply(writeGroup, params));
3606
+ };
3607
+ exports.writeInvoke = writeInvoke;
3608
+
3609
+ var writeError = function writeError(message) {
3610
+ return function() {
3611
+ return (function() { throw Error(message); })();
3612
+ };
3613
+ };
3614
+ exports.writeError = writeError;
3615
+
3616
+ var writeVector = writeError("Vectors are not supported");
3617
+ exports.writeVector = writeVector;
3618
+
3619
+ var writeDictionary = writeError("Dictionaries are not supported");
3620
+ exports.writeDictionary = writeDictionary;
3621
+
3622
+ var writePattern = writeError("Regular expressions are not supported");
3623
+ exports.writePattern = writePattern;
3624
+
3625
+ var compileComment = function compileComment(form) {
3626
+ return compileTemplate(list("//~{}\n", first(form)));
3627
+ };
3628
+ exports.compileComment = compileComment;
3629
+
3630
+ var writeDef = function writeDef(form) {
3631
+ var id = first(form);
3632
+ var isExport = ((((meta(form)) || {}) || 0)["top"]) && (!((((meta(id)) || {}) || 0)["private"]));
3633
+ var attribute = symbol(namespace(id), "" + "-" + (name(id)));
3634
+ return isExport ?
3635
+ compileTemplate(list("var ~{};\n~{}", compile(cons(symbol(void(0), "set!"), form)), compile(list(symbol(void(0), "set!"), list(symbol(void(0), "."), symbol(void(0), "exports"), attribute), id)))) :
3636
+ compileTemplate(list("var ~{}", compile(cons(symbol(void(0), "set!"), form))));
3637
+ };
3638
+ exports.writeDef = writeDef;
3639
+
3640
+ var write = function write(form) {
3641
+ return isNil(form) ?
3642
+ writeNil(form) :
3643
+ isSymbol(form) ?
3644
+ writeReference(form) :
3645
+ isKeyword(form) ?
3646
+ writeKeywordReference(form) :
3647
+ isString(form) ?
3648
+ writeString(form) :
3649
+ isNumber(form) ?
3650
+ writeNumber(form) :
3651
+ isBoolean(form) ?
3652
+ writeBoolean(form) :
3653
+ isRePattern(form) ?
3654
+ writePattern(form) :
3655
+ isVector(form) ?
3656
+ writeVector(form) :
3657
+ isDictionary(form) ?
3658
+ writeDictionary() :
3659
+ isList(form) ?
3660
+ writeInvoke.apply(writeInvoke, map(write, vec(form))) :
3661
+ "else" ?
3662
+ writeError("Unsupported form") :
3663
+ void(0);
3664
+ };
3665
+ exports.write = write
3666
+
3667
+ },{"../../ast":"dcWfTp","../../sequence":"zNvMnP","../../runtime":"+Sggh0","../../string":"BIHQiq"}]},{},[1])
3668
+ //@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvVXNlcnMvZ296YWxhL1Byb2plY3RzL3dpc3Avc3VwcG9ydC9lbWJlZC5qcyIsIi9Vc2Vycy9nb3phbGEvUHJvamVjdHMvd2lzcC9ydW50aW1lLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL3NlcXVlbmNlLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL3N0cmluZy5qcyIsIi9Vc2Vycy9nb3phbGEvUHJvamVjdHMvd2lzcC9yZWFkZXIuanMiLCIvVXNlcnMvZ296YWxhL1Byb2plY3RzL3dpc3AvYXN0LmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2NvbXBpbGVyLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2VuZ2luZS9icm93c2VyLmpzIiwiL1VzZXJzL2dvemFsYS9Qcm9qZWN0cy93aXNwL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbG1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDemlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcGdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbInZhciByZXN0ID0gKHJlcXVpcmUoXCJ3aXNwL3NlcXVlbmNlXCIpKS5yZXN0OztcblxudmFyIHN0ciA9IChyZXF1aXJlKFwid2lzcC9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgdHJhbnNwaWxlID0gKHJlcXVpcmUoXCJ3aXNwL2VuZ2luZS9icm93c2VyXCIpKS50cmFuc3BpbGU7O1xuXG52YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIndpc3AvcmVhZGVyXCIpKS5yZWFkRnJvbVN0cmluZzs7XG5cbnZhciBjb21waWxlUHJvZ3JhbSA9IChyZXF1aXJlKFwid2lzcC9jb21waWxlclwiKSkuY29tcGlsZVByb2dyYW07O1xuXG52YXIgdXBkYXRlUHJldmlldyA9IGZ1bmN0aW9uIHVwZGF0ZVByZXZpZXcoZWRpdG9yKSB7XG4gIGNsZWFyVGltZW91dCh1cGRhdGVQcmV2aWV3LmlkKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgY29kZSA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgIGxvY2FsU3RvcmFnZS5idWZmZXIgPSBjb2RlO1xuICAgIHJldHVybiB1cGRhdGVQcmV2aWV3LmlkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBlZGl0b3IuY2xlYXJNYXJrZXIodXBkYXRlUHJldmlldy5saW5lIHx8IDEpO1xuICAgICAgICByZXR1cm4gb3V0cHV0LnNldFZhbHVlKHRyYW5zcGlsZShjb2RlKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB1cGRhdGVQcmV2aWV3LmxpbmUgPSBlcnJvci5saW5lO1xuICAgICAgICByZXR1cm4gZWRpdG9yLnNldE1hcmtlcihlcnJvci5saW5lIHx8IDAsIFwiXCIgKyBcIjxzcGFuIHRpdGxlPSdcIiArIGVycm9yLm1lc3NhZ2UgKyBcIic+4pePPC9zcGFuPiAlTiVcIik7XG4gICAgICB9fSkoKTtcbiAgICB9LCAyMDApO1xuICB9KSgpO1xufTtcbmV4cG9ydHMudXBkYXRlUHJldmlldyA9IHVwZGF0ZVByZXZpZXc7XG5cbnZhciBpbnB1dCA9IENvZGVNaXJyb3IoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dFwiKSwge1xuICBcImxpbmVOdW1iZXJzXCI6IHRydWUsXG4gIFwiYXV0b0NsZWFyRW1wdHlMaW5lc1wiOiB0cnVlLFxuICBcInRhYlNpemVcIjogMixcbiAgXCJpbmRlbnRXaXRoVGFic1wiOiBmYWxzZSxcbiAgXCJlbGVjdHJpY0NoYXJzXCI6IHRydWUsXG4gIFwibW9kZVwiOiBcImNsb2p1cmVcIixcbiAgXCJ0aGVtZVwiOiBcImFtYmlhbmNlXCIsXG4gIFwiYXV0b2ZvY3VzXCI6IHRydWUsXG4gIFwiZml4ZWRHdXR0ZXJcIjogdHJ1ZSxcbiAgXCJtYXRjaEJyYWNrZXRzXCI6IHRydWUsXG4gIFwidmFsdWVcIjogbG9jYWxTdG9yYWdlLmJ1ZmZlciB8fCAoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhhbXBsZXNcIikpLmlubmVySFRNTCksXG4gIFwib25DaGFuZ2VcIjogdXBkYXRlUHJldmlldyxcbiAgXCJvbkN1cnNvckFjdGl2aXR5XCI6IGZ1bmN0aW9uKCkge1xuICAgIGlucHV0LnNldExpbmVDbGFzcyhobExpbmUsIG51bGwsIG51bGwpO1xuICAgIHJldHVybiBobExpbmUgPSBpbnB1dC5zZXRMaW5lQ2xhc3MoKGlucHV0LmdldEN1cnNvcigpKS5saW5lLCBudWxsLCBcImFjdGl2ZWxpbmVcIik7XG4gIH0sXG4gIFwib25HdXR0ZXJDbGlja1wiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJvdXRwdXRcIik7XG4gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dFwiKTtcbiAgICBvdXRwdXQuaGlkZGVuID0gIShvdXRwdXQuaGlkZGVuKTtcbiAgICByZXR1cm4gaW5wdXQuc3R5bGUud2lkdGggPSBvdXRwdXQuaGlkZGVuID9cbiAgICAgIFwiMTAwJVwiIDpcbiAgICAgIFwiNTAlXCI7XG4gIH1cbn0pO1xuZXhwb3J0cy5pbnB1dCA9IGlucHV0O1xuXG52YXIgaGxMaW5lID0gaW5wdXQuc2V0TGluZUNsYXNzKDAsIHZvaWQoMCksIFwiYWN0aXZlbGluZVwiKTtcbmV4cG9ydHMuaGxMaW5lID0gaGxMaW5lO1xuXG52YXIgb3V0cHV0ID0gQ29kZU1pcnJvcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm91dHB1dFwiKSwge1xuICBcImxpbmVOdW1iZXJzXCI6IHRydWUsXG4gIFwiZml4ZWRHdXR0ZXJcIjogdHJ1ZSxcbiAgXCJtYXRjaEJyYWNrZXRzXCI6IHRydWUsXG4gIFwibW9kZVwiOiBcImphdmFzY3JpcHRcIixcbiAgXCJ0aGVtZVwiOiBcImFtYmlhbmNlXCIsXG4gIFwicmVhZE9ubHlcIjogdHJ1ZVxufSk7XG5leHBvcnRzLm91dHB1dCA9IG91dHB1dDtcblxuc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAxMDAwLCBpbnB1dClcbiIsIihmdW5jdGlvbigpe3ZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59O1xuZXhwb3J0cy5pZGVudGl0eSA9IGlkZW50aXR5O1xuXG52YXIgaXNPZGQgPSBmdW5jdGlvbiBpc09kZChuKSB7XG4gIHJldHVybiBuICUgMiA9PT0gMTtcbn07XG5leHBvcnRzLmlzT2RkID0gaXNPZGQ7XG5cbnZhciBpc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4obikge1xuICByZXR1cm4gbiAlIDIgPT09IDA7XG59O1xuZXhwb3J0cy5pc0V2ZW4gPSBpc0V2ZW47XG5cbnZhciBpc0RpY3Rpb25hcnkgPSBmdW5jdGlvbiBpc0RpY3Rpb25hcnkoZm9ybSkge1xuICByZXR1cm4gKGlzT2JqZWN0KGZvcm0pKSAmJiAoaXNPYmplY3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGZvcm0pKSkgJiYgKGlzTmlsKE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZm9ybSkpKSk7XG59O1xuZXhwb3J0cy5pc0RpY3Rpb25hcnkgPSBpc0RpY3Rpb25hcnk7XG5cbnZhciBkaWN0aW9uYXJ5ID0gZnVuY3Rpb24gZGljdGlvbmFyeSgpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGtleVZhbHVlcywgcmVzdWx0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0ga2V5VmFsdWVzLmxlbmd0aCA/XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIChyZXN1bHQgfHwgMClbKGtleVZhbHVlcyB8fCAwKVswXV0gPSAoa2V5VmFsdWVzIHx8IDApWzFdO1xuICAgICAgICByZXR1cm4gKGtleVZhbHVlcyA9IGtleVZhbHVlcy5zbGljZSgyKSwgcmVzdWx0ID0gcmVzdWx0LCBsb29wKTtcbiAgICAgIH0pKCkgOlxuICAgICAgcmVzdWx0O1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLCB7fSk7XG59O1xuZXhwb3J0cy5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTtcblxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKGRpY3Rpb25hcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRpY3Rpb25hcnkpO1xufTtcbmV4cG9ydHMua2V5cyA9IGtleXM7XG5cbnZhciB2YWxzID0gZnVuY3Rpb24gdmFscyhkaWN0aW9uYXJ5KSB7XG4gIHJldHVybiBrZXlzKGRpY3Rpb25hcnkpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gKGRpY3Rpb25hcnkgfHwgMClba2V5XTtcbiAgfSk7XG59O1xuZXhwb3J0cy52YWxzID0gdmFscztcblxudmFyIGtleVZhbHVlcyA9IGZ1bmN0aW9uIGtleVZhbHVlcyhkaWN0aW9uYXJ5KSB7XG4gIHJldHVybiBrZXlzKGRpY3Rpb25hcnkpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gW2tleSwgKGRpY3Rpb25hcnkgfHwgMClba2V5XV07XG4gIH0pO1xufTtcbmV4cG9ydHMua2V5VmFsdWVzID0ga2V5VmFsdWVzO1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24oZGVzY3JpcHRvciwgZGljdGlvbmFyeSkge1xuICAgIGlzT2JqZWN0KGRpY3Rpb25hcnkpID9cbiAgICAgIE9iamVjdC5rZXlzKGRpY3Rpb25hcnkpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiAoZGVzY3JpcHRvciB8fCAwKVtrZXldID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkaWN0aW9uYXJ5LCBrZXkpO1xuICAgICAgfSkgOlxuICAgICAgdm9pZCgwKTtcbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfSwgT2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlKSkpO1xufTtcbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcblxudmFyIGlzQ29udGFpbnNWZWN0b3IgPSBmdW5jdGlvbiBpc0NvbnRhaW5zVmVjdG9yKHZlY3RvciwgZWxlbWVudCkge1xuICByZXR1cm4gdmVjdG9yLmluZGV4T2YoZWxlbWVudCkgPj0gMDtcbn07XG5leHBvcnRzLmlzQ29udGFpbnNWZWN0b3IgPSBpc0NvbnRhaW5zVmVjdG9yO1xuXG52YXIgbWFwRGljdGlvbmFyeSA9IGZ1bmN0aW9uIG1hcERpY3Rpb25hcnkoc291cmNlLCBmKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbih0YXJnZXQsIGtleSkge1xuICAgICh0YXJnZXQgfHwgMClba2V5XSA9IGYoKHNvdXJjZSB8fCAwKVtrZXldKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9LCB7fSk7XG59O1xuZXhwb3J0cy5tYXBEaWN0aW9uYXJ5ID0gbWFwRGljdGlvbmFyeTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmV4cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZztcblxudmFyIGlzRm4gPSB0eXBlb2YoLy4vKSA9PT0gXCJmdW5jdGlvblwiID9cbiAgZnVuY3Rpb24gaXNGbih4KSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoeCkgPT09IFwiW29iamVjdCBGdW5jdGlvbl1cIjtcbiAgfSA6XG4gIGZ1bmN0aW9uIGlzRm4oeCkge1xuICAgIHJldHVybiB0eXBlb2YoeCkgPT09IFwiZnVuY3Rpb25cIjtcbiAgfTtcbmV4cG9ydHMuaXNGbiA9IGlzRm47XG5cbnZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuICh0eXBlb2YoeCkgPT09IFwic3RyaW5nXCIpIHx8ICh0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgU3RyaW5nXVwiKTtcbn07XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbnZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuICh0eXBlb2YoeCkgPT09IFwibnVtYmVyXCIpIHx8ICh0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgTnVtYmVyXVwiKTtcbn07XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbnZhciBpc1ZlY3RvciA9IGlzRm4oQXJyYXkuaXNBcnJheSkgP1xuICBBcnJheS5pc0FycmF5IDpcbiAgZnVuY3Rpb24gaXNWZWN0b3IoeCkge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG4gIH07XG5leHBvcnRzLmlzVmVjdG9yID0gaXNWZWN0b3I7XG5cbnZhciBpc0RhdGUgPSBmdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59O1xuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbnZhciBpc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gKHggPT09IHRydWUpIHx8ICh4ID09PSBmYWxzZSkgfHwgKHRvU3RyaW5nLmNhbGwoeCkgPT09IFwiW29iamVjdCBCb29sZWFuXVwiKTtcbn07XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxudmFyIGlzUmVQYXR0ZXJuID0gZnVuY3Rpb24gaXNSZVBhdHRlcm4oeCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn07XG5leHBvcnRzLmlzUmVQYXR0ZXJuID0gaXNSZVBhdHRlcm47XG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuIHggJiYgKHR5cGVvZih4KSA9PT0gXCJvYmplY3RcIik7XG59O1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG52YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbCh4KSB7XG4gIHJldHVybiAoeCA9PT0gdm9pZCgwKSkgfHwgKHggPT09IG51bGwpO1xufTtcbmV4cG9ydHMuaXNOaWwgPSBpc05pbDtcblxudmFyIGlzVHJ1ZSA9IGZ1bmN0aW9uIGlzVHJ1ZSh4KSB7XG4gIHJldHVybiB4ID09PSB0cnVlO1xufTtcbmV4cG9ydHMuaXNUcnVlID0gaXNUcnVlO1xuXG52YXIgaXNGYWxzZSA9IGZ1bmN0aW9uIGlzRmFsc2UoeCkge1xuICByZXR1cm4geCA9PT0gdHJ1ZTtcbn07XG5leHBvcnRzLmlzRmFsc2UgPSBpc0ZhbHNlO1xuXG52YXIgcmVGaW5kID0gZnVuY3Rpb24gcmVGaW5kKHJlLCBzKSB7XG4gIHZhciBtYXRjaGVzID0gcmUuZXhlYyhzKTtcbiAgcmV0dXJuICEoaXNOaWwobWF0Y2hlcykpID9cbiAgICBtYXRjaGVzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAobWF0Y2hlcyB8fCAwKVswXSA6XG4gICAgICBtYXRjaGVzIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMucmVGaW5kID0gcmVGaW5kO1xuXG52YXIgcmVNYXRjaGVzID0gZnVuY3Rpb24gcmVNYXRjaGVzKHBhdHRlcm4sIHNvdXJjZSkge1xuICB2YXIgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhzb3VyY2UpO1xuICByZXR1cm4gKCEoaXNOaWwobWF0Y2hlcykpKSAmJiAoKG1hdGNoZXMgfHwgMClbMF0gPT09IHNvdXJjZSkgP1xuICAgIG1hdGNoZXMubGVuZ3RoID09PSAxID9cbiAgICAgIChtYXRjaGVzIHx8IDApWzBdIDpcbiAgICAgIG1hdGNoZXMgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5yZU1hdGNoZXMgPSByZU1hdGNoZXM7XG5cbnZhciByZVBhdHRlcm4gPSBmdW5jdGlvbiByZVBhdHRlcm4ocykge1xuICB2YXIgbWF0Y2ggPSByZUZpbmQoL14oPzpcXChcXD8oW2lkbXN1eF0qKVxcKSk/KC4qKS8sIHMpO1xuICByZXR1cm4gbmV3IFJlZ0V4cCgobWF0Y2ggfHwgMClbMl0sIChtYXRjaCB8fCAwKVsxXSk7XG59O1xuZXhwb3J0cy5yZVBhdHRlcm4gPSByZVBhdHRlcm47XG5cbnZhciBpbmMgPSBmdW5jdGlvbiBpbmMoeCkge1xuICByZXR1cm4geCArIDE7XG59O1xuZXhwb3J0cy5pbmMgPSBpbmM7XG5cbnZhciBkZWMgPSBmdW5jdGlvbiBkZWMoeCkge1xuICByZXR1cm4geCAtIDE7XG59O1xuZXhwb3J0cy5kZWMgPSBkZWM7XG5cbnZhciBzdHIgPSBmdW5jdGlvbiBzdHIoKSB7XG4gIHJldHVybiBTdHJpbmcucHJvdG90eXBlLmNvbmNhdC5hcHBseShcIlwiLCBhcmd1bWVudHMpO1xufTtcbmV4cG9ydHMuc3RyID0gc3RyO1xuXG52YXIgY2hhciA9IGZ1bmN0aW9uIGNoYXIoY29kZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbn07XG5leHBvcnRzLmNoYXIgPSBjaGFyO1xuXG52YXIgaW50ID0gZnVuY3Rpb24gaW50KHgpIHtcbiAgcmV0dXJuIGlzTnVtYmVyKHgpID9cbiAgICB4ID49IDAgP1xuICAgICAgTWF0aC5mbG9vcih4KSA6XG4gICAgICBNYXRoLmZsb29yKHgpIDpcbiAgICB4LmNoYXJDb2RlQXQoMCk7XG59O1xuZXhwb3J0cy5pbnQgPSBpbnQ7XG5cbnZhciBzdWJzID0gZnVuY3Rpb24gc3VicyhzdHJpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG59O1xuZXhwb3J0cy5zdWJzID0gc3VicztcblxudmFyIGlzUGF0dGVybkVxdWFsID0gZnVuY3Rpb24gaXNQYXR0ZXJuRXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzUmVQYXR0ZXJuKHgpKSAmJiAoaXNSZVBhdHRlcm4oeSkpICYmICh4LnNvdXJjZSA9PT0geS5zb3VyY2UpICYmICh4Lmdsb2JhbCA9PT0geS5nbG9iYWwpICYmICh4Lm11bHRpbGluZSA9PT0geS5tdWx0aWxpbmUpICYmICh4Lmlnbm9yZUNhc2UgPT09IHkuaWdub3JlQ2FzZSk7XG59O1xuXG52YXIgaXNEYXRlRXF1YWwgPSBmdW5jdGlvbiBpc0RhdGVFcXVhbCh4LCB5KSB7XG4gIHJldHVybiAoaXNEYXRlKHgpKSAmJiAoaXNEYXRlKHkpKSAmJiAoTnVtYmVyKHgpID09PSBOdW1iZXIoeSkpO1xufTtcblxudmFyIGlzRGljdGlvbmFyeUVxdWFsID0gZnVuY3Rpb24gaXNEaWN0aW9uYXJ5RXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzT2JqZWN0KHgpKSAmJiAoaXNPYmplY3QoeSkpICYmICgoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHhLZXlzID0ga2V5cyh4KTtcbiAgICB2YXIgeUtleXMgPSBrZXlzKHkpO1xuICAgIHZhciB4Q291bnQgPSB4S2V5cy5sZW5ndGg7XG4gICAgdmFyIHlDb3VudCA9IHlLZXlzLmxlbmd0aDtcbiAgICByZXR1cm4gKHhDb3VudCA9PT0geUNvdW50KSAmJiAoKGZ1bmN0aW9uIGxvb3AoaW5kZXgsIGNvdW50LCBrZXlzKSB7XG4gICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgIHJlY3VyID0gaW5kZXggPCBjb3VudCA/XG4gICAgICAgIGlzRXF1aXZhbGVudCgoeCB8fCAwKVsoa2V5cyB8fCAwKVtpbmRleF1dLCAoeSB8fCAwKVsoa2V5cyB8fCAwKVtpbmRleF1dKSA/XG4gICAgICAgICAgKGluZGV4ID0gaW5jKGluZGV4KSwgY291bnQgPSBjb3VudCwga2V5cyA9IGtleXMsIGxvb3ApIDpcbiAgICAgICAgICBmYWxzZSA6XG4gICAgICAgIHRydWU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlY3VyO1xuICAgIH0pKDAsIHhDb3VudCwgeEtleXMpKTtcbiAgfSkoKSk7XG59O1xuXG52YXIgaXNWZWN0b3JFcXVhbCA9IGZ1bmN0aW9uIGlzVmVjdG9yRXF1YWwoeCwgeSkge1xuICByZXR1cm4gKGlzVmVjdG9yKHgpKSAmJiAoaXNWZWN0b3IoeSkpICYmICh4Lmxlbmd0aCA9PT0geS5sZW5ndGgpICYmICgoZnVuY3Rpb24gbG9vcCh4cywgeXMsIGluZGV4LCBjb3VudCkge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGluZGV4IDwgY291bnQgP1xuICAgICAgaXNFcXVpdmFsZW50KCh4cyB8fCAwKVtpbmRleF0sICh5cyB8fCAwKVtpbmRleF0pID9cbiAgICAgICAgKHhzID0geHMsIHlzID0geXMsIGluZGV4ID0gaW5jKGluZGV4KSwgY291bnQgPSBjb3VudCwgbG9vcCkgOlxuICAgICAgICBmYWxzZSA6XG4gICAgICB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KSh4LCB5LCAwLCB4Lmxlbmd0aCkpO1xufTtcblxudmFyIGlzRXF1aXZhbGVudCA9IGZ1bmN0aW9uIGlzRXF1aXZhbGVudCh4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAoeCA9PT0geSkgfHwgKGlzTmlsKHgpID9cbiAgICAgICAgaXNOaWwoeSkgOlxuICAgICAgaXNOaWwoeSkgP1xuICAgICAgICBpc05pbCh4KSA6XG4gICAgICBpc1N0cmluZyh4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzTnVtYmVyKHgpID9cbiAgICAgICAgZmFsc2UgOlxuICAgICAgaXNGbih4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzQm9vbGVhbih4KSA/XG4gICAgICAgIGZhbHNlIDpcbiAgICAgIGlzRGF0ZSh4KSA/XG4gICAgICAgIGlzRGF0ZUVxdWFsKHgsIHkpIDpcbiAgICAgIGlzVmVjdG9yKHgpID9cbiAgICAgICAgaXNWZWN0b3JFcXVhbCh4LCB5LCBbXSwgW10pIDpcbiAgICAgIGlzUmVQYXR0ZXJuKHgpID9cbiAgICAgICAgaXNQYXR0ZXJuRXF1YWwoeCwgeSkgOlxuICAgICAgXCJlbHNlXCIgP1xuICAgICAgICBpc0RpY3Rpb25hcnlFcXVhbCh4LCB5KSA6XG4gICAgICAgIHZvaWQoMCkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcChwcmV2aW91cywgY3VycmVudCwgaW5kZXgsIGNvdW50KSB7XG4gICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICAgIHJlY3VyID0gKGlzRXF1aXZhbGVudChwcmV2aW91cywgY3VycmVudCkpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5cbnZhciBpc0VxdWFsID0gaXNFcXVpdmFsZW50O1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcblxudmFyIGlzU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBpc1N0cmljdEVxdWFsKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPT09IHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHByZXZpb3VzLCBjdXJyZW50LCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSAocHJldmlvdXMgPT09IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmlzU3RyaWN0RXF1YWwgPSBpc1N0cmljdEVxdWFsO1xuXG52YXIgZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbih4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ID4geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA+IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmdyZWF0ZXJUaGFuID0gZ3JlYXRlclRoYW47XG5cbnZhciBub3RMZXNzVGhhbiA9IGZ1bmN0aW9uIG5vdExlc3NUaGFuKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPj0geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA+PSBjdXJyZW50KSAmJiAoaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHByZXZpb3VzID0gY3VycmVudCwgY3VycmVudCA9IChtb3JlIHx8IDApW2luZGV4XSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKHgsIHksIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5ub3RMZXNzVGhhbiA9IG5vdExlc3NUaGFuO1xuXG52YXIgbGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbih4LCB5KSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4IDwgeTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA8IGN1cnJlbnQpICYmIChpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAocHJldmlvdXMgPSBjdXJyZW50LCBjdXJyZW50ID0gKG1vcmUgfHwgMClbaW5kZXhdLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoeCwgeSwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLmxlc3NUaGFuID0gbGVzc1RoYW47XG5cbnZhciBub3RHcmVhdGVyVGhhbiA9IGZ1bmN0aW9uIG5vdEdyZWF0ZXJUaGFuKHgsIHkpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggPD0geTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocHJldmlvdXMsIGN1cnJlbnQsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IChwcmV2aW91cyA8PSBjdXJyZW50KSAmJiAoaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHByZXZpb3VzID0gY3VycmVudCwgY3VycmVudCA9IChtb3JlIHx8IDApW2luZGV4XSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKHgsIHksIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5ub3RHcmVhdGVyVGhhbiA9IG5vdEdyZWF0ZXJUaGFuO1xuXG52YXIgc3VtID0gZnVuY3Rpb24gc3VtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhICsgYiArIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSArICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSArIGIgKyBjICsgZCArIGUgKyBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3VtID0gc3VtO1xuXG52YXIgc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIldyb25nIG51bWJlciBvZiBhcmdzIHBhc3NlZCB0bzogLVwiKTsgfSkoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gMCAtIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhIC0gYiAtIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgLSBiIC0gYyAtIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgLSBiIC0gYyAtIGQgLSBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhIC0gYiAtIGMgLSBkIC0gZSAtIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSAtICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAtIGIgLSBjIC0gZCAtIGUgLSBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcblxudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIldyb25nIG51bWJlciBvZiBhcmdzIHBhc3NlZCB0bzogL1wiKTsgfSkoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gMSAvIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgLyBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhIC8gYiAvIGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgLyBiIC8gYyAvIGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgLyBiIC8gYyAvIGQgLyBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhIC8gYiAvIGMgLyBkIC8gZSAvIGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSAvICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAvIGIgLyBjIC8gZCAvIGUgLyBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBhO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBhICogYjtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gYSAqIGIgKiBjO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBhICogYiAqIGMgKiBkO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBhICogYiAqIGMgKiBkICogZTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gYSAqIGIgKiBjICogZCAqIGUgKiBmO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCA2KTtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcCh2YWx1ZSwgaW5kZXgsIGNvdW50KSB7XG4gICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICAgIHJlY3VyID0gaW5kZXggPCBjb3VudCA/XG4gICAgICAgICAgKHZhbHVlID0gdmFsdWUgKiAoKG1vcmUgfHwgMClbaW5kZXhdKSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKGEgKiBiICogYyAqIGQgKiBlICogZiwgMCwgbW9yZS5sZW5ndGgpO1xuICB9O1xuICByZXR1cm4gdm9pZCgwKTtcbn07XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG5cbnZhciBhbmQgPSBmdW5jdGlvbiBhbmQoYSwgYiwgYywgZCwgZSwgZikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gYTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gYSAmJiBiO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBhICYmIGIgJiYgYztcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gYSAmJiBiICYmIGMgJiYgZDtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gYSAmJiBiICYmIGMgJiYgZCAmJiBlO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBhICYmIGIgJiYgYyAmJiBkICYmIGUgJiYgZjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgbW9yZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgNik7XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AodmFsdWUsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgICByZWN1ciA9IGluZGV4IDwgY291bnQgP1xuICAgICAgICAgICh2YWx1ZSA9IHZhbHVlICYmICgobW9yZSB8fCAwKVtpbmRleF0pLCBpbmRleCA9IGluYyhpbmRleCksIGNvdW50ID0gY291bnQsIGxvb3ApIDpcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3VyO1xuICAgICAgfSkoYSAmJiBiICYmIGMgJiYgZCAmJiBlICYmIGYsIDAsIG1vcmUubGVuZ3RoKTtcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG5cbnZhciBvciA9IGZ1bmN0aW9uIG9yKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHZvaWQoMCk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGE7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGEgfHwgYjtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gYSB8fCBiIHx8IGM7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGEgfHwgYiB8fCBjIHx8IGQ7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGEgfHwgYiB8fCBjIHx8IGQgfHwgZTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gYSB8fCBiIHx8IGMgfHwgZCB8fCBlIHx8IGY7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIG1vcmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYpO1xuICAgICAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHZhbHVlLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgcmVjdXIgPSBpbmRleCA8IGNvdW50ID9cbiAgICAgICAgICAodmFsdWUgPSB2YWx1ZSB8fCAoKG1vcmUgfHwgMClbaW5kZXhdKSwgaW5kZXggPSBpbmMoaW5kZXgpLCBjb3VudCA9IGNvdW50LCBsb29wKSA6XG4gICAgICAgICAgdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN1cjtcbiAgICAgIH0pKGEgfHwgYiB8fCBjIHx8IGQgfHwgZSB8fCBmLCAwLCBtb3JlLmxlbmd0aCk7XG4gIH07XG4gIHJldHVybiB2b2lkKDApO1xufTtcbmV4cG9ydHMub3IgPSBvcjtcblxudmFyIHByaW50ID0gZnVuY3Rpb24gcHJpbnQoKSB7XG4gIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUubG9nLCBtb3JlKTtcbn07XG5leHBvcnRzLnByaW50ID0gcHJpbnRcblxufSkoKSIsInZhciBtZXJnZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5tZXJnZTtcbnZhciBpbmMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaW5jO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kZWM7XG52YXIgc3RyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN0cjtcbnZhciBrZXlWYWx1ZXMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkua2V5VmFsdWVzO1xudmFyIGlzRGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0RpY3Rpb25hcnk7XG52YXIgaXNTdHJpbmcgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpbmc7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOdW1iZXI7XG52YXIgaXNGbiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0ZuO1xudmFyIGlzVmVjdG9yID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzVmVjdG9yO1xudmFyIGlzTmlsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTmlsOztcblxudmFyIExpc3QgPSBmdW5jdGlvbiBMaXN0KGhlYWQsIHRhaWwpIHtcbiAgdGhpcy5oZWFkID0gaGVhZDtcbiAgdGhpcy50YWlsID0gdGFpbCB8fCAobGlzdCgpKTtcbiAgdGhpcy5sZW5ndGggPSBpbmMoY291bnQodGhpcy50YWlsKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuTGlzdC5wcm90b3R5cGUubGVuZ3RoID0gMDtcblxuTGlzdC50eXBlID0gXCJ3aXNwLmxpc3RcIjtcblxuTGlzdC5wcm90b3R5cGUudHlwZSA9IExpc3QudHlwZTtcblxuTGlzdC5wcm90b3R5cGUudGFpbCA9IE9iamVjdC5jcmVhdGUoTGlzdC5wcm90b3R5cGUpO1xuXG5MaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBsaXN0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShsaXN0KSA/XG4gICAgICBcIlwiICsgXCIoXCIgKyAocmVzdWx0LnN1YnN0cigxKSkgKyBcIilcIiA6XG4gICAgICAocmVzdWx0ID0gXCJcIiArIHJlc3VsdCArIFwiIFwiICsgKGlzVmVjdG9yKGZpcnN0KGxpc3QpKSA/XG4gICAgICAgIFwiXCIgKyBcIltcIiArIChmaXJzdChsaXN0KS5qb2luKFwiIFwiKSkgKyBcIl1cIiA6XG4gICAgICBpc05pbChmaXJzdChsaXN0KSkgP1xuICAgICAgICBcIm5pbFwiIDpcbiAgICAgIGlzU3RyaW5nKGZpcnN0KGxpc3QpKSA/XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGZpcnN0KGxpc3QpKSA6XG4gICAgICBpc051bWJlcihmaXJzdChsaXN0KSkgP1xuICAgICAgICBKU09OLnN0cmluZ2lmeShmaXJzdChsaXN0KSkgOlxuICAgICAgICBmaXJzdChsaXN0KSksIGxpc3QgPSByZXN0KGxpc3QpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoXCJcIiwgdGhpcyk7XG59O1xuXG52YXIgbGF6eVNlcVZhbHVlID0gZnVuY3Rpb24gbGF6eVNlcVZhbHVlKGxhenlTZXEpIHtcbiAgcmV0dXJuICEobGF6eVNlcS5yZWFsaXplZCkgP1xuICAgIChsYXp5U2VxLnJlYWxpemVkID0gdHJ1ZSkgJiYgKGxhenlTZXEueCA9IGxhenlTZXEueCgpKSA6XG4gICAgbGF6eVNlcS54O1xufTtcblxudmFyIExhenlTZXEgPSBmdW5jdGlvbiBMYXp5U2VxKHJlYWxpemVkLCB4KSB7XG4gIHRoaXMucmVhbGl6ZWQgPSByZWFsaXplZCB8fCBmYWxzZTtcbiAgdGhpcy54ID0geDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5MYXp5U2VxLnR5cGUgPSBcIndpc3AubGF6eS5zZXFcIjtcblxuTGF6eVNlcS5wcm90b3R5cGUudHlwZSA9IExhenlTZXEudHlwZTtcblxudmFyIGxhenlTZXEgPSBmdW5jdGlvbiBsYXp5U2VxKHJlYWxpemVkLCBib2R5KSB7XG4gIHJldHVybiBuZXcgTGF6eVNlcShyZWFsaXplZCwgYm9keSk7XG59O1xuZXhwb3J0cy5sYXp5U2VxID0gbGF6eVNlcTtcblxudmFyIGlzTGF6eVNlcSA9IGZ1bmN0aW9uIGlzTGF6eVNlcSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKExhenlTZXEudHlwZSA9PT0gdmFsdWUudHlwZSk7XG59O1xuZXhwb3J0cy5pc0xhenlTZXEgPSBpc0xhenlTZXE7XG5cbnVuZGVmaW5lZDtcblxudmFyIGlzTGlzdCA9IGZ1bmN0aW9uIGlzTGlzdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKExpc3QudHlwZSA9PT0gdmFsdWUudHlwZSk7XG59O1xuZXhwb3J0cy5pc0xpc3QgPSBpc0xpc3Q7XG5cbnZhciBsaXN0ID0gZnVuY3Rpb24gbGlzdCgpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgP1xuICAgIE9iamVjdC5jcmVhdGUoTGlzdC5wcm90b3R5cGUpIDpcbiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHRhaWwsIGhlYWQpIHtcbiAgICAgIHJldHVybiBjb25zKGhlYWQsIHRhaWwpO1xuICAgIH0sIGxpc3QoKSk7XG59O1xuZXhwb3J0cy5saXN0ID0gbGlzdDtcblxudmFyIGNvbnMgPSBmdW5jdGlvbiBjb25zKGhlYWQsIHRhaWwpIHtcbiAgcmV0dXJuIG5ldyBMaXN0KGhlYWQsIHRhaWwpO1xufTtcbmV4cG9ydHMuY29ucyA9IGNvbnM7XG5cbnZhciByZXZlcnNlTGlzdCA9IGZ1bmN0aW9uIHJldmVyc2VMaXN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChpdGVtcywgc291cmNlKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShzb3VyY2UpID9cbiAgICAgIGxpc3QuYXBwbHkobGlzdCwgaXRlbXMpIDpcbiAgICAgIChpdGVtcyA9IFtmaXJzdChzb3VyY2UpXS5jb25jYXQoaXRlbXMpLCBzb3VyY2UgPSByZXN0KHNvdXJjZSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgc2VxdWVuY2UpO1xufTtcblxudmFyIGlzU2VxdWVudGlhbCA9IGZ1bmN0aW9uIGlzU2VxdWVudGlhbCh4KSB7XG4gIHJldHVybiAoaXNMaXN0KHgpKSB8fCAoaXNWZWN0b3IoeCkpIHx8IChpc0xhenlTZXEoeCkpIHx8IChpc0RpY3Rpb25hcnkoeCkpIHx8IChpc1N0cmluZyh4KSk7XG59O1xuZXhwb3J0cy5pc1NlcXVlbnRpYWwgPSBpc1NlcXVlbnRpYWw7XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZShzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgcmV2ZXJzZUxpc3Qoc2VxdWVuY2UpIDpcbiAgaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5yZXZlcnNlKCkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICByZXZlcnNlKHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMucmV2ZXJzZSA9IHJldmVyc2U7XG5cbnZhciBtYXAgPSBmdW5jdGlvbiBtYXAoZiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2UubWFwKGYpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbWFwTGlzdChmLCBzZXF1ZW5jZSkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICBtYXAoZiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5tYXAgPSBtYXA7XG5cbnZhciBtYXBMaXN0ID0gZnVuY3Rpb24gbWFwTGlzdChmLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBpdGVtcykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGlzRW1wdHkoaXRlbXMpID9cbiAgICAgIHJldmVyc2UocmVzdWx0KSA6XG4gICAgICAocmVzdWx0ID0gY29ucyhmKGZpcnN0KGl0ZW1zKSksIHJlc3VsdCksIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIHNlcXVlbmNlKTtcbn07XG5cbnZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoaXNGLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5maWx0ZXIoaXNGKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGZpbHRlckxpc3QoaXNGLCBzZXF1ZW5jZSkgOlxuICBpc05pbChzZXF1ZW5jZSkgP1xuICAgIGxpc3QoKSA6XG4gIFwiZWxzZVwiID9cbiAgICBmaWx0ZXIoaXNGLCBzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcblxudmFyIGZpbHRlckxpc3QgPSBmdW5jdGlvbiBmaWx0ZXJMaXN0KGlzRiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHJlc3VsdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICByZXZlcnNlKHJlc3VsdCkgOlxuICAgICAgKHJlc3VsdCA9IGlzRihmaXJzdChpdGVtcykpID9cbiAgICAgICAgY29ucyhmaXJzdChpdGVtcyksIHJlc3VsdCkgOlxuICAgICAgICByZXN1bHQsIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIHNlcXVlbmNlKTtcbn07XG5cbnZhciByZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZikge1xuICB2YXIgcGFyYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzSW5pdGlhbCA9IGNvdW50KHBhcmFtcykgPj0gMjtcbiAgICB2YXIgaW5pdGlhbCA9IGhhc0luaXRpYWwgP1xuICAgICAgZmlyc3QocGFyYW1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciBzZXF1ZW5jZSA9IGhhc0luaXRpYWwgP1xuICAgICAgc2Vjb25kKHBhcmFtcykgOlxuICAgICAgZmlyc3QocGFyYW1zKTtcbiAgICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICAgIGluaXRpYWwgOlxuICAgIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgICBoYXNJbml0aWFsID9cbiAgICAgICAgc2VxdWVuY2UucmVkdWNlKGYsIGluaXRpYWwpIDpcbiAgICAgICAgc2VxdWVuY2UucmVkdWNlKGYpIDpcbiAgICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICAgIGhhc0luaXRpYWwgP1xuICAgICAgICByZWR1Y2VMaXN0KGYsIGluaXRpYWwsIHNlcXVlbmNlKSA6XG4gICAgICAgIHJlZHVjZUxpc3QoZiwgZmlyc3Qoc2VxdWVuY2UpLCByZXN0KHNlcXVlbmNlKSkgOlxuICAgIFwiZWxzZVwiID9cbiAgICAgIHJlZHVjZShmLCBpbml0aWFsLCBzZXEoc2VxdWVuY2UpKSA6XG4gICAgICB2b2lkKDApO1xuICB9KSgpO1xufTtcbmV4cG9ydHMucmVkdWNlID0gcmVkdWNlO1xuXG52YXIgcmVkdWNlTGlzdCA9IGZ1bmN0aW9uIHJlZHVjZUxpc3QoZiwgaW5pdGlhbCwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHJlc3VsdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKHJlc3VsdCA9IGYocmVzdWx0LCBmaXJzdChpdGVtcykpLCBpdGVtcyA9IHJlc3QoaXRlbXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoaW5pdGlhbCwgc2VxdWVuY2UpO1xufTtcblxudmFyIGNvdW50ID0gZnVuY3Rpb24gY291bnQoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgMCA6XG4gICAgKHNlcShzZXF1ZW5jZSkpLmxlbmd0aDtcbn07XG5leHBvcnRzLmNvdW50ID0gY291bnQ7XG5cbnZhciBpc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eShzZXF1ZW5jZSkge1xuICByZXR1cm4gY291bnQoc2VxdWVuY2UpID09PSAwO1xufTtcbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG5cbnZhciBmaXJzdCA9IGZ1bmN0aW9uIGZpcnN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5oZWFkIDpcbiAgKGlzVmVjdG9yKHNlcXVlbmNlKSkgfHwgKGlzU3RyaW5nKHNlcXVlbmNlKSkgP1xuICAgIChzZXF1ZW5jZSB8fCAwKVswXSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIGZpcnN0KGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIGZpcnN0KHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuZmlyc3QgPSBmaXJzdDtcblxudmFyIHNlY29uZCA9IGZ1bmN0aW9uIHNlY29uZChzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICB2b2lkKDApIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgZmlyc3QocmVzdChzZXF1ZW5jZSkpIDpcbiAgKGlzVmVjdG9yKHNlcXVlbmNlKSkgfHwgKGlzU3RyaW5nKHNlcXVlbmNlKSkgP1xuICAgIChzZXF1ZW5jZSB8fCAwKVsxXSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIHNlY29uZChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBmaXJzdChyZXN0KHNlcShzZXF1ZW5jZSkpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNlY29uZCA9IHNlY29uZDtcblxudmFyIHRoaXJkID0gZnVuY3Rpb24gdGhpcmQoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgdm9pZCgwKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGZpcnN0KHJlc3QocmVzdChzZXF1ZW5jZSkpKSA6XG4gIChpc1ZlY3RvcihzZXF1ZW5jZSkpIHx8IChpc1N0cmluZyhzZXF1ZW5jZSkpID9cbiAgICAoc2VxdWVuY2UgfHwgMClbMl0gOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICB0aGlyZChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBzZWNvbmQocmVzdChzZXEoc2VxdWVuY2UpKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50aGlyZCA9IHRoaXJkO1xuXG52YXIgcmVzdCA9IGZ1bmN0aW9uIHJlc3Qoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdCgpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2UudGFpbCA6XG4gIChpc1ZlY3RvcihzZXF1ZW5jZSkpIHx8IChpc1N0cmluZyhzZXF1ZW5jZSkpID9cbiAgICBzZXF1ZW5jZS5zbGljZSgxKSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIHJlc3QobGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICBcImVsc2VcIiA/XG4gICAgcmVzdChzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnJlc3QgPSByZXN0O1xuXG52YXIgbGFzdE9mTGlzdCA9IGZ1bmN0aW9uIGxhc3RPZkxpc3QobGlzdCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoaXRlbSwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KGl0ZW1zKSA/XG4gICAgICBpdGVtIDpcbiAgICAgIChpdGVtID0gZmlyc3QoaXRlbXMpLCBpdGVtcyA9IHJlc3QoaXRlbXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoZmlyc3QobGlzdCksIHJlc3QobGlzdCkpO1xufTtcblxudmFyIGxhc3QgPSBmdW5jdGlvbiBsYXN0KHNlcXVlbmNlKSB7XG4gIHJldHVybiAoaXNWZWN0b3Ioc2VxdWVuY2UpKSB8fCAoaXNTdHJpbmcoc2VxdWVuY2UpKSA/XG4gICAgKHNlcXVlbmNlIHx8IDApW2RlYyhjb3VudChzZXF1ZW5jZSkpXSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIGxhc3RPZkxpc3Qoc2VxdWVuY2UpIDpcbiAgaXNOaWwoc2VxdWVuY2UpID9cbiAgICB2b2lkKDApIDpcbiAgaXNMYXp5U2VxKHNlcXVlbmNlKSA/XG4gICAgbGFzdChsYXp5U2VxVmFsdWUoc2VxdWVuY2UpKSA6XG4gIFwiZWxzZVwiID9cbiAgICBsYXN0KHNlcShzZXF1ZW5jZSkpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMubGFzdCA9IGxhc3Q7XG5cbnZhciBidXRsYXN0ID0gZnVuY3Rpb24gYnV0bGFzdChzZXF1ZW5jZSkge1xuICB2YXIgaXRlbXMgPSBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICBpc1N0cmluZyhzZXF1ZW5jZSkgP1xuICAgIHN1YnMoc2VxdWVuY2UsIDAsIGRlYyhjb3VudChzZXF1ZW5jZSkpKSA6XG4gIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2Uuc2xpY2UoMCwgZGVjKGNvdW50KHNlcXVlbmNlKSkpIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbGlzdC5hcHBseShsaXN0LCBidXRsYXN0KHZlYyhzZXF1ZW5jZSkpKSA6XG4gIGlzTGF6eVNlcShzZXF1ZW5jZSkgP1xuICAgIGJ1dGxhc3QobGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICBcImVsc2VcIiA/XG4gICAgYnV0bGFzdChzZXEoc2VxdWVuY2UpKSA6XG4gICAgdm9pZCgwKTtcbiAgcmV0dXJuICEoKGlzTmlsKGl0ZW1zKSkgfHwgKGlzRW1wdHkoaXRlbXMpKSkgP1xuICAgIGl0ZW1zIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuYnV0bGFzdCA9IGJ1dGxhc3Q7XG5cbnZhciB0YWtlID0gZnVuY3Rpb24gdGFrZShuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gaXNOaWwoc2VxdWVuY2UpID9cbiAgICBsaXN0KCkgOlxuICBpc1ZlY3RvcihzZXF1ZW5jZSkgP1xuICAgIHRha2VGcm9tVmVjdG9yKG4sIHNlcXVlbmNlKSA6XG4gIGlzTGlzdChzZXF1ZW5jZSkgP1xuICAgIHRha2VGcm9tTGlzdChuLCBzZXF1ZW5jZSkgOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICB0YWtlKG4sIGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHRha2Uobiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50YWtlID0gdGFrZTtcblxudmFyIHRha2VWZWN0b3JXaGlsZSA9IGZ1bmN0aW9uIHRha2VWZWN0b3JXaGlsZShwcmVkaWNhdGUsIHZlY3Rvcikge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCB0YWlsLCBoZWFkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKCEoaXNFbXB0eSh0YWlsKSkpICYmIChwcmVkaWNhdGUoaGVhZCkpID9cbiAgICAgIChyZXN1bHQgPSBjb25qKHJlc3VsdCwgaGVhZCksIHRhaWwgPSByZXN0KHRhaWwpLCBoZWFkID0gZmlyc3QodGFpbCksIGxvb3ApIDpcbiAgICAgIHJlc3VsdDtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoW10sIHZlY3RvciwgZmlyc3QodmVjdG9yKSk7XG59O1xuXG52YXIgdGFrZUxpc3RXaGlsZSA9IGZ1bmN0aW9uIHRha2VMaXN0V2hpbGUocHJlZGljYXRlLCBpdGVtcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCB0YWlsLCBoZWFkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKCEoaXNFbXB0eSh0YWlsKSkpICYmIChpc1ByZWRpY2F0ZShoZWFkKSkgP1xuICAgICAgKHJlc3VsdCA9IGNvbmoocmVzdWx0LCBoZWFkKSwgdGFpbCA9IHJlc3QodGFpbCksIGhlYWQgPSBmaXJzdCh0YWlsKSwgbG9vcCkgOlxuICAgICAgbGlzdC5hcHBseShsaXN0LCByZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgaXRlbXMsIGZpcnN0KGl0ZW1zKSk7XG59O1xuXG52YXIgdGFrZVdoaWxlID0gZnVuY3Rpb24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdCgpIDpcbiAgaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICB0YWtlVmVjdG9yV2hpbGUocHJlZGljYXRlLCBzZXF1ZW5jZSkgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICB0YWtlVmVjdG9yV2hpbGUocHJlZGljYXRlLCBzZXF1ZW5jZSkgOlxuICBcImVsc2VcIiA/XG4gICAgdGFrZVdoaWxlKHByZWRpY2F0ZSwgbGF6eVNlcVZhbHVlKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG5cbnZhciB0YWtlRnJvbVZlY3RvciA9IGZ1bmN0aW9uIHRha2VGcm9tVmVjdG9yKG4sIHZlY3Rvcikge1xuICByZXR1cm4gdmVjdG9yLnNsaWNlKDAsIG4pO1xufTtcblxudmFyIHRha2VGcm9tTGlzdCA9IGZ1bmN0aW9uIHRha2VGcm9tTGlzdChuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AodGFrZW4sIGl0ZW1zLCBuKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKG4gPT09IDApIHx8IChpc0VtcHR5KGl0ZW1zKSkgP1xuICAgICAgcmV2ZXJzZSh0YWtlbikgOlxuICAgICAgKHRha2VuID0gY29ucyhmaXJzdChpdGVtcyksIHRha2VuKSwgaXRlbXMgPSByZXN0KGl0ZW1zKSwgbiA9IGRlYyhuKSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKGxpc3QoKSwgc2VxdWVuY2UsIG4pO1xufTtcblxudmFyIGRyb3BGcm9tTGlzdCA9IGZ1bmN0aW9uIGRyb3BGcm9tTGlzdChuLCBzZXF1ZW5jZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AobGVmdCwgaXRlbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSAobGVmdCA8IDEpIHx8IChpc0VtcHR5KGl0ZW1zKSkgP1xuICAgICAgaXRlbXMgOlxuICAgICAgKGxlZnQgPSBkZWMobGVmdCksIGl0ZW1zID0gcmVzdChpdGVtcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShuLCBzZXF1ZW5jZSk7XG59O1xuXG52YXIgZHJvcCA9IGZ1bmN0aW9uIGRyb3Aobiwgc2VxdWVuY2UpIHtcbiAgcmV0dXJuIG4gPD0gMCA/XG4gICAgc2VxdWVuY2UgOlxuICBpc1N0cmluZyhzZXF1ZW5jZSkgP1xuICAgIHNlcXVlbmNlLnN1YnN0cihuKSA6XG4gIGlzVmVjdG9yKHNlcXVlbmNlKSA/XG4gICAgc2VxdWVuY2Uuc2xpY2UobikgOlxuICBpc0xpc3Qoc2VxdWVuY2UpID9cbiAgICBkcm9wRnJvbUxpc3Qobiwgc2VxdWVuY2UpIDpcbiAgaXNOaWwoc2VxdWVuY2UpID9cbiAgICBsaXN0KCkgOlxuICBpc0xhenlTZXEoc2VxdWVuY2UpID9cbiAgICBkcm9wKG4sIGxhenlTZXFWYWx1ZShzZXF1ZW5jZSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIGRyb3Aobiwgc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5kcm9wID0gZHJvcDtcblxudmFyIGNvbmpMaXN0ID0gZnVuY3Rpb24gY29uakxpc3Qoc2VxdWVuY2UsIGl0ZW1zKSB7XG4gIHJldHVybiByZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBpdGVtKSB7XG4gICAgcmV0dXJuIGNvbnMoaXRlbSwgcmVzdWx0KTtcbiAgfSwgc2VxdWVuY2UsIGl0ZW1zKTtcbn07XG5cbnZhciBjb25qID0gZnVuY3Rpb24gY29uaihzZXF1ZW5jZSkge1xuICB2YXIgaXRlbXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gaXNWZWN0b3Ioc2VxdWVuY2UpID9cbiAgICBzZXF1ZW5jZS5jb25jYXQoaXRlbXMpIDpcbiAgaXNTdHJpbmcoc2VxdWVuY2UpID9cbiAgICBcIlwiICsgc2VxdWVuY2UgKyAoc3RyLmFwcGx5KHN0ciwgaXRlbXMpKSA6XG4gIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgbGlzdC5hcHBseShsaXN0LCByZXZlcnNlKGl0ZW1zKSkgOlxuICAoaXNMaXN0KHNlcXVlbmNlKSkgfHwgKGlzTGF6eVNlcSgpKSA/XG4gICAgY29uakxpc3Qoc2VxdWVuY2UsIGl0ZW1zKSA6XG4gIGlzRGljdGlvbmFyeShzZXF1ZW5jZSkgP1xuICAgIG1lcmdlKHNlcXVlbmNlLCBtZXJnZS5hcHBseShtZXJnZSwgaXRlbXMpKSA6XG4gIFwiZWxzZVwiID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIlwiICsgXCJUeXBlIGNhbid0IGJlIGNvbmpvaW5lZCBcIiArIHNlcXVlbmNlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbmogPSBjb25qO1xuXG52YXIgY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KCkge1xuICB2YXIgc2VxdWVuY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIHJldmVyc2UocmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgc2VxdWVuY2UpIHtcbiAgICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgaXRlbSkge1xuICAgICAgcmV0dXJuIGNvbnMoaXRlbSwgcmVzdWx0KTtcbiAgICB9LCByZXN1bHQsIHNlcShzZXF1ZW5jZSkpO1xuICB9LCBsaXN0KCksIHNlcXVlbmNlcykpO1xufTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuXG52YXIgc2VxID0gZnVuY3Rpb24gc2VxKHNlcXVlbmNlKSB7XG4gIHJldHVybiBpc05pbChzZXF1ZW5jZSkgP1xuICAgIHZvaWQoMCkgOlxuICAoaXNWZWN0b3Ioc2VxdWVuY2UpKSB8fCAoaXNMaXN0KHNlcXVlbmNlKSkgfHwgKGlzTGF6eVNlcShzZXF1ZW5jZSkpID9cbiAgICBzZXF1ZW5jZSA6XG4gIGlzU3RyaW5nKHNlcXVlbmNlKSA/XG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2VxdWVuY2UpIDpcbiAgaXNEaWN0aW9uYXJ5KHNlcXVlbmNlKSA/XG4gICAga2V5VmFsdWVzKHNlcXVlbmNlKSA6XG4gIFwiZGVmYXVsdFwiID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IFR5cGVFcnJvcihcIlwiICsgXCJDYW4gbm90IHNlcSBcIiArIHNlcXVlbmNlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNlcSA9IHNlcTtcblxudmFyIGlzU2VxID0gZnVuY3Rpb24gaXNTZXEoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIChpc0xpc3Qoc2VxdWVuY2UpKSB8fCAoaXNMYXp5U2VxKHNlcXVlbmNlKSk7XG59O1xuZXhwb3J0cy5pc1NlcSA9IGlzU2VxO1xuXG52YXIgbGlzdFRvVmVjdG9yID0gZnVuY3Rpb24gbGlzdFRvVmVjdG9yKHNvdXJjZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBsaXN0KSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShsaXN0KSA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKHJlc3VsdCA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmlyc3QobGlzdCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSkoKSwgbGlzdCA9IHJlc3QobGlzdCksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgc291cmNlKTtcbn07XG5cbnZhciB2ZWMgPSBmdW5jdGlvbiB2ZWMoc2VxdWVuY2UpIHtcbiAgcmV0dXJuIGlzTmlsKHNlcXVlbmNlKSA/XG4gICAgW10gOlxuICBpc1ZlY3RvcihzZXF1ZW5jZSkgP1xuICAgIHNlcXVlbmNlIDpcbiAgaXNMaXN0KHNlcXVlbmNlKSA/XG4gICAgbGlzdFRvVmVjdG9yKHNlcXVlbmNlKSA6XG4gIFwiZWxzZVwiID9cbiAgICB2ZWMoc2VxKHNlcXVlbmNlKSkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy52ZWMgPSB2ZWM7XG5cbnZhciBzb3J0ID0gZnVuY3Rpb24gc29ydChmLCBpdGVtcykge1xuICB2YXIgaGFzQ29tcGFyYXRvciA9IGlzRm4oZik7XG4gIHZhciBpdGVtcyA9ICghKGhhc0NvbXBhcmF0b3IpKSAmJiAoaXNOaWwoaXRlbXMpKSA/XG4gICAgZiA6XG4gICAgaXRlbXM7XG4gIHZhciBjb21wYXJlID0gaGFzQ29tcGFyYXRvciA/XG4gICAgZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGYoYSwgYikgP1xuICAgICAgICAwIDpcbiAgICAgICAgMTtcbiAgICB9IDpcbiAgICB2b2lkKDApO1xuICByZXR1cm4gaXNOaWwoaXRlbXMpID9cbiAgICBsaXN0KCkgOlxuICBpc1ZlY3RvcihpdGVtcykgP1xuICAgIGl0ZW1zLnNvcnQoY29tcGFyZSkgOlxuICBpc0xpc3QoaXRlbXMpID9cbiAgICBsaXN0LmFwcGx5KGxpc3QsIHZlYyhpdGVtcykuc29ydChjb21wYXJlKSkgOlxuICBpc0RpY3Rpb25hcnkoaXRlbXMpID9cbiAgICBzZXEoaXRlbXMpLnNvcnQoY29tcGFyZSkgOlxuICBcImVsc2VcIiA/XG4gICAgc29ydChmLCBzZXEoaXRlbXMpKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xuXG52YXIgcmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KG4sIHgpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKG4sIHJlc3VsdCkge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IG4gPD0gMCA/XG4gICAgICByZXN1bHQgOlxuICAgICAgKG4gPSBkZWMobiksIHJlc3VsdCA9IGNvbmoocmVzdWx0LCB4KSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKG4sIFtdKTtcbn07XG5leHBvcnRzLnJlcGVhdCA9IHJlcGVhdFxuIiwidmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaW5nO1xudmFyIGlzTmlsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTmlsO1xudmFyIHJlTWF0Y2hlcyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5yZU1hdGNoZXM7XG52YXIgc3VicyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNFbXB0eTtcbnZhciB2ZWMgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnZlYzs7XG5cbnZhciBzcGxpdCA9IGZ1bmN0aW9uIHNwbGl0KHN0cmluZywgcGF0dGVybiwgbGltaXQpIHtcbiAgcmV0dXJuIHN0cmluZy5zcGxpdChwYXR0ZXJuLCBsaW1pdCk7XG59O1xuZXhwb3J0cy5zcGxpdCA9IHNwbGl0O1xuXG52YXIgam9pbiA9IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yLCBjb2xsKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciBjb2xsID0gc2VwYXJhdG9yO1xuICAgICAgcmV0dXJuIHN0ci5hcHBseShzdHIsIHZlYyhjb2xsKSk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHZlYyhjb2xsKS5qb2luKHNlcGFyYXRvcik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBFcnJvcihcIkludmFsaWQgYXJpdHlcIik7IH0pKClcbiAgfTtcbiAgcmV0dXJuIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5qb2luID0gam9pbjtcblxudmFyIHVwcGVyQ2FzZSA9IGZ1bmN0aW9uIHVwcGVyQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50b1VwcGVyQ2FzZSgpO1xufTtcbmV4cG9ydHMudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuXG52YXIgdXBwZXJDYXNlID0gZnVuY3Rpb24gdXBwZXJDYXNlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRvVXBwZXJDYXNlKCk7XG59O1xuZXhwb3J0cy51cHBlckNhc2UgPSB1cHBlckNhc2U7XG5cbnZhciBsb3dlckNhc2UgPSBmdW5jdGlvbiBsb3dlckNhc2Uoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKTtcbn07XG5leHBvcnRzLmxvd2VyQ2FzZSA9IGxvd2VyQ2FzZTtcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gY291bnQoc3RyaW5nKSA8IDIgP1xuICAgIHVwcGVyQ2FzZShzdHJpbmcpIDpcbiAgICBcIlwiICsgKHVwcGVyQ2FzZShzdWJzKHMsIDAsIDEpKSkgKyAobG93ZXJDYXNlKHN1YnMocywgMSkpKTtcbn07XG5leHBvcnRzLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuXG52YXIgcmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uoc3RyaW5nLCBtYXRjaCwgcmVwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKG1hdGNoLCByZXBsYWNlbWVudCk7XG59O1xuZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcblxudmFyIF9fTEVGVFNQQUNFU19fID0gL15cXHNcXHMqLztcbmV4cG9ydHMuX19MRUZUU1BBQ0VTX18gPSBfX0xFRlRTUEFDRVNfXztcblxudmFyIF9fUklHSFRTUEFDRVNfXyA9IC9cXHNcXHMqJC87XG5leHBvcnRzLl9fUklHSFRTUEFDRVNfXyA9IF9fUklHSFRTUEFDRVNfXztcblxudmFyIF9fU1BBQ0VTX18gPSAvXlxcc1xccyokLztcbmV4cG9ydHMuX19TUEFDRVNfXyA9IF9fU1BBQ0VTX187XG5cbnZhciB0cmltbCA9IGlzTmlsKFwiXCIudHJpbUxlZnQpID9cbiAgZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9fTEVGVFNQQUNFU19fLCBcIlwiKTtcbiAgfSA6XG4gIGZ1bmN0aW9uIHRyaW1sKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudHJpbUxlZnQoKTtcbiAgfTtcbmV4cG9ydHMudHJpbWwgPSB0cmltbDtcblxudmFyIHRyaW1yID0gaXNOaWwoXCJcIi50cmltUmlnaHQpID9cbiAgZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9fUklHSFRTUEFDRVNfXywgXCJcIik7XG4gIH0gOlxuICBmdW5jdGlvbiB0cmltcihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnRyaW1SaWdodCgpO1xuICB9O1xuZXhwb3J0cy50cmltciA9IHRyaW1yO1xuXG52YXIgdHJpbSA9IGlzTmlsKFwiXCIudHJpbSkgP1xuICBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX19MRUZUU1BBQ0VTX18pLnJlcGxhY2UoX19SSUdIVFNQQUNFU19fKTtcbiAgfSA6XG4gIGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy50cmltKCk7XG4gIH07XG5leHBvcnRzLnRyaW0gPSB0cmltO1xuXG52YXIgaXNCbGFuayA9IGZ1bmN0aW9uIGlzQmxhbmsoc3RyaW5nKSB7XG4gIHJldHVybiAoaXNOaWwoc3RyaW5nKSkgfHwgKGlzRW1wdHkoc3RyaW5nKSkgfHwgKHJlTWF0Y2hlcyhfX1NQQUNFU19fLCBzdHJpbmcpKTtcbn07XG5leHBvcnRzLmlzQmxhbmsgPSBpc0JsYW5rXG4iLCJ2YXIgbGF6eVNlcSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGF6eVNlcTtcbnZhciBzb3J0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5zb3J0O1xudmFyIGJ1dGxhc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmJ1dGxhc3Q7XG52YXIgbGFzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGFzdDtcbnZhciBjb25jYXQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmNvbmNhdDtcbnZhciByZXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5yZXN0O1xudmFyIGNvbmogPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmNvbmo7XG52YXIgY29ucyA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY29ucztcbnZhciB2ZWMgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnZlYztcbnZhciBtYXAgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLm1hcDtcbnZhciByZXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5yZXN0O1xudmFyIHRoaXJkID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS50aGlyZDtcbnZhciBzZWNvbmQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnNlY29uZDtcbnZhciBmaXJzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuZmlyc3Q7XG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNFbXB0eTtcbnZhciBjb3VudCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgaXNMaXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5pc0xpc3Q7XG52YXIgbGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGlzdDs7XG5cbnZhciBpc1N0cmljdEVxdWFsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaWN0RXF1YWw7XG52YXIgaXNFcXVhbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0VxdWFsO1xudmFyIHZhbHMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkudmFscztcbnZhciBjaGFyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmNoYXI7XG52YXIgc3VicyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7XG52YXIgcmVGaW5kID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnJlRmluZDtcbnZhciByZU1hdGNoZXMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkucmVNYXRjaGVzO1xudmFyIHJlUGF0dGVybiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5yZVBhdHRlcm47XG52YXIgaXNEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc09iamVjdCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc09iamVjdDtcbnZhciBpc0Jvb2xlYW4gPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNCb29sZWFuO1xudmFyIGlzTnVtYmVyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzTnVtYmVyO1xudmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzU3RyaW5nO1xudmFyIGlzVmVjdG9yID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzVmVjdG9yO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kZWM7XG52YXIgaW5jID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmluYztcbnZhciBpc05pbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc05pbDtcbnZhciBrZXlzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmtleXM7XG52YXIgZGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kaWN0aW9uYXJ5O1xudmFyIGlzT2RkID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzT2RkOztcblxudmFyIGdlbnN5bSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmdlbnN5bTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkubmFtZTtcbnZhciB3aXRoTWV0YSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLndpdGhNZXRhO1xudmFyIG1ldGEgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5tZXRhO1xudmFyIGtleXdvcmQgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5rZXl3b3JkO1xudmFyIGlzS2V5d29yZCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzS2V5d29yZDtcbnZhciBzeW1ib2wgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5zeW1ib2w7XG52YXIgaXNTeW1ib2wgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5pc1N5bWJvbDs7XG5cbnZhciBqb2luID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuam9pbjtcbnZhciBzcGxpdCA9IChyZXF1aXJlKFwiLi9zdHJpbmdcIikpLnNwbGl0OztcblxudmFyIHB1c2hCYWNrUmVhZGVyID0gZnVuY3Rpb24gcHVzaEJhY2tSZWFkZXIoc291cmNlLCB1cmkpIHtcbiAgcmV0dXJuIHtcbiAgICBcImxpbmVzXCI6IHNwbGl0KHNvdXJjZSwgXCJcXG5cIiksXG4gICAgXCJidWZmZXJcIjogXCJcIixcbiAgICBcInVyaVwiOiB1cmksXG4gICAgXCJjb2x1bW5cIjogLTEsXG4gICAgXCJsaW5lXCI6IDBcbiAgfTtcbn07XG5leHBvcnRzLnB1c2hCYWNrUmVhZGVyID0gcHVzaEJhY2tSZWFkZXI7XG5cbnZhciBwZWVrQ2hhciA9IGZ1bmN0aW9uIHBlZWtDaGFyKHJlYWRlcikge1xuICB2YXIgbGluZSA9ICgocmVhZGVyIHx8IDApW1wibGluZXNcIl0pWyhyZWFkZXIgfHwgMClbXCJsaW5lXCJdXTtcbiAgdmFyIGNvbHVtbiA9IGluYygocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdKTtcbiAgcmV0dXJuIGlzTmlsKGxpbmUpID9cbiAgICB2b2lkKDApIDpcbiAgICAobGluZVtjb2x1bW5dKSB8fCBcIlxcblwiO1xufTtcbmV4cG9ydHMucGVla0NoYXIgPSBwZWVrQ2hhcjtcblxudmFyIHJlYWRDaGFyID0gZnVuY3Rpb24gcmVhZENoYXIocmVhZGVyKSB7XG4gIHZhciBjaCA9IHBlZWtDaGFyKHJlYWRlcik7XG4gIGlzTmV3bGluZShwZWVrQ2hhcihyZWFkZXIpKSA/XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgKHJlYWRlciB8fCAwKVtcImxpbmVcIl0gPSBpbmMoKHJlYWRlciB8fCAwKVtcImxpbmVcIl0pO1xuICAgICAgcmV0dXJuIChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl0gPSAtMTtcbiAgICB9KSgpIDpcbiAgICAocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdID0gaW5jKChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl0pO1xuICByZXR1cm4gY2g7XG59O1xuZXhwb3J0cy5yZWFkQ2hhciA9IHJlYWRDaGFyO1xuXG52YXIgaXNOZXdsaW5lID0gZnVuY3Rpb24gaXNOZXdsaW5lKGNoKSB7XG4gIHJldHVybiBcIlxcblwiID09PSBjaDtcbn07XG5leHBvcnRzLmlzTmV3bGluZSA9IGlzTmV3bGluZTtcblxudmFyIGlzQnJlYWtpbmdXaGl0ZXNwYWNlID0gZnVuY3Rpb24gaXNCcmVha2luZ1doaXRlc3BhY2UoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gXCIgXCIpIHx8IChjaCA9PT0gXCJcXHRcIikgfHwgKGNoID09PSBcIlxcblwiKSB8fCAoY2ggPT09IFwiXFxyXCIpO1xufTtcbmV4cG9ydHMuaXNCcmVha2luZ1doaXRlc3BhY2UgPSBpc0JyZWFraW5nV2hpdGVzcGFjZTtcblxudmFyIGlzV2hpdGVzcGFjZSA9IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjaCkge1xuICByZXR1cm4gKGlzQnJlYWtpbmdXaGl0ZXNwYWNlKGNoKSkgfHwgKFwiLFwiID09PSBjaCk7XG59O1xuZXhwb3J0cy5pc1doaXRlc3BhY2UgPSBpc1doaXRlc3BhY2U7XG5cbnZhciBpc051bWVyaWMgPSBmdW5jdGlvbiBpc051bWVyaWMoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gXCIwXCIpIHx8IChjaCA9PT0gXCIxXCIpIHx8IChjaCA9PT0gXCIyXCIpIHx8IChjaCA9PT0gXCIzXCIpIHx8IChjaCA9PT0gXCI0XCIpIHx8IChjaCA9PT0gXCI1XCIpIHx8IChjaCA9PT0gXCI2XCIpIHx8IChjaCA9PT0gXCI3XCIpIHx8IChjaCA9PT0gXCI4XCIpIHx8IChjaCA9PT0gXCI5XCIpO1xufTtcbmV4cG9ydHMuaXNOdW1lcmljID0gaXNOdW1lcmljO1xuXG52YXIgaXNDb21tZW50UHJlZml4ID0gZnVuY3Rpb24gaXNDb21tZW50UHJlZml4KGNoKSB7XG4gIHJldHVybiBcIjtcIiA9PT0gY2g7XG59O1xuZXhwb3J0cy5pc0NvbW1lbnRQcmVmaXggPSBpc0NvbW1lbnRQcmVmaXg7XG5cbnZhciBpc051bWJlckxpdGVyYWwgPSBmdW5jdGlvbiBpc051bWJlckxpdGVyYWwocmVhZGVyLCBpbml0Y2gpIHtcbiAgcmV0dXJuIChpc051bWVyaWMoaW5pdGNoKSkgfHwgKCgoXCIrXCIgPT09IGluaXRjaCkgfHwgKFwiLVwiID09PSBpbml0Y2gpKSAmJiAoaXNOdW1lcmljKHBlZWtDaGFyKHJlYWRlcikpKSk7XG59O1xuZXhwb3J0cy5pc051bWJlckxpdGVyYWwgPSBpc051bWJlckxpdGVyYWw7XG5cbnZhciByZWFkZXJFcnJvciA9IGZ1bmN0aW9uIHJlYWRlckVycm9yKHJlYWRlciwgbWVzc2FnZSkge1xuICB2YXIgdGV4dCA9IFwiXCIgKyBtZXNzYWdlICsgXCJcXG5cIiArIFwibGluZTpcIiArICgocmVhZGVyIHx8IDApW1wibGluZVwiXSkgKyBcIlxcblwiICsgXCJjb2x1bW46XCIgKyAoKHJlYWRlciB8fCAwKVtcImNvbHVtblwiXSk7XG4gIHZhciBlcnJvciA9IFN5bnRheEVycm9yKHRleHQsIChyZWFkZXIgfHwgMClbXCJ1cmlcIl0pO1xuICBlcnJvci5saW5lID0gKHJlYWRlciB8fCAwKVtcImxpbmVcIl07XG4gIGVycm9yLmNvbHVtbiA9IChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl07XG4gIGVycm9yLnVyaSA9IChyZWFkZXIgfHwgMClbXCJ1cmlcIl07XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7IHRocm93IGVycm9yOyB9KSgpO1xufTtcbmV4cG9ydHMucmVhZGVyRXJyb3IgPSByZWFkZXJFcnJvcjtcblxudmFyIGlzTWFjcm9UZXJtaW5hdGluZyA9IGZ1bmN0aW9uIGlzTWFjcm9UZXJtaW5hdGluZyhjaCkge1xuICByZXR1cm4gKCEoY2ggPT09IFwiI1wiKSkgJiYgKCEoY2ggPT09IFwiJ1wiKSkgJiYgKCEoY2ggPT09IFwiOlwiKSkgJiYgKG1hY3JvcyhjaCkpO1xufTtcbmV4cG9ydHMuaXNNYWNyb1Rlcm1pbmF0aW5nID0gaXNNYWNyb1Rlcm1pbmF0aW5nO1xuXG52YXIgcmVhZFRva2VuID0gZnVuY3Rpb24gcmVhZFRva2VuKHJlYWRlciwgaW5pdGNoKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKGlzV2hpdGVzcGFjZShjaCkpIHx8IChpc01hY3JvVGVybWluYXRpbmcoY2gpKSA/XG4gICAgICBidWZmZXIgOlxuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyAocmVhZENoYXIocmVhZGVyKSksIGNoID0gcGVla0NoYXIocmVhZGVyKSwgbG9vcCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKGluaXRjaCwgcGVla0NoYXIocmVhZGVyKSk7XG59O1xuZXhwb3J0cy5yZWFkVG9rZW4gPSByZWFkVG9rZW47XG5cbnZhciBza2lwTGluZSA9IGZ1bmN0aW9uIHNraXBMaW5lKHJlYWRlciwgXykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgICAgIHJldHVybiAoY2ggPT09IFwiXFxuXCIpIHx8IChjaCA9PT0gXCJcXHJcIikgfHwgKGlzTmlsKGNoKSkgP1xuICAgICAgICByZWFkZXIgOlxuICAgICAgICAobG9vcCk7XG4gICAgfSkoKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoKTtcbn07XG5leHBvcnRzLnNraXBMaW5lID0gc2tpcExpbmU7XG5cbnZhciBpbnRQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiXihbLStdPykoPzooMCl8KFsxLTldWzAtOV0qKXwwW3hYXShbMC05QS1GYS1mXSspfDAoWzAtN10rKXwoWzEtOV1bMC05XT8pW3JSXShbMC05QS1aYS16XSspfDBbMC05XSspKE4pPyRcIik7XG5leHBvcnRzLmludFBhdHRlcm4gPSBpbnRQYXR0ZXJuO1xuXG52YXIgcmF0aW9QYXR0ZXJuID0gcmVQYXR0ZXJuKFwiKFstK10/WzAtOV0rKS8oWzAtOV0rKVwiKTtcbmV4cG9ydHMucmF0aW9QYXR0ZXJuID0gcmF0aW9QYXR0ZXJuO1xuXG52YXIgZmxvYXRQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiKFstK10/WzAtOV0rKFxcXFwuWzAtOV0qKT8oW2VFXVstK10/WzAtOV0rKT8pKE0pP1wiKTtcbmV4cG9ydHMuZmxvYXRQYXR0ZXJuID0gZmxvYXRQYXR0ZXJuO1xuXG52YXIgbWF0Y2hJbnQgPSBmdW5jdGlvbiBtYXRjaEludChzKSB7XG4gIHZhciBncm91cHMgPSByZUZpbmQoaW50UGF0dGVybiwgcyk7XG4gIHZhciBncm91cDMgPSBncm91cHNbMl07XG4gIHJldHVybiAhKChpc05pbChncm91cDMpKSB8fCAoY291bnQoZ3JvdXAzKSA8IDEpKSA/XG4gICAgMCA6XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5lZ2F0ZSA9IFwiLVwiID09PSBncm91cHNbMV0gP1xuICAgICAgICAtMSA6XG4gICAgICAgIDE7XG4gICAgICB2YXIgYSA9IGdyb3Vwc1szXSA/XG4gICAgICAgIFtncm91cHNbM10sIDEwXSA6XG4gICAgICBncm91cHNbNF0gP1xuICAgICAgICBbZ3JvdXBzWzRdLCAxNl0gOlxuICAgICAgZ3JvdXBzWzVdID9cbiAgICAgICAgW2dyb3Vwc1s1XSwgOF0gOlxuICAgICAgZ3JvdXBzWzddID9cbiAgICAgICAgW2dyb3Vwc1s3XSwgcGFyc2VJbnQoZ3JvdXBzWzddKV0gOlxuICAgICAgXCJlbHNlXCIgP1xuICAgICAgICBbdm9pZCgwKSwgdm9pZCgwKV0gOlxuICAgICAgICB2b2lkKDApO1xuICAgICAgdmFyIG4gPSBhWzBdO1xuICAgICAgdmFyIHJhZGl4ID0gYVsxXTtcbiAgICAgIHJldHVybiBpc05pbChuKSA/XG4gICAgICAgIHZvaWQoMCkgOlxuICAgICAgICBuZWdhdGUgKiAocGFyc2VJbnQobiwgcmFkaXgpKTtcbiAgICB9KSgpO1xufTtcbmV4cG9ydHMubWF0Y2hJbnQgPSBtYXRjaEludDtcblxudmFyIG1hdGNoUmF0aW8gPSBmdW5jdGlvbiBtYXRjaFJhdGlvKHMpIHtcbiAgdmFyIGdyb3VwcyA9IHJlRmluZChyYXRpb1BhdHRlcm4sIHMpO1xuICB2YXIgbnVtaW5hdG9yID0gZ3JvdXBzWzFdO1xuICB2YXIgZGVub21pbmF0b3IgPSBncm91cHNbMl07XG4gIHJldHVybiAocGFyc2VJbnQobnVtaW5hdG9yKSkgLyAocGFyc2VJbnQoZGVub21pbmF0b3IpKTtcbn07XG5leHBvcnRzLm1hdGNoUmF0aW8gPSBtYXRjaFJhdGlvO1xuXG52YXIgbWF0Y2hGbG9hdCA9IGZ1bmN0aW9uIG1hdGNoRmxvYXQocykge1xuICByZXR1cm4gcGFyc2VGbG9hdChzKTtcbn07XG5leHBvcnRzLm1hdGNoRmxvYXQgPSBtYXRjaEZsb2F0O1xuXG52YXIgbWF0Y2hOdW1iZXIgPSBmdW5jdGlvbiBtYXRjaE51bWJlcihzKSB7XG4gIHJldHVybiByZU1hdGNoZXMoaW50UGF0dGVybiwgcykgP1xuICAgIG1hdGNoSW50KHMpIDpcbiAgcmVNYXRjaGVzKHJhdGlvUGF0dGVybiwgcykgP1xuICAgIG1hdGNoUmF0aW8ocykgOlxuICByZU1hdGNoZXMoZmxvYXRQYXR0ZXJuLCBzKSA/XG4gICAgbWF0Y2hGbG9hdChzKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1hdGNoTnVtYmVyID0gbWF0Y2hOdW1iZXI7XG5cbnZhciBlc2NhcGVDaGFyTWFwID0gZnVuY3Rpb24gZXNjYXBlQ2hhck1hcChjKSB7XG4gIHJldHVybiBjID09PSBcInRcIiA/XG4gICAgXCJcXHRcIiA6XG4gIGMgPT09IFwiclwiID9cbiAgICBcIlxcclwiIDpcbiAgYyA9PT0gXCJuXCIgP1xuICAgIFwiXFxuXCIgOlxuICBjID09PSBcIlxcXFxcIiA/XG4gICAgXCJcXFxcXCIgOlxuICBjID09PSBcIlxcXCJcIiA/XG4gICAgXCJcXFwiXCIgOlxuICBjID09PSBcImJcIiA/XG4gICAgXCJcYlwiIDpcbiAgYyA9PT0gXCJmXCIgP1xuICAgIFwiXGZcIiA6XG4gIFwiZWxzZVwiID9cbiAgICB2b2lkKDApIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuZXNjYXBlQ2hhck1hcCA9IGVzY2FwZUNoYXJNYXA7XG5cbnZhciByZWFkMkNoYXJzID0gZnVuY3Rpb24gcmVhZDJDaGFycyhyZWFkZXIpIHtcbiAgcmV0dXJuIFwiXCIgKyAocmVhZENoYXIocmVhZGVyKSkgKyAocmVhZENoYXIocmVhZGVyKSk7XG59O1xuZXhwb3J0cy5yZWFkMkNoYXJzID0gcmVhZDJDaGFycztcblxudmFyIHJlYWQ0Q2hhcnMgPSBmdW5jdGlvbiByZWFkNENoYXJzKHJlYWRlcikge1xuICByZXR1cm4gXCJcIiArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKSArIChyZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWQ0Q2hhcnMgPSByZWFkNENoYXJzO1xuXG52YXIgdW5pY29kZTJQYXR0ZXJuID0gcmVQYXR0ZXJuKFwiWzAtOUEtRmEtZl17Mn1cIik7XG5leHBvcnRzLnVuaWNvZGUyUGF0dGVybiA9IHVuaWNvZGUyUGF0dGVybjtcblxudmFyIHVuaWNvZGU0UGF0dGVybiA9IHJlUGF0dGVybihcIlswLTlBLUZhLWZdezR9XCIpO1xuZXhwb3J0cy51bmljb2RlNFBhdHRlcm4gPSB1bmljb2RlNFBhdHRlcm47XG5cbnZhciB2YWxpZGF0ZVVuaWNvZGVFc2NhcGUgPSBmdW5jdGlvbiB2YWxpZGF0ZVVuaWNvZGVFc2NhcGUodW5pY29kZVBhdHRlcm4sIHJlYWRlciwgZXNjYXBlQ2hhciwgdW5pY29kZVN0cikge1xuICByZXR1cm4gcmVNYXRjaGVzKHVuaWNvZGVQYXR0ZXJuLCB1bmljb2RlU3RyKSA/XG4gICAgdW5pY29kZVN0ciA6XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIlwiICsgXCJVbmV4cGVjdGVkIHVuaWNvZGUgZXNjYXBlIFwiICsgXCJcXFxcXCIgKyBlc2NhcGVDaGFyICsgdW5pY29kZVN0cik7XG59O1xuZXhwb3J0cy52YWxpZGF0ZVVuaWNvZGVFc2NhcGUgPSB2YWxpZGF0ZVVuaWNvZGVFc2NhcGU7XG5cbnZhciBtYWtlVW5pY29kZUNoYXIgPSBmdW5jdGlvbiBtYWtlVW5pY29kZUNoYXIoY29kZVN0ciwgYmFzZSkge1xuICB2YXIgYmFzZSA9IGJhc2UgfHwgMTY7XG4gIHZhciBjb2RlID0gcGFyc2VJbnQoY29kZVN0ciwgYmFzZSk7XG4gIHJldHVybiBjaGFyKGNvZGUpO1xufTtcbmV4cG9ydHMubWFrZVVuaWNvZGVDaGFyID0gbWFrZVVuaWNvZGVDaGFyO1xuXG52YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uIGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpIHtcbiAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgdmFyIG1hcHJlc3VsdCA9IGVzY2FwZUNoYXJNYXAoY2gpO1xuICByZXR1cm4gbWFwcmVzdWx0ID9cbiAgICBtYXByZXN1bHQgOlxuICBjaCA9PT0gXCJ4XCIgP1xuICAgIG1ha2VVbmljb2RlQ2hhcih2YWxpZGF0ZVVuaWNvZGVFc2NhcGUodW5pY29kZTJQYXR0ZXJuLCByZWFkZXIsIGNoLCByZWFkMkNoYXJzKHJlYWRlcikpKSA6XG4gIGNoID09PSBcInVcIiA/XG4gICAgbWFrZVVuaWNvZGVDaGFyKHZhbGlkYXRlVW5pY29kZUVzY2FwZSh1bmljb2RlNFBhdHRlcm4sIHJlYWRlciwgY2gsIHJlYWQ0Q2hhcnMocmVhZGVyKSkpIDpcbiAgaXNOdW1lcmljKGNoKSA/XG4gICAgY2hhcihjaCkgOlxuICBcImVsc2VcIiA/XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIlwiICsgXCJVbmV4cGVjdGVkIHVuaWNvZGUgZXNjYXBlIFwiICsgXCJcXFxcXCIgKyBjaCkgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5lc2NhcGVDaGFyID0gZXNjYXBlQ2hhcjtcblxudmFyIHJlYWRQYXN0ID0gZnVuY3Rpb24gcmVhZFBhc3QocHJlZGljYXRlLCByZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKF8pIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBwcmVkaWNhdGUocGVla0NoYXIocmVhZGVyKSkgP1xuICAgICAgKF8gPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICBwZWVrQ2hhcihyZWFkZXIpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KSh2b2lkKDApKTtcbn07XG5leHBvcnRzLnJlYWRQYXN0ID0gcmVhZFBhc3Q7XG5cbnZhciByZWFkRGVsaW1pdGVkTGlzdCA9IGZ1bmN0aW9uIHJlYWREZWxpbWl0ZWRMaXN0KGRlbGltLCByZWFkZXIsIGlzUmVjdXJzaXZlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChmb3JtKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZFBhc3QoaXNXaGl0ZXNwYWNlLCByZWFkZXIpO1xuICAgICAgIShjaCkgP1xuICAgICAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiRU9GXCIpIDpcbiAgICAgICAgdm9pZCgwKTtcbiAgICAgIHJldHVybiBkZWxpbSA9PT0gY2ggP1xuICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmVhZENoYXIocmVhZGVyKTtcbiAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgfSkoKSA6XG4gICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbWFjcm8gPSBtYWNyb3MoY2gpO1xuICAgICAgICAgIHJldHVybiBtYWNybyA/XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBtYWNybyhyZWFkZXIsIHJlYWRDaGFyKHJlYWRlcikpO1xuICAgICAgICAgICAgICByZXR1cm4gKGZvcm0gPSByZXN1bHQgPT09IHJlYWRlciA/XG4gICAgICAgICAgICAgICAgZm9ybSA6XG4gICAgICAgICAgICAgICAgY29uaihmb3JtLCByZXN1bHQpLCBsb29wKTtcbiAgICAgICAgICAgIH0pKCkgOlxuICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgbyA9IHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBpc1JlY3Vyc2l2ZSk7XG4gICAgICAgICAgICAgIHJldHVybiAoZm9ybSA9IG8gPT09IHJlYWRlciA/XG4gICAgICAgICAgICAgICAgZm9ybSA6XG4gICAgICAgICAgICAgICAgY29uaihmb3JtLCBvKSwgbG9vcCk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9KSgpO1xuICAgIH0pKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKFtdKTtcbn07XG5leHBvcnRzLnJlYWREZWxpbWl0ZWRMaXN0ID0gcmVhZERlbGltaXRlZExpc3Q7XG5cbnZhciBub3RJbXBsZW1lbnRlZCA9IGZ1bmN0aW9uIG5vdEltcGxlbWVudGVkKHJlYWRlciwgY2gpIHtcbiAgcmV0dXJuIHJlYWRlckVycm9yKHJlYWRlciwgXCJcIiArIFwiUmVhZGVyIGZvciBcIiArIGNoICsgXCIgbm90IGltcGxlbWVudGVkIHlldFwiKTtcbn07XG5leHBvcnRzLm5vdEltcGxlbWVudGVkID0gbm90SW1wbGVtZW50ZWQ7XG5cbnZhciByZWFkRGlzcGF0Y2ggPSBmdW5jdGlvbiByZWFkRGlzcGF0Y2gocmVhZGVyLCBfKSB7XG4gIHZhciBjaCA9IHJlYWRDaGFyKHJlYWRlcik7XG4gIHZhciBkbSA9IGRpc3BhdGNoTWFjcm9zKGNoKTtcbiAgcmV0dXJuIGRtID9cbiAgICBkbShyZWFkZXIsIF8pIDpcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gbWF5YmVSZWFkVGFnZ2VkVHlwZShyZWFkZXIsIGNoKTtcbiAgICAgIHJldHVybiBvYmplY3QgP1xuICAgICAgICBvYmplY3QgOlxuICAgICAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiTm8gZGlzcGF0Y2ggbWFjcm8gZm9yIFwiLCBjaCk7XG4gICAgfSkoKTtcbn07XG5leHBvcnRzLnJlYWREaXNwYXRjaCA9IHJlYWREaXNwYXRjaDtcblxudmFyIHJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgPSBmdW5jdGlvbiByZWFkVW5tYXRjaGVkRGVsaW1pdGVyKHJkciwgY2gpIHtcbiAgcmV0dXJuIHJlYWRlckVycm9yKHJkciwgXCJVbm1hY2hlZCBkZWxpbWl0ZXIgXCIsIGNoKTtcbn07XG5leHBvcnRzLnJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgPSByZWFkVW5tYXRjaGVkRGVsaW1pdGVyO1xuXG52YXIgcmVhZExpc3QgPSBmdW5jdGlvbiByZWFkTGlzdChyZWFkZXIsIF8pIHtcbiAgdmFyIGZvcm0gPSByZWFkRGVsaW1pdGVkTGlzdChcIilcIiwgcmVhZGVyLCB0cnVlKTtcbiAgcmV0dXJuIHdpdGhNZXRhKGxpc3QuYXBwbHkobGlzdCwgZm9ybSksIG1ldGEoZm9ybSkpO1xufTtcbmV4cG9ydHMucmVhZExpc3QgPSByZWFkTGlzdDtcblxudmFyIHJlYWRDb21tZW50ID0gZnVuY3Rpb24gcmVhZENvbW1lbnQocmVhZGVyLCBfKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKFwiXFxuXCIgPT09IGNoKSA/XG4gICAgICByZWFkZXIgfHwgKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiY29tbWVudFwiKSwgYnVmZmVyKSkgOlxuICAgIChcIlxcXFxcIiA9PT0gY2gpID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpKSwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgXCJlbHNlXCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRDb21tZW50ID0gcmVhZENvbW1lbnQ7XG5cbnZhciByZWFkVmVjdG9yID0gZnVuY3Rpb24gcmVhZFZlY3RvcihyZWFkZXIpIHtcbiAgcmV0dXJuIHJlYWREZWxpbWl0ZWRMaXN0KFwiXVwiLCByZWFkZXIsIHRydWUpO1xufTtcbmV4cG9ydHMucmVhZFZlY3RvciA9IHJlYWRWZWN0b3I7XG5cbnZhciByZWFkTWFwID0gZnVuY3Rpb24gcmVhZE1hcChyZWFkZXIpIHtcbiAgdmFyIGZvcm0gPSByZWFkRGVsaW1pdGVkTGlzdChcIn1cIiwgcmVhZGVyLCB0cnVlKTtcbiAgcmV0dXJuIGlzT2RkKGNvdW50KGZvcm0pKSA/XG4gICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIk1hcCBsaXRlcmFsIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBmb3Jtc1wiKSA6XG4gICAgd2l0aE1ldGEoZGljdGlvbmFyeS5hcHBseShkaWN0aW9uYXJ5LCBmb3JtKSwgbWV0YShmb3JtKSk7XG59O1xuZXhwb3J0cy5yZWFkTWFwID0gcmVhZE1hcDtcblxudmFyIHJlYWRTZXQgPSBmdW5jdGlvbiByZWFkU2V0KHJlYWRlciwgXykge1xuICB2YXIgZm9ybSA9IHJlYWREZWxpbWl0ZWRMaXN0KFwifVwiLCByZWFkZXIsIHRydWUpO1xuICByZXR1cm4gd2l0aE1ldGEoY29uY2F0KFtzeW1ib2wodm9pZCgwKSwgXCJzZXRcIildLCBmb3JtKSwgbWV0YShmb3JtKSk7XG59O1xuZXhwb3J0cy5yZWFkU2V0ID0gcmVhZFNldDtcblxudmFyIHJlYWROdW1iZXIgPSBmdW5jdGlvbiByZWFkTnVtYmVyKHJlYWRlciwgaW5pdGNoKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChidWZmZXIsIGNoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGlzTmlsKGNoKSkgfHwgKGlzV2hpdGVzcGFjZShjaCkpIHx8IChtYWNyb3MoY2gpKSA/XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IG1hdGNoTnVtYmVyKGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBpc05pbChtYXRjaCkgP1xuICAgICAgICAgIHJlYWRlckVycm9yKHJlYWRlciwgXCJJbnZhbGlkIG51bWJlciBmb3JtYXQgW1wiLCBidWZmZXIsIFwiXVwiKSA6XG4gICAgICAgICAgbWF0Y2g7XG4gICAgICB9KSgpIDpcbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKHJlYWRDaGFyKHJlYWRlcikpLCBjaCA9IHBlZWtDaGFyKHJlYWRlciksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShpbml0Y2gsIHBlZWtDaGFyKHJlYWRlcikpO1xufTtcbmV4cG9ydHMucmVhZE51bWJlciA9IHJlYWROdW1iZXI7XG5cbnZhciByZWFkU3RyaW5nID0gZnVuY3Rpb24gcmVhZFN0cmluZyhyZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGJ1ZmZlciwgY2gpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc05pbChjaCkgP1xuICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRiB3aGlsZSByZWFkaW5nIHN0cmluZ1wiKSA6XG4gICAgXCJcXFxcXCIgPT09IGNoID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgKGVzY2FwZUNoYXIoYnVmZmVyLCByZWFkZXIpKSwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgXCJcXFwiXCIgPT09IGNoID9cbiAgICAgIGJ1ZmZlciA6XG4gICAgXCJkZWZhdWx0XCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRTdHJpbmcgPSByZWFkU3RyaW5nO1xuXG52YXIgcmVhZFVucXVvdGUgPSBmdW5jdGlvbiByZWFkVW5xdW90ZShyZWFkZXIpIHtcbiAgdmFyIGNoID0gcGVla0NoYXIocmVhZGVyKTtcbiAgcmV0dXJuICEoY2gpID9cbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiRU9GIHdoaWxlIHJlYWRpbmcgY2hhcmFjdGVyXCIpIDpcbiAgY2ggPT09IFwiQFwiID9cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICByZWFkQ2hhcihyZWFkZXIpO1xuICAgICAgcmV0dXJuIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidW5xdW90ZS1zcGxpY2luZ1wiKSwgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpKTtcbiAgICB9KSgpIDpcbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGVcIiksIHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCB0cnVlKSk7XG59O1xuZXhwb3J0cy5yZWFkVW5xdW90ZSA9IHJlYWRVbnF1b3RlO1xuXG52YXIgc3BlY2lhbFN5bWJvbHMgPSBmdW5jdGlvbiBzcGVjaWFsU3ltYm9scyh0ZXh0LCBub3RGb3VuZCkge1xuICByZXR1cm4gdGV4dCA9PT0gXCJuaWxcIiA/XG4gICAgdm9pZCgwKSA6XG4gIHRleHQgPT09IFwidHJ1ZVwiID9cbiAgICB0cnVlIDpcbiAgdGV4dCA9PT0gXCJmYWxzZVwiID9cbiAgICBmYWxzZSA6XG4gIFwiZWxzZVwiID9cbiAgICBub3RGb3VuZCA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnNwZWNpYWxTeW1ib2xzID0gc3BlY2lhbFN5bWJvbHM7XG5cbnZhciByZWFkU3ltYm9sID0gZnVuY3Rpb24gcmVhZFN5bWJvbChyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgdG9rZW4gPSByZWFkVG9rZW4ocmVhZGVyLCBpbml0Y2gpO1xuICB2YXIgcGFydHMgPSBzcGxpdCh0b2tlbiwgXCIvXCIpO1xuICB2YXIgaGFzTnMgPSAoY291bnQocGFydHMpID4gMSkgJiYgKGNvdW50KHRva2VuKSA+IDEpO1xuICB2YXIgbnMgPSBmaXJzdChwYXJ0cyk7XG4gIHZhciBuYW1lID0gam9pbihcIi9cIiwgcmVzdChwYXJ0cykpO1xuICByZXR1cm4gaGFzTnMgP1xuICAgIHN5bWJvbChucywgbmFtZSkgOlxuICAgIHNwZWNpYWxTeW1ib2xzKHRva2VuLCBzeW1ib2wodG9rZW4pKTtcbn07XG5leHBvcnRzLnJlYWRTeW1ib2wgPSByZWFkU3ltYm9sO1xuXG52YXIgcmVhZEtleXdvcmQgPSBmdW5jdGlvbiByZWFkS2V5d29yZChyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgdG9rZW4gPSByZWFkVG9rZW4ocmVhZGVyLCByZWFkQ2hhcihyZWFkZXIpKTtcbiAgdmFyIHBhcnRzID0gc3BsaXQodG9rZW4sIFwiL1wiKTtcbiAgdmFyIG5hbWUgPSBsYXN0KHBhcnRzKTtcbiAgdmFyIG5zID0gY291bnQocGFydHMpID4gMSA/XG4gICAgam9pbihcIi9cIiwgYnV0bGFzdChwYXJ0cykpIDpcbiAgICB2b2lkKDApO1xuICB2YXIgaXNzdWUgPSBsYXN0KG5zKSA9PT0gXCI6XCIgP1xuICAgIFwibmFtZXNwYWNlIGNhbid0IGVuZHMgd2l0aCBcXFwiOlxcXCJcIiA6XG4gIGxhc3QobmFtZSkgPT09IFwiOlwiID9cbiAgICBcIm5hbWUgY2FuJ3QgZW5kIHdpdGggXFxcIjpcXFwiXCIgOlxuICBsYXN0KG5hbWUpID09PSBcIi9cIiA/XG4gICAgXCJuYW1lIGNhbid0IGVuZCB3aXRoIFxcXCIvXFxcIlwiIDpcbiAgY291bnQoc3BsaXQodG9rZW4sIFwiOjpcIikpID4gMSA/XG4gICAgXCJuYW1lIGNhbid0IGNvbnRhaW4gXFxcIjo6XFxcIlwiIDpcbiAgICB2b2lkKDApO1xuICByZXR1cm4gaXNzdWUgP1xuICAgIHJlYWRlckVycm9yKHJlYWRlciwgXCJJbnZhbGlkIHRva2VuIChcIiwgaXNzdWUsIFwiKTogXCIsIHRva2VuKSA6XG4gICghKG5zKSkgJiYgKGZpcnN0KG5hbWUpID09PSBcIjpcIikgP1xuICAgIGtleXdvcmQocmVzdChuYW1lKSkgOlxuICAgIGtleXdvcmQobnMsIG5hbWUpO1xufTtcbmV4cG9ydHMucmVhZEtleXdvcmQgPSByZWFkS2V5d29yZDtcblxudmFyIGRlc3VnYXJNZXRhID0gZnVuY3Rpb24gZGVzdWdhck1ldGEoZikge1xuICByZXR1cm4gaXNLZXl3b3JkKGYpID9cbiAgICBkaWN0aW9uYXJ5KG5hbWUoZiksIHRydWUpIDpcbiAgaXNTeW1ib2woZikgP1xuICAgIHtcbiAgICAgIFwidGFnXCI6IGZcbiAgICB9IDpcbiAgaXNTdHJpbmcoZikgP1xuICAgIHtcbiAgICAgIFwidGFnXCI6IGZcbiAgICB9IDpcbiAgXCJlbHNlXCIgP1xuICAgIGYgOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5kZXN1Z2FyTWV0YSA9IGRlc3VnYXJNZXRhO1xuXG52YXIgd3JhcHBpbmdSZWFkZXIgPSBmdW5jdGlvbiB3cmFwcGluZ1JlYWRlcihwcmVmaXgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJlYWRlcikge1xuICAgIHJldHVybiBsaXN0KHByZWZpeCwgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpKTtcbiAgfTtcbn07XG5leHBvcnRzLndyYXBwaW5nUmVhZGVyID0gd3JhcHBpbmdSZWFkZXI7XG5cbnZhciB0aHJvd2luZ1JlYWRlciA9IGZ1bmN0aW9uIHRocm93aW5nUmVhZGVyKG1zZykge1xuICByZXR1cm4gZnVuY3Rpb24ocmVhZGVyKSB7XG4gICAgcmV0dXJuIHJlYWRlckVycm9yKHJlYWRlciwgbXNnKTtcbiAgfTtcbn07XG5leHBvcnRzLnRocm93aW5nUmVhZGVyID0gdGhyb3dpbmdSZWFkZXI7XG5cbnZhciByZWFkTWV0YSA9IGZ1bmN0aW9uIHJlYWRNZXRhKHJlYWRlciwgXykge1xuICB2YXIgbWV0YWRhdGEgPSBkZXN1Z2FyTWV0YShyZWFkKHJlYWRlciwgdHJ1ZSwgdm9pZCgwKSwgdHJ1ZSkpO1xuICAhKGlzRGljdGlvbmFyeShtZXRhZGF0YSkpID9cbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiTWV0YWRhdGEgbXVzdCBiZSBTeW1ib2wsIEtleXdvcmQsIFN0cmluZyBvciBNYXBcIikgOlxuICAgIHZvaWQoMCk7XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm0gPSByZWFkKHJlYWRlciwgdHJ1ZSwgdm9pZCgwKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGZvcm0pID9cbiAgICAgIHdpdGhNZXRhKGZvcm0sIGNvbmoobWV0YWRhdGEsIG1ldGEoZm9ybSkpKSA6XG4gICAgICBmb3JtO1xuICB9KSgpO1xufTtcbmV4cG9ydHMucmVhZE1ldGEgPSByZWFkTWV0YTtcblxudmFyIHJlYWRSZWdleCA9IGZ1bmN0aW9uIHJlYWRSZWdleChyZWFkZXIpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKGJ1ZmZlciwgY2gpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc05pbChjaCkgP1xuICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRiB3aGlsZSByZWFkaW5nIHN0cmluZ1wiKSA6XG4gICAgXCJcXFxcXCIgPT09IGNoID9cbiAgICAgIChidWZmZXIgPSBcIlwiICsgYnVmZmVyICsgY2ggKyAocmVhZENoYXIocmVhZGVyKSksIGNoID0gcmVhZENoYXIocmVhZGVyKSwgbG9vcCkgOlxuICAgIFwiXFxcIlwiID09PSBjaCA/XG4gICAgICByZVBhdHRlcm4oYnVmZmVyKSA6XG4gICAgXCJkZWZhdWx0XCIgP1xuICAgICAgKGJ1ZmZlciA9IFwiXCIgKyBidWZmZXIgKyBjaCwgY2ggPSByZWFkQ2hhcihyZWFkZXIpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCByZWFkQ2hhcihyZWFkZXIpKTtcbn07XG5leHBvcnRzLnJlYWRSZWdleCA9IHJlYWRSZWdleDtcblxudmFyIHJlYWRQYXJhbSA9IGZ1bmN0aW9uIHJlYWRQYXJhbShyZWFkZXIsIGluaXRjaCkge1xuICB2YXIgZm9ybSA9IHJlYWRTeW1ib2wocmVhZGVyLCBpbml0Y2gpO1xuICByZXR1cm4gaXNFcXVhbChmb3JtLCBzeW1ib2woXCIlXCIpKSA/XG4gICAgc3ltYm9sKFwiJTFcIikgOlxuICAgIGZvcm07XG59O1xuZXhwb3J0cy5yZWFkUGFyYW0gPSByZWFkUGFyYW07XG5cbnZhciBpc1BhcmFtID0gZnVuY3Rpb24gaXNQYXJhbShmb3JtKSB7XG4gIHJldHVybiAoaXNTeW1ib2woZm9ybSkpICYmIChcIiVcIiA9PT0gZmlyc3QobmFtZShmb3JtKSkpO1xufTtcbmV4cG9ydHMuaXNQYXJhbSA9IGlzUGFyYW07XG5cbnZhciBsYW1iZGFQYXJhbXNIYXNoID0gZnVuY3Rpb24gbGFtYmRhUGFyYW1zSGFzaChmb3JtKSB7XG4gIHJldHVybiBpc1BhcmFtKGZvcm0pID9cbiAgICBkaWN0aW9uYXJ5KGZvcm0sIGZvcm0pIDpcbiAgKGlzRGljdGlvbmFyeShmb3JtKSkgfHwgKGlzVmVjdG9yKGZvcm0pKSB8fCAoaXNMaXN0KGZvcm0pKSA/XG4gICAgY29uai5hcHBseShjb25qLCBtYXAobGFtYmRhUGFyYW1zSGFzaCwgdmVjKGZvcm0pKSkgOlxuICBcImVsc2VcIiA/XG4gICAge30gOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5sYW1iZGFQYXJhbXNIYXNoID0gbGFtYmRhUGFyYW1zSGFzaDtcblxudmFyIGxhbWJkYVBhcmFtcyA9IGZ1bmN0aW9uIGxhbWJkYVBhcmFtcyhib2R5KSB7XG4gIHZhciBuYW1lcyA9IHNvcnQodmFscyhsYW1iZGFQYXJhbXNIYXNoKGJvZHkpKSk7XG4gIHZhciB2YXJpYWRpYyA9IGlzRXF1YWwoZmlyc3QobmFtZXMpLCBzeW1ib2woXCIlJlwiKSk7XG4gIHZhciBuID0gdmFyaWFkaWMgJiYgKGNvdW50KG5hbWVzKSA9PT0gMSkgP1xuICAgIDAgOlxuICAgIHBhcnNlSW50KHJlc3QobmFtZShsYXN0KG5hbWVzKSkpKTtcbiAgdmFyIHBhcmFtcyA9IChmdW5jdGlvbiBsb29wKG5hbWVzLCBpKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaSA8PSBuID9cbiAgICAgIChuYW1lcyA9IGNvbmoobmFtZXMsIHN5bWJvbChcIlwiICsgXCIlXCIgKyBpKSksIGkgPSBpbmMoaSksIGxvb3ApIDpcbiAgICAgIG5hbWVzO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgMSk7XG4gIHJldHVybiB2YXJpYWRpYyA/XG4gICAgY29uaihwYXJhbXMsIHN5bWJvbCh2b2lkKDApLCBcIiZcIiksIHN5bWJvbCh2b2lkKDApLCBcIiUmXCIpKSA6XG4gICAgbmFtZXM7XG59O1xuZXhwb3J0cy5sYW1iZGFQYXJhbXMgPSBsYW1iZGFQYXJhbXM7XG5cbnZhciByZWFkTGFtYmRhID0gZnVuY3Rpb24gcmVhZExhbWJkYShyZWFkZXIpIHtcbiAgdmFyIGJvZHkgPSByZWFkTGlzdChyZWFkZXIpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgbGFtYmRhUGFyYW1zKGJvZHkpLCBib2R5KTtcbn07XG5leHBvcnRzLnJlYWRMYW1iZGEgPSByZWFkTGFtYmRhO1xuXG52YXIgcmVhZERpc2NhcmQgPSBmdW5jdGlvbiByZWFkRGlzY2FyZChyZWFkZXIsIF8pIHtcbiAgcmVhZChyZWFkZXIsIHRydWUsIHZvaWQoMCksIHRydWUpO1xuICByZXR1cm4gcmVhZGVyO1xufTtcbmV4cG9ydHMucmVhZERpc2NhcmQgPSByZWFkRGlzY2FyZDtcblxudmFyIG1hY3JvcyA9IGZ1bmN0aW9uIG1hY3JvcyhjKSB7XG4gIHJldHVybiBjID09PSBcIlxcXCJcIiA/XG4gICAgcmVhZFN0cmluZyA6XG4gIGMgPT09IFwiOlwiID9cbiAgICByZWFkS2V5d29yZCA6XG4gIGMgPT09IFwiO1wiID9cbiAgICByZWFkQ29tbWVudCA6XG4gIGMgPT09IFwiJ1wiID9cbiAgICB3cmFwcGluZ1JlYWRlcihzeW1ib2wodm9pZCgwKSwgXCJxdW90ZVwiKSkgOlxuICBjID09PSBcIkBcIiA/XG4gICAgd3JhcHBpbmdSZWFkZXIoc3ltYm9sKHZvaWQoMCksIFwiZGVyZWZcIikpIDpcbiAgYyA9PT0gXCJeXCIgP1xuICAgIHJlYWRNZXRhIDpcbiAgYyA9PT0gXCJgXCIgP1xuICAgIHdyYXBwaW5nUmVhZGVyKHN5bWJvbCh2b2lkKDApLCBcInN5bnRheC1xdW90ZVwiKSkgOlxuICBjID09PSBcIn5cIiA/XG4gICAgcmVhZFVucXVvdGUgOlxuICBjID09PSBcIihcIiA/XG4gICAgcmVhZExpc3QgOlxuICBjID09PSBcIilcIiA/XG4gICAgcmVhZFVubWF0Y2hlZERlbGltaXRlciA6XG4gIGMgPT09IFwiW1wiID9cbiAgICByZWFkVmVjdG9yIDpcbiAgYyA9PT0gXCJdXCIgP1xuICAgIHJlYWRVbm1hdGNoZWREZWxpbWl0ZXIgOlxuICBjID09PSBcIntcIiA/XG4gICAgcmVhZE1hcCA6XG4gIGMgPT09IFwifVwiID9cbiAgICByZWFkVW5tYXRjaGVkRGVsaW1pdGVyIDpcbiAgYyA9PT0gXCJcXFxcXCIgP1xuICAgIHJlYWRDaGFyIDpcbiAgYyA9PT0gXCIlXCIgP1xuICAgIHJlYWRQYXJhbSA6XG4gIGMgPT09IFwiI1wiID9cbiAgICByZWFkRGlzcGF0Y2ggOlxuICBcImVsc2VcIiA/XG4gICAgdm9pZCgwKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1hY3JvcyA9IG1hY3JvcztcblxudmFyIGRpc3BhdGNoTWFjcm9zID0gZnVuY3Rpb24gZGlzcGF0Y2hNYWNyb3Mocykge1xuICByZXR1cm4gcyA9PT0gXCJ7XCIgP1xuICAgIHJlYWRTZXQgOlxuICBzID09PSBcIihcIiA/XG4gICAgcmVhZExhbWJkYSA6XG4gIHMgPT09IFwiPFwiID9cbiAgICB0aHJvd2luZ1JlYWRlcihcIlVucmVhZGFibGUgZm9ybVwiKSA6XG4gIHMgPT09IFwiXFxcIlwiID9cbiAgICByZWFkUmVnZXggOlxuICBzID09PSBcIiFcIiA/XG4gICAgcmVhZENvbW1lbnQgOlxuICBzID09PSBcIl9cIiA/XG4gICAgcmVhZERpc2NhcmQgOlxuICBcImVsc2VcIiA/XG4gICAgdm9pZCgwKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmRpc3BhdGNoTWFjcm9zID0gZGlzcGF0Y2hNYWNyb3M7XG5cbnZhciByZWFkRm9ybSA9IGZ1bmN0aW9uIHJlYWRGb3JtKHJlYWRlciwgY2gpIHtcbiAgdmFyIHN0YXJ0ID0ge1xuICAgIFwibGluZVwiOiAocmVhZGVyIHx8IDApW1wibGluZVwiXSxcbiAgICBcImNvbHVtblwiOiAocmVhZGVyIHx8IDApW1wiY29sdW1uXCJdXG4gIH07XG4gIHZhciByZWFkTWFjcm8gPSBtYWNyb3MoY2gpO1xuICB2YXIgZm9ybSA9IHJlYWRNYWNybyA/XG4gICAgcmVhZE1hY3JvKHJlYWRlciwgY2gpIDpcbiAgaXNOdW1iZXJMaXRlcmFsKHJlYWRlciwgY2gpID9cbiAgICByZWFkTnVtYmVyKHJlYWRlciwgY2gpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHJlYWRTeW1ib2wocmVhZGVyLCBjaCkgOlxuICAgIHZvaWQoMCk7XG4gIHJldHVybiBmb3JtID09PSByZWFkZXIgP1xuICAgIGZvcm0gOlxuICAhKChpc1N0cmluZyhmb3JtKSkgfHwgKGlzTnVtYmVyKGZvcm0pKSB8fCAoaXNCb29sZWFuKGZvcm0pKSB8fCAoaXNOaWwoZm9ybSkpIHx8IChpc0tleXdvcmQoZm9ybSkpKSA/XG4gICAgd2l0aE1ldGEoZm9ybSwgY29uaih7XG4gICAgICBcInN0YXJ0XCI6IHN0YXJ0LFxuICAgICAgXCJlbmRcIjoge1xuICAgICAgICBcImxpbmVcIjogKHJlYWRlciB8fCAwKVtcImxpbmVcIl0sXG4gICAgICAgIFwiY29sdW1uXCI6IChyZWFkZXIgfHwgMClbXCJjb2x1bW5cIl1cbiAgICAgIH1cbiAgICB9LCBtZXRhKGZvcm0pKSkgOlxuICBcImVsc2VcIiA/XG4gICAgZm9ybSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnJlYWRGb3JtID0gcmVhZEZvcm07XG5cbnZhciByZWFkID0gZnVuY3Rpb24gcmVhZChyZWFkZXIsIGVvZklzRXJyb3IsIHNlbnRpbmVsLCBpc1JlY3Vyc2l2ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoID0gcmVhZENoYXIocmVhZGVyKTtcbiAgICAgIHZhciBmb3JtID0gaXNOaWwoY2gpID9cbiAgICAgICAgZW9mSXNFcnJvciA/XG4gICAgICAgICAgcmVhZGVyRXJyb3IocmVhZGVyLCBcIkVPRlwiKSA6XG4gICAgICAgICAgc2VudGluZWwgOlxuICAgICAgaXNXaGl0ZXNwYWNlKGNoKSA/XG4gICAgICAgIHJlYWRlciA6XG4gICAgICBpc0NvbW1lbnRQcmVmaXgoY2gpID9cbiAgICAgICAgcmVhZChyZWFkQ29tbWVudChyZWFkZXIsIGNoKSwgZW9mSXNFcnJvciwgc2VudGluZWwsIGlzUmVjdXJzaXZlKSA6XG4gICAgICBcImVsc2VcIiA/XG4gICAgICAgIHJlYWRGb3JtKHJlYWRlciwgY2gpIDpcbiAgICAgICAgdm9pZCgwKTtcbiAgICAgIHJldHVybiBmb3JtID09PSByZWFkZXIgP1xuICAgICAgICAobG9vcCkgOlxuICAgICAgICBmb3JtO1xuICAgIH0pKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKCk7XG59O1xuZXhwb3J0cy5yZWFkID0gcmVhZDtcblxudmFyIHJlYWRfID0gZnVuY3Rpb24gcmVhZF8oc291cmNlLCB1cmkpIHtcbiAgdmFyIHJlYWRlciA9IHB1c2hCYWNrUmVhZGVyKHNvdXJjZSwgdXJpKTtcbiAgdmFyIGVvZiA9IGdlbnN5bSgpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZm9ybXMsIGZvcm0pIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBmb3JtID09PSBlb2YgP1xuICAgICAgZm9ybXMgOlxuICAgICAgKGZvcm1zID0gY29uaihmb3JtcywgZm9ybSksIGZvcm0gPSByZWFkKHJlYWRlciwgZmFsc2UsIGVvZiwgZmFsc2UpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoW10sIHJlYWQocmVhZGVyLCBmYWxzZSwgZW9mLCBmYWxzZSkpO1xufTtcbmV4cG9ydHMucmVhZF8gPSByZWFkXztcblxudmFyIHJlYWRGcm9tU3RyaW5nID0gZnVuY3Rpb24gcmVhZEZyb21TdHJpbmcoc291cmNlLCB1cmkpIHtcbiAgdmFyIHJlYWRlciA9IHB1c2hCYWNrUmVhZGVyKHNvdXJjZSwgdXJpKTtcbiAgcmV0dXJuIHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBmYWxzZSk7XG59O1xuZXhwb3J0cy5yZWFkRnJvbVN0cmluZyA9IHJlYWRGcm9tU3RyaW5nO1xuXG52YXIgcmVhZFV1aWQgPSBmdW5jdGlvbiByZWFkVXVpZCh1dWlkKSB7XG4gIHJldHVybiBpc1N0cmluZyh1dWlkKSA/XG4gICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJVVUlELlwiKSwgdXVpZCkgOlxuICAgIHJlYWRlckVycm9yKHZvaWQoMCksIFwiVVVJRCBsaXRlcmFsIGV4cGVjdHMgYSBzdHJpbmcgYXMgaXRzIHJlcHJlc2VudGF0aW9uLlwiKTtcbn07XG5cbnZhciByZWFkUXVldWUgPSBmdW5jdGlvbiByZWFkUXVldWUoaXRlbXMpIHtcbiAgcmV0dXJuIGlzVmVjdG9yKGl0ZW1zKSA/XG4gICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJQZXJzaXN0ZW50UXVldWUuXCIpLCBpdGVtcykgOlxuICAgIHJlYWRlckVycm9yKHZvaWQoMCksIFwiUXVldWUgbGl0ZXJhbCBleHBlY3RzIGEgdmVjdG9yIGZvciBpdHMgZWxlbWVudHMuXCIpO1xufTtcblxudmFyIF9fdGFnVGFibGVfXyA9IGRpY3Rpb25hcnkoXCJ1dWlkXCIsIHJlYWRVdWlkLCBcInF1ZXVlXCIsIHJlYWRRdWV1ZSk7XG5leHBvcnRzLl9fdGFnVGFibGVfXyA9IF9fdGFnVGFibGVfXztcblxudmFyIG1heWJlUmVhZFRhZ2dlZFR5cGUgPSBmdW5jdGlvbiBtYXliZVJlYWRUYWdnZWRUeXBlKHJlYWRlciwgaW5pdGNoKSB7XG4gIHZhciB0YWcgPSByZWFkU3ltYm9sKHJlYWRlciwgaW5pdGNoKTtcbiAgdmFyIHBmbiA9IChfX3RhZ1RhYmxlX18gfHwgMClbbmFtZSh0YWcpXTtcbiAgcmV0dXJuIHBmbiA/XG4gICAgcGZuKHJlYWQocmVhZGVyLCB0cnVlLCB2b2lkKDApLCBmYWxzZSkpIDpcbiAgICByZWFkZXJFcnJvcihyZWFkZXIsIFwiXCIgKyBcIkNvdWxkIG5vdCBmaW5kIHRhZyBwYXJzZXIgZm9yIFwiICsgKG5hbWUodGFnKSkgKyBcIiBpbiBcIiArIChcIlwiICsgKGtleXMoX190YWdUYWJsZV9fKSkpKTtcbn07XG5leHBvcnRzLm1heWJlUmVhZFRhZ2dlZFR5cGUgPSBtYXliZVJlYWRUYWdnZWRUeXBlXG4iLCJ2YXIgdmVjID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS52ZWM7XG52YXIgbWFwID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5tYXA7XG52YXIgbGFzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkubGFzdDtcbnZhciBjb3VudCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgc2Vjb25kID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5zZWNvbmQ7XG52YXIgZmlyc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmZpcnN0O1xudmFyIGlzU2VxdWVudGlhbCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNTZXF1ZW50aWFsO1xudmFyIGlzTGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNMaXN0OztcblxudmFyIGpvaW4gPSAocmVxdWlyZShcIi4vc3RyaW5nXCIpKS5qb2luO1xudmFyIHNwbGl0ID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuc3BsaXQ7O1xuXG52YXIgaXNFcXVhbCA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0VxdWFsO1xudmFyIHN1YnMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuc3VicztcbnZhciBpbmMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaW5jO1xudmFyIHN0ciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5zdHI7XG52YXIgaXNEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc1JlUGF0dGVybiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1JlUGF0dGVybjtcbnZhciBpc0RhdGUgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNEYXRlO1xudmFyIGlzT2JqZWN0ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzT2JqZWN0O1xudmFyIGlzQm9vbGVhbiA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0Jvb2xlYW47XG52YXIgaXNTdHJpbmcgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpbmc7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOdW1iZXI7XG52YXIgaXNWZWN0b3IgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNWZWN0b3I7XG52YXIgaXNOaWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOaWw7O1xuXG52YXIgd2l0aE1ldGEgPSBmdW5jdGlvbiB3aXRoTWV0YSh2YWx1ZSwgbWV0YWRhdGEpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcIm1ldGFkYXRhXCIsIHtcbiAgICBcInZhbHVlXCI6IG1ldGFkYXRhLFxuICAgIFwiY29uZmlndXJhYmxlXCI6IHRydWVcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5leHBvcnRzLndpdGhNZXRhID0gd2l0aE1ldGE7XG5cbnZhciBtZXRhID0gZnVuY3Rpb24gbWV0YSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpID9cbiAgICB2YWx1ZS5tZXRhZGF0YSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm1ldGEgPSBtZXRhO1xuXG52YXIgX19uc1NlcGFyYXRvcl9fID0gXCLigYRcIjtcbmV4cG9ydHMuX19uc1NlcGFyYXRvcl9fID0gX19uc1NlcGFyYXRvcl9fO1xuXG52YXIgU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKG5hbWVzcGFjZSwgbmFtZSkge1xuICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5TeW1ib2wudHlwZSA9IFwid2lzcC5zeW1ib2xcIjtcblxuU3ltYm9sLnByb3RvdHlwZS50eXBlID0gU3ltYm9sLnR5cGU7XG5cblN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5zID0gbmFtZXNwYWNlKHRoaXMpO1xuICByZXR1cm4gbnMgP1xuICAgIFwiXCIgKyBucyArIFwiL1wiICsgKG5hbWUodGhpcykpIDpcbiAgICBcIlwiICsgKG5hbWUodGhpcykpO1xufTtcblxudmFyIHN5bWJvbCA9IGZ1bmN0aW9uIHN5bWJvbChucywgaWQpIHtcbiAgcmV0dXJuIGlzU3ltYm9sKG5zKSA/XG4gICAgbnMgOlxuICBpc0tleXdvcmQobnMpID9cbiAgICBuZXcgU3ltYm9sKG5hbWVzcGFjZShucyksIG5hbWUobnMpKSA6XG4gIGlzTmlsKGlkKSA/XG4gICAgbmV3IFN5bWJvbCh2b2lkKDApLCBucykgOlxuICBcImVsc2VcIiA/XG4gICAgbmV3IFN5bWJvbChucywgaWQpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMuc3ltYm9sID0gc3ltYm9sO1xuXG52YXIgaXNTeW1ib2wgPSBmdW5jdGlvbiBpc1N5bWJvbCh4KSB7XG4gIHJldHVybiB4ICYmIChTeW1ib2wudHlwZSA9PT0geC50eXBlKTtcbn07XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbnZhciBpc0tleXdvcmQgPSBmdW5jdGlvbiBpc0tleXdvcmQoeCkge1xuICByZXR1cm4gKGlzU3RyaW5nKHgpKSAmJiAoY291bnQoeCkgPiAxKSAmJiAoZmlyc3QoeCkgPT09IFwi6p6JXCIpO1xufTtcbmV4cG9ydHMuaXNLZXl3b3JkID0gaXNLZXl3b3JkO1xuXG52YXIga2V5d29yZCA9IGZ1bmN0aW9uIGtleXdvcmQobnMsIGlkKSB7XG4gIHJldHVybiBpc0tleXdvcmQobnMpID9cbiAgICBucyA6XG4gIGlzU3ltYm9sKG5zKSA/XG4gICAgXCJcIiArIFwi6p6JXCIgKyAobmFtZShucykpIDpcbiAgaXNOaWwoaWQpID9cbiAgICBcIlwiICsgXCLqnolcIiArIG5zIDpcbiAgaXNOaWwobnMpID9cbiAgICBcIlwiICsgXCLqnolcIiArIGlkIDpcbiAgXCJlbHNlXCIgP1xuICAgIFwiXCIgKyBcIuqeiVwiICsgbnMgKyBfX25zU2VwYXJhdG9yX18gKyBpZCA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmtleXdvcmQgPSBrZXl3b3JkO1xuXG52YXIga2V5d29yZE5hbWUgPSBmdW5jdGlvbiBrZXl3b3JkTmFtZSh2YWx1ZSkge1xuICByZXR1cm4gbGFzdChzcGxpdChzdWJzKHZhbHVlLCAxKSwgX19uc1NlcGFyYXRvcl9fKSk7XG59O1xuXG52YXIgbmFtZSA9IGZ1bmN0aW9uIG5hbWUodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/XG4gICAgdmFsdWUubmFtZSA6XG4gIGlzS2V5d29yZCh2YWx1ZSkgP1xuICAgIGtleXdvcmROYW1lKHZhbHVlKSA6XG4gIGlzU3RyaW5nKHZhbHVlKSA/XG4gICAgdmFsdWUgOlxuICBcImVsc2VcIiA/XG4gICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXCIgKyBcIkRvZXNuJ3Qgc3VwcG9ydCBuYW1lOiBcIiArIHZhbHVlKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xuXG52YXIga2V5d29yZE5hbWVzcGFjZSA9IGZ1bmN0aW9uIGtleXdvcmROYW1lc3BhY2UoeCkge1xuICB2YXIgcGFydHMgPSBzcGxpdChzdWJzKHgsIDEpLCBfX25zU2VwYXJhdG9yX18pO1xuICByZXR1cm4gY291bnQocGFydHMpID4gMSA/XG4gICAgKHBhcnRzIHx8IDApWzBdIDpcbiAgICB2b2lkKDApO1xufTtcblxudmFyIG5hbWVzcGFjZSA9IGZ1bmN0aW9uIG5hbWVzcGFjZSh4KSB7XG4gIHJldHVybiBpc1N5bWJvbCh4KSA/XG4gICAgeC5uYW1lc3BhY2UgOlxuICBpc0tleXdvcmQoeCkgP1xuICAgIGtleXdvcmROYW1lc3BhY2UoeCkgOlxuICBcImVsc2VcIiA/XG4gICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXCIgKyBcIkRvZXNuJ3Qgc3VwcG9ydHMgbmFtZXNwYWNlOiBcIiArIHgpOyB9KSgpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG52YXIgZ2Vuc3ltID0gZnVuY3Rpb24gZ2Vuc3ltKHByZWZpeCkge1xuICByZXR1cm4gc3ltYm9sKFwiXCIgKyAoaXNOaWwocHJlZml4KSA/XG4gICAgXCJHX19cIiA6XG4gICAgcHJlZml4KSArIChnZW5zeW0uYmFzZSA9IGdlbnN5bS5iYXNlICsgMSkpO1xufTtcbmV4cG9ydHMuZ2Vuc3ltID0gZ2Vuc3ltO1xuXG5nZW5zeW0uYmFzZSA9IDA7XG5cbnZhciBpc1VucXVvdGUgPSBmdW5jdGlvbiBpc1VucXVvdGUoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGVcIikpKTtcbn07XG5leHBvcnRzLmlzVW5xdW90ZSA9IGlzVW5xdW90ZTtcblxudmFyIGlzVW5xdW90ZVNwbGljaW5nID0gZnVuY3Rpb24gaXNVbnF1b3RlU3BsaWNpbmcoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInVucXVvdGUtc3BsaWNpbmdcIikpKTtcbn07XG5leHBvcnRzLmlzVW5xdW90ZVNwbGljaW5nID0gaXNVbnF1b3RlU3BsaWNpbmc7XG5cbnZhciBpc1F1b3RlID0gZnVuY3Rpb24gaXNRdW90ZShmb3JtKSB7XG4gIHJldHVybiAoaXNMaXN0KGZvcm0pKSAmJiAoaXNFcXVhbChmaXJzdChmb3JtKSwgc3ltYm9sKHZvaWQoMCksIFwicXVvdGVcIikpKTtcbn07XG5leHBvcnRzLmlzUXVvdGUgPSBpc1F1b3RlO1xuXG52YXIgaXNTeW50YXhRdW90ZSA9IGZ1bmN0aW9uIGlzU3ludGF4UXVvdGUoZm9ybSkge1xuICByZXR1cm4gKGlzTGlzdChmb3JtKSkgJiYgKGlzRXF1YWwoZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcInN5bnRheC1xdW90ZVwiKSkpO1xufTtcbmV4cG9ydHMuaXNTeW50YXhRdW90ZSA9IGlzU3ludGF4UXVvdGU7XG5cbnZhciBub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUobiwgbGVuKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChucykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGNvdW50KG5zKSA8IGxlbiA/XG4gICAgICAobnMgPSBcIlwiICsgXCIwXCIgKyBucywgbG9vcCkgOlxuICAgICAgbnM7XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdXI7XG4gIH0pKFwiXCIgKyBuKTtcbn07XG5cbnZhciBxdW90ZVN0cmluZyA9IGZ1bmN0aW9uIHF1b3RlU3RyaW5nKHMpIHtcbiAgcyA9IGpvaW4oXCJcXFxcXFxcIlwiLCBzcGxpdChzLCBcIlxcXCJcIikpO1xuICBzID0gam9pbihcIlxcXFxcXFxcXCIsIHNwbGl0KHMsIFwiXFxcXFwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXGJcIiwgc3BsaXQocywgXCJcYlwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXGZcIiwgc3BsaXQocywgXCJcZlwiKSk7XG4gIHMgPSBqb2luKFwiXFxcXG5cIiwgc3BsaXQocywgXCJcXG5cIikpO1xuICBzID0gam9pbihcIlxcXFxyXCIsIHNwbGl0KHMsIFwiXFxyXCIpKTtcbiAgcyA9IGpvaW4oXCJcXFxcdFwiLCBzcGxpdChzLCBcIlxcdFwiKSk7XG4gIHJldHVybiBcIlwiICsgXCJcXFwiXCIgKyBzICsgXCJcXFwiXCI7XG59O1xuZXhwb3J0cy5xdW90ZVN0cmluZyA9IHF1b3RlU3RyaW5nO1xuXG52YXIgcHJTdHIgPSBmdW5jdGlvbiBwclN0cih4KSB7XG4gIHJldHVybiBpc05pbCh4KSA/XG4gICAgXCJuaWxcIiA6XG4gIGlzS2V5d29yZCh4KSA/XG4gICAgbmFtZXNwYWNlKHgpID9cbiAgICAgIFwiXCIgKyBcIjpcIiArIChuYW1lc3BhY2UoeCkpICsgXCIvXCIgKyAobmFtZSh4KSkgOlxuICAgICAgXCJcIiArIFwiOlwiICsgKG5hbWUoeCkpIDpcbiAgaXNTdHJpbmcoeCkgP1xuICAgIHF1b3RlU3RyaW5nKHgpIDpcbiAgaXNEYXRlKHgpID9cbiAgICBcIlwiICsgXCIjaW5zdCBcXFwiXCIgKyAoeC5nZXRVVENGdWxsWWVhcigpKSArIFwiLVwiICsgKG5vcm1hbGl6ZShpbmMoeC5nZXRVVENNb250aCgpKSwgMikpICsgXCItXCIgKyAobm9ybWFsaXplKHguZ2V0VVRDRGF0ZSgpLCAyKSkgKyBcIlRcIiArIChub3JtYWxpemUoeC5nZXRVVENIb3VycygpLCAyKSkgKyBcIjpcIiArIChub3JtYWxpemUoeC5nZXRVVENNaW51dGVzKCksIDIpKSArIFwiOlwiICsgKG5vcm1hbGl6ZSh4LmdldFVUQ1NlY29uZHMoKSwgMikpICsgXCIuXCIgKyAobm9ybWFsaXplKHguZ2V0VVRDTWlsbGlzZWNvbmRzKCksIDMpKSArIFwiLVwiICsgXCIwMDowMFxcXCJcIiA6XG4gIGlzVmVjdG9yKHgpID9cbiAgICBcIlwiICsgXCJbXCIgKyAoam9pbihcIiBcIiwgbWFwKHByU3RyLCB2ZWMoeCkpKSkgKyBcIl1cIiA6XG4gIGlzRGljdGlvbmFyeSh4KSA/XG4gICAgXCJcIiArIFwie1wiICsgKGpvaW4oXCIsIFwiLCBtYXAoZnVuY3Rpb24ocGFpcikge1xuICAgICAgcmV0dXJuIFwiXCIgKyAocHJTdHIoZmlyc3QocGFpcikpKSArIFwiIFwiICsgKHByU3RyKHNlY29uZChwYWlyKSkpO1xuICAgIH0sIHgpKSkgKyBcIn1cIiA6XG4gIGlzU2VxdWVudGlhbCh4KSA/XG4gICAgXCJcIiArIFwiKFwiICsgKGpvaW4oXCIgXCIsIG1hcChwclN0ciwgdmVjKHgpKSkpICsgXCIpXCIgOlxuICBpc1JlUGF0dGVybih4KSA/XG4gICAgXCJcIiArIFwiI1xcXCJcIiArIChqb2luKFwiXFxcXC9cIiwgc3BsaXQoeC5zb3VyY2UsIFwiL1wiKSkpICsgXCJcXFwiXCIgOlxuICBcImVsc2VcIiA/XG4gICAgXCJcIiArIHggOlxuICAgIHZvaWQoMCk7XG59O1xuZXhwb3J0cy5wclN0ciA9IHByU3RyXG4iLCJ2YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIi4vcmVhZGVyXCIpKS5yZWFkRnJvbVN0cmluZzs7XG5cbnZhciBwclN0ciA9IChyZXF1aXJlKFwiLi9hc3RcIikpLnByU3RyO1xudmFyIGdlbnN5bSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmdlbnN5bTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkubmFtZTtcbnZhciBpc1N5bnRheFF1b3RlID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNTeW50YXhRdW90ZTtcbnZhciBpc1F1b3RlID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNRdW90ZTtcbnZhciBpc1VucXVvdGVTcGxpY2luZyA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzVW5xdW90ZVNwbGljaW5nO1xudmFyIGlzVW5xdW90ZSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzVW5xdW90ZTtcbnZhciBuYW1lc3BhY2UgPSAocmVxdWlyZShcIi4vYXN0XCIpKS5uYW1lc3BhY2U7XG52YXIga2V5d29yZCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmtleXdvcmQ7XG52YXIgaXNLZXl3b3JkID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkuaXNLZXl3b3JkO1xudmFyIHN5bWJvbCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLnN5bWJvbDtcbnZhciBpc1N5bWJvbCA9IChyZXF1aXJlKFwiLi9hc3RcIikpLmlzU3ltYm9sO1xudmFyIHdpdGhNZXRhID0gKHJlcXVpcmUoXCIuL2FzdFwiKSkud2l0aE1ldGE7XG52YXIgbWV0YSA9IChyZXF1aXJlKFwiLi9hc3RcIikpLm1ldGE7O1xuXG52YXIgY29uY2F0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb25jYXQ7XG52YXIgdGFrZSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkudGFrZTtcbnZhciBmaWx0ZXIgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLmZpbHRlcjtcbnZhciBtYXAgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLm1hcDtcbnZhciByZXBlYXQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJlcGVhdDtcbnZhciBsYXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5sYXN0O1xudmFyIHZlYyA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkudmVjO1xudmFyIHJlZHVjZSA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkucmVkdWNlO1xudmFyIHJldmVyc2UgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJldmVyc2U7XG52YXIgY29uaiA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuY29uajtcbnZhciBjb25zID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb25zO1xudmFyIHJlc3QgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnJlc3Q7XG52YXIgdGhpcmQgPSAocmVxdWlyZShcIi4vc2VxdWVuY2VcIikpLnRoaXJkO1xudmFyIHNlY29uZCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuc2Vjb25kO1xudmFyIGZpcnN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5maXJzdDtcbnZhciBsaXN0ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5saXN0O1xudmFyIGlzTGlzdCA9IChyZXF1aXJlKFwiLi9zZXF1ZW5jZVwiKSkuaXNMaXN0O1xudmFyIGNvdW50ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5jb3VudDtcbnZhciBpc0VtcHR5ID0gKHJlcXVpcmUoXCIuL3NlcXVlbmNlXCIpKS5pc0VtcHR5OztcblxudmFyIGlzU3RyaWN0RXF1YWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNTdHJpY3RFcXVhbDtcbnZhciBpc0VxdWFsID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzRXF1YWw7XG52YXIgaW50ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmludDtcbnZhciBjaGFyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmNoYXI7XG52YXIgc3RyID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN0cjtcbnZhciBkZWMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuZGVjO1xudmFyIGluYyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pbmM7XG52YXIgaXNSZVBhdHRlcm4gPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNSZVBhdHRlcm47XG52YXIgaXNOaWwgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNOaWw7XG52YXIgaXNGYWxzZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0ZhbHNlO1xudmFyIGlzVHJ1ZSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1RydWU7XG52YXIgcmVGaW5kID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnJlRmluZDtcbnZhciBzdWJzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLnN1YnM7XG52YXIgaXNCb29sZWFuID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmlzQm9vbGVhbjtcbnZhciBpc1ZlY3RvciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1ZlY3RvcjtcbnZhciBpc051bWJlciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc051bWJlcjtcbnZhciBpc1N0cmluZyA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc1N0cmluZztcbnZhciBtYXBEaWN0aW9uYXJ5ID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLm1hcERpY3Rpb25hcnk7XG52YXIgaXNDb250YWluc1ZlY3RvciA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0NvbnRhaW5zVmVjdG9yO1xudmFyIHZhbHMgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkudmFscztcbnZhciBrZXlzID0gKHJlcXVpcmUoXCIuL3J1bnRpbWVcIikpLmtleXM7XG52YXIgbWVyZ2UgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkubWVyZ2U7XG52YXIgZGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5kaWN0aW9uYXJ5O1xudmFyIGlzRGljdGlvbmFyeSA9IChyZXF1aXJlKFwiLi9ydW50aW1lXCIpKS5pc0RpY3Rpb25hcnk7XG52YXIgaXNPZGQgPSAocmVxdWlyZShcIi4vcnVudGltZVwiKSkuaXNPZGQ7O1xuXG52YXIgcmVwbGFjZSA9IChyZXF1aXJlKFwiLi9zdHJpbmdcIikpLnJlcGxhY2U7XG52YXIgdXBwZXJDYXNlID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkudXBwZXJDYXNlO1xudmFyIGpvaW4gPSAocmVxdWlyZShcIi4vc3RyaW5nXCIpKS5qb2luO1xudmFyIHNwbGl0ID0gKHJlcXVpcmUoXCIuL3N0cmluZ1wiKSkuc3BsaXQ7O1xuXG52YXIgd3JpdGVCb29sZWFuID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlQm9vbGVhbjtcbnZhciB3cml0ZU51bWJlciA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZU51bWJlcjtcbnZhciB3cml0ZVN0cmluZyA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZVN0cmluZztcbnZhciB3cml0ZU51bWJlciA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZU51bWJlcjtcbnZhciB3cml0ZUNvbW1lbnQgPSAocmVxdWlyZShcIi4vYmFja2VuZC9qYXZhc2NyaXB0L3dyaXRlclwiKSkud3JpdGVDb21tZW50O1xudmFyIHdyaXRlTmlsID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlTmlsO1xudmFyIHdyaXRlU3ltYm9sID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlU3ltYm9sO1xudmFyIHdyaXRlS2V5d29yZCA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZUtleXdvcmQ7XG52YXIgd3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gKHJlcXVpcmUoXCIuL2JhY2tlbmQvamF2YXNjcmlwdC93cml0ZXJcIikpLndyaXRlS2V5d29yZFJlZmVyZW5jZTtcbnZhciB3cml0ZVJlZmVyZW5jZSA9IChyZXF1aXJlKFwiLi9iYWNrZW5kL2phdmFzY3JpcHQvd3JpdGVyXCIpKS53cml0ZVJlZmVyZW5jZTs7XG5cbnZhciBpc1NlbGZFdmFsdWF0aW5nID0gZnVuY3Rpb24gaXNTZWxmRXZhbHVhdGluZyhmb3JtKSB7XG4gIHJldHVybiAoaXNOdW1iZXIoZm9ybSkpIHx8ICgoaXNTdHJpbmcoZm9ybSkpICYmICghKGlzU3ltYm9sKGZvcm0pKSkgJiYgKCEoaXNLZXl3b3JkKGZvcm0pKSkpIHx8IChpc0Jvb2xlYW4oZm9ybSkpIHx8IChpc05pbChmb3JtKSkgfHwgKGlzUmVQYXR0ZXJuKGZvcm0pKTtcbn07XG5leHBvcnRzLmlzU2VsZkV2YWx1YXRpbmcgPSBpc1NlbGZFdmFsdWF0aW5nO1xuXG52YXIgX19tYWNyb3NfXyA9IHt9O1xuZXhwb3J0cy5fX21hY3Jvc19fID0gX19tYWNyb3NfXztcblxudmFyIGV4ZWN1dGVNYWNybyA9IGZ1bmN0aW9uIGV4ZWN1dGVNYWNybyhuYW1lLCBmb3JtKSB7XG4gIHJldHVybiAoX19tYWNyb3NfXyB8fCAwKVtuYW1lXS5hcHBseSgoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSwgdmVjKGZvcm0pKTtcbn07XG5leHBvcnRzLmV4ZWN1dGVNYWNybyA9IGV4ZWN1dGVNYWNybztcblxudmFyIGluc3RhbGxNYWNybyA9IGZ1bmN0aW9uIGluc3RhbGxNYWNybyhuYW1lLCBtYWNyb0ZuKSB7XG4gIHJldHVybiAoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSA9IG1hY3JvRm47XG59O1xuZXhwb3J0cy5pbnN0YWxsTWFjcm8gPSBpbnN0YWxsTWFjcm87XG5cbnZhciBpc01hY3JvID0gZnVuY3Rpb24gaXNNYWNybyhuYW1lKSB7XG4gIHJldHVybiAoaXNTeW1ib2wobmFtZSkpICYmICgoX19tYWNyb3NfXyB8fCAwKVtuYW1lXSkgJiYgdHJ1ZTtcbn07XG5leHBvcnRzLmlzTWFjcm8gPSBpc01hY3JvO1xuXG52YXIgbWFrZU1hY3JvID0gZnVuY3Rpb24gbWFrZU1hY3JvKHBhdHRlcm4sIGJvZHkpIHtcbiAgdmFyIG1hY3JvRm4gPSBjb25jYXQobGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgcGF0dGVybiksIGJvZHkpO1xuICByZXR1cm4gZXZhbChcIlwiICsgXCIoXCIgKyAoY29tcGlsZShtYWNyb2V4cGFuZChtYWNyb0ZuKSkpICsgXCIpXCIpO1xufTtcbmV4cG9ydHMubWFrZU1hY3JvID0gbWFrZU1hY3JvO1xuXG5pbnN0YWxsTWFjcm8oc3ltYm9sKHZvaWQoMCksIFwiZGVmbWFjcm9cIiksIGZ1bmN0aW9uKG5hbWUsIHNpZ25hdHVyZSkge1xuICB2YXIgYm9keSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIHJldHVybiBpbnN0YWxsTWFjcm8obmFtZSwgbWFrZU1hY3JvKHNpZ25hdHVyZSwgYm9keSkpO1xufSk7XG5cbnZhciBfX3NwZWNpYWxzX18gPSB7fTtcbmV4cG9ydHMuX19zcGVjaWFsc19fID0gX19zcGVjaWFsc19fO1xuXG52YXIgaW5zdGFsbFNwZWNpYWwgPSBmdW5jdGlvbiBpbnN0YWxsU3BlY2lhbChuYW1lLCBmLCB2YWxpZGF0b3IpIHtcbiAgcmV0dXJuIChfX3NwZWNpYWxzX18gfHwgMClbbmFtZV0gPSBmdW5jdGlvbihmb3JtKSB7XG4gICAgdmFsaWRhdG9yID9cbiAgICAgIHZhbGlkYXRvcihmb3JtKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHJldHVybiBmKHdpdGhNZXRhKHJlc3QoZm9ybSksIG1ldGEoZm9ybSkpKTtcbiAgfTtcbn07XG5leHBvcnRzLmluc3RhbGxTcGVjaWFsID0gaW5zdGFsbFNwZWNpYWw7XG5cbnZhciBpc1NwZWNpYWwgPSBmdW5jdGlvbiBpc1NwZWNpYWwobmFtZSkge1xuICByZXR1cm4gKGlzU3ltYm9sKG5hbWUpKSAmJiAoKF9fc3BlY2lhbHNfXyB8fCAwKVtuYW1lXSkgJiYgdHJ1ZTtcbn07XG5leHBvcnRzLmlzU3BlY2lhbCA9IGlzU3BlY2lhbDtcblxudmFyIGV4ZWN1dGVTcGVjaWFsID0gZnVuY3Rpb24gZXhlY3V0ZVNwZWNpYWwobmFtZSwgZm9ybSkge1xuICByZXR1cm4gKChfX3NwZWNpYWxzX18gfHwgMClbbmFtZV0pKGZvcm0pO1xufTtcbmV4cG9ydHMuZXhlY3V0ZVNwZWNpYWwgPSBleGVjdXRlU3BlY2lhbDtcblxudmFyIG9wdCA9IGZ1bmN0aW9uIG9wdChhcmd1bWVudCwgZmFsbGJhY2spIHtcbiAgcmV0dXJuIChpc05pbChhcmd1bWVudCkpIHx8IChpc0VtcHR5KGFyZ3VtZW50KSkgP1xuICAgIGZhbGxiYWNrIDpcbiAgICBmaXJzdChhcmd1bWVudCk7XG59O1xuZXhwb3J0cy5vcHQgPSBvcHQ7XG5cbnZhciBhcHBseUZvcm0gPSBmdW5jdGlvbiBhcHBseUZvcm0oZm5OYW1lLCBmb3JtLCBpc1F1b3RlZCkge1xuICByZXR1cm4gY29ucyhmbk5hbWUsIGlzUXVvdGVkID9cbiAgICBtYXAoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicXVvdGVcIiksIGUpO1xuICAgIH0sIGZvcm0pIDpcbiAgICBmb3JtLCBmb3JtKTtcbn07XG5leHBvcnRzLmFwcGx5Rm9ybSA9IGFwcGx5Rm9ybTtcblxudmFyIGFwcGx5VW5xdW90ZWRGb3JtID0gZnVuY3Rpb24gYXBwbHlVbnF1b3RlZEZvcm0oZm5OYW1lLCBmb3JtKSB7XG4gIHJldHVybiBjb25zKGZuTmFtZSwgbWFwKGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gaXNVbnF1b3RlKGUpID9cbiAgICAgIHNlY29uZChlKSA6XG4gICAgKGlzTGlzdChlKSkgJiYgKGlzS2V5d29yZChmaXJzdChlKSkpID9cbiAgICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic3ludGF4LXF1b3RlXCIpLCBzZWNvbmQoZSkpIDpcbiAgICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic3ludGF4LXF1b3RlXCIpLCBlKTtcbiAgfSwgZm9ybSkpO1xufTtcbmV4cG9ydHMuYXBwbHlVbnF1b3RlZEZvcm0gPSBhcHBseVVucXVvdGVkRm9ybTtcblxudmFyIHNwbGl0U3BsaWNlcyA9IGZ1bmN0aW9uIHNwbGl0U3BsaWNlcyhmb3JtLCBmbk5hbWUpIHtcbiAgdmFyIG1ha2VTcGxpY2UgPSBmdW5jdGlvbiBtYWtlU3BsaWNlKGZvcm0pIHtcbiAgICByZXR1cm4gKGlzU2VsZkV2YWx1YXRpbmcoZm9ybSkpIHx8IChpc1N5bWJvbChmb3JtKSkgP1xuICAgICAgYXBwbHlVbnF1b3RlZEZvcm0oZm5OYW1lLCBsaXN0KGZvcm0pKSA6XG4gICAgICBhcHBseVVucXVvdGVkRm9ybShmbk5hbWUsIGZvcm0pO1xuICB9O1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3Aobm9kZXMsIHNsaWNlcywgYWNjKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShub2RlcykgP1xuICAgICAgcmV2ZXJzZShpc0VtcHR5KGFjYykgP1xuICAgICAgICBzbGljZXMgOlxuICAgICAgICBjb25zKG1ha2VTcGxpY2UocmV2ZXJzZShhY2MpKSwgc2xpY2VzKSkgOlxuICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbm9kZSA9IGZpcnN0KG5vZGVzKTtcbiAgICAgICAgcmV0dXJuIGlzVW5xdW90ZVNwbGljaW5nKG5vZGUpID9cbiAgICAgICAgICAobm9kZXMgPSByZXN0KG5vZGVzKSwgc2xpY2VzID0gY29ucyhzZWNvbmQobm9kZSksIGlzRW1wdHkoYWNjKSA/XG4gICAgICAgICAgICBzbGljZXMgOlxuICAgICAgICAgICAgY29ucyhtYWtlU3BsaWNlKHJldmVyc2UoYWNjKSksIHNsaWNlcykpLCBhY2MgPSBsaXN0KCksIGxvb3ApIDpcbiAgICAgICAgICAobm9kZXMgPSByZXN0KG5vZGVzKSwgc2xpY2VzID0gc2xpY2VzLCBhY2MgPSBjb25zKG5vZGUsIGFjYyksIGxvb3ApO1xuICAgICAgfSkoKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoZm9ybSwgbGlzdCgpLCBsaXN0KCkpO1xufTtcbmV4cG9ydHMuc3BsaXRTcGxpY2VzID0gc3BsaXRTcGxpY2VzO1xuXG52YXIgc3ludGF4UXVvdGVTcGxpdCA9IGZ1bmN0aW9uIHN5bnRheFF1b3RlU3BsaXQoYXBwZW5kTmFtZSwgZm5OYW1lLCBmb3JtKSB7XG4gIHZhciBzbGljZXMgPSBzcGxpdFNwbGljZXMoZm9ybSwgZm5OYW1lKTtcbiAgdmFyIG4gPSBjb3VudChzbGljZXMpO1xuICByZXR1cm4gbiA9PT0gMCA/XG4gICAgbGlzdChmbk5hbWUpIDpcbiAgbiA9PT0gMSA/XG4gICAgZmlyc3Qoc2xpY2VzKSA6XG4gIFwiZGVmYXVsdFwiID9cbiAgICBhcHBseUZvcm0oYXBwZW5kTmFtZSwgc2xpY2VzKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnN5bnRheFF1b3RlU3BsaXQgPSBzeW50YXhRdW90ZVNwbGl0O1xuXG52YXIgY29tcGlsZU9iamVjdCA9IGZ1bmN0aW9uIGNvbXBpbGVPYmplY3QoZm9ybSwgaXNRdW90ZWQpIHtcbiAgcmV0dXJuIGlzS2V5d29yZChmb3JtKSA/XG4gICAgd3JpdGVLZXl3b3JkKGZvcm0pIDpcbiAgaXNTeW1ib2woZm9ybSkgP1xuICAgIHdyaXRlU3ltYm9sKGZvcm0pIDpcbiAgaXNOdW1iZXIoZm9ybSkgP1xuICAgIHdyaXRlTnVtYmVyKGZvcm0pIDpcbiAgaXNTdHJpbmcoZm9ybSkgP1xuICAgIHdyaXRlU3RyaW5nKGZvcm0pIDpcbiAgaXNCb29sZWFuKGZvcm0pID9cbiAgICB3cml0ZUJvb2xlYW4oZm9ybSkgOlxuICBpc05pbChmb3JtKSA/XG4gICAgd3JpdGVOaWwoZm9ybSkgOlxuICBpc1JlUGF0dGVybihmb3JtKSA/XG4gICAgY29tcGlsZVJlUGF0dGVybihmb3JtKSA6XG4gIGlzVmVjdG9yKGZvcm0pID9cbiAgICBjb21waWxlKGFwcGx5Rm9ybShzeW1ib2wodm9pZCgwKSwgXCJ2ZWN0b3JcIiksIGxpc3QuYXBwbHkobGlzdCwgZm9ybSksIGlzUXVvdGVkKSkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIGNvbXBpbGUoYXBwbHlGb3JtKHN5bWJvbCh2b2lkKDApLCBcImxpc3RcIiksIGZvcm0sIGlzUXVvdGVkKSkgOlxuICBpc0RpY3Rpb25hcnkoZm9ybSkgP1xuICAgIGNvbXBpbGVEaWN0aW9uYXJ5KGlzUXVvdGVkID9cbiAgICAgIG1hcERpY3Rpb25hcnkoZm9ybSwgZnVuY3Rpb24oeCkge1xuICAgICAgICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJxdW90ZVwiKSwgeCk7XG4gICAgICB9KSA6XG4gICAgICBmb3JtKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGVPYmplY3QgPSBjb21waWxlT2JqZWN0O1xuXG52YXIgY29tcGlsZVN5bnRheFF1b3RlZFZlY3RvciA9IGZ1bmN0aW9uIGNvbXBpbGVTeW50YXhRdW90ZWRWZWN0b3IoZm9ybSkge1xuICB2YXIgY29uY2F0Rm9ybSA9IHN5bnRheFF1b3RlU3BsaXQoc3ltYm9sKHZvaWQoMCksIFwiY29uY2F0XCIpLCBzeW1ib2wodm9pZCgwKSwgXCJ2ZWN0b3JcIiksIGxpc3QuYXBwbHkobGlzdCwgZm9ybSkpO1xuICByZXR1cm4gY29tcGlsZShjb3VudChjb25jYXRGb3JtKSA+IDEgP1xuICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidmVjXCIpLCBjb25jYXRGb3JtKSA6XG4gICAgY29uY2F0Rm9ybSk7XG59O1xuZXhwb3J0cy5jb21waWxlU3ludGF4UXVvdGVkVmVjdG9yID0gY29tcGlsZVN5bnRheFF1b3RlZFZlY3RvcjtcblxudmFyIGNvbXBpbGVTeW50YXhRdW90ZWQgPSBmdW5jdGlvbiBjb21waWxlU3ludGF4UXVvdGVkKGZvcm0pIHtcbiAgcmV0dXJuIGlzTGlzdChmb3JtKSA/XG4gICAgY29tcGlsZShzeW50YXhRdW90ZVNwbGl0KHN5bWJvbCh2b2lkKDApLCBcImNvbmNhdFwiKSwgc3ltYm9sKHZvaWQoMCksIFwibGlzdFwiKSwgZm9ybSkpIDpcbiAgaXNWZWN0b3IoZm9ybSkgP1xuICAgIGNvbXBpbGVTeW50YXhRdW90ZWRWZWN0b3IoZm9ybSkgOlxuICBcImVsc2VcIiA/XG4gICAgY29tcGlsZU9iamVjdChmb3JtKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGVTeW50YXhRdW90ZWQgPSBjb21waWxlU3ludGF4UXVvdGVkO1xuXG52YXIgY29tcGlsZSA9IGZ1bmN0aW9uIGNvbXBpbGUoZm9ybSkge1xuICByZXR1cm4gaXNTZWxmRXZhbHVhdGluZyhmb3JtKSA/XG4gICAgY29tcGlsZU9iamVjdChmb3JtKSA6XG4gIGlzU3ltYm9sKGZvcm0pID9cbiAgICB3cml0ZVJlZmVyZW5jZShmb3JtKSA6XG4gIGlzS2V5d29yZChmb3JtKSA/XG4gICAgd3JpdGVLZXl3b3JkUmVmZXJlbmNlKGZvcm0pIDpcbiAgaXNWZWN0b3IoZm9ybSkgP1xuICAgIGNvbXBpbGVPYmplY3QoZm9ybSkgOlxuICBpc0RpY3Rpb25hcnkoZm9ybSkgP1xuICAgIGNvbXBpbGVPYmplY3QoZm9ybSkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoZWFkID0gZmlyc3QoZm9ybSk7XG4gICAgICByZXR1cm4gaXNFbXB0eShmb3JtKSA/XG4gICAgICAgIGNvbXBpbGVPYmplY3QoZm9ybSwgdHJ1ZSkgOlxuICAgICAgaXNRdW90ZShmb3JtKSA/XG4gICAgICAgIGNvbXBpbGVPYmplY3Qoc2Vjb25kKGZvcm0pLCB0cnVlKSA6XG4gICAgICBpc1N5bnRheFF1b3RlKGZvcm0pID9cbiAgICAgICAgY29tcGlsZVN5bnRheFF1b3RlZChzZWNvbmQoZm9ybSkpIDpcbiAgICAgIGlzU3BlY2lhbChoZWFkKSA/XG4gICAgICAgIGV4ZWN1dGVTcGVjaWFsKGhlYWQsIGZvcm0pIDpcbiAgICAgIGlzS2V5d29yZChoZWFkKSA/XG4gICAgICAgIGNvbXBpbGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJnZXRcIiksIHNlY29uZChmb3JtKSwgaGVhZCkpIDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAhKChpc1N5bWJvbChoZWFkKSkgfHwgKGlzTGlzdChoZWFkKSkpID9cbiAgICAgICAgICAgIChmdW5jdGlvbigpIHsgdGhyb3cgY29tcGlsZXJFcnJvcihmb3JtLCBcIlwiICsgXCJvcGVyYXRvciBpcyBub3QgYSBwcm9jZWR1cmU6IFwiICsgaGVhZCk7IH0pKCkgOlxuICAgICAgICAgICAgY29tcGlsZUludm9rZShmb3JtKTtcbiAgICAgICAgfSkoKSA6XG4gICAgICAgIHZvaWQoMCk7XG4gICAgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlO1xuXG52YXIgY29tcGlsZV8gPSBmdW5jdGlvbiBjb21waWxlXyhmb3Jtcykge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZm9ybSkge1xuICAgIHJldHVybiBcIlwiICsgcmVzdWx0ICsgKGlzRW1wdHkocmVzdWx0KSA/XG4gICAgICBcIlwiIDpcbiAgICAgIFwiO1xcblxcblwiKSArIChjb21waWxlKGlzTGlzdChmb3JtKSA/XG4gICAgICB3aXRoTWV0YShtYWNyb2V4cGFuZChmb3JtKSwgY29uaih7XG4gICAgICAgIFwidG9wXCI6IHRydWVcbiAgICAgIH0sIG1ldGEoZm9ybSkpKSA6XG4gICAgICBmb3JtKSk7XG4gIH0sIFwiXCIsIGZvcm1zKTtcbn07XG5leHBvcnRzLmNvbXBpbGVfID0gY29tcGlsZV87XG5cbnZhciBjb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uIGNvbXBpbGVQcm9ncmFtKGZvcm1zKSB7XG4gIHJldHVybiByZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBmb3JtKSB7XG4gICAgcmV0dXJuIFwiXCIgKyByZXN1bHQgKyAoaXNFbXB0eShyZXN1bHQpID9cbiAgICAgIFwiXCIgOlxuICAgICAgXCI7XFxuXFxuXCIpICsgKGNvbXBpbGUoaXNMaXN0KGZvcm0pID9cbiAgICAgIHdpdGhNZXRhKG1hY3JvZXhwYW5kKGZvcm0pLCBjb25qKHtcbiAgICAgICAgXCJ0b3BcIjogdHJ1ZVxuICAgICAgfSwgbWV0YShmb3JtKSkpIDpcbiAgICAgIGZvcm0pKTtcbiAgfSwgXCJcIiwgZm9ybXMpO1xufTtcbmV4cG9ydHMuY29tcGlsZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbTtcblxudmFyIG1hY3JvZXhwYW5kMSA9IGZ1bmN0aW9uIG1hY3JvZXhwYW5kMShmb3JtKSB7XG4gIHJldHVybiBpc0xpc3QoZm9ybSkgP1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcCA9IGZpcnN0KGZvcm0pO1xuICAgICAgdmFyIGlkID0gaXNTeW1ib2wob3ApID9cbiAgICAgICAgbmFtZShvcCkgOlxuICAgICAgICB2b2lkKDApO1xuICAgICAgcmV0dXJuIGlzU3BlY2lhbChvcCkgP1xuICAgICAgICBmb3JtIDpcbiAgICAgIGlzTWFjcm8ob3ApID9cbiAgICAgICAgZXhlY3V0ZU1hY3JvKG9wLCByZXN0KGZvcm0pKSA6XG4gICAgICAoaXNTeW1ib2wob3ApKSAmJiAoIShpZCA9PT0gXCIuXCIpKSA/XG4gICAgICAgIGZpcnN0KGlkKSA9PT0gXCIuXCIgP1xuICAgICAgICAgIGNvdW50KGZvcm0pIDwgMiA/XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKFwiTWFsZm9ybWVkIG1lbWJlciBleHByZXNzaW9uLCBleHBlY3RpbmcgKC5tZW1iZXIgdGFyZ2V0IC4uLilcIik7IH0pKCkgOlxuICAgICAgICAgICAgY29ucyhzeW1ib2wodm9pZCgwKSwgXCIuXCIpLCBjb25zKHNlY29uZChmb3JtKSwgY29ucyhzeW1ib2woc3VicyhpZCwgMSkpLCByZXN0KHJlc3QoZm9ybSkpKSkpIDpcbiAgICAgICAgbGFzdChpZCkgPT09IFwiLlwiID9cbiAgICAgICAgICBjb25zKHN5bWJvbCh2b2lkKDApLCBcIm5ld1wiKSwgY29ucyhzeW1ib2woc3VicyhpZCwgMCwgZGVjKGNvdW50KGlkKSkpKSwgcmVzdChmb3JtKSkpIDpcbiAgICAgICAgICBmb3JtIDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgZm9ybSA6XG4gICAgICAgIHZvaWQoMCk7XG4gICAgfSkoKSA6XG4gICAgZm9ybTtcbn07XG5leHBvcnRzLm1hY3JvZXhwYW5kMSA9IG1hY3JvZXhwYW5kMTtcblxudmFyIG1hY3JvZXhwYW5kID0gZnVuY3Rpb24gbWFjcm9leHBhbmQoZm9ybSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3Aob3JpZ2luYWwsIGV4cGFuZGVkKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gb3JpZ2luYWwgPT09IGV4cGFuZGVkID9cbiAgICAgIG9yaWdpbmFsIDpcbiAgICAgIChvcmlnaW5hbCA9IGV4cGFuZGVkLCBleHBhbmRlZCA9IG1hY3JvZXhwYW5kMShleHBhbmRlZCksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShmb3JtLCBtYWNyb2V4cGFuZDEoZm9ybSkpO1xufTtcbmV4cG9ydHMubWFjcm9leHBhbmQgPSBtYWNyb2V4cGFuZDtcblxudmFyIF9saW5lQnJlYWtQYXR0ZXJuXyA9IC9cXG4oPz1bXlxcbl0pL207XG5leHBvcnRzLl9saW5lQnJlYWtQYXR0ZXJuXyA9IF9saW5lQnJlYWtQYXR0ZXJuXztcblxudmFyIGluZGVudCA9IGZ1bmN0aW9uIGluZGVudChjb2RlLCBpbmRlbnRhdGlvbikge1xuICByZXR1cm4gam9pbihpbmRlbnRhdGlvbiwgc3BsaXQoY29kZSwgX2xpbmVCcmVha1BhdHRlcm5fKSk7XG59O1xuZXhwb3J0cy5pbmRlbnQgPSBpbmRlbnQ7XG5cbnZhciBjb21waWxlVGVtcGxhdGUgPSBmdW5jdGlvbiBjb21waWxlVGVtcGxhdGUoZm9ybSkge1xuICB2YXIgaW5kZW50UGF0dGVybiA9IC9cXG4gKiQvO1xuICB2YXIgZ2V0SW5kZW50YXRpb24gPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgcmV0dXJuIChyZUZpbmQoaW5kZW50UGF0dGVybiwgY29kZSkpIHx8IFwiXFxuXCI7XG4gIH07XG4gIHJldHVybiAoZnVuY3Rpb24gbG9vcChjb2RlLCBwYXJ0cywgdmFsdWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gY291bnQocGFydHMpID4gMSA/XG4gICAgICAoY29kZSA9IFwiXCIgKyBjb2RlICsgKGZpcnN0KHBhcnRzKSkgKyAoaW5kZW50KFwiXCIgKyAoZmlyc3QodmFsdWVzKSksIGdldEluZGVudGF0aW9uKGZpcnN0KHBhcnRzKSkpKSwgcGFydHMgPSByZXN0KHBhcnRzKSwgdmFsdWVzID0gcmVzdCh2YWx1ZXMpLCBsb29wKSA6XG4gICAgICBcIlwiICsgY29kZSArIChmaXJzdChwYXJ0cykpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShcIlwiLCBzcGxpdChmaXJzdChmb3JtKSwgXCJ+e31cIiksIHJlc3QoZm9ybSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVRlbXBsYXRlID0gY29tcGlsZVRlbXBsYXRlO1xuXG52YXIgY29tcGlsZURlZiA9IGZ1bmN0aW9uIGNvbXBpbGVEZWYoZm9ybSkge1xuICB2YXIgaWQgPSBmaXJzdChmb3JtKTtcbiAgdmFyIGlzRXhwb3J0ID0gKCgoKG1ldGEoZm9ybSkpIHx8IHt9KSB8fCAwKVtcInRvcFwiXSkgJiYgKCEoKCgobWV0YShpZCkpIHx8IHt9KSB8fCAwKVtcInByaXZhdGVcIl0pKTtcbiAgdmFyIGF0dHJpYnV0ZSA9IHN5bWJvbChuYW1lc3BhY2UoaWQpLCBcIlwiICsgXCItXCIgKyAobmFtZShpZCkpKTtcbiAgcmV0dXJuIGlzRXhwb3J0ID9cbiAgICBjb21waWxlVGVtcGxhdGUobGlzdChcInZhciB+e307XFxufnt9XCIsIGNvbXBpbGUoY29ucyhzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBmb3JtKSksIGNvbXBpbGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5cIiksIHN5bWJvbCh2b2lkKDApLCBcImV4cG9ydHNcIiksIGF0dHJpYnV0ZSksIGlkKSkpKSA6XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ2YXIgfnt9XCIsIGNvbXBpbGUoY29ucyhzeW1ib2wodm9pZCgwKSwgXCJzZXQhXCIpLCBmb3JtKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVEZWYgPSBjb21waWxlRGVmO1xuXG52YXIgY29tcGlsZUlmRWxzZSA9IGZ1bmN0aW9uIGNvbXBpbGVJZkVsc2UoZm9ybSkge1xuICB2YXIgY29uZGl0aW9uID0gbWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpO1xuICB2YXIgdGhlbkV4cHJlc3Npb24gPSBtYWNyb2V4cGFuZChzZWNvbmQoZm9ybSkpO1xuICB2YXIgZWxzZUV4cHJlc3Npb24gPSBtYWNyb2V4cGFuZCh0aGlyZChmb3JtKSk7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdCgoaXNMaXN0KGVsc2VFeHByZXNzaW9uKSkgJiYgKGlzRXF1YWwoZmlyc3QoZWxzZUV4cHJlc3Npb24pLCBzeW1ib2wodm9pZCgwKSwgXCJpZlwiKSkpID9cbiAgICBcIn57fSA/XFxuICB+e30gOlxcbn57fVwiIDpcbiAgICBcIn57fSA/XFxuICB+e30gOlxcbiAgfnt9XCIsIGNvbXBpbGUoY29uZGl0aW9uKSwgY29tcGlsZSh0aGVuRXhwcmVzc2lvbiksIGNvbXBpbGUoZWxzZUV4cHJlc3Npb24pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlSWZFbHNlID0gY29tcGlsZUlmRWxzZTtcblxudmFyIGNvbXBpbGVEaWN0aW9uYXJ5ID0gZnVuY3Rpb24gY29tcGlsZURpY3Rpb25hcnkoZm9ybSkge1xuICB2YXIgYm9keSA9IChmdW5jdGlvbiBsb29wKGJvZHksIG5hbWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgYm9keSA6XG4gICAgICAoYm9keSA9IFwiXCIgKyAoaXNOaWwoYm9keSkgP1xuICAgICAgICBcIlwiIDpcbiAgICAgICAgXCJcIiArIGJvZHkgKyBcIixcXG5cIikgKyAoY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e306IH57fVwiLCBjb21waWxlKGZpcnN0KG5hbWVzKSksIGNvbXBpbGUobWFjcm9leHBhbmQoKGZvcm0gfHwgMClbZmlyc3QobmFtZXMpXSkpKSkpLCBuYW1lcyA9IHJlc3QobmFtZXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkodm9pZCgwKSwga2V5cyhmb3JtKSk7XG4gIHJldHVybiBpc05pbChib2R5KSA/XG4gICAgXCJ7fVwiIDpcbiAgICBjb21waWxlVGVtcGxhdGUobGlzdChcIntcXG4gIH57fVxcbn1cIiwgYm9keSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZURpY3Rpb25hcnkgPSBjb21waWxlRGljdGlvbmFyeTtcblxudmFyIGRlc3VnYXJGbk5hbWUgPSBmdW5jdGlvbiBkZXN1Z2FyRm5OYW1lKGZvcm0pIHtcbiAgcmV0dXJuIChpc1N5bWJvbChmaXJzdChmb3JtKSkpIHx8IChpc05pbChmaXJzdChmb3JtKSkpID9cbiAgICBmb3JtIDpcbiAgICBjb25zKHZvaWQoMCksIGZvcm0pO1xufTtcbmV4cG9ydHMuZGVzdWdhckZuTmFtZSA9IGRlc3VnYXJGbk5hbWU7XG5cbnZhciBkZXN1Z2FyRm5Eb2MgPSBmdW5jdGlvbiBkZXN1Z2FyRm5Eb2MoZm9ybSkge1xuICByZXR1cm4gKGlzU3RyaW5nKHNlY29uZChmb3JtKSkpIHx8IChpc05pbChzZWNvbmQoZm9ybSkpKSA/XG4gICAgZm9ybSA6XG4gICAgY29ucyhmaXJzdChmb3JtKSwgY29ucyh2b2lkKDApLCByZXN0KGZvcm0pKSk7XG59O1xuZXhwb3J0cy5kZXN1Z2FyRm5Eb2MgPSBkZXN1Z2FyRm5Eb2M7XG5cbnZhciBkZXN1Z2FyRm5BdHRycyA9IGZ1bmN0aW9uIGRlc3VnYXJGbkF0dHJzKGZvcm0pIHtcbiAgcmV0dXJuIChpc0RpY3Rpb25hcnkodGhpcmQoZm9ybSkpKSB8fCAoaXNOaWwodGhpcmQoZm9ybSkpKSA/XG4gICAgZm9ybSA6XG4gICAgY29ucyhmaXJzdChmb3JtKSwgY29ucyhzZWNvbmQoZm9ybSksIGNvbnModm9pZCgwKSwgcmVzdChyZXN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmRlc3VnYXJGbkF0dHJzID0gZGVzdWdhckZuQXR0cnM7XG5cbnZhciBjb21waWxlRGVzdWdhcmVkRm4gPSBmdW5jdGlvbiBjb21waWxlRGVzdWdhcmVkRm4obmFtZSwgZG9jLCBhdHRycywgcGFyYW1zLCBib2R5KSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUoaXNOaWwobmFtZSkgP1xuICAgIGxpc3QoXCJmdW5jdGlvbih+e30pIHtcXG4gIH57fVxcbn1cIiwgam9pbihcIiwgXCIsIG1hcChjb21waWxlLCAocGFyYW1zIHx8IDApW1wibmFtZXNcIl0pKSwgY29tcGlsZUZuQm9keShtYXAobWFjcm9leHBhbmQsIGJvZHkpLCBwYXJhbXMpKSA6XG4gICAgbGlzdChcImZ1bmN0aW9uIH57fSh+e30pIHtcXG4gIH57fVxcbn1cIiwgY29tcGlsZShuYW1lKSwgam9pbihcIiwgXCIsIG1hcChjb21waWxlLCAocGFyYW1zIHx8IDApW1wibmFtZXNcIl0pKSwgY29tcGlsZUZuQm9keShtYXAobWFjcm9leHBhbmQsIGJvZHkpLCBwYXJhbXMpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlRGVzdWdhcmVkRm4gPSBjb21waWxlRGVzdWdhcmVkRm47XG5cbnZhciBjb21waWxlU3RhdGVtZW50cyA9IGZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnRzKGZvcm0sIHByZWZpeCkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBleHByZXNzaW9uLCBleHByZXNzaW9ucykge1xuICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICByZWN1ciA9IGlzRW1wdHkoZXhwcmVzc2lvbnMpID9cbiAgICAgIFwiXCIgKyByZXN1bHQgKyAoaXNOaWwocHJlZml4KSA/XG4gICAgICAgIFwiXCIgOlxuICAgICAgICBwcmVmaXgpICsgKGNvbXBpbGUobWFjcm9leHBhbmQoZXhwcmVzc2lvbikpKSArIFwiO1wiIDpcbiAgICAgIChyZXN1bHQgPSBcIlwiICsgcmVzdWx0ICsgKGNvbXBpbGUobWFjcm9leHBhbmQoZXhwcmVzc2lvbikpKSArIFwiO1xcblwiLCBleHByZXNzaW9uID0gZmlyc3QoZXhwcmVzc2lvbnMpLCBleHByZXNzaW9ucyA9IHJlc3QoZXhwcmVzc2lvbnMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkoXCJcIiwgZmlyc3QoZm9ybSksIHJlc3QoZm9ybSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVN0YXRlbWVudHMgPSBjb21waWxlU3RhdGVtZW50cztcblxudmFyIGNvbXBpbGVGbkJvZHkgPSBmdW5jdGlvbiBjb21waWxlRm5Cb2R5KGZvcm0sIHBhcmFtcykge1xuICByZXR1cm4gKGlzRGljdGlvbmFyeShwYXJhbXMpKSAmJiAoKHBhcmFtcyB8fCAwKVtcInJlc3RcIl0pID9cbiAgICBjb21waWxlU3RhdGVtZW50cyhjb25zKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCAocGFyYW1zIHx8IDApW1wicmVzdFwiXSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiYXJndW1lbnRzXCIpLCAocGFyYW1zIHx8IDApW1wiYXJpdHlcIl0pKSwgZm9ybSksIFwicmV0dXJuIFwiKSA6XG4gIChjb3VudChmb3JtKSA9PT0gMSkgJiYgKGlzTGlzdChmaXJzdChmb3JtKSkpICYmIChpc0VxdWFsKGZpcnN0KGZpcnN0KGZvcm0pKSwgc3ltYm9sKHZvaWQoMCksIFwiZG9cIikpKSA/XG4gICAgY29tcGlsZUZuQm9keShyZXN0KGZpcnN0KGZvcm0pKSwgcGFyYW1zKSA6XG4gICAgY29tcGlsZVN0YXRlbWVudHMoZm9ybSwgXCJyZXR1cm4gXCIpO1xufTtcbmV4cG9ydHMuY29tcGlsZUZuQm9keSA9IGNvbXBpbGVGbkJvZHk7XG5cbnZhciBkZXN1Z2FyUGFyYW1zID0gZnVuY3Rpb24gZGVzdWdhclBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKG5hbWVzLCBwYXJhbXMpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBpc0VtcHR5KHBhcmFtcykgP1xuICAgICAge1xuICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICBcImFyaXR5XCI6IGNvdW50KG5hbWVzKSxcbiAgICAgICAgXCJyZXN0XCI6IHZvaWQoMClcbiAgICAgIH0gOlxuICAgIGlzRXF1YWwoZmlyc3QocGFyYW1zKSwgc3ltYm9sKHZvaWQoMCksIFwiJlwiKSkgP1xuICAgICAgaXNFcXVhbChjb3VudChwYXJhbXMpLCAxKSA/XG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICAgIFwiYXJpdHlcIjogY291bnQobmFtZXMpLFxuICAgICAgICAgIFwicmVzdFwiOiB2b2lkKDApXG4gICAgICAgIH0gOlxuICAgICAgaXNFcXVhbChjb3VudChwYXJhbXMpLCAyKSA/XG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVzXCI6IG5hbWVzLFxuICAgICAgICAgIFwiYXJpdHlcIjogY291bnQobmFtZXMpLFxuICAgICAgICAgIFwicmVzdFwiOiBzZWNvbmQocGFyYW1zKVxuICAgICAgICB9IDpcbiAgICAgIFwiZWxzZVwiID9cbiAgICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBUeXBlRXJyb3IoXCJVbmV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFmdGVyICZcIik7IH0pKCkgOlxuICAgICAgICB2b2lkKDApIDpcbiAgICBcImVsc2VcIiA/XG4gICAgICAobmFtZXMgPSBjb25qKG5hbWVzLCBmaXJzdChwYXJhbXMpKSwgcGFyYW1zID0gcmVzdChwYXJhbXMpLCBsb29wKSA6XG4gICAgICB2b2lkKDApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgcGFyYW1zKTtcbn07XG5leHBvcnRzLmRlc3VnYXJQYXJhbXMgPSBkZXN1Z2FyUGFyYW1zO1xuXG52YXIgYW5hbHl6ZU92ZXJsb2FkZWRGbiA9IGZ1bmN0aW9uIGFuYWx5emVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgb3ZlcmxvYWRzKSB7XG4gIHJldHVybiBtYXAoZnVuY3Rpb24ob3ZlcmxvYWQpIHtcbiAgICB2YXIgcGFyYW1zID0gZGVzdWdhclBhcmFtcyhmaXJzdChvdmVybG9hZCkpO1xuICAgIHJldHVybiB7XG4gICAgICBcInJlc3RcIjogKHBhcmFtcyB8fCAwKVtcInJlc3RcIl0sXG4gICAgICBcIm5hbWVzXCI6IChwYXJhbXMgfHwgMClbXCJuYW1lc1wiXSxcbiAgICAgIFwiYXJpdHlcIjogKHBhcmFtcyB8fCAwKVtcImFyaXR5XCJdLFxuICAgICAgXCJib2R5XCI6IHJlc3Qob3ZlcmxvYWQpXG4gICAgfTtcbiAgfSwgb3ZlcmxvYWRzKTtcbn07XG5leHBvcnRzLmFuYWx5emVPdmVybG9hZGVkRm4gPSBhbmFseXplT3ZlcmxvYWRlZEZuO1xuXG52YXIgY29tcGlsZU92ZXJsb2FkZWRGbiA9IGZ1bmN0aW9uIGNvbXBpbGVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgb3ZlcmxvYWRzKSB7XG4gIHZhciBtZXRob2RzID0gYW5hbHl6ZU92ZXJsb2FkZWRGbihuYW1lLCBkb2MsIGF0dHJzLCBvdmVybG9hZHMpO1xuICB2YXIgZml4ZWRNZXRob2RzID0gZmlsdGVyKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHJldHVybiAhKChtZXRob2QgfHwgMClbXCJyZXN0XCJdKTtcbiAgfSwgbWV0aG9kcyk7XG4gIHZhciB2YXJpYWRpYyA9IGZpcnN0KGZpbHRlcihmdW5jdGlvbihtZXRob2QpIHtcbiAgICByZXR1cm4gKG1ldGhvZCB8fCAwKVtcInJlc3RcIl07XG4gIH0sIG1ldGhvZHMpKTtcbiAgdmFyIG5hbWVzID0gcmVkdWNlKGZ1bmN0aW9uKG5hbWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY291bnQobmFtZXMpID4gKHBhcmFtcyB8fCAwKVtcImFyaXR5XCJdID9cbiAgICAgIG5hbWVzIDpcbiAgICAgIChwYXJhbXMgfHwgMClbXCJuYW1lc1wiXTtcbiAgfSwgW10sIG1ldGhvZHMpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJmblwiKSwgbmFtZSwgZG9jLCBhdHRycywgbmFtZXMsIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicmF3KlwiKSwgY29tcGlsZVN3aXRjaChzeW1ib2wodm9pZCgwKSwgXCJhcmd1bWVudHMubGVuZ3RoXCIpLCBtYXAoZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgcmV0dXJuIGNvbnMoKG1ldGhvZCB8fCAwKVtcImFyaXR5XCJdLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJhdypcIiksIGNvbXBpbGVGbkJvZHkoY29uY2F0KGNvbXBpbGVSZWJpbmQobmFtZXMsIChtZXRob2QgfHwgMClbXCJuYW1lc1wiXSksIChtZXRob2QgfHwgMClbXCJib2R5XCJdKSkpKTtcbiAgfSwgZml4ZWRNZXRob2RzKSwgaXNOaWwodmFyaWFkaWMpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInRocm93XCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIkVycm9yXCIpLCBcIkludmFsaWQgYXJpdHlcIikpIDpcbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJhdypcIiksIGNvbXBpbGVGbkJvZHkoY29uY2F0KGNvbXBpbGVSZWJpbmQoY29ucyhsaXN0KHN5bWJvbCh2b2lkKDApLCBcIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJhcmd1bWVudHNcIiksICh2YXJpYWRpYyB8fCAwKVtcImFyaXR5XCJdKSwgbmFtZXMpLCBjb25zKCh2YXJpYWRpYyB8fCAwKVtcInJlc3RcIl0sICh2YXJpYWRpYyB8fCAwKVtcIm5hbWVzXCJdKSksICh2YXJpYWRpYyB8fCAwKVtcImJvZHlcIl0pKSkpKSwgdm9pZCgwKSk7XG59O1xuZXhwb3J0cy5jb21waWxlT3ZlcmxvYWRlZEZuID0gY29tcGlsZU92ZXJsb2FkZWRGbjtcblxudmFyIGNvbXBpbGVSZWJpbmQgPSBmdW5jdGlvbiBjb21waWxlUmViaW5kKGJpbmRpbmdzLCBuYW1lcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZm9ybSwgYmluZGluZ3MsIG5hbWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgcmV2ZXJzZShmb3JtKSA6XG4gICAgICAoZm9ybSA9IGlzRXF1YWwoZmlyc3QobmFtZXMpLCBmaXJzdChiaW5kaW5ncykpID9cbiAgICAgICAgZm9ybSA6XG4gICAgICAgIGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIGZpcnN0KG5hbWVzKSwgZmlyc3QoYmluZGluZ3MpKSwgZm9ybSksIGJpbmRpbmdzID0gcmVzdChiaW5kaW5ncyksIG5hbWVzID0gcmVzdChuYW1lcyksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIGJpbmRpbmdzLCBuYW1lcyk7XG59O1xuZXhwb3J0cy5jb21waWxlUmViaW5kID0gY29tcGlsZVJlYmluZDtcblxudmFyIGNvbXBpbGVTd2l0Y2hDYXNlcyA9IGZ1bmN0aW9uIGNvbXBpbGVTd2l0Y2hDYXNlcyhjYXNlcykge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKGZvcm0sIGNhc2VFeHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIFwiXCIgKyBmb3JtICsgKGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiY2FzZSB+e306XFxuICB+e31cXG5cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChjYXNlRXhwcmVzc2lvbikpKSwgY29tcGlsZShtYWNyb2V4cGFuZChyZXN0KGNhc2VFeHByZXNzaW9uKSkpKSkpO1xuICB9LCBcIlwiLCBjYXNlcyk7XG59O1xuZXhwb3J0cy5jb21waWxlU3dpdGNoQ2FzZXMgPSBjb21waWxlU3dpdGNoQ2FzZXM7XG5cbnZhciBjb21waWxlU3dpdGNoID0gZnVuY3Rpb24gY29tcGlsZVN3aXRjaCh2YWx1ZSwgY2FzZXMsIGRlZmF1bHRDYXNlKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcInN3aXRjaCAofnt9KSB7XFxuICB+e31cXG4gIGRlZmF1bHQ6XFxuICAgIH57fVxcbn1cIiwgY29tcGlsZShtYWNyb2V4cGFuZCh2YWx1ZSkpLCBjb21waWxlU3dpdGNoQ2FzZXMoY2FzZXMpLCBjb21waWxlKG1hY3JvZXhwYW5kKGRlZmF1bHRDYXNlKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVTd2l0Y2ggPSBjb21waWxlU3dpdGNoO1xuXG52YXIgY29tcGlsZUZuID0gZnVuY3Rpb24gY29tcGlsZUZuKGZvcm0pIHtcbiAgdmFyIHNpZ25hdHVyZSA9IGRlc3VnYXJGbkF0dHJzKGRlc3VnYXJGbkRvYyhkZXN1Z2FyRm5OYW1lKGZvcm0pKSk7XG4gIHZhciBuYW1lID0gZmlyc3Qoc2lnbmF0dXJlKTtcbiAgdmFyIGRvYyA9IHNlY29uZChzaWduYXR1cmUpO1xuICB2YXIgYXR0cnMgPSB0aGlyZChzaWduYXR1cmUpO1xuICByZXR1cm4gaXNWZWN0b3IodGhpcmQocmVzdChzaWduYXR1cmUpKSkgP1xuICAgIGNvbXBpbGVEZXN1Z2FyZWRGbihuYW1lLCBkb2MsIGF0dHJzLCBkZXN1Z2FyUGFyYW1zKHRoaXJkKHJlc3Qoc2lnbmF0dXJlKSkpLCByZXN0KHJlc3QocmVzdChyZXN0KHNpZ25hdHVyZSkpKSkpIDpcbiAgICBjb21waWxlKGNvbXBpbGVPdmVybG9hZGVkRm4obmFtZSwgZG9jLCBhdHRycywgcmVzdChyZXN0KHJlc3Qoc2lnbmF0dXJlKSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlRm4gPSBjb21waWxlRm47XG5cbnZhciBjb21waWxlSW52b2tlID0gZnVuY3Rpb24gY29tcGlsZUludm9rZShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChpc0xpc3QoZmlyc3QoZm9ybSkpID9cbiAgICBcIih+e30pKH57fSlcIiA6XG4gICAgXCJ+e30ofnt9KVwiLCBjb21waWxlKGZpcnN0KGZvcm0pKSwgY29tcGlsZUdyb3VwKHJlc3QoZm9ybSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlSW52b2tlID0gY29tcGlsZUludm9rZTtcblxudmFyIGNvbXBpbGVHcm91cCA9IGZ1bmN0aW9uIGNvbXBpbGVHcm91cChmb3JtLCB3cmFwKSB7XG4gIHJldHVybiB3cmFwID9cbiAgICBcIlwiICsgXCIoXCIgKyAoY29tcGlsZUdyb3VwKGZvcm0pKSArIFwiKVwiIDpcbiAgICBqb2luKFwiLCBcIiwgdmVjKG1hcChjb21waWxlLCBtYXAobWFjcm9leHBhbmQsIGZvcm0pKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUdyb3VwID0gY29tcGlsZUdyb3VwO1xuXG52YXIgY29tcGlsZURvID0gZnVuY3Rpb24gY29tcGlsZURvKGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGUobGlzdChjb25zKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb25zKFtdLCBmb3JtKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVEbyA9IGNvbXBpbGVEbztcblxudmFyIGRlZmluZUJpbmRpbmdzID0gZnVuY3Rpb24gZGVmaW5lQmluZGluZ3MoZm9ybSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoZGVmcywgYmluZGluZ3MpIHtcbiAgICB2YXIgcmVjdXIgPSBsb29wO1xuICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgcmVjdXIgPSBjb3VudChiaW5kaW5ncykgPT09IDAgP1xuICAgICAgcmV2ZXJzZShkZWZzKSA6XG4gICAgICAoZGVmcyA9IGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIChiaW5kaW5ncyB8fCAwKVswXSwgKGJpbmRpbmdzIHx8IDApWzFdKSwgZGVmcyksIGJpbmRpbmdzID0gcmVzdChyZXN0KGJpbmRpbmdzKSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShsaXN0KCksIGZvcm0pO1xufTtcbmV4cG9ydHMuZGVmaW5lQmluZGluZ3MgPSBkZWZpbmVCaW5kaW5ncztcblxudmFyIGNvbXBpbGVUaHJvdyA9IGZ1bmN0aW9uIGNvbXBpbGVUaHJvdyhmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIihmdW5jdGlvbigpIHsgdGhyb3cgfnt9OyB9KSgpXCIsIGNvbXBpbGUobWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZVRocm93ID0gY29tcGlsZVRocm93O1xuXG52YXIgY29tcGlsZVNldCA9IGZ1bmN0aW9uIGNvbXBpbGVTZXQoZm9ybSkge1xuICByZXR1cm4gY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30gPSB+e31cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpKSk7XG59O1xuZXhwb3J0cy5jb21waWxlU2V0ID0gY29tcGlsZVNldDtcblxudmFyIGNvbXBpbGVWZWN0b3IgPSBmdW5jdGlvbiBjb21waWxlVmVjdG9yKGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiW357fV1cIiwgY29tcGlsZUdyb3VwKGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlVmVjdG9yID0gY29tcGlsZVZlY3RvcjtcblxudmFyIGNvbXBpbGVUcnkgPSBmdW5jdGlvbiBjb21waWxlVHJ5KGZvcm0pIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBsb29wKHRyeUV4cHJzLCBjYXRjaEV4cHJzLCBmaW5hbGx5RXhwcnMsIGV4cHJzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShleHBycykgP1xuICAgICAgaXNFbXB0eShjYXRjaEV4cHJzKSA/XG4gICAgICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiKGZ1bmN0aW9uKCkge1xcbnRyeSB7XFxuICB+e31cXG59IGZpbmFsbHkge1xcbiAgfnt9XFxufX0pKClcIiwgY29tcGlsZUZuQm9keSh0cnlFeHBycyksIGNvbXBpbGVGbkJvZHkoZmluYWxseUV4cHJzKSkpIDpcbiAgICAgIGlzRW1wdHkoZmluYWxseUV4cHJzKSA/XG4gICAgICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiKGZ1bmN0aW9uKCkge1xcbnRyeSB7XFxuICB+e31cXG59IGNhdGNoICh+e30pIHtcXG4gIH57fVxcbn19KSgpXCIsIGNvbXBpbGVGbkJvZHkodHJ5RXhwcnMpLCBjb21waWxlKGZpcnN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShyZXN0KGNhdGNoRXhwcnMpKSkpIDpcbiAgICAgICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCIoZnVuY3Rpb24oKSB7XFxudHJ5IHtcXG4gIH57fVxcbn0gY2F0Y2ggKH57fSkge1xcbiAgfnt9XFxufSBmaW5hbGx5IHtcXG4gIH57fVxcbn19KSgpXCIsIGNvbXBpbGVGbkJvZHkodHJ5RXhwcnMpLCBjb21waWxlKGZpcnN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShyZXN0KGNhdGNoRXhwcnMpKSwgY29tcGlsZUZuQm9keShmaW5hbGx5RXhwcnMpKSkgOlxuICAgIGlzRXF1YWwoZmlyc3QoZmlyc3QoZXhwcnMpKSwgc3ltYm9sKHZvaWQoMCksIFwiY2F0Y2hcIikpID9cbiAgICAgICh0cnlFeHBycyA9IHRyeUV4cHJzLCBjYXRjaEV4cHJzID0gcmVzdChmaXJzdChleHBycykpLCBmaW5hbGx5RXhwcnMgPSBmaW5hbGx5RXhwcnMsIGV4cHJzID0gcmVzdChleHBycyksIGxvb3ApIDpcbiAgICBpc0VxdWFsKGZpcnN0KGZpcnN0KGV4cHJzKSksIHN5bWJvbCh2b2lkKDApLCBcImZpbmFsbHlcIikpID9cbiAgICAgICh0cnlFeHBycyA9IHRyeUV4cHJzLCBjYXRjaEV4cHJzID0gY2F0Y2hFeHBycywgZmluYWxseUV4cHJzID0gcmVzdChmaXJzdChleHBycykpLCBleHBycyA9IHJlc3QoZXhwcnMpLCBsb29wKSA6XG4gICAgICAodHJ5RXhwcnMgPSBjb25zKGZpcnN0KGV4cHJzKSwgdHJ5RXhwcnMpLCBjYXRjaEV4cHJzID0gY2F0Y2hFeHBycywgZmluYWxseUV4cHJzID0gZmluYWxseUV4cHJzLCBleHBycyA9IHJlc3QoZXhwcnMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkobGlzdCgpLCBsaXN0KCksIGxpc3QoKSwgcmV2ZXJzZShmb3JtKSk7XG59O1xuZXhwb3J0cy5jb21waWxlVHJ5ID0gY29tcGlsZVRyeTtcblxudmFyIGNvbXBpbGVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGNvbXBpbGVQcm9wZXJ0eShmb3JtKSB7XG4gIHJldHVybiAobmFtZShzZWNvbmQoZm9ybSkpKVswXSA9PT0gXCItXCIgP1xuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KGlzTGlzdChmaXJzdChmb3JtKSkgP1xuICAgICAgXCIofnt9KS5+e31cIiA6XG4gICAgICBcIn57fS5+e31cIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHN5bWJvbChzdWJzKG5hbWUoc2Vjb25kKGZvcm0pKSwgMSkpKSkpKSA6XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30ufnt9KH57fSlcIiwgY29tcGlsZShtYWNyb2V4cGFuZChmaXJzdChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpLCBjb21waWxlR3JvdXAocmVzdChyZXN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVQcm9wZXJ0eSA9IGNvbXBpbGVQcm9wZXJ0eTtcblxudmFyIGNvbXBpbGVBcHBseSA9IGZ1bmN0aW9uIGNvbXBpbGVBcHBseShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiLlwiKSwgZmlyc3QoZm9ybSksIHN5bWJvbCh2b2lkKDApLCBcImFwcGx5XCIpLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlQXBwbHkgPSBjb21waWxlQXBwbHk7XG5cbnZhciBjb21waWxlTmV3ID0gZnVuY3Rpb24gY29tcGlsZU5ldyhmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIm5ldyB+e31cIiwgY29tcGlsZShmb3JtKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZU5ldyA9IGNvbXBpbGVOZXc7XG5cbnZhciBjb21waWxlQWdldCA9IGZ1bmN0aW9uIGNvbXBpbGVBZ2V0KGZvcm0pIHtcbiAgdmFyIHRhcmdldCA9IG1hY3JvZXhwYW5kKGZpcnN0KGZvcm0pKTtcbiAgdmFyIGF0dHJpYnV0ZSA9IG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSk7XG4gIHZhciBub3RGb3VuZCA9IHRoaXJkKGZvcm0pO1xuICB2YXIgdGVtcGxhdGUgPSBpc0xpc3QodGFyZ2V0KSA/XG4gICAgXCIofnt9KVt+e31dXCIgOlxuICAgIFwifnt9W357fV1cIjtcbiAgcmV0dXJuIG5vdEZvdW5kID9cbiAgICBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwib3JcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZ2V0XCIpLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pKSwgbWFjcm9leHBhbmQobm90Rm91bmQpKSkgOlxuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KHRlbXBsYXRlLCBjb21waWxlKHRhcmdldCksIGNvbXBpbGUoYXR0cmlidXRlKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUFnZXQgPSBjb21waWxlQWdldDtcblxudmFyIGNvbXBpbGVHZXQgPSBmdW5jdGlvbiBjb21waWxlR2V0KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVBZ2V0KGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJvclwiKSwgZmlyc3QoZm9ybSksIDApLCByZXN0KGZvcm0pKSk7XG59O1xuZXhwb3J0cy5jb21waWxlR2V0ID0gY29tcGlsZUdldDtcblxudmFyIGNvbXBpbGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNvbXBpbGVJbnN0YW5jZShmb3JtKSB7XG4gIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSBpbnN0YW5jZW9mIH57fVwiLCBjb21waWxlKG1hY3JvZXhwYW5kKHNlY29uZChmb3JtKSkpLCBjb21waWxlKG1hY3JvZXhwYW5kKGZpcnN0KGZvcm0pKSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVJbnN0YW5jZSA9IGNvbXBpbGVJbnN0YW5jZTtcblxudmFyIGNvbXBpbGVOb3QgPSBmdW5jdGlvbiBjb21waWxlTm90KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiISh+e30pXCIsIGNvbXBpbGUobWFjcm9leHBhbmQoZmlyc3QoZm9ybSkpKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZU5vdCA9IGNvbXBpbGVOb3Q7XG5cbnZhciBjb21waWxlTG9vcCA9IGZ1bmN0aW9uIGNvbXBpbGVMb29wKGZvcm0pIHtcbiAgdmFyIGJpbmRpbmdzID0gKGZ1bmN0aW9uIGxvb3AobmFtZXMsIHZhbHVlcywgdG9rZW5zKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eSh0b2tlbnMpID9cbiAgICAgIHtcbiAgICAgICAgXCJuYW1lc1wiOiBuYW1lcyxcbiAgICAgICAgXCJ2YWx1ZXNcIjogdmFsdWVzXG4gICAgICB9IDpcbiAgICAgIChuYW1lcyA9IGNvbmoobmFtZXMsIGZpcnN0KHRva2VucykpLCB2YWx1ZXMgPSBjb25qKHZhbHVlcywgc2Vjb25kKHRva2VucykpLCB0b2tlbnMgPSByZXN0KHJlc3QodG9rZW5zKSksIGxvb3ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJlY3VyO1xuICB9KShbXSwgW10sIGZpcnN0KGZvcm0pKTtcbiAgdmFyIG5hbWVzID0gKGJpbmRpbmdzIHx8IDApW1wibmFtZXNcIl07XG4gIHZhciB2YWx1ZXMgPSAoYmluZGluZ3MgfHwgMClbXCJ2YWx1ZXNcIl07XG4gIHZhciBib2R5ID0gcmVzdChmb3JtKTtcbiAgcmV0dXJuIGNvbXBpbGUoY29ucyhjb25zKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb25zKHN5bWJvbCh2b2lkKDApLCBcImxvb3BcIiksIGNvbnMobmFtZXMsIGNvbXBpbGVSZWN1cihuYW1lcywgYm9keSkpKSksIGxpc3QuYXBwbHkobGlzdCwgdmFsdWVzKSkpO1xufTtcbmV4cG9ydHMuY29tcGlsZUxvb3AgPSBjb21waWxlTG9vcDtcblxudmFyIHJlYmluZEJpbmRpbmdzID0gZnVuY3Rpb24gcmViaW5kQmluZGluZ3MobmFtZXMsIHZhbHVlcykge1xuICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AocmVzdWx0LCBuYW1lcywgdmFsdWVzKSB7XG4gICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgIHJlY3VyID0gaXNFbXB0eShuYW1lcykgP1xuICAgICAgcmV2ZXJzZShyZXN1bHQpIDpcbiAgICAgIChyZXN1bHQgPSBjb25zKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZmlyc3QobmFtZXMpLCBmaXJzdCh2YWx1ZXMpKSwgcmVzdWx0KSwgbmFtZXMgPSByZXN0KG5hbWVzKSwgdmFsdWVzID0gcmVzdCh2YWx1ZXMpLCBsb29wKTtcbiAgICB9O1xuICAgIHJldHVybiByZWN1cjtcbiAgfSkobGlzdCgpLCBuYW1lcywgdmFsdWVzKTtcbn07XG5leHBvcnRzLnJlYmluZEJpbmRpbmdzID0gcmViaW5kQmluZGluZ3M7XG5cbnZhciBleHBhbmRSZWN1ciA9IGZ1bmN0aW9uIGV4cGFuZFJlY3VyKG5hbWVzLCBib2R5KSB7XG4gIHJldHVybiBtYXAoZnVuY3Rpb24oZm9ybSkge1xuICAgIHJldHVybiBpc0xpc3QoZm9ybSkgP1xuICAgICAgaXNFcXVhbChmaXJzdChmb3JtKSwgc3ltYm9sKHZvaWQoMCksIFwicmVjdXJcIikpID9cbiAgICAgICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlR3JvdXAoY29uY2F0KHJlYmluZEJpbmRpbmdzKG5hbWVzLCByZXN0KGZvcm0pKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJsb29wXCIpKSksIHRydWUpKSA6XG4gICAgICAgIGV4cGFuZFJlY3VyKG5hbWVzLCBmb3JtKSA6XG4gICAgICBmb3JtO1xuICB9LCBib2R5KTtcbn07XG5leHBvcnRzLmV4cGFuZFJlY3VyID0gZXhwYW5kUmVjdXI7XG5cbnZhciBjb21waWxlUmVjdXIgPSBmdW5jdGlvbiBjb21waWxlUmVjdXIobmFtZXMsIGJvZHkpIHtcbiAgcmV0dXJuIGxpc3QobGlzdChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlVGVtcGxhdGUobGlzdChcInZhciByZWN1ciA9IGxvb3A7XFxud2hpbGUgKHJlY3VyID09PSBsb29wKSB7XFxuICByZWN1ciA9IH57fVxcbn1cIiwgY29tcGlsZVN0YXRlbWVudHMoZXhwYW5kUmVjdXIobmFtZXMsIGJvZHkpKSkpKSwgc3ltYm9sKHZvaWQoMCksIFwicmVjdXJcIikpO1xufTtcbmV4cG9ydHMuY29tcGlsZVJlY3VyID0gY29tcGlsZVJlY3VyO1xuXG52YXIgY29tcGlsZVJhdyA9IGZ1bmN0aW9uIGNvbXBpbGVSYXcoZm9ybSkge1xuICByZXR1cm4gZmlyc3QoZm9ybSk7XG59O1xuZXhwb3J0cy5jb21waWxlUmF3ID0gY29tcGlsZVJhdztcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgY29tcGlsZVNldCk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImdldFwiKSwgY29tcGlsZUdldCk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImFnZXRcIiksIGNvbXBpbGVBZ2V0KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCBjb21waWxlRGVmKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiaWZcIiksIGNvbXBpbGVJZkVsc2UpO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJkb1wiKSwgY29tcGlsZURvKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiZG8qXCIpLCBjb21waWxlU3RhdGVtZW50cyk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBjb21waWxlRm4pO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJ0aHJvd1wiKSwgY29tcGlsZVRocm93KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwidmVjdG9yXCIpLCBjb21waWxlVmVjdG9yKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwidHJ5XCIpLCBjb21waWxlVHJ5KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiLlwiKSwgY29tcGlsZVByb3BlcnR5KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiYXBwbHlcIiksIGNvbXBpbGVBcHBseSk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcIm5ld1wiKSwgY29tcGlsZU5ldyk7XG5cbmluc3RhbGxTcGVjaWFsKHN5bWJvbCh2b2lkKDApLCBcImluc3RhbmNlP1wiKSwgY29tcGlsZUluc3RhbmNlKTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwibm90XCIpLCBjb21waWxlTm90KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwibG9vcFwiKSwgY29tcGlsZUxvb3ApO1xuXG5pbnN0YWxsU3BlY2lhbChzeW1ib2wodm9pZCgwKSwgXCJyYXcqXCIpLCBjb21waWxlUmF3KTtcblxuaW5zdGFsbFNwZWNpYWwoc3ltYm9sKHZvaWQoMCksIFwiY29tbWVudFwiKSwgd3JpdGVDb21tZW50KTtcblxudmFyIGNvbXBpbGVSZVBhdHRlcm4gPSBmdW5jdGlvbiBjb21waWxlUmVQYXR0ZXJuKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBmb3JtO1xufTtcbmV4cG9ydHMuY29tcGlsZVJlUGF0dGVybiA9IGNvbXBpbGVSZVBhdHRlcm47XG5cbnZhciBpbnN0YWxsTmF0aXZlID0gZnVuY3Rpb24gaW5zdGFsbE5hdGl2ZShhbGlhcywgb3BlcmF0b3IsIHZhbGlkYXRvciwgZmFsbGJhY2spIHtcbiAgcmV0dXJuIGluc3RhbGxTcGVjaWFsKGFsaWFzLCBmdW5jdGlvbihmb3JtKSB7XG4gICAgcmV0dXJuIGlzRW1wdHkoZm9ybSkgP1xuICAgICAgZmFsbGJhY2sgOlxuICAgICAgcmVkdWNlKGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSB+e30gfnt9XCIsIGxlZnQsIG5hbWUob3BlcmF0b3IpLCByaWdodCkpO1xuICAgICAgfSwgbWFwKGZ1bmN0aW9uKG9wZXJhbmQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KGlzTGlzdChvcGVyYW5kKSA/XG4gICAgICAgICAgXCIofnt9KVwiIDpcbiAgICAgICAgICBcIn57fVwiLCBjb21waWxlKG1hY3JvZXhwYW5kKG9wZXJhbmQpKSkpO1xuICAgICAgfSwgZm9ybSkpO1xuICB9LCB2YWxpZGF0b3IpO1xufTtcbmV4cG9ydHMuaW5zdGFsbE5hdGl2ZSA9IGluc3RhbGxOYXRpdmU7XG5cbnZhciBpbnN0YWxsT3BlcmF0b3IgPSBmdW5jdGlvbiBpbnN0YWxsT3BlcmF0b3IoYWxpYXMsIG9wZXJhdG9yKSB7XG4gIHJldHVybiBpbnN0YWxsU3BlY2lhbChhbGlhcywgZnVuY3Rpb24oZm9ybSkge1xuICAgIHJldHVybiAoZnVuY3Rpb24gbG9vcChyZXN1bHQsIGxlZnQsIHJpZ2h0LCBvcGVyYW5kcykge1xuICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICByZWN1ciA9IGlzRW1wdHkob3BlcmFuZHMpID9cbiAgICAgICAgXCJcIiArIHJlc3VsdCArIChjb21waWxlVGVtcGxhdGUobGlzdChcIn57fSB+e30gfnt9XCIsIGNvbXBpbGUobWFjcm9leHBhbmQobGVmdCkpLCBuYW1lKG9wZXJhdG9yKSwgY29tcGlsZShtYWNyb2V4cGFuZChyaWdodCkpKSkpIDpcbiAgICAgICAgKHJlc3VsdCA9IFwiXCIgKyByZXN1bHQgKyAoY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ+e30gfnt9IH57fSAmJiBcIiwgY29tcGlsZShtYWNyb2V4cGFuZChsZWZ0KSksIG5hbWUob3BlcmF0b3IpLCBjb21waWxlKG1hY3JvZXhwYW5kKHJpZ2h0KSkpKSksIGxlZnQgPSByaWdodCwgcmlnaHQgPSBmaXJzdChvcGVyYW5kcyksIG9wZXJhbmRzID0gcmVzdChvcGVyYW5kcyksIGxvb3ApO1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZWN1cjtcbiAgICB9KShcIlwiLCBmaXJzdChmb3JtKSwgc2Vjb25kKGZvcm0pLCByZXN0KHJlc3QoZm9ybSkpKTtcbiAgfSwgdmVyaWZ5VHdvKTtcbn07XG5leHBvcnRzLmluc3RhbGxPcGVyYXRvciA9IGluc3RhbGxPcGVyYXRvcjtcblxudmFyIGNvbXBpbGVyRXJyb3IgPSBmdW5jdGlvbiBjb21waWxlckVycm9yKGZvcm0sIG1lc3NhZ2UpIHtcbiAgdmFyIGVycm9yID0gRXJyb3IoXCJcIiArIG1lc3NhZ2UpO1xuICBlcnJvci5saW5lID0gMTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHsgdGhyb3cgZXJyb3I7IH0pKCk7XG59O1xuZXhwb3J0cy5jb21waWxlckVycm9yID0gY29tcGlsZXJFcnJvcjtcblxudmFyIHZlcmlmeVR3byA9IGZ1bmN0aW9uIHZlcmlmeVR3byhmb3JtKSB7XG4gIHJldHVybiAoaXNFbXB0eShyZXN0KGZvcm0pKSkgfHwgKGlzRW1wdHkocmVzdChyZXN0KGZvcm0pKSkpID9cbiAgICAoZnVuY3Rpb24oKSB7IHRocm93IGNvbXBpbGVyRXJyb3IoZm9ybSwgXCJcIiArIChmaXJzdChmb3JtKSkgKyBcIiBmb3JtIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBvcGVyYW5kc1wiKTsgfSkoKSA6XG4gICAgdm9pZCgwKTtcbn07XG5leHBvcnRzLnZlcmlmeVR3byA9IHZlcmlmeVR3bztcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIrXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIrXCIpLCB2b2lkKDApLCAwKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCItXCIpLCBzeW1ib2wodm9pZCgwKSwgXCItXCIpLCB2b2lkKDApLCBcIk5hTlwiKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIqXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIqXCIpLCB2b2lkKDApLCAxKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCIvXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIvXCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcIm1vZFwiKSwgc3ltYm9sKFwiJVwiKSwgdmVyaWZ5VHdvKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCJhbmRcIiksIHN5bWJvbCh2b2lkKDApLCBcIiYmXCIpKTtcblxuaW5zdGFsbE5hdGl2ZShzeW1ib2wodm9pZCgwKSwgXCJvclwiKSwgc3ltYm9sKHZvaWQoMCksIFwifHxcIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwibm90PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiIT1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPT1cIiksIHN5bWJvbCh2b2lkKDApLCBcIj09PVwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCJpZGVudGljYWw/XCIpLCBzeW1ib2wodm9pZCgwKSwgXCI9PT1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPlwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPlwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCI+PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPj1cIikpO1xuXG5pbnN0YWxsT3BlcmF0b3Ioc3ltYm9sKHZvaWQoMCksIFwiPFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPFwiKSk7XG5cbmluc3RhbGxPcGVyYXRvcihzeW1ib2wodm9pZCgwKSwgXCI8PVwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPD1cIikpO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1hbmRcIiksIHN5bWJvbCh2b2lkKDApLCBcIiZcIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LW9yXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJ8XCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC14b3JcIiksIHN5bWJvbChcIl5cIikpO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1ub3RcIiksIHN5bWJvbChcIn5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LXNoaWZ0LWxlZnRcIiksIHN5bWJvbCh2b2lkKDApLCBcIjw8XCIpLCB2ZXJpZnlUd28pO1xuXG5pbnN0YWxsTmF0aXZlKHN5bWJvbCh2b2lkKDApLCBcImJpdC1zaGlmdC1yaWdodFwiKSwgc3ltYm9sKHZvaWQoMCksIFwiPj5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxOYXRpdmUoc3ltYm9sKHZvaWQoMCksIFwiYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsXCIpLCBzeW1ib2wodm9pZCgwKSwgXCI+Pj5cIiksIHZlcmlmeVR3byk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJzdHJcIiksIGZ1bmN0aW9uIHN0cigpIHtcbiAgdmFyIGZvcm1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcIitcIiksIFwiXCIpLCBmb3Jtcyk7XG59KTtcblxuaW5zdGFsbE1hY3JvKHN5bWJvbCh2b2lkKDApLCBcImxldFwiKSwgZnVuY3Rpb24gbGV0TWFjcm8oYmluZGluZ3MpIHtcbiAgdmFyIGJvZHkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gY29ucyhzeW1ib2wodm9pZCgwKSwgXCJkb1wiKSwgY29uY2F0KGRlZmluZUJpbmRpbmdzKGJpbmRpbmdzKSwgYm9keSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJjb25kXCIpLCBmdW5jdGlvbiBjb25kKCkge1xuICB2YXIgY2xhdXNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiAhKGlzRW1wdHkoY2xhdXNlcykpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBmaXJzdChjbGF1c2VzKSwgaXNFbXB0eShyZXN0KGNsYXVzZXMpKSA/XG4gICAgICAoZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKFwiY29uZCByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZiBmb3Jtc1wiKTsgfSkoKSA6XG4gICAgICBzZWNvbmQoY2xhdXNlcyksIGNvbnMoc3ltYm9sKHZvaWQoMCksIFwiY29uZFwiKSwgcmVzdChyZXN0KGNsYXVzZXMpKSkpIDpcbiAgICB2b2lkKDApO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJkZWZuXCIpLCBmdW5jdGlvbiBkZWZuKG5hbWUpIHtcbiAgdmFyIGJvZHkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gbGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIG5hbWUsIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImZuXCIpLCBuYW1lKSwgYm9keSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJkZWZuLVwiKSwgZnVuY3Rpb24gZGVmbihuYW1lKSB7XG4gIHZhciBib2R5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRlZm5cIiksIHdpdGhNZXRhKG5hbWUsIGNvbmooe1xuICAgIFwicHJpdmF0ZVwiOiB0cnVlXG4gIH0sIG1ldGEobmFtZSkpKSksIGJvZHkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJhc3NlcnRcIiksIGZ1bmN0aW9uIGFzc2VydCh4LCBtZXNzYWdlKSB7XG4gIHZhciB0aXRsZSA9IG1lc3NhZ2UgfHwgXCJcIjtcbiAgdmFyIGFzc2VydGlvbiA9IHByU3RyKHgpO1xuICB2YXIgdXJpID0gKHggfHwgMClbXCJ1cmlcIl07XG4gIHZhciBmb3JtID0gaXNMaXN0KHgpID9cbiAgICBzZWNvbmQoeCkgOlxuICAgIHg7XG4gIHJldHVybiBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRvXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImFuZFwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJub3RcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiaWRlbnRpY2FsP1wiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJ0eXBlb2ZcIiksIHN5bWJvbCh2b2lkKDApLCBcIioqdmVyYm9zZSoqXCIpKSwgXCJ1bmRlZmluZWRcIikpLCBzeW1ib2wodm9pZCgwKSwgXCIqKnZlcmJvc2UqKlwiKSksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiLmxvZ1wiKSwgc3ltYm9sKHZvaWQoMCksIFwiY29uc29sZVwiKSwgXCJBc3NlcnQ6XCIsIGFzc2VydGlvbikpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcImlmXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIm5vdFwiKSwgeCksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwidGhyb3dcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiRXJyb3IuXCIpLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInN0clwiKSwgXCJBc3NlcnQgZmFpbGVkOiBcIiwgdGl0bGUsIFwiXFxuXFxuQXNzZXJ0aW9uOlxcblxcblwiLCBhc3NlcnRpb24sIFwiXFxuXFxuQWN0dWFsOlxcblxcblwiLCBmb3JtLCBcIlxcbi0tLS0tLS0tLS0tLS0tXFxuXCIpLCB1cmkpKSkpO1xufSk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJpbXBvcnRcIiksIGZ1bmN0aW9uKGltcG9ydHMsIHBhdGgpIHtcbiAgcmV0dXJuIGlzTmlsKHBhdGgpID9cbiAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIGltcG9ydHMpIDpcbiAgaXNTeW1ib2woaW1wb3J0cykgP1xuICAgIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCB3aXRoTWV0YShpbXBvcnRzLCB7XG4gICAgICBcInByaXZhdGVcIjogdHJ1ZVxuICAgIH0pLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpKSA6XG4gICAgKGZ1bmN0aW9uIGxvb3AoZm9ybSwgbmFtZXMpIHtcbiAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICB3aGlsZSAocmVjdXIgPT09IGxvb3ApIHtcbiAgICAgICAgcmVjdXIgPSBpc0VtcHR5KG5hbWVzKSA/XG4gICAgICAgIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcImRvKlwiKSksIGZvcm0pIDpcbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhbGlhcyA9IGZpcnN0KG5hbWVzKTtcbiAgICAgICAgICB2YXIgaWQgPSBzeW1ib2woXCJcIiArIFwiLi1cIiArIChuYW1lKGFsaWFzKSkpO1xuICAgICAgICAgIHJldHVybiAoZm9ybSA9IGNvbnMobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIHdpdGhNZXRhKGFsaWFzLCB7XG4gICAgICAgICAgICBcInByaXZhdGVcIjogdHJ1ZVxuICAgICAgICAgIH0pLCBsaXN0KGlkLCBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpKSksIGZvcm0pLCBuYW1lcyA9IHJlc3QobmFtZXMpLCBsb29wKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjdXI7XG4gICAgfSkobGlzdCgpLCBpbXBvcnRzKTtcbn0pO1xuXG52YXIgZXhwYW5kTnMgPSBmdW5jdGlvbiBleHBhbmROcyhpZCkge1xuICB2YXIgcGFyYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIChmdW5jdGlvbigpIHtcbiAgICB2YXIgbnMgPSBcIlwiICsgaWQ7XG4gICAgdmFyIHJlcXVpcmVyID0gc3BsaXQobnMsIFwiLlwiKTtcbiAgICB2YXIgZG9jID0gaXNTdHJpbmcoZmlyc3QocGFyYW1zKSkgP1xuICAgICAgZmlyc3QocGFyYW1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciBhcmdzID0gZG9jID9cbiAgICAgIHJlc3QocGFyYW1zKSA6XG4gICAgICBwYXJhbXM7XG4gICAgdmFyIHBhcnNlUmVmZXJlbmNlcyA9IGZ1bmN0aW9uKGZvcm1zKSB7XG4gICAgICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uKHJlZmVyZW5jZXMsIGZvcm0pIHtcbiAgICAgICAgKHJlZmVyZW5jZXMgfHwgMClbbmFtZShmaXJzdChmb3JtKSldID0gdmVjKHJlc3QoZm9ybSkpO1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgICAgIH0sIHt9LCBmb3Jtcyk7XG4gICAgfTtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IHBhcnNlUmVmZXJlbmNlcyhhcmdzKTtcbiAgICB2YXIgaWRUb1BhdGggPSBmdW5jdGlvbiBpZFRvUGF0aChpZCkge1xuICAgICAgdmFyIHJlcXVpcmVtZW50ID0gc3BsaXQoXCJcIiArIGlkLCBcIi5cIik7XG4gICAgICB2YXIgaXNSZWxhdGl2ZSA9IGZpcnN0KHJlcXVpcmVyKSA9PT0gZmlyc3QocmVxdWlyZW1lbnQpO1xuICAgICAgcmV0dXJuIGlzUmVsYXRpdmUgP1xuICAgICAgICAoZnVuY3Rpb24gbG9vcChmcm9tLCB0bykge1xuICAgICAgICAgIHZhciByZWN1ciA9IGxvb3A7XG4gICAgICAgICAgd2hpbGUgKHJlY3VyID09PSBsb29wKSB7XG4gICAgICAgICAgICByZWN1ciA9IGZpcnN0KGZyb20pID09PSBmaXJzdCh0bykgP1xuICAgICAgICAgICAgKGZyb20gPSByZXN0KGZyb20pLCB0byA9IHJlc3QodG8pLCBsb29wKSA6XG4gICAgICAgICAgICBqb2luKFwiL1wiLCBjb25jYXQoW1wiLlwiXSwgcmVwZWF0KGRlYyhjb3VudChmcm9tKSksIFwiLi5cIiksIHRvKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gcmVjdXI7XG4gICAgICAgIH0pKHJlcXVpcmVyLCByZXF1aXJlbWVudCkgOlxuICAgICAgICBqb2luKFwiL1wiLCByZXF1aXJlbWVudCk7XG4gICAgfTtcbiAgICB2YXIgbWFrZVJlcXVpcmUgPSBmdW5jdGlvbihmcm9tLCBhcywgbmFtZSkge1xuICAgICAgdmFyIHBhdGggPSBpZFRvUGF0aChmcm9tKTtcbiAgICAgIHZhciByZXF1aXJlbWVudCA9IG5hbWUgP1xuICAgICAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5cIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwicmVxdWlyZVwiKSwgcGF0aCksIHN5bWJvbCh2b2lkKDApLCBcIlwiICsgXCItXCIgKyBuYW1lKSkgOlxuICAgICAgICBsaXN0KHN5bWJvbCh2b2lkKDApLCBcInJlcXVpcmVcIiksIHBhdGgpO1xuICAgICAgcmV0dXJuIGFzID9cbiAgICAgICAgbGlzdChzeW1ib2wodm9pZCgwKSwgXCJkZWZcIiksIGFzLCByZXF1aXJlbWVudCkgOlxuICAgICAgICByZXF1aXJlbWVudDtcbiAgICB9O1xuICAgIHZhciBleHBhbmRSZXF1aXJlbWVudCA9IGZ1bmN0aW9uKGZvcm0pIHtcbiAgICAgIHZhciBmcm9tID0gZmlyc3QoZm9ybSk7XG4gICAgICB2YXIgYXMgPSAoXCLqnolhc1wiID09PSBzZWNvbmQoZm9ybSkpICYmICh0aGlyZChmb3JtKSk7XG4gICAgICByZXR1cm4gbWFrZVJlcXVpcmUoZnJvbSwgYXMpO1xuICAgIH07XG4gICAgdmFyIGV4cGFuZFVzZSA9IGZ1bmN0aW9uKGZvcm0pIHtcbiAgICAgIHZhciBmcm9tID0gZmlyc3QoZm9ybSk7XG4gICAgICB2YXIgZGlyZWN0aXZlcyA9IGRpY3Rpb25hcnkuYXBwbHkoZGljdGlvbmFyeSwgdmVjKHJlc3QoZm9ybSkpKTtcbiAgICAgIHZhciBuYW1lcyA9IChkaXJlY3RpdmVzIHx8IDApW1wi6p6Jb25seVwiXTtcbiAgICAgIHZhciByZW5hbWVzID0gKGRpcmVjdGl2ZXMgfHwgMClbXCLqnolyZW5hbWVcIl07XG4gICAgICB2YXIgbmFtZWRJbXBvcnRzID0gbmFtZXMgJiYgKG1hcChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYWtlUmVxdWlyZShmcm9tLCBuYW1lLCBuYW1lKTtcbiAgICAgIH0sIG5hbWVzKSk7XG4gICAgICB2YXIgcmVuYW1lZEltcG9ydHMgPSByZW5hbWVzICYmIChtYXAoZnVuY3Rpb24ocGFpcikge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVpcmUoZnJvbSwgc2Vjb25kKHBhaXIpLCBmaXJzdChwYWlyKSk7XG4gICAgICB9LCByZW5hbWVzKSk7XG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICghKHR5cGVvZihfX3ZlcmJvc2VfXykgPT09IFwidW5kZWZpbmVkXCIpKSAmJiBfX3ZlcmJvc2VfXyA/XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBc3NlcnQ6XCIsIFwiKG9yIG5hbWVzIHJlbmFtZXMpXCIpIDpcbiAgICAgICAgICB2b2lkKDApO1xuICAgICAgICByZXR1cm4gIShuYW1lcyB8fCByZW5hbWVzKSA/XG4gICAgICAgICAgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJcIiArIFwiQXNzZXJ0IGZhaWxlZDogXCIgKyAoXCJcIiArIFwiT25seSBbbXkubGliIDpvbmx5IFtmb28gYmFyXV0gZm9ybSAmIFwiICsgXCJbY2xvanVyZS5zdHJpbmcgOnJlbmFtZSB7cmVwbGFjZSBzdHItcmVwbGFjZX0gYXJlIHN1cHBvcnRlZFwiKSArIFwiXFxuXFxuQXNzZXJ0aW9uOlxcblxcblwiICsgXCIob3IgbmFtZXMgcmVuYW1lcylcIiArIFwiXFxuXFxuQWN0dWFsOlxcblxcblwiICsgbmFtZXMgKyBcIlxcbi0tLS0tLS0tLS0tLS0tXFxuXCIsIHZvaWQoMCkpOyB9KSgpIDpcbiAgICAgICAgICB2b2lkKDApO1xuICAgICAgfSkoKTtcbiAgICAgIHJldHVybiBjb25jYXQoW10sIG5hbWVkSW1wb3J0cywgcmVuYW1lZEltcG9ydHMpO1xuICAgIH07XG4gICAgdmFyIHJlcXVpcmVGb3JtcyA9IChyZWZlcmVuY2VzIHx8IDApW1wicmVxdWlyZVwiXTtcbiAgICB2YXIgdXNlRm9ybXMgPSAocmVmZXJlbmNlcyB8fCAwKVtcInVzZVwiXTtcbiAgICB2YXIgcmVxdWlyZW1lbnRzID0gcmVxdWlyZUZvcm1zID9cbiAgICAgIG1hcChleHBhbmRSZXF1aXJlbWVudCwgcmVxdWlyZUZvcm1zKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHZhciB1c2VzID0gdXNlRm9ybXMgP1xuICAgICAgY29uY2F0LmFwcGx5KGNvbmNhdCwgbWFwKGV4cGFuZFVzZSwgdXNlRm9ybXMpKSA6XG4gICAgICB2b2lkKDApO1xuICAgIHJldHVybiBjb25jYXQobGlzdChzeW1ib2wodm9pZCgwKSwgXCJkbypcIiksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwiZGVmXCIpLCBzeW1ib2wodm9pZCgwKSwgXCIqbnMqXCIpLCBucyksIGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuLW5hbWVzcGFjZVwiKSwgc3ltYm9sKHZvaWQoMCksIFwibW9kdWxlXCIpKSwgc3ltYm9sKHZvaWQoMCksIFwiKm5zKlwiKSkpLCBkb2MgP1xuICAgICAgW2xpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuLWRlc2NyaXB0aW9uXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJtb2R1bGVcIikpLCBkb2MpXSA6XG4gICAgICB2b2lkKDApLCByZXF1aXJlbWVudHMsIHVzZXMpO1xuICB9KSgpO1xufTtcbmV4cG9ydHMuZXhwYW5kTnMgPSBleHBhbmROcztcblxuaW5zdGFsbE1hY3JvKHN5bWJvbCh2b2lkKDApLCBcIm5zXCIpLCBleHBhbmROcyk7XG5cbmluc3RhbGxNYWNybyhzeW1ib2wodm9pZCgwKSwgXCJwcmludFwiKSwgZnVuY3Rpb24oKSB7XG4gIHZhciBtb3JlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgXCJQcmludHMgdGhlIG9iamVjdChzKSB0byB0aGUgb3V0cHV0IGZvciBodW1hbiBjb25zdW1wdGlvbi5cIjtcbiAgcmV0dXJuIGNvbmNhdChsaXN0KHN5bWJvbCh2b2lkKDApLCBcIi5sb2dcIiksIHN5bWJvbCh2b2lkKDApLCBcImNvbnNvbGVcIikpLCBtb3JlKTtcbn0pXG4iLCJ2YXIgc3RyID0gKHJlcXVpcmUoXCIuLi9ydW50aW1lXCIpKS5zdHI7O1xuXG52YXIgcmVzdCA9IChyZXF1aXJlKFwiLi4vc2VxdWVuY2VcIikpLnJlc3Q7O1xuXG52YXIgcmVhZEZyb21TdHJpbmcgPSAocmVxdWlyZShcIi4uL3JlYWRlclwiKSkucmVhZEZyb21TdHJpbmc7O1xuXG52YXIgY29tcGlsZVByb2dyYW0gPSAocmVxdWlyZShcIi4uL2NvbXBpbGVyXCIpKS5jb21waWxlUHJvZ3JhbTs7XG5cbnZhciB0cmFuc3BpbGUgPSBmdW5jdGlvbiB0cmFuc3BpbGUoc291cmNlLCB1cmkpIHtcbiAgcmV0dXJuIFwiXCIgKyAoY29tcGlsZVByb2dyYW0ocmVzdChyZWFkRnJvbVN0cmluZyhcIlwiICsgXCIoZG8gXCIgKyBzb3VyY2UgKyBcIilcIiwgdXJpKSkpKSArIFwiXFxuXCI7XG59O1xuZXhwb3J0cy50cmFuc3BpbGUgPSB0cmFuc3BpbGU7XG5cbnZhciBldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKGNvZGUsIHVybCkge1xuICByZXR1cm4gZXZhbCh0cmFuc3BpbGUoY29kZSwgdXJsKSk7XG59O1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gcnVuKGNvZGUsIHVybCkge1xuICByZXR1cm4gKEZ1bmN0aW9uKHRyYW5zcGlsZShjb2RlLCB1cmwpKSkoKTtcbn07XG5leHBvcnRzLnJ1biA9IHJ1bjtcblxudmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkKHVybCwgY2FsbGJhY2spIHtcbiAgdmFyIHJlcXVlc3QgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QgP1xuICAgIG5ldyBYTUxIdHRwUmVxdWVzdCgpIDpcbiAgICBuZXcgQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxIVFRQXCIpO1xuICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcbiAgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlID9cbiAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoXCJhcHBsaWNhdGlvbi93aXNwXCIpIDpcbiAgICB2b2lkKDApO1xuICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IDQgP1xuICAgICAgKHJlcXVlc3Quc3RhdHVzID09PSAwKSB8fCAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkgP1xuICAgICAgICBjYWxsYmFjayhydW4ocmVxdWVzdC5yZXNwb25zZVRleHQsIHVybCkpIDpcbiAgICAgICAgY2FsbGJhY2soXCJDb3VsZCBub3QgbG9hZFwiKSA6XG4gICAgICB2b2lkKDApO1xuICB9O1xuICByZXR1cm4gcmVxdWVzdC5zZW5kKG51bGwpO1xufTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5cbnZhciBydW5TY3JpcHRzID0gZnVuY3Rpb24gcnVuU2NyaXB0cygpIHtcbiAgdmFyIHNjcmlwdHMgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIiksIGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHJldHVybiBzY3JpcHQudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi93aXNwXCI7XG4gIH0pO1xuICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIHNjcmlwdHMubGVuZ3RoID9cbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5zcmMgP1xuICAgICAgICAgIGxvYWQoc2NyaXB0LnNyYywgbmV4dCkgOlxuICAgICAgICAgIG5leHQocnVuKHNjcmlwdC5pbm5lckhUTUwpKTtcbiAgICAgIH0pKCkgOlxuICAgICAgdm9pZCgwKTtcbiAgfTtcbiAgcmV0dXJuIG5leHQoKTtcbn07XG5leHBvcnRzLnJ1blNjcmlwdHMgPSBydW5TY3JpcHRzO1xuXG4oZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB8fCAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJpbnRlcmFjdGl2ZVwiKSA/XG4gIHJ1blNjcmlwdHMoKSA6XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBydW5TY3JpcHRzLCBmYWxzZSkgOlxuICB3aW5kb3cuYXR0YWNoRXZlbnQoXCJvbmxvYWRcIiwgcnVuU2NyaXB0cylcbiIsInZhciBpc0tleXdvcmQgPSAocmVxdWlyZShcIi4uLy4uL2FzdFwiKSkuaXNLZXl3b3JkO1xudmFyIGlzU3ltYm9sID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLmlzU3ltYm9sO1xudmFyIHN5bWJvbCA9IChyZXF1aXJlKFwiLi4vLi4vYXN0XCIpKS5zeW1ib2w7XG52YXIgbmFtZXNwYWNlID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLm5hbWVzcGFjZTtcbnZhciBuYW1lID0gKHJlcXVpcmUoXCIuLi8uLi9hc3RcIikpLm5hbWU7O1xuXG52YXIgaXNFbXB0eSA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLmlzRW1wdHk7XG52YXIgcmVkdWNlID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkucmVkdWNlO1xudmFyIGxhc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5sYXN0O1xudmFyIGNvdW50ID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkuY291bnQ7XG52YXIgbWFwID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkubWFwO1xudmFyIHZlYyA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLnZlYztcbnZhciBpc0xpc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5pc0xpc3Q7XG52YXIgcmVzdCA9IChyZXF1aXJlKFwiLi4vLi4vc2VxdWVuY2VcIikpLnJlc3Q7XG52YXIgZmlyc3QgPSAocmVxdWlyZShcIi4uLy4uL3NlcXVlbmNlXCIpKS5maXJzdDtcbnZhciBsaXN0ID0gKHJlcXVpcmUoXCIuLi8uLi9zZXF1ZW5jZVwiKSkubGlzdDs7XG5cbnZhciBzdWJzID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5zdWJzO1xudmFyIGRlYyA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuZGVjO1xudmFyIHJlRmluZCA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkucmVGaW5kO1xudmFyIGlzUmVQYXR0ZXJuID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1JlUGF0dGVybjtcbnZhciBpc0Jvb2xlYW4gPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzQm9vbGVhbjtcbnZhciBpc0RpY3Rpb25hcnkgPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzRGljdGlvbmFyeTtcbnZhciBpc1ZlY3RvciA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuaXNWZWN0b3I7XG52YXIgaXNOdW1iZXIgPSAocmVxdWlyZShcIi4uLy4uL3J1bnRpbWVcIikpLmlzTnVtYmVyO1xudmFyIGlzU3RyaW5nID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1N0cmluZztcbnZhciBpc05pbCA9IChyZXF1aXJlKFwiLi4vLi4vcnVudGltZVwiKSkuaXNOaWw7XG52YXIgaXNUcnVlID0gKHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lXCIpKS5pc1RydWU7O1xuXG52YXIgdXBwZXJDYXNlID0gKHJlcXVpcmUoXCIuLi8uLi9zdHJpbmdcIikpLnVwcGVyQ2FzZTtcbnZhciBzcGxpdCA9IChyZXF1aXJlKFwiLi4vLi4vc3RyaW5nXCIpKS5zcGxpdDtcbnZhciBqb2luID0gKHJlcXVpcmUoXCIuLi8uLi9zdHJpbmdcIikpLmpvaW47XG52YXIgcmVwbGFjZSA9IChyZXF1aXJlKFwiLi4vLi4vc3RyaW5nXCIpKS5yZXBsYWNlOztcblxudmFyIHdyaXRlUmVmZXJlbmNlID0gZnVuY3Rpb24gd3JpdGVSZWZlcmVuY2UoZm9ybSkge1xuICBcIlRyYW5zbGF0ZXMgcmVmZXJlbmNlcyBmcm9tIGNsb2p1cmUgY29udmVudGlvbiB0byBKUzpcXG5cXG4gICoqbWFjcm9zKiogICAgICBfX21hY3Jvc19fXFxuICBsaXN0LT52ZWN0b3IgICAgbGlzdFRvVmVjdG9yXFxuICBzZXQhICAgICAgICAgICAgc2V0XFxuICBmb29fYmFyICAgICAgICAgZm9vX2JhclxcbiAgbnVtYmVyPyAgICAgICAgIGlzTnVtYmVyXFxuICBjcmVhdGUtc2VydmVyICAgY3JlYXRlU2VydmVyXCI7XG4gIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkID0gbmFtZShmb3JtKTtcbiAgICBpZCA9IGlkID09PSBcIipcIiA/XG4gICAgICBcIm11bHRpcGx5XCIgOlxuICAgIGlkID09PSBcIi9cIiA/XG4gICAgICBcImRpdmlkZVwiIDpcbiAgICBpZCA9PT0gXCIrXCIgP1xuICAgICAgXCJzdW1cIiA6XG4gICAgaWQgPT09IFwiLVwiID9cbiAgICAgIFwic3VidHJhY3RcIiA6XG4gICAgaWQgPT09IFwiPVwiID9cbiAgICAgIFwiZXF1YWw/XCIgOlxuICAgIGlkID09PSBcIj09XCIgP1xuICAgICAgXCJzdHJpY3QtZXF1YWw/XCIgOlxuICAgIGlkID09PSBcIjw9XCIgP1xuICAgICAgXCJub3QtZ3JlYXRlci10aGFuXCIgOlxuICAgIGlkID09PSBcIj49XCIgP1xuICAgICAgXCJub3QtbGVzcy10aGFuXCIgOlxuICAgIGlkID09PSBcIj5cIiA/XG4gICAgICBcImdyZWF0ZXItdGhhblwiIDpcbiAgICBpZCA9PT0gXCI8XCIgP1xuICAgICAgXCJsZXNzLXRoYW5cIiA6XG4gICAgXCJlbHNlXCIgP1xuICAgICAgaWQgOlxuICAgICAgdm9pZCgwKTtcbiAgICBpZCA9IGpvaW4oXCJfXCIsIHNwbGl0KGlkLCBcIipcIikpO1xuICAgIGlkID0gam9pbihcIi10by1cIiwgc3BsaXQoaWQsIFwiLT5cIikpO1xuICAgIGlkID0gam9pbihzcGxpdChpZCwgXCIhXCIpKTtcbiAgICBpZCA9IGpvaW4oXCIkXCIsIHNwbGl0KGlkLCBcIiVcIikpO1xuICAgIGlkID0gam9pbihcIi1wbHVzLVwiLCBzcGxpdChpZCwgXCIrXCIpKTtcbiAgICBpZCA9IGpvaW4oXCItYW5kLVwiLCBzcGxpdChpZCwgXCImXCIpKTtcbiAgICBpZCA9IGxhc3QoaWQpID09PSBcIj9cIiA/XG4gICAgICBcIlwiICsgXCJpcy1cIiArIChzdWJzKGlkLCAwLCBkZWMoY291bnQoaWQpKSkpIDpcbiAgICAgIGlkO1xuICAgIGlkID0gcmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXR1cm4gXCJcIiArIHJlc3VsdCArICgoIShpc0VtcHR5KHJlc3VsdCkpKSAmJiAoIShpc0VtcHR5KGtleSkpKSA/XG4gICAgICAgIFwiXCIgKyAodXBwZXJDYXNlKChrZXkgfHwgMClbMF0pKSArIChzdWJzKGtleSwgMSkpIDpcbiAgICAgICAga2V5KTtcbiAgICB9LCBcIlwiLCBzcGxpdChpZCwgXCItXCIpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH0pKCk7XG59O1xuZXhwb3J0cy53cml0ZVJlZmVyZW5jZSA9IHdyaXRlUmVmZXJlbmNlO1xuXG52YXIgd3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gZnVuY3Rpb24gd3JpdGVLZXl3b3JkUmVmZXJlbmNlKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIChuYW1lKGZvcm0pKSArIFwiXFxcIlwiO1xufTtcbmV4cG9ydHMud3JpdGVLZXl3b3JkUmVmZXJlbmNlID0gd3JpdGVLZXl3b3JkUmVmZXJlbmNlO1xuXG52YXIgd3JpdGVLZXl3b3JkID0gZnVuY3Rpb24gd3JpdGVLZXl3b3JkKGZvcm0pIHtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIFwi6p6JXCIgKyAobmFtZShmb3JtKSkgKyBcIlxcXCJcIjtcbn07XG5leHBvcnRzLndyaXRlS2V5d29yZCA9IHdyaXRlS2V5d29yZDtcblxudmFyIHdyaXRlU3ltYm9sID0gZnVuY3Rpb24gd3JpdGVTeW1ib2woZm9ybSkge1xuICByZXR1cm4gd3JpdGUobGlzdChzeW1ib2wodm9pZCgwKSwgXCJzeW1ib2xcIiksIG5hbWVzcGFjZShmb3JtKSwgbmFtZShmb3JtKSkpO1xufTtcbmV4cG9ydHMud3JpdGVTeW1ib2wgPSB3cml0ZVN5bWJvbDtcblxudmFyIHdyaXRlTmlsID0gZnVuY3Rpb24gd3JpdGVOaWwoZm9ybSkge1xuICByZXR1cm4gXCJ2b2lkKDApXCI7XG59O1xuZXhwb3J0cy53cml0ZU5pbCA9IHdyaXRlTmlsO1xuXG52YXIgd3JpdGVOdW1iZXIgPSBmdW5jdGlvbiB3cml0ZU51bWJlcihmb3JtKSB7XG4gIHJldHVybiBmb3JtO1xufTtcbmV4cG9ydHMud3JpdGVOdW1iZXIgPSB3cml0ZU51bWJlcjtcblxudmFyIHdyaXRlQm9vbGVhbiA9IGZ1bmN0aW9uIHdyaXRlQm9vbGVhbihmb3JtKSB7XG4gIHJldHVybiBpc1RydWUoZm9ybSkgP1xuICAgIFwidHJ1ZVwiIDpcbiAgICBcImZhbHNlXCI7XG59O1xuZXhwb3J0cy53cml0ZUJvb2xlYW4gPSB3cml0ZUJvb2xlYW47XG5cbnZhciB3cml0ZVN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlU3RyaW5nKGZvcm0pIHtcbiAgZm9ybSA9IHJlcGxhY2UoZm9ybSwgUmVnRXhwKFwiXFxcXFxcXFxcIiwgXCJnXCIpLCBcIlxcXFxcXFxcXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXG5cIiwgXCJnXCIpLCBcIlxcXFxuXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXHJcIiwgXCJnXCIpLCBcIlxcXFxyXCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXHRcIiwgXCJnXCIpLCBcIlxcXFx0XCIpO1xuICBmb3JtID0gcmVwbGFjZShmb3JtLCBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgXCJcXFxcXFxcIlwiKTtcbiAgcmV0dXJuIFwiXCIgKyBcIlxcXCJcIiArIGZvcm0gKyBcIlxcXCJcIjtcbn07XG5leHBvcnRzLndyaXRlU3RyaW5nID0gd3JpdGVTdHJpbmc7XG5cbnZhciB3cml0ZVRlbXBsYXRlID0gZnVuY3Rpb24gd3JpdGVUZW1wbGF0ZSgpIHtcbiAgdmFyIGZvcm0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmRlbnRQYXR0ZXJuID0gL1xcbiAqJC87XG4gICAgdmFyIGxpbmVCcmVha1BhdHRlciA9IFJlZ0V4cChcIlxcblwiLCBcImdcIik7XG4gICAgdmFyIGdldEluZGVudGF0aW9uID0gZnVuY3Rpb24oY29kZSkge1xuICAgICAgcmV0dXJuIChyZUZpbmQoaW5kZW50UGF0dGVybiwgY29kZSkpIHx8IFwiXFxuXCI7XG4gICAgfTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIGxvb3AoY29kZSwgcGFydHMsIHZhbHVlcykge1xuICAgICAgdmFyIHJlY3VyID0gbG9vcDtcbiAgICAgIHdoaWxlIChyZWN1ciA9PT0gbG9vcCkge1xuICAgICAgICByZWN1ciA9IGNvdW50KHBhcnRzKSA+IDEgP1xuICAgICAgICAoY29kZSA9IFwiXCIgKyBjb2RlICsgKGZpcnN0KHBhcnRzKSkgKyAocmVwbGFjZShcIlwiICsgXCJcIiArIChmaXJzdCh2YWx1ZXMpKSwgbGluZUJyZWFrUGF0dGVyLCBnZXRJbmRlbnRhdGlvbihmaXJzdChwYXJ0cykpKSksIHBhcnRzID0gcmVzdChwYXJ0cyksIHZhbHVlcyA9IHJlc3QodmFsdWVzKSwgbG9vcCkgOlxuICAgICAgICBcIlwiICsgY29kZSArIChmaXJzdChwYXJ0cykpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZWN1cjtcbiAgICB9KShcIlwiLCBzcGxpdChmaXJzdChmb3JtKSwgXCJ+e31cIiksIHJlc3QoZm9ybSkpO1xuICB9KSgpO1xufTtcbmV4cG9ydHMud3JpdGVUZW1wbGF0ZSA9IHdyaXRlVGVtcGxhdGU7XG5cbnZhciB3cml0ZUdyb3VwID0gZnVuY3Rpb24gd3JpdGVHcm91cCgpIHtcbiAgdmFyIGZvcm1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGpvaW4oXCIsIFwiLCBmb3Jtcyk7XG59O1xuZXhwb3J0cy53cml0ZUdyb3VwID0gd3JpdGVHcm91cDtcblxudmFyIHdyaXRlSW52b2tlID0gZnVuY3Rpb24gd3JpdGVJbnZva2UoY2FsbGVlKSB7XG4gIHZhciBwYXJhbXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gd3JpdGVUZW1wbGF0ZShcIn57fSh+e30pXCIsIGNhbGxlZSwgd3JpdGVHcm91cC5hcHBseSh3cml0ZUdyb3VwLCBwYXJhbXMpKTtcbn07XG5leHBvcnRzLndyaXRlSW52b2tlID0gd3JpdGVJbnZva2U7XG5cbnZhciB3cml0ZUVycm9yID0gZnVuY3Rpb24gd3JpdGVFcnJvcihtZXNzYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uKCkgeyB0aHJvdyBFcnJvcihtZXNzYWdlKTsgfSkoKTtcbiAgfTtcbn07XG5leHBvcnRzLndyaXRlRXJyb3IgPSB3cml0ZUVycm9yO1xuXG52YXIgd3JpdGVWZWN0b3IgPSB3cml0ZUVycm9yKFwiVmVjdG9ycyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbmV4cG9ydHMud3JpdGVWZWN0b3IgPSB3cml0ZVZlY3RvcjtcblxudmFyIHdyaXRlRGljdGlvbmFyeSA9IHdyaXRlRXJyb3IoXCJEaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5leHBvcnRzLndyaXRlRGljdGlvbmFyeSA9IHdyaXRlRGljdGlvbmFyeTtcblxudmFyIHdyaXRlUGF0dGVybiA9IHdyaXRlRXJyb3IoXCJSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuZXhwb3J0cy53cml0ZVBhdHRlcm4gPSB3cml0ZVBhdHRlcm47XG5cbnZhciBjb21waWxlQ29tbWVudCA9IGZ1bmN0aW9uIGNvbXBpbGVDb21tZW50KGZvcm0pIHtcbiAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwiLy9+e31cXG5cIiwgZmlyc3QoZm9ybSkpKTtcbn07XG5leHBvcnRzLmNvbXBpbGVDb21tZW50ID0gY29tcGlsZUNvbW1lbnQ7XG5cbnZhciB3cml0ZURlZiA9IGZ1bmN0aW9uIHdyaXRlRGVmKGZvcm0pIHtcbiAgdmFyIGlkID0gZmlyc3QoZm9ybSk7XG4gIHZhciBpc0V4cG9ydCA9ICgoKChtZXRhKGZvcm0pKSB8fCB7fSkgfHwgMClbXCJ0b3BcIl0pICYmICghKCgoKG1ldGEoaWQpKSB8fCB7fSkgfHwgMClbXCJwcml2YXRlXCJdKSk7XG4gIHZhciBhdHRyaWJ1dGUgPSBzeW1ib2wobmFtZXNwYWNlKGlkKSwgXCJcIiArIFwiLVwiICsgKG5hbWUoaWQpKSk7XG4gIHJldHVybiBpc0V4cG9ydCA/XG4gICAgY29tcGlsZVRlbXBsYXRlKGxpc3QoXCJ2YXIgfnt9O1xcbn57fVwiLCBjb21waWxlKGNvbnMoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZm9ybSkpLCBjb21waWxlKGxpc3Qoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgbGlzdChzeW1ib2wodm9pZCgwKSwgXCIuXCIpLCBzeW1ib2wodm9pZCgwKSwgXCJleHBvcnRzXCIpLCBhdHRyaWJ1dGUpLCBpZCkpKSkgOlxuICAgIGNvbXBpbGVUZW1wbGF0ZShsaXN0KFwidmFyIH57fVwiLCBjb21waWxlKGNvbnMoc3ltYm9sKHZvaWQoMCksIFwic2V0IVwiKSwgZm9ybSkpKSk7XG59O1xuZXhwb3J0cy53cml0ZURlZiA9IHdyaXRlRGVmO1xuXG52YXIgd3JpdGUgPSBmdW5jdGlvbiB3cml0ZShmb3JtKSB7XG4gIHJldHVybiBpc05pbChmb3JtKSA/XG4gICAgd3JpdGVOaWwoZm9ybSkgOlxuICBpc1N5bWJvbChmb3JtKSA/XG4gICAgd3JpdGVSZWZlcmVuY2UoZm9ybSkgOlxuICBpc0tleXdvcmQoZm9ybSkgP1xuICAgIHdyaXRlS2V5d29yZFJlZmVyZW5jZShmb3JtKSA6XG4gIGlzU3RyaW5nKGZvcm0pID9cbiAgICB3cml0ZVN0cmluZyhmb3JtKSA6XG4gIGlzTnVtYmVyKGZvcm0pID9cbiAgICB3cml0ZU51bWJlcihmb3JtKSA6XG4gIGlzQm9vbGVhbihmb3JtKSA/XG4gICAgd3JpdGVCb29sZWFuKGZvcm0pIDpcbiAgaXNSZVBhdHRlcm4oZm9ybSkgP1xuICAgIHdyaXRlUGF0dGVybihmb3JtKSA6XG4gIGlzVmVjdG9yKGZvcm0pID9cbiAgICB3cml0ZVZlY3Rvcihmb3JtKSA6XG4gIGlzRGljdGlvbmFyeShmb3JtKSA/XG4gICAgd3JpdGVEaWN0aW9uYXJ5KCkgOlxuICBpc0xpc3QoZm9ybSkgP1xuICAgIHdyaXRlSW52b2tlLmFwcGx5KHdyaXRlSW52b2tlLCBtYXAod3JpdGUsIHZlYyhmb3JtKSkpIDpcbiAgXCJlbHNlXCIgP1xuICAgIHdyaXRlRXJyb3IoXCJVbnN1cHBvcnRlZCBmb3JtXCIpIDpcbiAgICB2b2lkKDApO1xufTtcbmV4cG9ydHMud3JpdGUgPSB3cml0ZVxuIl19
3669
+ ;