@cloudbase/js-sdk 3.3.14-beta.2 → 3.3.14-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. package/dist/index.cjs.js +1 -1
  2. package/miniprogram_dist/index.js +1 -1
  3. package/node_modules/@cloudbase/ai/.eslintrc.js +15 -0
  4. package/node_modules/@cloudbase/ai/dist/cjs/AI.d.ts +27 -0
  5. package/node_modules/@cloudbase/ai/dist/cjs/AI.js +224 -0
  6. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.d.ts +41 -0
  7. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.js +376 -0
  8. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.d.ts +144 -0
  9. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.js +3 -0
  10. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.d.ts +2 -0
  11. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.js +6 -0
  12. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.d.ts +2 -0
  13. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.js +126 -0
  14. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.d.ts +5 -0
  15. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.js +40 -0
  16. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.d.ts +16 -0
  17. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.js +3 -0
  18. package/node_modules/@cloudbase/ai/dist/cjs/index.d.ts +40 -0
  19. package/node_modules/@cloudbase/ai/dist/cjs/index.js +187 -0
  20. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.d.ts +10 -0
  21. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.js +130 -0
  22. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.d.ts +71 -0
  23. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.js +3 -0
  24. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.d.ts +10 -0
  25. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.js +130 -0
  26. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.d.ts +74 -0
  27. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.js +3 -0
  28. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.d.ts +10 -0
  29. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.js +126 -0
  30. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.d.ts +10 -0
  31. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.js +122 -0
  32. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.d.ts +10 -0
  33. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.js +135 -0
  34. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.d.ts +74 -0
  35. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.js +3 -0
  36. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.d.ts +4 -0
  37. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.js +56 -0
  38. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.d.ts +10 -0
  39. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.js +127 -0
  40. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.d.ts +10 -0
  41. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.js +125 -0
  42. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.d.ts +10 -0
  43. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.js +127 -0
  44. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.d.ts +10 -0
  45. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.js +130 -0
  46. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.d.ts +85 -0
  47. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.js +3 -0
  48. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.d.ts +10 -0
  49. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.js +133 -0
  50. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.d.ts +75 -0
  51. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.js +3 -0
  52. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.d.ts +10 -0
  53. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.js +139 -0
  54. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.d.ts +71 -0
  55. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.js +3 -0
  56. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.d.ts +18 -0
  57. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.js +85 -0
  58. package/node_modules/@cloudbase/ai/dist/cjs/models/index.d.ts +26 -0
  59. package/node_modules/@cloudbase/ai/dist/cjs/models/index.js +42 -0
  60. package/node_modules/@cloudbase/ai/dist/cjs/models/model.d.ts +40 -0
  61. package/node_modules/@cloudbase/ai/dist/cjs/models/model.js +481 -0
  62. package/node_modules/@cloudbase/ai/dist/cjs/type.d.ts +190 -0
  63. package/node_modules/@cloudbase/ai/dist/cjs/type.js +10 -0
  64. package/node_modules/@cloudbase/ai/dist/cjs/utils.d.ts +38 -0
  65. package/node_modules/@cloudbase/ai/dist/cjs/utils.js +263 -0
  66. package/node_modules/@cloudbase/ai/dist/esm/AI.d.ts +27 -0
  67. package/node_modules/@cloudbase/ai/dist/esm/AI.js +198 -0
  68. package/node_modules/@cloudbase/ai/dist/esm/bot/index.d.ts +41 -0
  69. package/node_modules/@cloudbase/ai/dist/esm/bot/index.js +373 -0
  70. package/node_modules/@cloudbase/ai/dist/esm/bot/types.d.ts +144 -0
  71. package/node_modules/@cloudbase/ai/dist/esm/bot/types.js +2 -0
  72. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.d.ts +2 -0
  73. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.js +2 -0
  74. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.d.ts +2 -0
  75. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.js +122 -0
  76. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.d.ts +5 -0
  77. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.js +37 -0
  78. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.d.ts +16 -0
  79. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.js +2 -0
  80. package/node_modules/@cloudbase/ai/dist/esm/index.d.ts +40 -0
  81. package/node_modules/@cloudbase/ai/dist/esm/index.js +152 -0
  82. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.d.ts +10 -0
  83. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.js +127 -0
  84. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.d.ts +71 -0
  85. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.js +2 -0
  86. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.d.ts +10 -0
  87. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.js +127 -0
  88. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.d.ts +74 -0
  89. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.js +2 -0
  90. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.d.ts +10 -0
  91. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.js +123 -0
  92. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.d.ts +10 -0
  93. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.js +119 -0
  94. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.d.ts +10 -0
  95. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.js +132 -0
  96. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.d.ts +74 -0
  97. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.js +2 -0
  98. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.d.ts +4 -0
  99. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.js +51 -0
  100. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.d.ts +10 -0
  101. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.js +124 -0
  102. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.d.ts +10 -0
  103. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.js +122 -0
  104. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.d.ts +10 -0
  105. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.js +124 -0
  106. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.d.ts +10 -0
  107. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.js +127 -0
  108. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.d.ts +85 -0
  109. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.js +2 -0
  110. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.d.ts +10 -0
  111. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.js +130 -0
  112. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.d.ts +75 -0
  113. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.js +2 -0
  114. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.d.ts +10 -0
  115. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.js +136 -0
  116. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.d.ts +71 -0
  117. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.js +2 -0
  118. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.d.ts +18 -0
  119. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.js +82 -0
  120. package/node_modules/@cloudbase/ai/dist/esm/models/index.d.ts +26 -0
  121. package/node_modules/@cloudbase/ai/dist/esm/models/index.js +27 -0
  122. package/node_modules/@cloudbase/ai/dist/esm/models/model.d.ts +40 -0
  123. package/node_modules/@cloudbase/ai/dist/esm/models/model.js +478 -0
  124. package/node_modules/@cloudbase/ai/dist/esm/type.d.ts +190 -0
  125. package/node_modules/@cloudbase/ai/dist/esm/type.js +7 -0
  126. package/node_modules/@cloudbase/ai/dist/esm/utils.d.ts +38 -0
  127. package/node_modules/@cloudbase/ai/dist/esm/utils.js +252 -0
  128. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js +2 -0
  129. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js.LICENSE.txt +22 -0
  130. package/node_modules/@cloudbase/ai/package.json +32 -0
  131. package/node_modules/@cloudbase/analytics/.eslintrc.js +15 -0
  132. package/node_modules/@cloudbase/analytics/dist/cjs/index.d.ts +2 -0
  133. package/node_modules/@cloudbase/analytics/dist/cjs/index.js +144 -0
  134. package/node_modules/@cloudbase/analytics/dist/esm/index.d.ts +2 -0
  135. package/node_modules/@cloudbase/analytics/dist/esm/index.js +140 -0
  136. package/node_modules/@cloudbase/analytics/package.json +22 -0
  137. package/node_modules/@cloudbase/apis/.eslintrc.js +15 -0
  138. package/node_modules/@cloudbase/apis/dist/cjs/callApis.d.ts +20 -0
  139. package/node_modules/@cloudbase/apis/dist/cjs/callApis.js +154 -0
  140. package/node_modules/@cloudbase/apis/dist/cjs/index.d.ts +5 -0
  141. package/node_modules/@cloudbase/apis/dist/cjs/index.js +53 -0
  142. package/node_modules/@cloudbase/apis/dist/cjs/type.d.ts +14 -0
  143. package/node_modules/@cloudbase/apis/dist/cjs/type.js +3 -0
  144. package/node_modules/@cloudbase/apis/dist/esm/callApis.d.ts +20 -0
  145. package/node_modules/@cloudbase/apis/dist/esm/callApis.js +148 -0
  146. package/node_modules/@cloudbase/apis/dist/esm/index.d.ts +5 -0
  147. package/node_modules/@cloudbase/apis/dist/esm/index.js +35 -0
  148. package/node_modules/@cloudbase/apis/dist/esm/type.d.ts +14 -0
  149. package/node_modules/@cloudbase/apis/dist/esm/type.js +2 -0
  150. package/node_modules/@cloudbase/apis/dist/miniprogram/index.js +1 -0
  151. package/node_modules/@cloudbase/apis/package.json +28 -0
  152. package/node_modules/@cloudbase/app/.eslintrc.js +12 -0
  153. package/node_modules/@cloudbase/app/dist/cjs/constants/common.d.ts +38 -0
  154. package/node_modules/@cloudbase/app/dist/cjs/constants/common.js +103 -0
  155. package/node_modules/@cloudbase/app/dist/cjs/index.d.ts +65 -0
  156. package/node_modules/@cloudbase/app/dist/cjs/index.js +340 -0
  157. package/node_modules/@cloudbase/app/dist/cjs/index.node.d.ts +6 -0
  158. package/node_modules/@cloudbase/app/dist/cjs/index.node.js +20 -0
  159. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.d.ts +33 -0
  160. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.js +38 -0
  161. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.d.ts +13 -0
  162. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.js +162 -0
  163. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.d.ts +23 -0
  164. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.js +124 -0
  165. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.d.ts +14 -0
  166. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.js +130 -0
  167. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.d.ts +38 -0
  168. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.js +445 -0
  169. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.d.ts +2 -0
  170. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.js +228 -0
  171. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.d.ts +78 -0
  172. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.js +3 -0
  173. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.d.ts +17 -0
  174. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.js +221 -0
  175. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.d.ts +3 -0
  176. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.js +163 -0
  177. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.d.ts +6 -0
  178. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.js +38 -0
  179. package/node_modules/@cloudbase/app/dist/cjs/libs/component.d.ts +3 -0
  180. package/node_modules/@cloudbase/app/dist/cjs/libs/component.js +126 -0
  181. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.d.ts +23 -0
  182. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.js +59 -0
  183. package/node_modules/@cloudbase/app/dist/cjs/libs/request.d.ts +62 -0
  184. package/node_modules/@cloudbase/app/dist/cjs/libs/request.js +480 -0
  185. package/node_modules/@cloudbase/app/dist/esm/constants/common.d.ts +38 -0
  186. package/node_modules/@cloudbase/app/dist/esm/constants/common.js +91 -0
  187. package/node_modules/@cloudbase/app/dist/esm/index.d.ts +65 -0
  188. package/node_modules/@cloudbase/app/dist/esm/index.js +335 -0
  189. package/node_modules/@cloudbase/app/dist/esm/index.node.d.ts +6 -0
  190. package/node_modules/@cloudbase/app/dist/esm/index.node.js +12 -0
  191. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.d.ts +33 -0
  192. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.js +35 -0
  193. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.d.ts +13 -0
  194. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.js +156 -0
  195. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.d.ts +23 -0
  196. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.js +118 -0
  197. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.d.ts +14 -0
  198. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.js +123 -0
  199. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.d.ts +38 -0
  200. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.js +442 -0
  201. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.d.ts +2 -0
  202. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.js +224 -0
  203. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.d.ts +78 -0
  204. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.js +2 -0
  205. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.d.ts +17 -0
  206. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.js +205 -0
  207. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.d.ts +3 -0
  208. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.js +136 -0
  209. package/node_modules/@cloudbase/app/dist/esm/libs/cache.d.ts +6 -0
  210. package/node_modules/@cloudbase/app/dist/esm/libs/cache.js +32 -0
  211. package/node_modules/@cloudbase/app/dist/esm/libs/component.d.ts +3 -0
  212. package/node_modules/@cloudbase/app/dist/esm/libs/component.js +121 -0
  213. package/node_modules/@cloudbase/app/dist/esm/libs/lang.d.ts +23 -0
  214. package/node_modules/@cloudbase/app/dist/esm/libs/lang.js +54 -0
  215. package/node_modules/@cloudbase/app/dist/esm/libs/request.d.ts +62 -0
  216. package/node_modules/@cloudbase/app/dist/esm/libs/request.js +475 -0
  217. package/node_modules/@cloudbase/app/dist/miniprogram/index.js +2 -0
  218. package/node_modules/@cloudbase/app/dist/miniprogram/index.js.LICENSE.txt +7 -0
  219. package/node_modules/@cloudbase/app/package.json +59 -0
  220. package/node_modules/@cloudbase/auth/.eslintrc.js +15 -0
  221. package/node_modules/@cloudbase/auth/dist/cjs/adapter.d.ts +2 -0
  222. package/node_modules/@cloudbase/auth/dist/cjs/adapter.js +272 -0
  223. package/node_modules/@cloudbase/auth/dist/cjs/index.d.ts +283 -0
  224. package/node_modules/@cloudbase/auth/dist/cjs/index.js +3018 -0
  225. package/node_modules/@cloudbase/auth/dist/cjs/type.d.ts +258 -0
  226. package/node_modules/@cloudbase/auth/dist/cjs/type.js +6 -0
  227. package/node_modules/@cloudbase/auth/dist/cjs/utilities.d.ts +7 -0
  228. package/node_modules/@cloudbase/auth/dist/cjs/utilities.js +23 -0
  229. package/node_modules/@cloudbase/auth/dist/cjs/utils.d.ts +5 -0
  230. package/node_modules/@cloudbase/auth/dist/cjs/utils.js +60 -0
  231. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.d.ts +77 -0
  232. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.js +423 -0
  233. package/node_modules/@cloudbase/auth/dist/esm/adapter.d.ts +2 -0
  234. package/node_modules/@cloudbase/auth/dist/esm/adapter.js +268 -0
  235. package/node_modules/@cloudbase/auth/dist/esm/index.d.ts +283 -0
  236. package/node_modules/@cloudbase/auth/dist/esm/index.js +3008 -0
  237. package/node_modules/@cloudbase/auth/dist/esm/type.d.ts +258 -0
  238. package/node_modules/@cloudbase/auth/dist/esm/type.js +3 -0
  239. package/node_modules/@cloudbase/auth/dist/esm/utilities.d.ts +7 -0
  240. package/node_modules/@cloudbase/auth/dist/esm/utilities.js +8 -0
  241. package/node_modules/@cloudbase/auth/dist/esm/utils.d.ts +5 -0
  242. package/node_modules/@cloudbase/auth/dist/esm/utils.js +52 -0
  243. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.d.ts +77 -0
  244. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.js +419 -0
  245. package/node_modules/@cloudbase/auth/dist/miniprogram/index.js +1 -0
  246. package/node_modules/@cloudbase/auth/package.json +31 -0
  247. package/node_modules/@cloudbase/cloudrun/.eslintrc.js +15 -0
  248. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.d.ts +4 -0
  249. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.js +154 -0
  250. package/node_modules/@cloudbase/cloudrun/dist/esm/index.d.ts +4 -0
  251. package/node_modules/@cloudbase/cloudrun/dist/esm/index.js +149 -0
  252. package/node_modules/@cloudbase/cloudrun/package.json +30 -0
  253. package/node_modules/@cloudbase/container/.eslintrc.js +15 -0
  254. package/node_modules/@cloudbase/container/.prettierrc.js +41 -0
  255. package/node_modules/@cloudbase/container/dist/cjs/constants/index.d.ts +1 -0
  256. package/node_modules/@cloudbase/container/dist/cjs/constants/index.js +5 -0
  257. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.d.ts +2 -0
  258. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.js +538 -0
  259. package/node_modules/@cloudbase/container/dist/cjs/index.d.ts +13 -0
  260. package/node_modules/@cloudbase/container/dist/cjs/index.js +343 -0
  261. package/node_modules/@cloudbase/container/dist/cjs/utils/index.d.ts +3 -0
  262. package/node_modules/@cloudbase/container/dist/cjs/utils/index.js +83 -0
  263. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.d.ts +8 -0
  264. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.js +186 -0
  265. package/node_modules/@cloudbase/container/dist/cjs/utils/request.d.ts +12 -0
  266. package/node_modules/@cloudbase/container/dist/cjs/utils/request.js +106 -0
  267. package/node_modules/@cloudbase/container/dist/esm/constants/index.d.ts +1 -0
  268. package/node_modules/@cloudbase/container/dist/esm/constants/index.js +2 -0
  269. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.d.ts +2 -0
  270. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.js +536 -0
  271. package/node_modules/@cloudbase/container/dist/esm/index.d.ts +13 -0
  272. package/node_modules/@cloudbase/container/dist/esm/index.js +338 -0
  273. package/node_modules/@cloudbase/container/dist/esm/utils/index.d.ts +3 -0
  274. package/node_modules/@cloudbase/container/dist/esm/utils/index.js +77 -0
  275. package/node_modules/@cloudbase/container/dist/esm/utils/loader.d.ts +8 -0
  276. package/node_modules/@cloudbase/container/dist/esm/utils/loader.js +178 -0
  277. package/node_modules/@cloudbase/container/dist/esm/utils/request.d.ts +12 -0
  278. package/node_modules/@cloudbase/container/dist/esm/utils/request.js +102 -0
  279. package/node_modules/@cloudbase/container/package.json +30 -0
  280. package/node_modules/@cloudbase/database/README.md +119 -0
  281. package/node_modules/@cloudbase/database/dist/commonjs/aggregate.d.ts +29 -0
  282. package/node_modules/@cloudbase/database/dist/commonjs/aggregate.js +156 -0
  283. package/node_modules/@cloudbase/database/dist/commonjs/collection.d.ts +9 -0
  284. package/node_modules/@cloudbase/database/dist/commonjs/collection.js +49 -0
  285. package/node_modules/@cloudbase/database/dist/commonjs/command.d.ts +175 -0
  286. package/node_modules/@cloudbase/database/dist/commonjs/command.js +299 -0
  287. package/node_modules/@cloudbase/database/dist/commonjs/commands/logic.d.ts +24 -0
  288. package/node_modules/@cloudbase/database/dist/commonjs/commands/logic.js +89 -0
  289. package/node_modules/@cloudbase/database/dist/commonjs/commands/query.d.ts +68 -0
  290. package/node_modules/@cloudbase/database/dist/commonjs/commands/query.js +160 -0
  291. package/node_modules/@cloudbase/database/dist/commonjs/commands/update.d.ts +29 -0
  292. package/node_modules/@cloudbase/database/dist/commonjs/commands/update.js +51 -0
  293. package/node_modules/@cloudbase/database/dist/commonjs/config/app.config.d.ts +6 -0
  294. package/node_modules/@cloudbase/database/dist/commonjs/config/app.config.js +7 -0
  295. package/node_modules/@cloudbase/database/dist/commonjs/config/error.config.d.ts +3 -0
  296. package/node_modules/@cloudbase/database/dist/commonjs/config/error.config.js +16 -0
  297. package/node_modules/@cloudbase/database/dist/commonjs/const/code.d.ts +30 -0
  298. package/node_modules/@cloudbase/database/dist/commonjs/const/code.js +33 -0
  299. package/node_modules/@cloudbase/database/dist/commonjs/constant.d.ts +51 -0
  300. package/node_modules/@cloudbase/database/dist/commonjs/constant.js +75 -0
  301. package/node_modules/@cloudbase/database/dist/commonjs/document.d.ts +11 -0
  302. package/node_modules/@cloudbase/database/dist/commonjs/document.js +260 -0
  303. package/node_modules/@cloudbase/database/dist/commonjs/geo/index.d.ts +6 -0
  304. package/{ai/dist → node_modules/@cloudbase/database/dist/commonjs/geo}/index.js +6 -5
  305. package/node_modules/@cloudbase/database/dist/commonjs/geo/interface.d.ts +24 -0
  306. package/node_modules/@cloudbase/database/dist/commonjs/geo/interface.js +2 -0
  307. package/node_modules/@cloudbase/database/dist/commonjs/geo/lineString.d.ts +19 -0
  308. package/node_modules/@cloudbase/database/dist/commonjs/geo/lineString.js +86 -0
  309. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiLineString.d.ts +18 -0
  310. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiLineString.js +95 -0
  311. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPoint.d.ts +18 -0
  312. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPoint.js +79 -0
  313. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPolygon.d.ts +18 -0
  314. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPolygon.js +122 -0
  315. package/node_modules/@cloudbase/database/dist/commonjs/geo/point.d.ts +19 -0
  316. package/node_modules/@cloudbase/database/dist/commonjs/geo/point.js +50 -0
  317. package/node_modules/@cloudbase/database/dist/commonjs/geo/polygon.d.ts +19 -0
  318. package/node_modules/@cloudbase/database/dist/commonjs/geo/polygon.js +109 -0
  319. package/node_modules/@cloudbase/database/dist/commonjs/helper/symbol.d.ts +14 -0
  320. package/node_modules/@cloudbase/database/dist/commonjs/helper/symbol.js +31 -0
  321. package/node_modules/@cloudbase/database/dist/commonjs/index.d.ts +40 -0
  322. package/node_modules/@cloudbase/database/dist/commonjs/index.js +61 -0
  323. package/node_modules/@cloudbase/database/dist/commonjs/lib/util.d.ts +1 -0
  324. package/node_modules/@cloudbase/database/dist/commonjs/lib/util.js +26 -0
  325. package/node_modules/@cloudbase/database/dist/commonjs/operator-map.d.ts +4 -0
  326. package/node_modules/@cloudbase/database/dist/commonjs/operator-map.js +24 -0
  327. package/node_modules/@cloudbase/database/dist/commonjs/query.d.ts +22 -0
  328. package/node_modules/@cloudbase/database/dist/commonjs/query.js +252 -0
  329. package/node_modules/@cloudbase/database/dist/commonjs/regexp/index.d.ts +14 -0
  330. package/node_modules/@cloudbase/database/dist/commonjs/regexp/index.js +33 -0
  331. package/node_modules/@cloudbase/database/dist/commonjs/serializer/common.d.ts +11 -0
  332. package/node_modules/@cloudbase/database/dist/commonjs/serializer/common.js +127 -0
  333. package/node_modules/@cloudbase/database/dist/commonjs/serializer/datatype.d.ts +7 -0
  334. package/node_modules/@cloudbase/database/dist/commonjs/serializer/datatype.js +132 -0
  335. package/node_modules/@cloudbase/database/dist/commonjs/serializer/query.d.ts +7 -0
  336. package/node_modules/@cloudbase/database/dist/commonjs/serializer/query.js +232 -0
  337. package/node_modules/@cloudbase/database/dist/commonjs/serializer/update.d.ts +15 -0
  338. package/node_modules/@cloudbase/database/dist/commonjs/serializer/update.js +142 -0
  339. package/node_modules/@cloudbase/database/dist/commonjs/serverDate/index.d.ts +13 -0
  340. package/node_modules/@cloudbase/database/dist/commonjs/serverDate/index.js +30 -0
  341. package/node_modules/@cloudbase/database/dist/commonjs/transaction/collection.d.ts +7 -0
  342. package/node_modules/@cloudbase/database/dist/commonjs/transaction/collection.js +49 -0
  343. package/node_modules/@cloudbase/database/dist/commonjs/transaction/document.d.ts +27 -0
  344. package/node_modules/@cloudbase/database/dist/commonjs/transaction/document.js +205 -0
  345. package/node_modules/@cloudbase/database/dist/commonjs/transaction/index.d.ts +30 -0
  346. package/node_modules/@cloudbase/database/dist/commonjs/transaction/index.js +215 -0
  347. package/node_modules/@cloudbase/database/dist/commonjs/transaction/query.d.ts +43 -0
  348. package/node_modules/@cloudbase/database/dist/commonjs/transaction/query.js +261 -0
  349. package/node_modules/@cloudbase/database/dist/commonjs/typings/index.d.ts +40 -0
  350. package/node_modules/@cloudbase/database/dist/commonjs/typings/index.js +2 -0
  351. package/node_modules/@cloudbase/database/dist/commonjs/typings/realtime.d.ts +219 -0
  352. package/node_modules/@cloudbase/database/dist/commonjs/typings/realtime.js +2 -0
  353. package/node_modules/@cloudbase/database/dist/commonjs/util.d.ts +9 -0
  354. package/node_modules/@cloudbase/database/dist/commonjs/util.js +145 -0
  355. package/node_modules/@cloudbase/database/dist/commonjs/utils/error.d.ts +38 -0
  356. package/node_modules/@cloudbase/database/dist/commonjs/utils/error.js +91 -0
  357. package/node_modules/@cloudbase/database/dist/commonjs/utils/msg.d.ts +0 -0
  358. package/node_modules/@cloudbase/database/dist/commonjs/utils/msg.js +0 -0
  359. package/node_modules/@cloudbase/database/dist/commonjs/utils/symbol.d.ts +8 -0
  360. package/node_modules/@cloudbase/database/dist/commonjs/utils/symbol.js +58 -0
  361. package/node_modules/@cloudbase/database/dist/commonjs/utils/type.d.ts +13 -0
  362. package/node_modules/@cloudbase/database/dist/commonjs/utils/type.js +34 -0
  363. package/node_modules/@cloudbase/database/dist/commonjs/utils/utils.d.ts +4 -0
  364. package/node_modules/@cloudbase/database/dist/commonjs/utils/utils.js +39 -0
  365. package/node_modules/@cloudbase/database/dist/commonjs/validate.d.ts +1 -0
  366. package/node_modules/@cloudbase/database/dist/commonjs/validate.js +60 -0
  367. package/node_modules/@cloudbase/database/dist/esm/aggregate.d.ts +29 -0
  368. package/node_modules/@cloudbase/database/dist/esm/aggregate.js +154 -0
  369. package/node_modules/@cloudbase/database/dist/esm/collection.d.ts +9 -0
  370. package/node_modules/@cloudbase/database/dist/esm/collection.js +46 -0
  371. package/node_modules/@cloudbase/database/dist/esm/command.d.ts +175 -0
  372. package/node_modules/@cloudbase/database/dist/esm/command.js +296 -0
  373. package/node_modules/@cloudbase/database/dist/esm/commands/logic.d.ts +24 -0
  374. package/node_modules/@cloudbase/database/dist/esm/commands/logic.js +84 -0
  375. package/node_modules/@cloudbase/database/dist/esm/commands/query.d.ts +68 -0
  376. package/node_modules/@cloudbase/database/dist/esm/commands/query.js +154 -0
  377. package/node_modules/@cloudbase/database/dist/esm/commands/update.d.ts +29 -0
  378. package/node_modules/@cloudbase/database/dist/esm/commands/update.js +46 -0
  379. package/node_modules/@cloudbase/database/dist/esm/config/app.config.d.ts +6 -0
  380. package/node_modules/@cloudbase/database/dist/esm/config/app.config.js +5 -0
  381. package/node_modules/@cloudbase/database/dist/esm/config/error.config.d.ts +3 -0
  382. package/node_modules/@cloudbase/database/dist/esm/config/error.config.js +13 -0
  383. package/node_modules/@cloudbase/database/dist/esm/const/code.d.ts +30 -0
  384. package/node_modules/@cloudbase/database/dist/esm/const/code.js +30 -0
  385. package/node_modules/@cloudbase/database/dist/esm/constant.d.ts +51 -0
  386. package/node_modules/@cloudbase/database/dist/esm/constant.js +65 -0
  387. package/node_modules/@cloudbase/database/dist/esm/document.d.ts +11 -0
  388. package/node_modules/@cloudbase/database/dist/esm/document.js +257 -0
  389. package/node_modules/@cloudbase/database/dist/esm/geo/index.d.ts +6 -0
  390. package/node_modules/@cloudbase/database/dist/esm/geo/index.js +6 -0
  391. package/node_modules/@cloudbase/database/dist/esm/geo/interface.d.ts +24 -0
  392. package/node_modules/@cloudbase/database/dist/esm/geo/interface.js +1 -0
  393. package/node_modules/@cloudbase/database/dist/esm/geo/lineString.d.ts +19 -0
  394. package/node_modules/@cloudbase/database/dist/esm/geo/lineString.js +83 -0
  395. package/node_modules/@cloudbase/database/dist/esm/geo/multiLineString.d.ts +18 -0
  396. package/node_modules/@cloudbase/database/dist/esm/geo/multiLineString.js +92 -0
  397. package/node_modules/@cloudbase/database/dist/esm/geo/multiPoint.d.ts +18 -0
  398. package/node_modules/@cloudbase/database/dist/esm/geo/multiPoint.js +76 -0
  399. package/node_modules/@cloudbase/database/dist/esm/geo/multiPolygon.d.ts +18 -0
  400. package/node_modules/@cloudbase/database/dist/esm/geo/multiPolygon.js +119 -0
  401. package/node_modules/@cloudbase/database/dist/esm/geo/point.d.ts +19 -0
  402. package/node_modules/@cloudbase/database/dist/esm/geo/point.js +47 -0
  403. package/node_modules/@cloudbase/database/dist/esm/geo/polygon.d.ts +19 -0
  404. package/node_modules/@cloudbase/database/dist/esm/geo/polygon.js +106 -0
  405. package/node_modules/@cloudbase/database/dist/esm/helper/symbol.d.ts +14 -0
  406. package/node_modules/@cloudbase/database/dist/esm/helper/symbol.js +14 -0
  407. package/node_modules/@cloudbase/database/dist/esm/index.d.ts +40 -0
  408. package/node_modules/@cloudbase/database/dist/esm/index.js +55 -0
  409. package/node_modules/@cloudbase/database/dist/esm/lib/util.d.ts +1 -0
  410. package/node_modules/@cloudbase/database/dist/esm/lib/util.js +22 -0
  411. package/node_modules/@cloudbase/database/dist/esm/operator-map.d.ts +4 -0
  412. package/node_modules/@cloudbase/database/dist/esm/operator-map.js +20 -0
  413. package/node_modules/@cloudbase/database/dist/esm/query.d.ts +22 -0
  414. package/node_modules/@cloudbase/database/dist/esm/query.js +249 -0
  415. package/node_modules/@cloudbase/database/dist/esm/regexp/index.d.ts +14 -0
  416. package/node_modules/@cloudbase/database/dist/esm/regexp/index.js +29 -0
  417. package/node_modules/@cloudbase/database/dist/esm/serializer/common.d.ts +11 -0
  418. package/node_modules/@cloudbase/database/dist/esm/serializer/common.js +118 -0
  419. package/node_modules/@cloudbase/database/dist/esm/serializer/datatype.d.ts +7 -0
  420. package/node_modules/@cloudbase/database/dist/esm/serializer/datatype.js +127 -0
  421. package/node_modules/@cloudbase/database/dist/esm/serializer/query.d.ts +7 -0
  422. package/node_modules/@cloudbase/database/dist/esm/serializer/query.js +229 -0
  423. package/node_modules/@cloudbase/database/dist/esm/serializer/update.d.ts +15 -0
  424. package/node_modules/@cloudbase/database/dist/esm/serializer/update.js +139 -0
  425. package/node_modules/@cloudbase/database/dist/esm/serverDate/index.d.ts +13 -0
  426. package/node_modules/@cloudbase/database/dist/esm/serverDate/index.js +26 -0
  427. package/node_modules/@cloudbase/database/dist/esm/transaction/collection.d.ts +7 -0
  428. package/node_modules/@cloudbase/database/dist/esm/transaction/collection.js +46 -0
  429. package/node_modules/@cloudbase/database/dist/esm/transaction/document.d.ts +27 -0
  430. package/node_modules/@cloudbase/database/dist/esm/transaction/document.js +202 -0
  431. package/node_modules/@cloudbase/database/dist/esm/transaction/index.d.ts +30 -0
  432. package/node_modules/@cloudbase/database/dist/esm/transaction/index.js +210 -0
  433. package/node_modules/@cloudbase/database/dist/esm/transaction/query.d.ts +43 -0
  434. package/node_modules/@cloudbase/database/dist/esm/transaction/query.js +258 -0
  435. package/node_modules/@cloudbase/database/dist/esm/typings/index.d.ts +40 -0
  436. package/node_modules/@cloudbase/database/dist/esm/typings/index.js +1 -0
  437. package/node_modules/@cloudbase/database/dist/esm/typings/realtime.d.ts +219 -0
  438. package/node_modules/@cloudbase/database/dist/esm/typings/realtime.js +1 -0
  439. package/node_modules/@cloudbase/database/dist/esm/util.d.ts +9 -0
  440. package/node_modules/@cloudbase/database/dist/esm/util.js +142 -0
  441. package/node_modules/@cloudbase/database/dist/esm/utils/error.d.ts +38 -0
  442. package/node_modules/@cloudbase/database/dist/esm/utils/error.js +84 -0
  443. package/node_modules/@cloudbase/database/dist/esm/utils/msg.d.ts +0 -0
  444. package/node_modules/@cloudbase/database/dist/esm/utils/msg.js +0 -0
  445. package/node_modules/@cloudbase/database/dist/esm/utils/symbol.d.ts +8 -0
  446. package/node_modules/@cloudbase/database/dist/esm/utils/symbol.js +55 -0
  447. package/node_modules/@cloudbase/database/dist/esm/utils/type.d.ts +13 -0
  448. package/node_modules/@cloudbase/database/dist/esm/utils/type.js +20 -0
  449. package/node_modules/@cloudbase/database/dist/esm/utils/utils.d.ts +4 -0
  450. package/node_modules/@cloudbase/database/dist/esm/utils/utils.js +33 -0
  451. package/node_modules/@cloudbase/database/dist/esm/validate.d.ts +1 -0
  452. package/node_modules/@cloudbase/database/dist/esm/validate.js +57 -0
  453. package/node_modules/@cloudbase/database/package.json +36 -0
  454. package/node_modules/@cloudbase/database/tsconfig.test.json +15 -0
  455. package/node_modules/@cloudbase/functions/.eslintrc.js +15 -0
  456. package/node_modules/@cloudbase/functions/dist/cjs/index.d.ts +2 -0
  457. package/node_modules/@cloudbase/functions/dist/cjs/index.js +223 -0
  458. package/node_modules/@cloudbase/functions/dist/esm/index.d.ts +2 -0
  459. package/node_modules/@cloudbase/functions/dist/esm/index.js +219 -0
  460. package/node_modules/@cloudbase/functions/package.json +32 -0
  461. package/node_modules/@cloudbase/model/.eslintrc.js +15 -0
  462. package/node_modules/@cloudbase/model/dist/cjs/index.d.ts +5 -0
  463. package/node_modules/@cloudbase/model/dist/cjs/index.js +144 -0
  464. package/node_modules/@cloudbase/model/dist/esm/index.d.ts +5 -0
  465. package/node_modules/@cloudbase/model/dist/esm/index.js +125 -0
  466. package/node_modules/@cloudbase/model/package.json +29 -0
  467. package/node_modules/@cloudbase/mysql/.eslintrc.js +6 -0
  468. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts +4 -0
  469. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts.map +1 -0
  470. package/node_modules/@cloudbase/mysql/dist/cjs/index.js +173 -0
  471. package/node_modules/@cloudbase/mysql/dist/esm/index.d.ts +3 -0
  472. package/node_modules/@cloudbase/mysql/dist/esm/index.js +155 -0
  473. package/node_modules/@cloudbase/mysql/package.json +30 -0
  474. package/node_modules/@cloudbase/oauth/.eslintrc.js +15 -0
  475. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.d.ts +142 -0
  476. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.js +1280 -0
  477. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.d.ts +22 -0
  478. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.js +278 -0
  479. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.d.ts +139 -0
  480. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.js +147 -0
  481. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.d.ts +557 -0
  482. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.js +3 -0
  483. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.d.ts +3 -0
  484. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.js +223 -0
  485. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.d.ts +42 -0
  486. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.js +205 -0
  487. package/node_modules/@cloudbase/oauth/dist/cjs/index.d.ts +22 -0
  488. package/node_modules/@cloudbase/oauth/dist/cjs/index.js +107 -0
  489. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.d.ts +20 -0
  490. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.js +26 -0
  491. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.d.ts +15 -0
  492. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.js +10 -0
  493. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.d.ts +74 -0
  494. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.js +3 -0
  495. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.d.ts +129 -0
  496. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.js +1174 -0
  497. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.d.ts +9 -0
  498. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.js +112 -0
  499. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.d.ts +4 -0
  500. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.js +26 -0
  501. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.d.ts +546 -0
  502. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.js +2982 -0
  503. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.d.ts +6 -0
  504. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.js +94 -0
  505. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.d.ts +2 -0
  506. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.js +56 -0
  507. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.d.ts +2 -0
  508. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.js +66 -0
  509. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.d.ts +13 -0
  510. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.js +66 -0
  511. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.d.ts +1 -0
  512. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.js +12 -0
  513. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.d.ts +142 -0
  514. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.js +768 -0
  515. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.d.ts +22 -0
  516. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.js +255 -0
  517. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.d.ts +139 -0
  518. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.js +144 -0
  519. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.d.ts +557 -0
  520. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.js +2 -0
  521. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.d.ts +3 -0
  522. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.js +130 -0
  523. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.d.ts +42 -0
  524. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.js +104 -0
  525. package/node_modules/@cloudbase/oauth/dist/esm/index.d.ts +22 -0
  526. package/node_modules/@cloudbase/oauth/dist/esm/index.js +64 -0
  527. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.d.ts +20 -0
  528. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.js +22 -0
  529. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.d.ts +15 -0
  530. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.js +3 -0
  531. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.d.ts +74 -0
  532. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.js +2 -0
  533. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.d.ts +129 -0
  534. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.js +711 -0
  535. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.d.ts +9 -0
  536. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.js +104 -0
  537. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.d.ts +4 -0
  538. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.js +18 -0
  539. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.d.ts +546 -0
  540. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.js +2953 -0
  541. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.d.ts +6 -0
  542. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.js +34 -0
  543. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.d.ts +2 -0
  544. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.js +51 -0
  545. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.d.ts +2 -0
  546. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.js +61 -0
  547. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.d.ts +13 -0
  548. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.js +58 -0
  549. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.d.ts +1 -0
  550. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.js +8 -0
  551. package/node_modules/@cloudbase/oauth/dist/miniprogram/index.js +1 -0
  552. package/node_modules/@cloudbase/oauth/package.json +20 -0
  553. package/node_modules/@cloudbase/realtime/.eslintrc.js +15 -0
  554. package/node_modules/@cloudbase/realtime/dist/cjs/common.d.ts +4 -0
  555. package/node_modules/@cloudbase/realtime/dist/cjs/common.js +22 -0
  556. package/node_modules/@cloudbase/realtime/dist/cjs/error.d.ts +36 -0
  557. package/node_modules/@cloudbase/realtime/dist/cjs/error.js +106 -0
  558. package/node_modules/@cloudbase/realtime/dist/cjs/index.d.ts +2 -0
  559. package/node_modules/@cloudbase/realtime/dist/cjs/index.js +36 -0
  560. package/node_modules/@cloudbase/realtime/dist/cjs/listener.d.ts +14 -0
  561. package/node_modules/@cloudbase/realtime/dist/cjs/listener.js +18 -0
  562. package/node_modules/@cloudbase/realtime/dist/cjs/message.d.ts +3 -0
  563. package/node_modules/@cloudbase/realtime/dist/cjs/message.js +13 -0
  564. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.d.ts +17 -0
  565. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.js +45 -0
  566. package/node_modules/@cloudbase/realtime/dist/cjs/utils.d.ts +1 -0
  567. package/node_modules/@cloudbase/realtime/dist/cjs/utils.js +9 -0
  568. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.d.ts +62 -0
  569. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.js +960 -0
  570. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.d.ts +78 -0
  571. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.js +750 -0
  572. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.d.ts +126 -0
  573. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.js +141 -0
  574. package/node_modules/@cloudbase/realtime/dist/esm/common.d.ts +4 -0
  575. package/node_modules/@cloudbase/realtime/dist/esm/common.js +15 -0
  576. package/node_modules/@cloudbase/realtime/dist/esm/error.d.ts +36 -0
  577. package/node_modules/@cloudbase/realtime/dist/esm/error.js +100 -0
  578. package/node_modules/@cloudbase/realtime/dist/esm/index.d.ts +2 -0
  579. package/node_modules/@cloudbase/realtime/dist/esm/index.js +32 -0
  580. package/node_modules/@cloudbase/realtime/dist/esm/listener.d.ts +14 -0
  581. package/node_modules/@cloudbase/realtime/dist/esm/listener.js +15 -0
  582. package/node_modules/@cloudbase/realtime/dist/esm/message.d.ts +3 -0
  583. package/node_modules/@cloudbase/realtime/dist/esm/message.js +8 -0
  584. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.d.ts +17 -0
  585. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.js +42 -0
  586. package/node_modules/@cloudbase/realtime/dist/esm/utils.d.ts +1 -0
  587. package/node_modules/@cloudbase/realtime/dist/esm/utils.js +5 -0
  588. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.d.ts +62 -0
  589. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.js +954 -0
  590. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.d.ts +78 -0
  591. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.js +747 -0
  592. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.d.ts +126 -0
  593. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.js +137 -0
  594. package/node_modules/@cloudbase/realtime/package.json +29 -0
  595. package/node_modules/@cloudbase/storage/.eslintrc.js +15 -0
  596. package/node_modules/@cloudbase/storage/dist/cjs/index.d.ts +195 -0
  597. package/node_modules/@cloudbase/storage/dist/cjs/index.js +1426 -0
  598. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.d.ts +20 -0
  599. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.js +65 -0
  600. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.d.ts +64 -0
  601. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.js +3 -0
  602. package/node_modules/@cloudbase/storage/dist/esm/index.d.ts +195 -0
  603. package/node_modules/@cloudbase/storage/dist/esm/index.js +1422 -0
  604. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.d.ts +20 -0
  605. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.js +61 -0
  606. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.d.ts +64 -0
  607. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.js +2 -0
  608. package/node_modules/@cloudbase/storage/package.json +28 -0
  609. package/node_modules/@cloudbase/types/auth.d.ts +99 -0
  610. package/node_modules/@cloudbase/types/cache.d.ts +26 -0
  611. package/node_modules/@cloudbase/types/cloudrun.d.ts +9 -0
  612. package/node_modules/@cloudbase/types/component.d.ts +17 -0
  613. package/node_modules/@cloudbase/types/database.d.ts +31 -0
  614. package/node_modules/@cloudbase/types/events.d.ts +13 -0
  615. package/node_modules/@cloudbase/types/functions.d.ts +40 -0
  616. package/node_modules/@cloudbase/types/index.d.ts +211 -0
  617. package/node_modules/@cloudbase/types/index.js +1 -0
  618. package/node_modules/@cloudbase/types/package.json +43 -0
  619. package/node_modules/@cloudbase/types/realtime.d.ts +350 -0
  620. package/node_modules/@cloudbase/types/request.d.ts +30 -0
  621. package/node_modules/@cloudbase/types/storage.d.ts +126 -0
  622. package/node_modules/@cloudbase/utilities/.eslintrc.js +15 -0
  623. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.d.ts +45 -0
  624. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.js +68 -0
  625. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.d.ts +20 -0
  626. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.js +278 -0
  627. package/node_modules/@cloudbase/utilities/dist/cjs/constants/common.d.ts +6 -0
  628. package/node_modules/@cloudbase/utilities/dist/cjs/constants/common.js +24 -0
  629. package/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.d.ts +8 -0
  630. package/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.js +12 -0
  631. package/node_modules/@cloudbase/utilities/dist/cjs/constants/index.d.ts +3 -0
  632. package/{model/dist → node_modules/@cloudbase/utilities/dist/cjs/constants}/index.js +5 -5
  633. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
  634. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.js +238 -0
  635. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.d.ts +1 -0
  636. package/{apis/dist → node_modules/@cloudbase/utilities/dist/cjs/helpers}/index.js +2 -5
  637. package/node_modules/@cloudbase/utilities/dist/cjs/index.d.ts +13 -0
  638. package/node_modules/@cloudbase/utilities/dist/cjs/index.js +51 -0
  639. package/node_modules/@cloudbase/utilities/dist/cjs/libs/abortController.d.ts +9 -0
  640. package/node_modules/@cloudbase/utilities/dist/cjs/libs/abortController.js +25 -0
  641. package/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.d.ts +17 -0
  642. package/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.js +261 -0
  643. package/node_modules/@cloudbase/utilities/dist/cjs/libs/events.d.ts +27 -0
  644. package/node_modules/@cloudbase/utilities/dist/cjs/libs/events.js +108 -0
  645. package/node_modules/@cloudbase/utilities/dist/cjs/libs/langEvent.d.ts +3 -0
  646. package/node_modules/@cloudbase/utilities/dist/cjs/libs/langEvent.js +7 -0
  647. package/node_modules/@cloudbase/utilities/dist/cjs/libs/util.d.ts +49 -0
  648. package/node_modules/@cloudbase/utilities/dist/cjs/libs/util.js +282 -0
  649. package/node_modules/@cloudbase/utilities/dist/esm/adapters/index.d.ts +45 -0
  650. package/node_modules/@cloudbase/utilities/dist/esm/adapters/index.js +40 -0
  651. package/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.d.ts +20 -0
  652. package/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.js +274 -0
  653. package/node_modules/@cloudbase/utilities/dist/esm/constants/common.d.ts +6 -0
  654. package/node_modules/@cloudbase/utilities/dist/esm/constants/common.js +17 -0
  655. package/node_modules/@cloudbase/utilities/dist/esm/constants/errors.d.ts +8 -0
  656. package/node_modules/@cloudbase/utilities/dist/esm/constants/errors.js +9 -0
  657. package/node_modules/@cloudbase/utilities/dist/esm/constants/index.d.ts +3 -0
  658. package/node_modules/@cloudbase/utilities/dist/esm/constants/index.js +4 -0
  659. package/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.d.ts +11 -0
  660. package/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.js +234 -0
  661. package/node_modules/@cloudbase/utilities/dist/esm/helpers/index.d.ts +1 -0
  662. package/node_modules/@cloudbase/utilities/dist/esm/helpers/index.js +2 -0
  663. package/node_modules/@cloudbase/utilities/dist/esm/index.d.ts +13 -0
  664. package/node_modules/@cloudbase/utilities/dist/esm/index.js +14 -0
  665. package/node_modules/@cloudbase/utilities/dist/esm/libs/abortController.d.ts +9 -0
  666. package/node_modules/@cloudbase/utilities/dist/esm/libs/abortController.js +23 -0
  667. package/node_modules/@cloudbase/utilities/dist/esm/libs/cache.d.ts +17 -0
  668. package/node_modules/@cloudbase/utilities/dist/esm/libs/cache.js +258 -0
  669. package/node_modules/@cloudbase/utilities/dist/esm/libs/events.d.ts +27 -0
  670. package/node_modules/@cloudbase/utilities/dist/esm/libs/events.js +102 -0
  671. package/node_modules/@cloudbase/utilities/dist/esm/libs/langEvent.d.ts +3 -0
  672. package/node_modules/@cloudbase/utilities/dist/esm/libs/langEvent.js +4 -0
  673. package/node_modules/@cloudbase/utilities/dist/esm/libs/util.d.ts +49 -0
  674. package/node_modules/@cloudbase/utilities/dist/esm/libs/util.js +254 -0
  675. package/node_modules/@cloudbase/utilities/dist/miniprogram/index.js +1 -0
  676. package/node_modules/@cloudbase/utilities/package.json +26 -0
  677. package/package.json +2 -2
  678. package/ai/dist/index.d.ts +0 -1
  679. package/ai/dist/index.esm.js +0 -3
  680. package/analytics/dist/index.d.ts +0 -2
  681. package/analytics/dist/index.esm.js +0 -4
  682. package/analytics/dist/index.js +0 -9
  683. package/apis/dist/index.d.ts +0 -1
  684. package/apis/dist/index.esm.js +0 -3
  685. package/app/dist/index.d.ts +0 -9
  686. package/app/dist/index.esm.js +0 -11
  687. package/app/dist/index.js +0 -18
  688. package/auth/dist/index.d.ts +0 -2
  689. package/auth/dist/index.esm.js +0 -8
  690. package/auth/dist/index.js +0 -13
  691. package/cloudrun/dist/index.d.ts +0 -1
  692. package/cloudrun/dist/index.esm.js +0 -3
  693. package/cloudrun/dist/index.js +0 -21
  694. package/container/dist/index.d.ts +0 -2
  695. package/container/dist/index.esm.js +0 -8
  696. package/container/dist/index.js +0 -13
  697. package/database/dist/index.d.ts +0 -3
  698. package/database/dist/index.esm.js +0 -503
  699. package/database/dist/index.js +0 -509
  700. package/dist/index.esm.js +0 -35
  701. package/functions/dist/index.d.ts +0 -2
  702. package/functions/dist/index.esm.js +0 -8
  703. package/functions/dist/index.js +0 -13
  704. package/model/dist/index.d.ts +0 -1
  705. package/model/dist/index.esm.js +0 -3
  706. package/mysql/dist/index.d.ts +0 -1
  707. package/mysql/dist/index.esm.js +0 -3
  708. package/mysql/dist/index.js +0 -21
  709. package/oauth/dist/index.d.ts +0 -1
  710. package/oauth/dist/index.esm.js +0 -3
  711. package/oauth/dist/index.js +0 -21
  712. package/realtime/dist/index.d.ts +0 -2
  713. package/realtime/dist/index.esm.js +0 -8
  714. package/realtime/dist/index.js +0 -13
  715. package/storage/dist/index.d.ts +0 -2
  716. package/storage/dist/index.esm.js +0 -4
  717. package/storage/dist/index.js +0 -9
@@ -0,0 +1,1174 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.OAuth2Client = exports.defaultStorage = exports.generateRequestId = exports.toResponseError = exports.defaultRequest = void 0;
60
+ var consts_1 = require("./consts");
61
+ var consts_2 = require("../auth/consts");
62
+ var uuid_1 = require("../utils/uuid");
63
+ var index_1 = require("../utils/index");
64
+ var single_promise_1 = require("../utils/function/single-promise");
65
+ var base64_1 = require("../utils/base64");
66
+ var mp_1 = require("../utils/mp");
67
+ var utilities_1 = require("@cloudbase/utilities");
68
+ var RequestIdHeaderName = 'x-request-id';
69
+ var DeviceIdHeaderName = 'x-device-id';
70
+ var DeviceIdSectionName = 'device_id';
71
+ var defaultRequest = function (url, options) {
72
+ return __awaiter(this, void 0, void 0, function () {
73
+ var result, responseError, copyOptions, responseResult, jsonResponse, error_1;
74
+ return __generator(this, function (_a) {
75
+ switch (_a.label) {
76
+ case 0:
77
+ result = null;
78
+ responseError = null;
79
+ _a.label = 1;
80
+ case 1:
81
+ _a.trys.push([1, 4, , 5]);
82
+ copyOptions = Object.assign({}, options);
83
+ if (!copyOptions.method) {
84
+ copyOptions.method = 'GET';
85
+ }
86
+ if (copyOptions.body && typeof copyOptions.body !== 'string') {
87
+ copyOptions.body = JSON.stringify(copyOptions.body);
88
+ }
89
+ return [4, fetch(url, copyOptions)];
90
+ case 2:
91
+ responseResult = _a.sent();
92
+ return [4, responseResult.json()];
93
+ case 3:
94
+ jsonResponse = _a.sent();
95
+ if (jsonResponse === null || jsonResponse === void 0 ? void 0 : jsonResponse.error) {
96
+ responseError = jsonResponse;
97
+ responseError.error_uri = new URL(url).pathname;
98
+ }
99
+ else {
100
+ result = jsonResponse;
101
+ }
102
+ return [3, 5];
103
+ case 4:
104
+ error_1 = _a.sent();
105
+ responseError = {
106
+ error: consts_1.ErrorType.UNREACHABLE,
107
+ error_description: error_1.message,
108
+ error_uri: new URL(url).pathname,
109
+ };
110
+ return [3, 5];
111
+ case 5:
112
+ if (responseError) {
113
+ throw responseError;
114
+ }
115
+ else {
116
+ return [2, result];
117
+ }
118
+ return [2];
119
+ }
120
+ });
121
+ });
122
+ };
123
+ exports.defaultRequest = defaultRequest;
124
+ var toResponseError = function (error, options) {
125
+ var responseError;
126
+ var formatOptions = options || {};
127
+ if (error instanceof Error) {
128
+ responseError = {
129
+ error: formatOptions.error || consts_1.ErrorType.LOCAL,
130
+ error_description: formatOptions.error_description || error.message,
131
+ error_uri: formatOptions.error_uri,
132
+ details: formatOptions.details || error.stack,
133
+ };
134
+ }
135
+ else {
136
+ var formatError = error || {};
137
+ responseError = {
138
+ error: formatOptions.error || formatError.error || consts_1.ErrorType.LOCAL,
139
+ error_description: formatOptions.error_description || formatError.error_description,
140
+ error_uri: formatOptions.error_uri || formatError.error_uri,
141
+ details: formatOptions.details || formatError.details,
142
+ };
143
+ }
144
+ return responseError;
145
+ };
146
+ exports.toResponseError = toResponseError;
147
+ function generateRequestId() {
148
+ return (0, uuid_1.uuidv4)();
149
+ }
150
+ exports.generateRequestId = generateRequestId;
151
+ var DefaultStorage = (function () {
152
+ function DefaultStorage(opts) {
153
+ this._env = (opts === null || opts === void 0 ? void 0 : opts.env) || '';
154
+ }
155
+ DefaultStorage.prototype.getItem = function (key) {
156
+ return __awaiter(this, void 0, void 0, function () {
157
+ return __generator(this, function (_a) {
158
+ return [2, window.localStorage.getItem("".concat(key).concat(this._env))];
159
+ });
160
+ });
161
+ };
162
+ DefaultStorage.prototype.removeItem = function (key) {
163
+ return __awaiter(this, void 0, void 0, function () {
164
+ return __generator(this, function (_a) {
165
+ window.localStorage.removeItem("".concat(key).concat(this._env));
166
+ return [2];
167
+ });
168
+ });
169
+ };
170
+ DefaultStorage.prototype.setItem = function (key, value) {
171
+ return __awaiter(this, void 0, void 0, function () {
172
+ return __generator(this, function (_a) {
173
+ window.localStorage.setItem("".concat(key).concat(this._env), value);
174
+ return [2];
175
+ });
176
+ });
177
+ };
178
+ DefaultStorage.prototype.getItemSync = function (key) {
179
+ return window.localStorage.getItem("".concat(key).concat(this._env));
180
+ };
181
+ DefaultStorage.prototype.removeItemSync = function (key) {
182
+ window.localStorage.removeItem("".concat(key).concat(this._env));
183
+ };
184
+ DefaultStorage.prototype.setItemSync = function (key, value) {
185
+ window.localStorage.setItem("".concat(key).concat(this._env), value);
186
+ };
187
+ return DefaultStorage;
188
+ }());
189
+ exports.defaultStorage = new DefaultStorage();
190
+ function isCredentialsExpired(credentials) {
191
+ var isExpired = true;
192
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) && (credentials === null || credentials === void 0 ? void 0 : credentials.access_token)) {
193
+ isExpired = credentials.expires_at < new Date();
194
+ }
195
+ return isExpired;
196
+ }
197
+ var LocalCredentials = (function () {
198
+ function LocalCredentials(options) {
199
+ this.credentials = null;
200
+ this.accessKeyCredentials = null;
201
+ this.singlePromise = null;
202
+ this.tokenSectionName = options.tokenSectionName;
203
+ this.storage = options.storage;
204
+ this.clientId = options.clientId;
205
+ this.singlePromise = new single_promise_1.SinglePromise({ clientId: this.clientId });
206
+ this.credentials = options.credentials || null;
207
+ }
208
+ LocalCredentials.prototype.getStorageCredentialsSync = function () {
209
+ var credentials = null;
210
+ var tokenStr = this.storage.getItemSync(this.tokenSectionName);
211
+ if (tokenStr !== undefined && tokenStr !== null) {
212
+ try {
213
+ credentials = JSON.parse(tokenStr);
214
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
215
+ credentials.expires_at = new Date(credentials.expires_at);
216
+ }
217
+ }
218
+ catch (error) {
219
+ this.storage.removeItem(this.tokenSectionName);
220
+ credentials = null;
221
+ }
222
+ }
223
+ return credentials;
224
+ };
225
+ LocalCredentials.prototype.setCredentials = function (credentials) {
226
+ return __awaiter(this, void 0, void 0, function () {
227
+ var tokenStr;
228
+ return __generator(this, function (_a) {
229
+ switch (_a.label) {
230
+ case 0:
231
+ if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_in)) return [3, 3];
232
+ if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_at)) {
233
+ credentials.expires_at = new Date(Date.now() + (credentials.expires_in - 30) * 1000);
234
+ }
235
+ if (!this.storage) return [3, 2];
236
+ tokenStr = JSON.stringify(credentials);
237
+ return [4, this.storage.setItem(this.tokenSectionName, tokenStr)];
238
+ case 1:
239
+ _a.sent();
240
+ _a.label = 2;
241
+ case 2:
242
+ this.credentials = credentials;
243
+ return [3, 6];
244
+ case 3:
245
+ if (!this.storage) return [3, 5];
246
+ return [4, this.storage.removeItem(this.tokenSectionName)];
247
+ case 4:
248
+ _a.sent();
249
+ _a.label = 5;
250
+ case 5:
251
+ this.credentials = null;
252
+ _a.label = 6;
253
+ case 6: return [2];
254
+ }
255
+ });
256
+ });
257
+ };
258
+ LocalCredentials.prototype.setAccessKeyCredentials = function (credentials) {
259
+ this.accessKeyCredentials = credentials;
260
+ if (credentials.scope === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
261
+ this.credentials = credentials;
262
+ }
263
+ };
264
+ LocalCredentials.prototype.getCredentials = function () {
265
+ return __awaiter(this, void 0, void 0, function () {
266
+ var _this = this;
267
+ return __generator(this, function (_a) {
268
+ return [2, this.singlePromise.run('getCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
269
+ var _a, credentials, isAccessKeyCredentials;
270
+ return __generator(this, function (_b) {
271
+ switch (_b.label) {
272
+ case 0:
273
+ if (!isCredentialsExpired(this.credentials)) return [3, 2];
274
+ return [4, this.getStorageCredentials()];
275
+ case 1:
276
+ _a = _b.sent(), credentials = _a.credentials, isAccessKeyCredentials = _a.isAccessKeyCredentials;
277
+ if (isAccessKeyCredentials) {
278
+ return [2, credentials];
279
+ }
280
+ this.credentials = credentials;
281
+ _b.label = 2;
282
+ case 2: return [2, this.credentials];
283
+ }
284
+ });
285
+ }); })];
286
+ });
287
+ });
288
+ };
289
+ LocalCredentials.prototype.getStorageCredentials = function () {
290
+ return __awaiter(this, void 0, void 0, function () {
291
+ var _this = this;
292
+ return __generator(this, function (_a) {
293
+ return [2, this.singlePromise.run('_getStorageCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
294
+ var credentials, isAccessKeyCredentials, tokenStr, error_2;
295
+ return __generator(this, function (_a) {
296
+ switch (_a.label) {
297
+ case 0:
298
+ credentials = null;
299
+ isAccessKeyCredentials = false;
300
+ return [4, this.storage.getItem(this.tokenSectionName)];
301
+ case 1:
302
+ tokenStr = _a.sent();
303
+ if (!!!tokenStr) return [3, 6];
304
+ _a.label = 2;
305
+ case 2:
306
+ _a.trys.push([2, 3, , 5]);
307
+ credentials = JSON.parse(tokenStr);
308
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
309
+ credentials.expires_at = new Date(credentials.expires_at);
310
+ }
311
+ return [3, 5];
312
+ case 3:
313
+ error_2 = _a.sent();
314
+ return [4, this.storage.removeItem(this.tokenSectionName)];
315
+ case 4:
316
+ _a.sent();
317
+ credentials = null;
318
+ return [3, 5];
319
+ case 5: return [3, 7];
320
+ case 6:
321
+ credentials = this.accessKeyCredentials || null;
322
+ isAccessKeyCredentials = true;
323
+ _a.label = 7;
324
+ case 7: return [2, { credentials: credentials, isAccessKeyCredentials: isAccessKeyCredentials }];
325
+ }
326
+ });
327
+ }); })];
328
+ });
329
+ });
330
+ };
331
+ return LocalCredentials;
332
+ }());
333
+ var OAuth2Client = exports.OAuth2Client = (function () {
334
+ function OAuth2Client(options) {
335
+ var _this = this;
336
+ var _a;
337
+ this.initializePromise = null;
338
+ this.lockAcquired = false;
339
+ this.pendingInLock = [];
340
+ this.singlePromise = null;
341
+ if (!options.clientSecret) {
342
+ options.clientSecret = '';
343
+ }
344
+ if (!options.clientId && options.env) {
345
+ options.clientId = options.env;
346
+ }
347
+ this.apiOrigin = options.apiOrigin;
348
+ this.apiPath = options.apiPath || consts_2.AUTH_API_PREFIX;
349
+ this.clientId = options.clientId;
350
+ this.i18n = options.i18n;
351
+ this.eventBus = options.eventBus;
352
+ this.singlePromise = new single_promise_1.SinglePromise({ clientId: this.clientId });
353
+ this.retry = this.formatRetry(options.retry, OAuth2Client.defaultRetry);
354
+ if (options.baseRequest) {
355
+ this.baseRequest = options.baseRequest;
356
+ }
357
+ else {
358
+ this.baseRequest = exports.defaultRequest;
359
+ }
360
+ this.tokenInURL = options.tokenInURL;
361
+ this.headers = options.headers;
362
+ this.storage = options.storage || exports.defaultStorage;
363
+ this.localCredentials = new LocalCredentials({
364
+ tokenSectionName: "credentials_".concat(options.clientId),
365
+ storage: this.storage,
366
+ clientId: options.clientId,
367
+ });
368
+ this.clientSecret = options.clientSecret;
369
+ if (options.clientId) {
370
+ this.basicAuth = "Basic ".concat((0, base64_1.weBtoa)("".concat(options.clientId, ":").concat(this.clientSecret)));
371
+ }
372
+ this.wxCloud = options.wxCloud;
373
+ try {
374
+ if ((0, mp_1.isMp)()) {
375
+ this.useWxCloud = options.useWxCloud;
376
+ if (this.wxCloud === undefined && options.env) {
377
+ wx.cloud.init({ env: options.env });
378
+ this.wxCloud = wx.cloud;
379
+ }
380
+ }
381
+ }
382
+ catch (error) {
383
+ }
384
+ this.refreshTokenFunc = options.refreshTokenFunc || this.defaultRefreshTokenFunc;
385
+ this.anonymousSignInFunc = options.anonymousSignInFunc;
386
+ this.onCredentialsError = options.onCredentialsError;
387
+ this.getInitialSession = options.getInitialSession;
388
+ this.onInitialSessionObtained = options.onInitialSessionObtained;
389
+ this.logDebugMessages = (_a = options.debug) !== null && _a !== void 0 ? _a : false;
390
+ utilities_1.langEvent.bus.on(utilities_1.langEvent.LANG_CHANGE_EVENT, function (params) {
391
+ var _a;
392
+ _this.i18n = ((_a = params.data) === null || _a === void 0 ? void 0 : _a.i18n) || _this.i18n;
393
+ });
394
+ }
395
+ OAuth2Client.prototype.setGetInitialSession = function (callback) {
396
+ this.getInitialSession = callback;
397
+ };
398
+ OAuth2Client.prototype.setOnInitialSessionObtained = function (callback) {
399
+ this.onInitialSessionObtained = callback;
400
+ };
401
+ OAuth2Client.prototype.initialize = function (func) {
402
+ return __awaiter(this, void 0, void 0, function () {
403
+ var _this = this;
404
+ return __generator(this, function (_a) {
405
+ switch (_a.label) {
406
+ case 0:
407
+ if (!this.initializePromise) return [3, 2];
408
+ return [4, this.initializePromise];
409
+ case 1: return [2, _a.sent()];
410
+ case 2:
411
+ if (!(func !== undefined)) return [3, 4];
412
+ this.initializePromise = func;
413
+ return [4, this.initializePromise];
414
+ case 3: return [2, _a.sent()];
415
+ case 4:
416
+ this.initializePromise = (function () { return __awaiter(_this, void 0, void 0, function () {
417
+ var _this = this;
418
+ return __generator(this, function (_a) {
419
+ switch (_a.label) {
420
+ case 0: return [4, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
421
+ switch (_a.label) {
422
+ case 0: return [4, this._initialize()];
423
+ case 1: return [2, _a.sent()];
424
+ }
425
+ }); }); })];
426
+ case 1: return [2, _a.sent()];
427
+ }
428
+ });
429
+ }); })();
430
+ return [4, this.initializePromise];
431
+ case 5: return [2, _a.sent()];
432
+ }
433
+ });
434
+ });
435
+ };
436
+ OAuth2Client.prototype.setCredentials = function (credentials) {
437
+ return __awaiter(this, void 0, void 0, function () {
438
+ var _this = this;
439
+ return __generator(this, function (_a) {
440
+ switch (_a.label) {
441
+ case 0: return [4, this.initializePromise];
442
+ case 1:
443
+ _a.sent();
444
+ return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
445
+ return [2, this.localCredentials.setCredentials(credentials)];
446
+ }); }); })];
447
+ }
448
+ });
449
+ });
450
+ };
451
+ OAuth2Client.prototype.setAccessKeyCredentials = function (credentials) {
452
+ return this.localCredentials.setAccessKeyCredentials(credentials);
453
+ };
454
+ OAuth2Client.prototype.getAccessToken = function () {
455
+ return __awaiter(this, void 0, void 0, function () {
456
+ var credentials, respErr;
457
+ return __generator(this, function (_a) {
458
+ switch (_a.label) {
459
+ case 0: return [4, this.initializePromise];
460
+ case 1:
461
+ _a.sent();
462
+ return [4, this.getCredentials()];
463
+ case 2:
464
+ credentials = _a.sent();
465
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
466
+ return [2, Promise.resolve(credentials.access_token)];
467
+ }
468
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.access_token) {
469
+ return [2, Promise.resolve(credentials.access_token)];
470
+ }
471
+ respErr = { error: consts_1.ErrorType.UNAUTHENTICATED };
472
+ return [2, Promise.reject(respErr)];
473
+ }
474
+ });
475
+ });
476
+ };
477
+ OAuth2Client.prototype.request = function (url, options) {
478
+ var _a, _b;
479
+ return __awaiter(this, void 0, void 0, function () {
480
+ var retry, deviceId, credentials, _c, response, maxRequestTimes, requestTime, responseError_1;
481
+ var _d;
482
+ return __generator(this, function (_f) {
483
+ switch (_f.label) {
484
+ case 0:
485
+ if (!options) {
486
+ options = {};
487
+ }
488
+ retry = this.formatRetry(options.retry, this.retry);
489
+ options.headers = __assign(__assign({}, options.headers), (_d = {}, _d[(_a = this.i18n) === null || _a === void 0 ? void 0 : _a.LANG_HEADER_KEY] = (_b = this.i18n) === null || _b === void 0 ? void 0 : _b.lang, _d));
490
+ if (this.headers) {
491
+ options.headers = __assign(__assign({}, this.headers), options.headers);
492
+ }
493
+ if (!options.headers[RequestIdHeaderName]) {
494
+ options.headers[RequestIdHeaderName] = generateRequestId();
495
+ }
496
+ if (!!options.headers[DeviceIdHeaderName]) return [3, 2];
497
+ return [4, this.getDeviceId()];
498
+ case 1:
499
+ deviceId = _f.sent();
500
+ options.headers[DeviceIdHeaderName] = deviceId;
501
+ _f.label = 2;
502
+ case 2:
503
+ if ((options === null || options === void 0 ? void 0 : options.withBasicAuth) && this.basicAuth) {
504
+ options.headers.Authorization = this.basicAuth;
505
+ }
506
+ if (!(options === null || options === void 0 ? void 0 : options.withCredentials)) return [3, 7];
507
+ if (!options.getCredentials) return [3, 4];
508
+ return [4, options.getCredentials()];
509
+ case 3:
510
+ _c = _f.sent();
511
+ return [3, 6];
512
+ case 4: return [4, this.getCredentials()];
513
+ case 5:
514
+ _c = _f.sent();
515
+ _f.label = 6;
516
+ case 6:
517
+ credentials = _c;
518
+ if (credentials) {
519
+ if (this.tokenInURL) {
520
+ if (url.indexOf('?') < 0) {
521
+ url += '?';
522
+ }
523
+ url += "access_token=".concat(credentials.access_token);
524
+ }
525
+ else {
526
+ options.headers.Authorization = "".concat(credentials.token_type, " ").concat(credentials.access_token);
527
+ }
528
+ }
529
+ return [3, 8];
530
+ case 7:
531
+ if (this.clientId && url.indexOf('client_id') < 0) {
532
+ url += url.indexOf('?') < 0 ? '?' : '&';
533
+ url += "client_id=".concat(this.clientId);
534
+ }
535
+ _f.label = 8;
536
+ case 8:
537
+ if (url.startsWith('/')) {
538
+ url = "".concat(this.apiOrigin).concat(this.apiPath).concat(url);
539
+ }
540
+ response = null;
541
+ maxRequestTimes = retry + 1;
542
+ requestTime = 0;
543
+ _f.label = 9;
544
+ case 9:
545
+ if (!(requestTime < maxRequestTimes)) return [3, 21];
546
+ _f.label = 10;
547
+ case 10:
548
+ _f.trys.push([10, 15, , 18]);
549
+ if (!(options.useWxCloud || this.useWxCloud)) return [3, 12];
550
+ return [4, this.wxCloudCallFunction(url, options)];
551
+ case 11:
552
+ response = _f.sent();
553
+ return [3, 14];
554
+ case 12: return [4, this.baseRequest(url, options)];
555
+ case 13:
556
+ response = _f.sent();
557
+ _f.label = 14;
558
+ case 14:
559
+ if (!!(response === null || response === void 0 ? void 0 : response.code)) {
560
+ throw {
561
+ error: response.code,
562
+ error_description: response.message,
563
+ error_uri: new URL(url).pathname,
564
+ };
565
+ }
566
+ return [3, 21];
567
+ case 15:
568
+ responseError_1 = _f.sent();
569
+ try {
570
+ responseError_1.requestId = responseError_1.requestId || options.headers[RequestIdHeaderName] || '';
571
+ }
572
+ catch (error) { }
573
+ if (!(options.withCredentials && responseError_1 && responseError_1.error === consts_1.ErrorType.UNAUTHENTICATED)) return [3, 17];
574
+ return [4, this.setCredentials(null)];
575
+ case 16:
576
+ _f.sent();
577
+ return [2, Promise.reject(responseError_1)];
578
+ case 17:
579
+ if (requestTime === retry || !responseError_1 || responseError_1.error !== 'unreachable') {
580
+ return [2, Promise.reject(responseError_1)];
581
+ }
582
+ return [3, 18];
583
+ case 18: return [4, this.sleep(OAuth2Client.retryInterval)];
584
+ case 19:
585
+ _f.sent();
586
+ _f.label = 20;
587
+ case 20:
588
+ requestTime++;
589
+ return [3, 9];
590
+ case 21: return [2, response];
591
+ }
592
+ });
593
+ });
594
+ };
595
+ OAuth2Client.prototype.wxCloudCallFunction = function (url, options) {
596
+ var _a;
597
+ return __awaiter(this, void 0, void 0, function () {
598
+ var result, responseError, userAgent, error_3, responseResult, error_4;
599
+ return __generator(this, function (_b) {
600
+ switch (_b.label) {
601
+ case 0:
602
+ result = null;
603
+ responseError = null;
604
+ _b.label = 1;
605
+ case 1:
606
+ _b.trys.push([1, 7, , 8]);
607
+ userAgent = '';
608
+ _b.label = 2;
609
+ case 2:
610
+ _b.trys.push([2, 4, , 5]);
611
+ return [4, wx.getRendererUserAgent()];
612
+ case 3:
613
+ userAgent = _b.sent();
614
+ return [3, 5];
615
+ case 4:
616
+ error_3 = _b.sent();
617
+ return [3, 5];
618
+ case 5: return [4, this.wxCloud.callFunction({
619
+ name: 'httpOverCallFunction',
620
+ data: {
621
+ url: url,
622
+ method: options.method,
623
+ headers: __assign({ origin: 'https://servicewechat.com', 'User-Agent': userAgent }, options.headers),
624
+ body: options.body,
625
+ },
626
+ })];
627
+ case 6:
628
+ responseResult = (_b.sent()).result;
629
+ if ((_a = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body) === null || _a === void 0 ? void 0 : _a.error_code) {
630
+ responseError = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
631
+ responseError.error_uri = (0, index_1.getPathName)(url);
632
+ }
633
+ else {
634
+ result = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
635
+ }
636
+ return [3, 8];
637
+ case 7:
638
+ error_4 = _b.sent();
639
+ responseError = {
640
+ error: consts_1.ErrorType.UNREACHABLE,
641
+ error_description: error_4.message,
642
+ error_uri: (0, index_1.getPathName)(url),
643
+ };
644
+ return [3, 8];
645
+ case 8:
646
+ if (responseError) {
647
+ throw responseError;
648
+ }
649
+ else {
650
+ return [2, result];
651
+ }
652
+ return [2];
653
+ }
654
+ });
655
+ });
656
+ };
657
+ OAuth2Client.prototype.getCredentials = function () {
658
+ return __awaiter(this, void 0, void 0, function () {
659
+ var _this = this;
660
+ return __generator(this, function (_a) {
661
+ switch (_a.label) {
662
+ case 0: return [4, this.initializePromise];
663
+ case 1:
664
+ _a.sent();
665
+ return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
666
+ return [2, this._getCredentials()];
667
+ }); }); })];
668
+ }
669
+ });
670
+ });
671
+ };
672
+ OAuth2Client.prototype.getCredentialsSync = function () {
673
+ var credentials = this.localCredentials.getStorageCredentialsSync();
674
+ return credentials;
675
+ };
676
+ OAuth2Client.prototype.getCredentialsAsync = function () {
677
+ return this.getCredentials();
678
+ };
679
+ OAuth2Client.prototype.getScope = function () {
680
+ var _a;
681
+ return __awaiter(this, void 0, void 0, function () {
682
+ var credentials, msg;
683
+ return __generator(this, function (_b) {
684
+ switch (_b.label) {
685
+ case 0: return [4, this.localCredentials.getCredentials()];
686
+ case 1:
687
+ credentials = _b.sent();
688
+ if (!credentials) {
689
+ msg = 'credentials not found';
690
+ (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
691
+ return [2, this.unAuthenticatedError(msg)];
692
+ }
693
+ return [2, credentials.scope];
694
+ }
695
+ });
696
+ });
697
+ };
698
+ OAuth2Client.prototype.getGroups = function () {
699
+ var _a;
700
+ return __awaiter(this, void 0, void 0, function () {
701
+ var credentials, msg;
702
+ return __generator(this, function (_b) {
703
+ switch (_b.label) {
704
+ case 0: return [4, this.localCredentials.getCredentials()];
705
+ case 1:
706
+ credentials = _b.sent();
707
+ if (!credentials) {
708
+ msg = 'credentials not found';
709
+ (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
710
+ return [2, this.unAuthenticatedError(msg)];
711
+ }
712
+ return [2, credentials.groups];
713
+ }
714
+ });
715
+ });
716
+ };
717
+ OAuth2Client.prototype.refreshToken = function (credentials, options) {
718
+ return __awaiter(this, void 0, void 0, function () {
719
+ var _this = this;
720
+ return __generator(this, function (_a) {
721
+ switch (_a.label) {
722
+ case 0: return [4, this.initializePromise];
723
+ case 1:
724
+ _a.sent();
725
+ return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
726
+ return [2, this._refreshToken(credentials, options)];
727
+ }); }); })];
728
+ }
729
+ });
730
+ });
731
+ };
732
+ OAuth2Client.prototype._refreshToken = function (credentials, options) {
733
+ return __awaiter(this, void 0, void 0, function () {
734
+ var _this = this;
735
+ return __generator(this, function (_a) {
736
+ return [2, this.singlePromise.run('_refreshToken', function () { return __awaiter(_this, void 0, void 0, function () {
737
+ var msg, newCredentials, error_5, msg;
738
+ var _a, _b, _c, _d;
739
+ return __generator(this, function (_f) {
740
+ switch (_f.label) {
741
+ case 0:
742
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
743
+ return [2, credentials];
744
+ }
745
+ if (!credentials || !credentials.refresh_token) {
746
+ msg = 'no refresh token found in credentials';
747
+ (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
748
+ return [2, this.unAuthenticatedError(msg)];
749
+ }
750
+ _f.label = 1;
751
+ case 1:
752
+ _f.trys.push([1, 4, , 7]);
753
+ return [4, this.refreshTokenFunc(credentials.refresh_token, credentials)];
754
+ case 2:
755
+ newCredentials = _f.sent();
756
+ return [4, this.localCredentials.setCredentials(newCredentials)];
757
+ case 3:
758
+ _f.sent();
759
+ (_b = this.eventBus) === null || _b === void 0 ? void 0 : _b.fire(consts_2.EVENTS.AUTH_STATE_CHANGED, { event: consts_2.AUTH_STATE_CHANGED_TYPE.TOKEN_REFRESHED });
760
+ return [2, newCredentials];
761
+ case 4:
762
+ error_5 = _f.sent();
763
+ if (options === null || options === void 0 ? void 0 : options.throwError) {
764
+ throw error_5;
765
+ }
766
+ if (!(error_5.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
767
+ return [4, this.localCredentials.setCredentials(null)];
768
+ case 5:
769
+ _f.sent();
770
+ msg = error_5.error_description;
771
+ (_c = this.onCredentialsError) === null || _c === void 0 ? void 0 : _c.call(this, { msg: msg });
772
+ return [2, this.unAuthenticatedError(msg)];
773
+ case 6:
774
+ (_d = this.onCredentialsError) === null || _d === void 0 ? void 0 : _d.call(this, { msg: error_5.error_description });
775
+ return [2, Promise.reject(error_5)];
776
+ case 7: return [2];
777
+ }
778
+ });
779
+ }); })];
780
+ });
781
+ });
782
+ };
783
+ OAuth2Client.prototype.anonymousLogin = function (credentials) {
784
+ return __awaiter(this, void 0, void 0, function () {
785
+ var _this = this;
786
+ return __generator(this, function (_a) {
787
+ return [2, this.singlePromise.run('_anonymousLogin', function () { return __awaiter(_this, void 0, void 0, function () {
788
+ var c, _a;
789
+ return __generator(this, function (_b) {
790
+ switch (_b.label) {
791
+ case 0:
792
+ if (!this.anonymousSignInFunc) return [3, 4];
793
+ return [4, this.anonymousSignInFunc(credentials)];
794
+ case 1:
795
+ c = _b.sent();
796
+ _a = c;
797
+ if (_a) return [3, 3];
798
+ return [4, this.localCredentials.getCredentials()];
799
+ case 2:
800
+ _a = (_b.sent());
801
+ _b.label = 3;
802
+ case 3:
803
+ credentials = _a;
804
+ return [3, 6];
805
+ case 4: return [4, this.anonymousSignIn(credentials)];
806
+ case 5:
807
+ credentials = _b.sent();
808
+ _b.label = 6;
809
+ case 6: return [2, credentials];
810
+ }
811
+ });
812
+ }); })];
813
+ });
814
+ });
815
+ };
816
+ OAuth2Client.prototype.checkRetry = function (retry) {
817
+ var responseError = null;
818
+ if (typeof retry !== 'number' || retry < OAuth2Client.minRetry || retry > OAuth2Client.maxRetry) {
819
+ responseError = {
820
+ error: consts_1.ErrorType.UNREACHABLE,
821
+ error_description: 'wrong options param: retry',
822
+ };
823
+ }
824
+ if (responseError) {
825
+ throw responseError;
826
+ }
827
+ return retry;
828
+ };
829
+ OAuth2Client.prototype.formatRetry = function (retry, defaultVale) {
830
+ if (typeof retry === 'undefined') {
831
+ return defaultVale;
832
+ }
833
+ return this.checkRetry(retry);
834
+ };
835
+ OAuth2Client.prototype.sleep = function (ms) {
836
+ return __awaiter(this, void 0, void 0, function () {
837
+ return __generator(this, function (_a) {
838
+ return [2, new Promise(function (resolve) {
839
+ setTimeout(function () {
840
+ resolve();
841
+ }, ms);
842
+ })];
843
+ });
844
+ });
845
+ };
846
+ OAuth2Client.prototype.anonymousSignIn = function (credentials) {
847
+ return __awaiter(this, void 0, void 0, function () {
848
+ var _this = this;
849
+ return __generator(this, function (_a) {
850
+ return [2, this.singlePromise.run('_anonymous', function () { return __awaiter(_this, void 0, void 0, function () {
851
+ var newCredentials, error_6;
852
+ return __generator(this, function (_a) {
853
+ switch (_a.label) {
854
+ case 0:
855
+ if (!credentials || credentials.scope !== 'anonymous') {
856
+ return [2, this.unAuthenticatedError('no anonymous in credentials')];
857
+ }
858
+ _a.label = 1;
859
+ case 1:
860
+ _a.trys.push([1, 4, , 7]);
861
+ return [4, this.request(consts_2.ApiUrls.AUTH_SIGN_IN_ANONYMOUSLY_URL, {
862
+ method: 'POST',
863
+ withBasicAuth: true,
864
+ body: {},
865
+ })];
866
+ case 2:
867
+ newCredentials = _a.sent();
868
+ return [4, this.localCredentials.setCredentials(newCredentials)];
869
+ case 3:
870
+ _a.sent();
871
+ return [2, newCredentials];
872
+ case 4:
873
+ error_6 = _a.sent();
874
+ if (!(error_6.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
875
+ return [4, this.localCredentials.setCredentials(null)];
876
+ case 5:
877
+ _a.sent();
878
+ return [2, this.unAuthenticatedError(error_6.error_description)];
879
+ case 6: return [2, Promise.reject(error_6)];
880
+ case 7: return [2];
881
+ }
882
+ });
883
+ }); })];
884
+ });
885
+ });
886
+ };
887
+ OAuth2Client.prototype.defaultRefreshTokenFunc = function (refreshToken, credentials) {
888
+ var _a;
889
+ return __awaiter(this, void 0, void 0, function () {
890
+ var msg, url, newCredentials;
891
+ return __generator(this, function (_b) {
892
+ switch (_b.label) {
893
+ case 0:
894
+ if (refreshToken === undefined || refreshToken === '') {
895
+ msg = 'refresh token not found';
896
+ (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
897
+ return [2, this.unAuthenticatedError(msg)];
898
+ }
899
+ url = consts_2.ApiUrls.AUTH_TOKEN_URL;
900
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.version) === 'v2') {
901
+ url = consts_2.ApiUrlsV2.AUTH_TOKEN_URL;
902
+ }
903
+ return [4, this.request(url, {
904
+ method: 'POST',
905
+ body: {
906
+ client_id: this.clientId,
907
+ client_secret: this.clientSecret,
908
+ grant_type: 'refresh_token',
909
+ refresh_token: refreshToken,
910
+ },
911
+ })];
912
+ case 1:
913
+ newCredentials = _b.sent();
914
+ return [2, __assign(__assign({}, newCredentials), { version: (credentials === null || credentials === void 0 ? void 0 : credentials.version) || 'v1' })];
915
+ }
916
+ });
917
+ });
918
+ };
919
+ OAuth2Client.prototype.getDeviceId = function () {
920
+ return __awaiter(this, void 0, void 0, function () {
921
+ var deviceId;
922
+ return __generator(this, function (_a) {
923
+ switch (_a.label) {
924
+ case 0:
925
+ if (this.deviceID) {
926
+ return [2, this.deviceID];
927
+ }
928
+ return [4, this.storage.getItem(DeviceIdSectionName)];
929
+ case 1:
930
+ deviceId = _a.sent();
931
+ if (!!(typeof deviceId === 'string' && deviceId.length >= 16 && deviceId.length <= 48)) return [3, 3];
932
+ deviceId = (0, uuid_1.uuidv4)();
933
+ return [4, this.storage.setItem(DeviceIdSectionName, deviceId)];
934
+ case 2:
935
+ _a.sent();
936
+ _a.label = 3;
937
+ case 3:
938
+ this.deviceID = deviceId;
939
+ return [2, deviceId];
940
+ }
941
+ });
942
+ });
943
+ };
944
+ OAuth2Client.prototype.unAuthenticatedError = function (err) {
945
+ var respErr = {
946
+ error: consts_1.ErrorType.UNAUTHENTICATED,
947
+ error_description: err,
948
+ };
949
+ return Promise.reject(respErr);
950
+ };
951
+ OAuth2Client.prototype._debug = function () {
952
+ var args = [];
953
+ for (var _i = 0; _i < arguments.length; _i++) {
954
+ args[_i] = arguments[_i];
955
+ }
956
+ if (this.logDebugMessages) {
957
+ console.log.apply(console, __spreadArray(['[OAuth2Client]'], args, false));
958
+ }
959
+ };
960
+ OAuth2Client.prototype._initialize = function () {
961
+ return __awaiter(this, void 0, void 0, function () {
962
+ var data, error, callbackError_1, err_1, error_7;
963
+ var _a;
964
+ return __generator(this, function (_b) {
965
+ switch (_b.label) {
966
+ case 0:
967
+ _b.trys.push([0, 11, 12, 13]);
968
+ if (!this.getInitialSession) {
969
+ this._debug('#_initialize()', 'no getInitialSession callback set, skipping');
970
+ return [2, { error: null }];
971
+ }
972
+ this._debug('#_initialize()', 'calling getInitialSession callback');
973
+ _b.label = 1;
974
+ case 1:
975
+ _b.trys.push([1, 9, , 10]);
976
+ return [4, this.getInitialSession()];
977
+ case 2:
978
+ data = (_a = _b.sent(), _a.data), error = _a.error;
979
+ if (!(data === null || data === void 0 ? void 0 : data.session)) return [3, 4];
980
+ this._debug('#_initialize()', 'session obtained from getInitialSession', data.session);
981
+ return [4, this.localCredentials.setCredentials(data === null || data === void 0 ? void 0 : data.session)];
982
+ case 3:
983
+ _b.sent();
984
+ _b.label = 4;
985
+ case 4:
986
+ if (!this.onInitialSessionObtained) return [3, 8];
987
+ this._debug('#_initialize()', 'calling onInitialSessionObtained callback');
988
+ _b.label = 5;
989
+ case 5:
990
+ _b.trys.push([5, 7, , 8]);
991
+ return [4, this.onInitialSessionObtained(data, error)];
992
+ case 6:
993
+ _b.sent();
994
+ return [3, 8];
995
+ case 7:
996
+ callbackError_1 = _b.sent();
997
+ this._debug('#_initialize()', 'error in onInitialSessionObtained', callbackError_1);
998
+ return [3, 8];
999
+ case 8:
1000
+ if (error) {
1001
+ this._debug('#_initialize()', 'error from getInitialSession', error);
1002
+ return [2, { error: error }];
1003
+ }
1004
+ return [2, { error: null }];
1005
+ case 9:
1006
+ err_1 = _b.sent();
1007
+ this._debug('#_initialize()', 'exception during getInitialSession', err_1);
1008
+ return [2, { error: err_1 instanceof Error ? err_1 : new Error(String(err_1)) }];
1009
+ case 10: return [3, 13];
1010
+ case 11:
1011
+ error_7 = _b.sent();
1012
+ this._debug('#_initialize()', 'unexpected error', error_7);
1013
+ return [2, { error: error_7 instanceof Error ? error_7 : new Error(String(error_7)) }];
1014
+ case 12:
1015
+ this._debug('#_initialize()', 'end');
1016
+ return [7];
1017
+ case 13: return [2];
1018
+ }
1019
+ });
1020
+ });
1021
+ };
1022
+ OAuth2Client.prototype._acquireLock = function (acquireTimeout, fn) {
1023
+ return __awaiter(this, void 0, void 0, function () {
1024
+ var last_1, result_1, result_2, waitOn;
1025
+ var _this = this;
1026
+ return __generator(this, function (_a) {
1027
+ switch (_a.label) {
1028
+ case 0:
1029
+ this._debug('#_acquireLock', 'begin', acquireTimeout);
1030
+ _a.label = 1;
1031
+ case 1:
1032
+ _a.trys.push([1, , 10, 11]);
1033
+ if (this.lockAcquired) {
1034
+ last_1 = this.pendingInLock.length ? this.pendingInLock[this.pendingInLock.length - 1] : Promise.resolve();
1035
+ result_1 = (function () { return __awaiter(_this, void 0, void 0, function () {
1036
+ return __generator(this, function (_a) {
1037
+ switch (_a.label) {
1038
+ case 0: return [4, last_1];
1039
+ case 1:
1040
+ _a.sent();
1041
+ return [4, fn()];
1042
+ case 2: return [2, _a.sent()];
1043
+ }
1044
+ });
1045
+ }); })();
1046
+ this.pendingInLock.push((function () { return __awaiter(_this, void 0, void 0, function () {
1047
+ var _e_1;
1048
+ return __generator(this, function (_a) {
1049
+ switch (_a.label) {
1050
+ case 0:
1051
+ _a.trys.push([0, 2, , 3]);
1052
+ return [4, result_1];
1053
+ case 1:
1054
+ _a.sent();
1055
+ return [3, 3];
1056
+ case 2:
1057
+ _e_1 = _a.sent();
1058
+ return [3, 3];
1059
+ case 3: return [2];
1060
+ }
1061
+ });
1062
+ }); })());
1063
+ return [2, result_1];
1064
+ }
1065
+ this._debug('#_acquireLock', 'acquiring lock for client', this.clientId);
1066
+ _a.label = 2;
1067
+ case 2:
1068
+ _a.trys.push([2, , 8, 9]);
1069
+ this.lockAcquired = true;
1070
+ result_2 = fn();
1071
+ this.pendingInLock.push((function () { return __awaiter(_this, void 0, void 0, function () {
1072
+ var _e_2;
1073
+ return __generator(this, function (_a) {
1074
+ switch (_a.label) {
1075
+ case 0:
1076
+ _a.trys.push([0, 2, , 3]);
1077
+ return [4, result_2];
1078
+ case 1:
1079
+ _a.sent();
1080
+ return [3, 3];
1081
+ case 2:
1082
+ _e_2 = _a.sent();
1083
+ return [3, 3];
1084
+ case 3: return [2];
1085
+ }
1086
+ });
1087
+ }); })());
1088
+ return [4, result_2];
1089
+ case 3:
1090
+ _a.sent();
1091
+ _a.label = 4;
1092
+ case 4:
1093
+ if (!this.pendingInLock.length) return [3, 6];
1094
+ waitOn = __spreadArray([], this.pendingInLock, true);
1095
+ return [4, Promise.all(waitOn)];
1096
+ case 5:
1097
+ _a.sent();
1098
+ this.pendingInLock.splice(0, waitOn.length);
1099
+ return [3, 4];
1100
+ case 6: return [4, result_2];
1101
+ case 7: return [2, _a.sent()];
1102
+ case 8:
1103
+ this._debug('#_acquireLock', 'releasing lock for client', this.clientId);
1104
+ this.lockAcquired = false;
1105
+ return [7];
1106
+ case 9: return [3, 11];
1107
+ case 10:
1108
+ this._debug('#_acquireLock', 'end');
1109
+ return [7];
1110
+ case 11: return [2];
1111
+ }
1112
+ });
1113
+ });
1114
+ };
1115
+ OAuth2Client.prototype._getCredentials = function () {
1116
+ var _a, _b, _c;
1117
+ return __awaiter(this, void 0, void 0, function () {
1118
+ var credentials, msg, error_8, msg;
1119
+ return __generator(this, function (_d) {
1120
+ switch (_d.label) {
1121
+ case 0: return [4, this.localCredentials.getCredentials()];
1122
+ case 1:
1123
+ credentials = _d.sent();
1124
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
1125
+ return [2, credentials];
1126
+ }
1127
+ if (!credentials) {
1128
+ msg = 'credentials not found';
1129
+ (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
1130
+ return [2, this.unAuthenticatedError(msg)];
1131
+ }
1132
+ if (!isCredentialsExpired(credentials)) return [3, 12];
1133
+ if (!credentials.refresh_token) return [3, 9];
1134
+ _d.label = 2;
1135
+ case 2:
1136
+ _d.trys.push([2, 4, , 8]);
1137
+ return [4, this._refreshToken(credentials)];
1138
+ case 3:
1139
+ credentials = _d.sent();
1140
+ return [3, 8];
1141
+ case 4:
1142
+ error_8 = _d.sent();
1143
+ if (!(credentials.scope === 'anonymous')) return [3, 6];
1144
+ return [4, this.anonymousLogin(credentials)];
1145
+ case 5:
1146
+ credentials = _d.sent();
1147
+ return [3, 7];
1148
+ case 6:
1149
+ (_b = this.onCredentialsError) === null || _b === void 0 ? void 0 : _b.call(this, { msg: error_8.error_description });
1150
+ return [2, Promise.reject(error_8)];
1151
+ case 7: return [3, 8];
1152
+ case 8: return [3, 12];
1153
+ case 9:
1154
+ if (!(credentials.scope === 'anonymous')) return [3, 11];
1155
+ return [4, this.anonymousLogin(credentials)];
1156
+ case 10:
1157
+ credentials = _d.sent();
1158
+ return [3, 12];
1159
+ case 11:
1160
+ msg = 'no refresh token found in credentials';
1161
+ (_c = this.onCredentialsError) === null || _c === void 0 ? void 0 : _c.call(this, { msg: msg });
1162
+ return [2, this.unAuthenticatedError(msg)];
1163
+ case 12: return [2, credentials];
1164
+ }
1165
+ });
1166
+ });
1167
+ };
1168
+ OAuth2Client.defaultRetry = 2;
1169
+ OAuth2Client.minRetry = 0;
1170
+ OAuth2Client.maxRetry = 5;
1171
+ OAuth2Client.retryInterval = 1000;
1172
+ return OAuth2Client;
1173
+ }());
1174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBT3VCO0FBYXZCLHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4QyxrQ0FBa0M7QUFHbEMsa0RBQWdEO0FBRWhELElBQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFBO0FBQzFDLElBQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFBO0FBQ3hDLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFBO0FBV2hDLElBQU0sY0FBYyxHQUFvQixVQUFtQixHQUFXLEVBQUUsT0FBd0I7Ozs7OztvQkFDakcsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBQTs7b0JBQXhELGNBQWMsR0FBYSxTQUE2QjtvQkFDekMsV0FBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUE7O29C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QUE7d0JBQzNELFdBQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFLLENBQUMsRUFBQTs7Ozs2QkFHdkIsQ0FBQSxXQUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQSxFQUFqQyxlQUFpQzt3QkFDNUIsV0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFBOzt3QkFBcEQsV0FBVyxHQUFHLFNBQXNDLENBQUE7Ozt3QkFFOUMsR0FBRyxHQUFHLHVDQUF1QyxDQUFBO3dCQUNuRCxNQUFBLElBQUksQ0FBQyxrQkFBa0IscURBQUcsRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFDLENBQUE7d0JBQ2xDLFdBQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFBOzZCQUd6QyxXQUFPLFdBQVcsRUFBQTs7OztLQUNuQjtJQTVzQmMseUJBQVksR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNoQixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1oscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLDBCQUFhLEdBQUcsSUFBSSxBQUFQLENBQU87SUEwc0JyQyxtQkFBQztDQUFBLEFBOXNCRCxJQThzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvclR5cGUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7XG4gIEFwaVVybHMsXG4gIEFwaVVybHNWMixcbiAgQVVUSF9BUElfUFJFRklYLFxuICBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRSxcbiAgREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSxcbiAgRVZFTlRTLFxufSBmcm9tICcuLi9hdXRoL2NvbnN0cydcblxuaW1wb3J0IHsgQXV0aENsaWVudCwgU2ltcGxlU3RvcmFnZSB9IGZyb20gJy4vaW50ZXJmYWNlJ1xuXG5pbXBvcnQge1xuICBDcmVkZW50aWFscyxcbiAgUmVzcG9uc2VFcnJvcixcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFJlcXVlc3RGdW5jdGlvbixcbiAgT0F1dGgyQ2xpZW50T3B0aW9ucyxcbiAgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICcuL21vZGVscydcblxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSAnLi4vdXRpbHMvdXVpZCdcbmltcG9ydCB7IGdldFBhdGhOYW1lIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnXG5cbmltcG9ydCB7IFNpbmdsZVByb21pc2UgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9zaW5nbGUtcHJvbWlzZSdcbmltcG9ydCB7IHdlQnRvYSB9IGZyb20gJy4uL3V0aWxzL2Jhc2U2NCdcbmltcG9ydCB7IGlzTXAgfSBmcm9tICcuLi91dGlscy9tcCdcbmltcG9ydCB7IEF1dGhPcHRpb25zIH0gZnJvbSAnLi4vYXV0aC9hcGlzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBsYW5nRXZlbnQgfSBmcm9tICdAY2xvdWRiYXNlL3V0aWxpdGllcydcblxuY29uc3QgUmVxdWVzdElkSGVhZGVyTmFtZSA9ICd4LXJlcXVlc3QtaWQnXG5jb25zdCBEZXZpY2VJZEhlYWRlck5hbWUgPSAneC1kZXZpY2UtaWQnXG5jb25zdCBEZXZpY2VJZFNlY3Rpb25OYW1lID0gJ2RldmljZV9pZCdcblxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9SZXNwb25zZUVycm9yT3B0aW9ucyB7XG4gIGVycm9yPzogRXJyb3JUeXBlXG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBlcnJvcl91cmk/OiBzdHJpbmcgfCBudWxsXG4gIGRldGFpbHM/OiBhbnkgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24gPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHJlc3VsdDogVCB8IG51bGwgPSBudWxsXG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgdHJ5IHtcbiAgICAvLyBPYmplY3RzIG11c3QgYmUgY29waWVkIHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIGRhdGEgc3VjaCBhcyBib2R5LlxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucylcbiAgICBpZiAoIWNvcHlPcHRpb25zLm1ldGhvZCkge1xuICAgICAgY29weU9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgaWYgKGNvcHlPcHRpb25zLmJvZHkgJiYgdHlwZW9mIGNvcHlPcHRpb25zLmJvZHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb3B5T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoY29weU9wdGlvbnMuYm9keSlcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VSZXN1bHQ6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBjb3B5T3B0aW9ucylcbiAgICBjb25zdCBqc29uUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZVJlc3VsdC5qc29uKClcbiAgICBpZiAoanNvblJlc3BvbnNlPy5lcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IGpzb25SZXNwb25zZSBhcyBSZXNwb25zZUVycm9yXG4gICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBqc29uUmVzcG9uc2UgYXMgVFxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgZXJyb3JfdXJpOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgfVxuICB9XG4gIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdG9SZXNwb25zZUVycm9yID0gKGVycm9yOiBSZXNwb25zZUVycm9yIHwgRXJyb3IsIG9wdGlvbnM/OiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zKTogUmVzcG9uc2VFcnJvciA9PiB7XG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yXG4gIGNvbnN0IGZvcm1hdE9wdGlvbnM6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGVycm9yLnN0YWNrLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmb3JtYXRFcnJvcjogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IGVycm9yIHx8IHt9XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IGZvcm1hdEVycm9yLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGZvcm1hdEVycm9yLmVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSB8fCBmb3JtYXRFcnJvci5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZm9ybWF0RXJyb3IuZGV0YWlscyxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlRXJyb3Jcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByZXF1ZXN0IGlkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXF1ZXN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHV1aWR2NCgpXG59XG5cbi8qKlxuICogRGVmYXVsdCBTdG9yYWdlLlxuICovXG5jbGFzcyBEZWZhdWx0U3RvcmFnZSBpbXBsZW1lbnRzIFNpbXBsZVN0b3JhZ2Uge1xuICAvKipcbiAgICog57yT5a2Ya2V557uf5LiA5L2/55So5ZCO57yA5Yy65YiGXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Iob3B0cz86IHsgZW52OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX2VudiA9IG9wdHM/LmVudiB8fCAnJ1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBnZXRJdGVtU3luYyhrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0b3JhZ2UgPSBuZXcgRGVmYXVsdFN0b3JhZ2UoKVxuXG5pbnRlcmZhY2UgTG9jYWxDcmVkZW50aWFsc09wdGlvbnMge1xuICB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBjbGllbnRJZDogc3RyaW5nXG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjcmVkZW50aWFscyBpcyBleHBpcmVkLlxuICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ3JlZGVudGlhbHNFeHBpcmVkKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICBsZXQgaXNFeHBpcmVkID0gdHJ1ZVxuICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQgJiYgY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgIGlzRXhwaXJlZCA9IGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gIH1cbiAgcmV0dXJuIGlzRXhwaXJlZFxufVxuXG4vKipcbiAqIExvY2FsIGNyZWRlbnRpYWxzLlxuICogTG9jYWwgY3JlZGVudGlhbHMsIHdpdGggbWVtb3J5IGNhY2hlIGFuZCBzdG9yYWdlIGNhY2hlLlxuICogSWYgdGhlIG1lbW9yeSBjYWNoZSBleHBpcmVzLCB0aGUgc3RvcmFnZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGxvYWRlZC5cbiAqL1xuY2xhc3MgTG9jYWxDcmVkZW50aWFscyB7XG4gIHByaXZhdGUgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuICAvLyDmnaXoh6phY2Nlc3NLZXnnmoTouqvku73vvIzkuI3mjIHkuYXljJZcbiAgcHJpdmF0ZSBhY2Nlc3NLZXlDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuXG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtMb2NhbENyZWRlbnRpYWxzT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTG9jYWxDcmVkZW50aWFsc09wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuU2VjdGlvbk5hbWUgPSBvcHRpb25zLnRva2VuU2VjdGlvbk5hbWVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2VcbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMuc2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfSlcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCBudWxsXG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtU3luYyh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfaW4pIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDApXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLCB0b2tlblN0cilcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBjcmVkZW50aWFscyBmcm9tIGFjY2Vzc0tleVxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIHNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgICAvLyBub2RlIHNkayDlnLrmma/kuIvnm7TmjqXkvb/nlKhhY2Nlc3NLZXnouqvku71cbiAgICBpZiAoY3JlZGVudGlhbHMuc2NvcGUgPT09IERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUpIHtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdnZXRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZCh0aGlzLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICBjb25zdCB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH0gPSBhd2FpdCB0aGlzLmdldFN0b3JhZ2VDcmVkZW50aWFscygpXG4gICAgICAgIGlmIChpc0FjY2Vzc0tleUNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JhZ2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFN0b3JhZ2VDcmVkZW50aWFscygpOiBQcm9taXNlPHsgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbDsgaXNBY2Nlc3NLZXlDcmVkZW50aWFsczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgbGV0IGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMgPSBmYWxzZVxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICghIXRva2VuU3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzIHx8IG51bGxcbiAgICAgICAgaXNBY2Nlc3NLZXlDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogT0F1dGgyQ2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDbGllbnQgaW1wbGVtZW50cyBBdXRoQ2xpZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFJldHJ5ID0gMlxuICBwcml2YXRlIHN0YXRpYyBtaW5SZXRyeSA9IDBcbiAgcHJpdmF0ZSBzdGF0aWMgbWF4UmV0cnkgPSA1XG4gIHByaXZhdGUgc3RhdGljIHJldHJ5SW50ZXJ2YWwgPSAxMDAwXG5cbiAgcHVibGljIGxvY2FsQ3JlZGVudGlhbHM6IExvY2FsQ3JlZGVudGlhbHNcbiAgLyoqXG4gICAqIEtlZXBzIHRyYWNrIG9mIHRoZSBhc3luYyBjbGllbnQgaW5pdGlhbGl6YXRpb24uXG4gICAqIFdoZW4gbnVsbCBvciBub3QgeWV0IHJlc29sdmVkIHRoZSBhdXRoIHN0YXRlIGlzIGB1bmtub3duYFxuICAgKiBPbmNlIHJlc29sdmVkIHRoZSBhdXRoIHN0YXRlIGlzIGtub3duIGFuZCBpdCdzIHNhZmUgdG8gY2FsbCBhbnkgZnVydGhlciBjbGllbnQgbWV0aG9kcy5cbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplUHJvbWlzZTogUHJvbWlzZTx7IGVycm9yOiBFcnJvciB8IG51bGwgfT4gfCBudWxsID0gbnVsbFxuICBwcm90ZWN0ZWQgbG9ja0FjcXVpcmVkID0gZmFsc2VcbiAgcHJvdGVjdGVkIHBlbmRpbmdJbkxvY2s6IFByb21pc2U8YW55PltdID0gW11cbiAgcHJvdGVjdGVkIGxvZ0RlYnVnTWVzc2FnZXM6IGJvb2xlYW5cbiAgcHJvdGVjdGVkIGdldEluaXRpYWxTZXNzaW9uPzogKCkgPT4gUHJvbWlzZTx7XG4gICAgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgfT5cbiAgcHJpdmF0ZSBhcGlPcmlnaW46IHN0cmluZ1xuICBwcml2YXRlIGFwaVBhdGg6IHN0cmluZ1xuICBwcml2YXRlIGNsaWVudElkOiBzdHJpbmdcbiAgcHJpdmF0ZSBpMThuOiBJQ2xvdWRiYXNlQ29uZmlnWydpMThuJ11cbiAgcHJpdmF0ZSByZXRyeTogbnVtYmVyXG4gIHByaXZhdGUgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIHByaXZhdGUgYmFzZVJlcXVlc3Q6IDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBwcml2YXRlIHd4Q2xvdWQ6IGFueVxuICBwcml2YXRlIHVzZVd4Q2xvdWQ6IGJvb2xlYW5cbiAgcHJpdmF0ZSBldmVudEJ1czogYW55XG4gIHByaXZhdGUgYmFzaWNBdXRoOiBzdHJpbmdcbiAgcHJpdmF0ZSBvbkNyZWRlbnRpYWxzRXJyb3I6IEF1dGhPcHRpb25zWydvbkNyZWRlbnRpYWxzRXJyb3InXSB8IHVuZGVmaW5lZFxuICBwcml2YXRlIG9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZD86IChkYXRhOiB7IHNlc3Npb246IENyZWRlbnRpYWxzOyB1c2VyPzogYW55IH0sIGVycm9yPzogYW55KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09BdXRoMkNsaWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9BdXRoMkNsaWVudE9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuY2xpZW50U2VjcmV0KSB7XG4gICAgICBvcHRpb25zLmNsaWVudFNlY3JldCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmNsaWVudElkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICBvcHRpb25zLmNsaWVudElkID0gb3B0aW9ucy5lbnZcbiAgICB9XG5cbiAgICB0aGlzLmFwaU9yaWdpbiA9IG9wdGlvbnMuYXBpT3JpZ2luXG4gICAgdGhpcy5hcGlQYXRoID0gb3B0aW9ucy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWFxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5pMThuID0gb3B0aW9ucy5pMThuXG4gICAgdGhpcy5ldmVudEJ1cyA9IG9wdGlvbnMuZXZlbnRCdXNcbiAgICB0aGlzLnNpbmdsZVByb21pc2UgPSBuZXcgU2luZ2xlUHJvbWlzZSh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pXG4gICAgdGhpcy5yZXRyeSA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgT0F1dGgyQ2xpZW50LmRlZmF1bHRSZXRyeSlcbiAgICBpZiAob3B0aW9ucy5iYXNlUmVxdWVzdCkge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IG9wdGlvbnMuYmFzZVJlcXVlc3RcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IGRlZmF1bHRSZXF1ZXN0XG4gICAgfVxuICAgIHRoaXMudG9rZW5JblVSTCA9IG9wdGlvbnMudG9rZW5JblVSTFxuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVyc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2VcbiAgICB0aGlzLmxvY2FsQ3JlZGVudGlhbHMgPSBuZXcgTG9jYWxDcmVkZW50aWFscyh7XG4gICAgICB0b2tlblNlY3Rpb25OYW1lOiBgY3JlZGVudGlhbHNfJHtvcHRpb25zLmNsaWVudElkfWAsXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICB9KVxuXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBvcHRpb25zLmNsaWVudFNlY3JldFxuICAgIGlmIChvcHRpb25zLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmJhc2ljQXV0aCA9IGBCYXNpYyAke3dlQnRvYShgJHtvcHRpb25zLmNsaWVudElkfToke3RoaXMuY2xpZW50U2VjcmV0fWApfWBcbiAgICB9XG4gICAgdGhpcy53eENsb3VkID0gb3B0aW9ucy53eENsb3VkXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc01wKCkpIHtcbiAgICAgICAgdGhpcy51c2VXeENsb3VkID0gb3B0aW9ucy51c2VXeENsb3VkXG4gICAgICAgIGlmICh0aGlzLnd4Q2xvdWQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVudikge1xuICAgICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgICAgdGhpcy53eENsb3VkID0gd3guY2xvdWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvL1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yID0gb3B0aW9ucy5vbkNyZWRlbnRpYWxzRXJyb3JcblxuICAgIC8vIE5ldyBvcHRpb25zIGZvciBzZXNzaW9uIGRldGVjdGlvblxuICAgIHRoaXMuZ2V0SW5pdGlhbFNlc3Npb24gPSBvcHRpb25zLmdldEluaXRpYWxTZXNzaW9uXG4gICAgdGhpcy5vbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgPSBvcHRpb25zLm9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZFxuICAgIHRoaXMubG9nRGVidWdNZXNzYWdlcyA9IG9wdGlvbnMuZGVidWcgPz8gZmFsc2VcblxuICAgIGxhbmdFdmVudC5idXMub24obGFuZ0V2ZW50LkxBTkdfQ0hBTkdFX0VWRU5ULCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaTE4biA9IHBhcmFtcy5kYXRhPy5pMThuIHx8IHRoaXMuaTE4blxuICAgIH0pXG5cbiAgICAvLyBOb3RlOiBBdXRvLWluaXRpYWxpemUgaXMgTk9UIGNhbGxlZCBoZXJlIHRvIGFsbG93IENsb3VkYmFzZU9BdXRoIHRvIHNldCBnZXRJbml0aWFsU2Vzc2lvbiBmaXJzdFxuICAgIC8vIENsb3VkYmFzZU9BdXRoLmNvbnN0cnVjdG9yIHdpbGwgY2FsbCBpbml0aWFsaXplKCkgYWZ0ZXIgc2V0dGluZyB1cCB0aGUgY2FsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZXRJbml0aWFsU2Vzc2lvbiBjYWxsYmFjay5cbiAgICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemUoKSB0byBnZXQgdGhlIGluaXRpYWwgc2Vzc2lvbiAoZS5nLiwgZnJvbSBPQXV0aCBjYWxsYmFjayBpbiBVUkwpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBpbml0aWFsIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBzZXRHZXRJbml0aWFsU2Vzc2lvbihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx7XG4gICAgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgfT4sKTogdm9pZCB7XG4gICAgdGhpcy5nZXRJbml0aWFsU2Vzc2lvbiA9IGNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgb25Jbml0aWFsU2Vzc2lvbk9idGFpbmVkIGNhbGxiYWNrLlxuICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgYWZ0ZXIgaW5pdGlhbCBzZXNzaW9uIGlzIG9idGFpbmVkIGFuZCBzdG9yZWQsXG4gICAqIGFsbG93aW5nIHVwcGVyIGxheWVycyB0byBoYW5kbGUgdXNlciBpbmZvIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHNlc3Npb24gYW5kIHVzZXIgZGF0YVxuICAgKi9cbiAgcHVibGljIHNldE9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZChjYWxsYmFjazogKGRhdGE6IHsgc2Vzc2lvbjogQ3JlZGVudGlhbHM7IHVzZXI/OiBhbnkgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sKTogdm9pZCB7XG4gICAgdGhpcy5vbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQgc2Vzc2lvbiBlaXRoZXIgZnJvbSB0aGUgdXJsIG9yIGZyb20gc3RvcmFnZS5cbiAgICogVGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBjbGllbnQgd2l0aCBkZXRlY3RTZXNzaW9uSW5Vcmw9dHJ1ZSxcbiAgICogYnV0IHNob3VsZCBhbHNvIGJlIGNhbGxlZCBtYW51YWxseSB3aGVuIGNoZWNraW5nIGZvciBhbiBlcnJvciBmcm9tIGFuIGF1dGggcmVkaXJlY3QuXG4gICAqIEBwYXJhbSBvbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgT3B0aW9uYWwgY2FsbGJhY2sgdG8gc2V0IGJlZm9yZSBpbml0aWFsaXphdGlvbiBzdGFydHNcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoZnVuYz86IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+KTogUHJvbWlzZTx7IGVycm9yOiBFcnJvciB8IG51bGwgfT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuICAgIH1cblxuICAgIGlmIChmdW5jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVByb21pc2UgPSBmdW5jXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVByb21pc2UgPSAoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2luaXRpYWxpemUoKSkpKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCBmaXJzdFxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2VcbiAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykpXG4gIH1cblxuICAvKipcbiAgICogc2V0IGNyZWRlbnRpYWxzIGZyb20gYWNjZXNzS2V5XG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscykge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QWNjZXNzVG9rZW4gcmV0dXJuIGEgdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXQgZmlyc3RcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgLy8gbm9kZSBzZGsg5Zy65pmv5LiL55u05o6l6L+U5ZueYWNjZXNzX3Rva2VuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5zY29wZSA9PT0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pXG4gICAgfVxuICAgIGlmIChjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbilcbiAgICB9XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHsgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgaHR0cCBsaWtlIHNpbXBsZSBmZXRjaCBhcGksIGV4cDpyZXF1ZXN0KCcvdjEvdXNlci9tZScsIHt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogQXV0aENsaWVudFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7IC4uLm9wdGlvbnMuaGVhZGVycywgW3RoaXMuaTE4bj8uTEFOR19IRUFERVJfS0VZXTogdGhpcy5pMThuPy5sYW5nIH1cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aEJhc2ljQXV0aCAmJiB0aGlzLmJhc2ljQXV0aCkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmJhc2ljQXV0aFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAvLyBVc2UgY3VzdG9tIGdldENyZWRlbnRpYWxzIGZ1bmN0aW9uIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIGRlZmF1bHRcbiAgICAgIC8vIEN1c3RvbSBnZXRDcmVkZW50aWFscyBhdm9pZHMgZGVmYXVsdCBnZXRDcmVkZW50aWFscygpIGNhbGwgd2hpY2ggbWF5IGNhdXNlIGRlYWRsb2NrIGR1cmluZyBpbml0aWFsaXphdGlvblxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBvcHRpb25zLmdldENyZWRlbnRpYWxzID8gYXdhaXQgb3B0aW9ucy5nZXRDcmVkZW50aWFscygpIDogYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5JblVSTCkge1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgdXJsICs9ICc/J1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cmwgKz0gYGFjY2Vzc190b2tlbj0ke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHtjcmVkZW50aWFscy50b2tlbl90eXBlfSAke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2xpZW50SWQgJiYgdXJsLmluZGV4T2YoJ2NsaWVudF9pZCcpIDwgMCkge1xuICAgICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA8IDAgPyAnPycgOiAnJidcbiAgICAgICAgdXJsICs9IGBjbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYXBpT3JpZ2lufSR7dGhpcy5hcGlQYXRofSR7dXJsfWBcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQgfHwgdGhpcy51c2VXeENsb3VkKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISEocmVzcG9uc2UgYXMgYW55KT8uY29kZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIGVycm9yOiAocmVzcG9uc2UgYXMgYW55KS5jb2RlLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IChyZXNwb25zZSBhcyBhbnkpLm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3BvbnNlRXJyb3IucmVxdWVzdElkID0gcmVzcG9uc2VFcnJvci5yZXF1ZXN0SWQgfHwgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdIHx8ICcnXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICBpZiAob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgJiYgcmVzcG9uc2VFcnJvciAmJiByZXNwb25zZUVycm9yLmVycm9yID09PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lID09PSByZXRyeSB8fCAhcmVzcG9uc2VFcnJvciB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoT0F1dGgyQ2xpZW50LnJldHJ5SW50ZXJ2YWwpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICB0cnkge1xuICAgICAgbGV0IHVzZXJBZ2VudCA9ICcnXG4gICAgICB0cnkge1xuICAgICAgICB1c2VyQWdlbnQgPSBhd2FpdCB3eC5nZXRSZW5kZXJlclVzZXJBZ2VudCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgIGNvbnN0IHsgcmVzdWx0OiByZXNwb25zZVJlc3VsdCB9ID0gYXdhaXQgdGhpcy53eENsb3VkLmNhbGxGdW5jdGlvbih7XG4gICAgICAgIG5hbWU6ICdodHRwT3ZlckNhbGxGdW5jdGlvbicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBvcmlnaW46ICdodHRwczovL3NlcnZpY2V3ZWNoYXQuY29tJyxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdXNlckFnZW50LFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3BvbnNlUmVzdWx0Py5ib2R5Py5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHJlc3BvbnNlRXJyb3IgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBSZXNwb25zZUVycm9yXG4gICAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gZ2V0UGF0aE5hbWUodXJsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgVFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JfdXJpOiBnZXRQYXRoTmFtZSh1cmwpLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IGZpcnN0XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuXG4gICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB0aGlzLl9nZXRDcmVkZW50aWFscygpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOW6n+W8g+aOpeWPo++8jOWLv+eUqC4g5aaC6ZyA6I635Y+W5Yet6K+B5L+h5oGv6K+35L2/55SoIGdldENyZWRlbnRpYWxzIOaWueazlVxuICAgKi9cbiAgcHVibGljIGdldENyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc0FzeW5jKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBtc2cgPSAnY3JlZGVudGlhbHMgbm90IGZvdW5kJ1xuICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgbXNnID0gJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCdcbiAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscywgb3B0aW9ucz86IHsgdGhyb3dFcnJvcj86IGJvb2xlYW4gfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXQgZmlyc3RcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG5cbiAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHRoaXMuX3JlZnJlc2hUb2tlbihjcmVkZW50aWFscywgb3B0aW9ucykpXG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgcmVmcmVzaCB0b2tlbiBtZXRob2QgKGNhbGxlZCB3aXRoaW4gbG9jaylcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3JlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMsIG9wdGlvbnM/OiB7IHRocm93RXJyb3I/OiBib29sZWFuIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBub2RlIHNkayDlnLrmma/kuIvkuI3pnIDopoHliLfmlrAgdG9rZW5cbiAgICAgIGlmIChjcmVkZW50aWFscz8uc2NvcGUgPT09IERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgICB9XG5cbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG5cbiAgICAgICAgdGhpcy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5UT0tFTl9SRUZSRVNIRUQgfSlcblxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zPy50aHJvd0Vycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IuZXJyb3JfZGVzY3JpcHRpb25cbiAgICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2c6IGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uIH0pXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNMb2dpbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91c0xvZ2luJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jKGNyZWRlbnRpYWxzKVxuICAgICAgICBjcmVkZW50aWFscyA9IGMgfHwgKGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbihjcmVkZW50aWFscylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgY2hlY2tSZXRyeShyZXRyeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgaWYgKHR5cGVvZiByZXRyeSAhPT0gJ251bWJlcicgfHwgcmV0cnkgPCBPQXV0aDJDbGllbnQubWluUmV0cnkgfHwgcmV0cnkgPiBPQXV0aDJDbGllbnQubWF4UmV0cnkpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAnd3Jvbmcgb3B0aW9ucyBwYXJhbTogcmV0cnknLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH1cbiAgICByZXR1cm4gcmV0cnlcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgcmV0cnkgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeVxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbGVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRSZXRyeShyZXRyeTogbnVtYmVyLCBkZWZhdWx0VmFsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWxlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrUmV0cnkocmV0cnkpXG4gIH1cblxuICAvKipcbiAgICogU2xlZXAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9LCBtcylcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGFub255bW91cyBzaWduSW5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFub255bW91c1NpZ25JbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19hbm9ueW1vdXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLnNjb3BlICE9PSAnYW5vbnltb3VzJykge1xuICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignbm8gYW5vbnltb3VzIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdChBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB3aXRoQmFzaWNBdXRoOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmVmcmVzaCB0b2tlbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmMocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmIChyZWZyZXNoVG9rZW4gPT09IHVuZGVmaW5lZCB8fCByZWZyZXNoVG9rZW4gPT09ICcnKSB7XG4gICAgICBjb25zdCBtc2cgPSAncmVmcmVzaCB0b2tlbiBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuXG4gICAgbGV0IHVybDogc3RyaW5nID0gQXBpVXJscy5BVVRIX1RPS0VOX1VSTFxuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICB1cmwgPSBBcGlVcmxzVjIuQVVUSF9UT0tFTl9VUkxcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4geyAuLi5uZXdDcmVkZW50aWFscywgdmVyc2lvbjogY3JlZGVudGlhbHM/LnZlcnNpb24gfHwgJ3YxJyB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldmljZUlkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERldmljZUlkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGV2aWNlSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldmljZUlEXG4gICAgfVxuICAgIGxldCBkZXZpY2VJZDogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSlcbiAgICBpZiAoISh0eXBlb2YgZGV2aWNlSWQgPT09ICdzdHJpbmcnICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNiAmJiBkZXZpY2VJZC5sZW5ndGggPD0gNDgpKSB7XG4gICAgICBkZXZpY2VJZCA9IHV1aWR2NCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lLCBkZXZpY2VJZClcbiAgICB9XG4gICAgdGhpcy5kZXZpY2VJRCA9IGRldmljZUlkXG4gICAgcmV0dXJuIGRldmljZUlkXG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuQXV0aGVudGljYXRlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVyclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFQ+fVxuICAgKi9cbiAgcHJpdmF0ZSB1bkF1dGhlbnRpY2F0ZWRFcnJvcjxUPihlcnI/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyLFxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWJ1ZyBsb2dnaW5nIGhlbHBlclxuICAgKi9cbiAgcHJpdmF0ZSBfZGVidWcoLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2dEZWJ1Z01lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZygnW09BdXRoMkNsaWVudF0nLCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJTVBPUlRBTlQ6XG4gICAqIDEuIE5ldmVyIHRocm93IGluIHRoaXMgbWV0aG9kLCBhcyBpdCBpcyBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3JcbiAgICogMi4gTmV2ZXIgcmV0dXJuIGEgc2Vzc2lvbiBmcm9tIHRoaXMgbWV0aG9kIGFzIGl0IHdvdWxkIGJlIGNhY2hlZCBvdmVyXG4gICAqICAgIHRoZSB3aG9sZSBsaWZldGltZSBvZiB0aGUgY2xpZW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplKCk6IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gSWYgbm8gZ2V0SW5pdGlhbFNlc3Npb24gY2FsbGJhY2sgaXMgc2V0LCBub3RoaW5nIHRvIGRvXG4gICAgICBpZiAoIXRoaXMuZ2V0SW5pdGlhbFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ25vIGdldEluaXRpYWxTZXNzaW9uIGNhbGxiYWNrIHNldCwgc2tpcHBpbmcnKVxuICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdjYWxsaW5nIGdldEluaXRpYWxTZXNzaW9uIGNhbGxiYWNrJylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsU2Vzc2lvbigpXG5cbiAgICAgICAgaWYgKGRhdGE/LnNlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnc2Vzc2lvbiBvYnRhaW5lZCBmcm9tIGdldEluaXRpYWxTZXNzaW9uJywgZGF0YS5zZXNzaW9uKVxuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhkYXRhPy5zZXNzaW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW52b2tlIGNhbGxiYWNrIGZvciB1cHBlciBsYXllciB0byBoYW5kbGUgdXNlciBzdG9yYWdlXG4gICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIEJFRk9SRSBsb2NrIGlzIHJlbGVhc2VkIHNvIHVzZXIgc3RvcmFnZSBpcyBhdG9taWMgd2l0aCBzZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLm9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdjYWxsaW5nIG9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZCBjYWxsYmFjaycpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Jbml0aWFsU2Vzc2lvbk9idGFpbmVkKGRhdGEsIGVycm9yKVxuICAgICAgICAgIH0gY2F0Y2ggKGNhbGxiYWNrRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdlcnJvciBpbiBvbkluaXRpYWxTZXNzaW9uT2J0YWluZWQnLCBjYWxsYmFja0Vycm9yKVxuICAgICAgICAgICAgLy8gRG9uJ3QgZmFpbCBpbml0aWFsaXphdGlvbiBpZiBjYWxsYmFjayBmYWlsc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXJyb3IgZnJvbSBnZXRJbml0aWFsU2Vzc2lvbicsIGVycm9yKVxuICAgICAgICAgIHJldHVybiB7IGVycm9yIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXhjZXB0aW9uIGR1cmluZyBnZXRJbml0aWFsU2Vzc2lvbicsIGVycilcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICd1bmV4cGVjdGVkIGVycm9yJywgZXJyb3IpXG4gICAgICByZXR1cm4geyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ2VuZCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmVzIGEgZ2xvYmFsIGxvY2sgYmFzZWQgb24gdGhlIGNsaWVudCBJRC5cbiAgICogVGhpcyBlbnN1cmVzIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIGNhbiBtb2RpZnkgY3JlZGVudGlhbHMgYXQgYSB0aW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfYWNxdWlyZUxvY2s8Uj4oYWNxdWlyZVRpbWVvdXQ6IG51bWJlciwgZm46ICgpID0+IFByb21pc2U8Uj4pOiBQcm9taXNlPFI+IHtcbiAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdiZWdpbicsIGFjcXVpcmVUaW1lb3V0KVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmxvY2tBY3F1aXJlZCkge1xuICAgICAgICAvLyBMb2NrIGlzIGFscmVhZHkgYWNxdWlyZWQsIHF1ZXVlIHRoZSBvcGVyYXRpb25cbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMucGVuZGluZ0luTG9jay5sZW5ndGggPyB0aGlzLnBlbmRpbmdJbkxvY2tbdGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCAtIDFdIDogUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGxhc3RcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKVxuICAgICAgICB9KSgpXG5cbiAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmVzdWx0XG4gICAgICAgICAgfSBjYXRjaCAoX2U6IGFueSkge1xuICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLClcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG5cbiAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2tcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2FjcXVpcmluZyBsb2NrIGZvciBjbGllbnQnLCB0aGlzLmNsaWVudElkKVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IHRydWVcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmbigpXG5cbiAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmVzdWx0XG4gICAgICAgICAgfSBjYXRjaCAoX2U6IGFueSkge1xuICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLClcblxuICAgICAgICBhd2FpdCByZXN1bHRcblxuICAgICAgICAvLyBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSdzIG5vdGhpbmcgdG8gd2FpdCBvblxuICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHdhaXRPbiA9IFsuLi50aGlzLnBlbmRpbmdJbkxvY2tdXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod2FpdE9uKVxuICAgICAgICAgIHRoaXMucGVuZGluZ0luTG9jay5zcGxpY2UoMCwgd2FpdE9uLmxlbmd0aClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHRcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ3JlbGVhc2luZyBsb2NrIGZvciBjbGllbnQnLCB0aGlzLmNsaWVudElkKVxuICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2VuZCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBnZXQgY3JlZGVudGlhbHMgKGNhbGxlZCB3aXRoaW4gbG9jaylcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2dldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgLy8gbm9kZSBhZGFwdGVyIOWcuuaZr+S4i++8jHNjb3BlIOS4uiBERUZBVUxUX05PREVfQUNDRVNTX1NDT1BF77yM5LiN6ZyA6KaB5Yi35pawIHRva2VuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5zY29wZSA9PT0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSkge1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdjcmVkZW50aWFscyBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl9yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYW5vbnltb3VzJykge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnOiBlcnJvci5lcnJvcl9kZXNjcmlwdGlvbiB9KVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxufVxuIl19