appium 2.0.0-beta.25 → 2.0.0-beta.28

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 (191) hide show
  1. package/build/lib/appium.d.ts +215 -0
  2. package/build/lib/appium.d.ts.map +1 -0
  3. package/build/lib/appium.js +94 -101
  4. package/build/lib/cli/args.d.ts +20 -0
  5. package/build/lib/cli/args.d.ts.map +1 -0
  6. package/build/lib/cli/args.js +19 -39
  7. package/build/lib/cli/driver-command.d.ts +36 -0
  8. package/build/lib/cli/driver-command.d.ts.map +1 -0
  9. package/build/lib/cli/driver-command.js +10 -13
  10. package/build/lib/cli/extension-command.d.ts +345 -0
  11. package/build/lib/cli/extension-command.d.ts.map +1 -0
  12. package/build/lib/cli/extension-command.js +117 -94
  13. package/build/lib/cli/extension.d.ts +14 -0
  14. package/build/lib/cli/extension.d.ts.map +1 -0
  15. package/build/lib/cli/extension.js +14 -22
  16. package/build/lib/cli/parser.d.ts +79 -0
  17. package/build/lib/cli/parser.d.ts.map +1 -0
  18. package/build/lib/cli/parser.js +9 -19
  19. package/build/lib/cli/plugin-command.d.ts +39 -0
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  21. package/build/lib/cli/plugin-command.js +9 -14
  22. package/build/lib/cli/utils.d.ts +29 -0
  23. package/build/lib/cli/utils.d.ts.map +1 -0
  24. package/build/lib/cli/utils.js +2 -4
  25. package/build/lib/config-file.d.ts +100 -0
  26. package/build/lib/config-file.d.ts.map +1 -0
  27. package/build/lib/config-file.js +2 -4
  28. package/build/lib/config.d.ts +40 -0
  29. package/build/lib/config.d.ts.map +1 -0
  30. package/build/lib/config.js +8 -7
  31. package/build/lib/constants.d.ts +48 -0
  32. package/build/lib/constants.d.ts.map +1 -0
  33. package/build/lib/constants.js +60 -0
  34. package/build/lib/extension/driver-config.d.ts +84 -0
  35. package/build/lib/extension/driver-config.d.ts.map +1 -0
  36. package/build/lib/extension/driver-config.js +190 -0
  37. package/build/lib/extension/extension-config.d.ts +170 -0
  38. package/build/lib/extension/extension-config.d.ts.map +1 -0
  39. package/build/lib/extension/extension-config.js +297 -0
  40. package/build/lib/extension/index.d.ts +39 -0
  41. package/build/lib/extension/index.d.ts.map +1 -0
  42. package/build/lib/extension/index.js +77 -0
  43. package/build/lib/extension/manifest.d.ts +174 -0
  44. package/build/lib/extension/manifest.d.ts.map +1 -0
  45. package/build/lib/extension/manifest.js +246 -0
  46. package/build/lib/extension/package-changed.d.ts +11 -0
  47. package/build/lib/extension/package-changed.d.ts.map +1 -0
  48. package/build/lib/extension/package-changed.js +68 -0
  49. package/build/lib/extension/plugin-config.d.ts +62 -0
  50. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  51. package/build/lib/extension/plugin-config.js +87 -0
  52. package/build/lib/grid-register.d.ts +10 -0
  53. package/build/lib/grid-register.d.ts.map +1 -0
  54. package/build/lib/grid-register.js +2 -4
  55. package/build/lib/logger.d.ts +3 -0
  56. package/build/lib/logger.d.ts.map +1 -0
  57. package/build/lib/logger.js +2 -4
  58. package/build/lib/logsink.d.ts +4 -0
  59. package/build/lib/logsink.d.ts.map +1 -0
  60. package/build/lib/logsink.js +2 -4
  61. package/build/lib/main.d.ts +51 -0
  62. package/build/lib/main.d.ts.map +1 -0
  63. package/build/lib/main.js +40 -68
  64. package/build/lib/schema/arg-spec.d.ts +143 -0
  65. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  66. package/build/lib/schema/arg-spec.js +11 -14
  67. package/build/lib/schema/cli-args.d.ts +19 -0
  68. package/build/lib/schema/cli-args.d.ts.map +1 -0
  69. package/build/lib/schema/cli-args.js +2 -4
  70. package/build/lib/schema/cli-transformers.d.ts +5 -0
  71. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  72. package/build/lib/schema/cli-transformers.js +2 -4
  73. package/build/lib/schema/index.d.ts +3 -0
  74. package/build/lib/schema/index.d.ts.map +1 -0
  75. package/build/lib/schema/index.js +2 -4
  76. package/build/lib/schema/keywords.d.ts +24 -0
  77. package/build/lib/schema/keywords.d.ts.map +1 -0
  78. package/build/lib/schema/keywords.js +2 -4
  79. package/build/lib/schema/schema.d.ts +259 -0
  80. package/build/lib/schema/schema.d.ts.map +1 -0
  81. package/build/lib/schema/schema.js +57 -39
  82. package/build/lib/utils.d.ts +66 -0
  83. package/build/lib/utils.d.ts.map +1 -0
  84. package/build/lib/utils.js +6 -35
  85. package/build/tsconfig.tsbuildinfo +1 -0
  86. package/lib/appium.js +188 -117
  87. package/lib/cli/args.js +19 -24
  88. package/lib/cli/driver-command.js +19 -8
  89. package/lib/cli/extension-command.js +314 -184
  90. package/lib/cli/extension.js +18 -16
  91. package/lib/cli/parser.js +7 -16
  92. package/lib/cli/plugin-command.js +16 -7
  93. package/lib/cli/utils.js +1 -1
  94. package/lib/config-file.js +6 -7
  95. package/lib/config.js +17 -12
  96. package/lib/constants.js +78 -0
  97. package/lib/extension/driver-config.js +249 -0
  98. package/lib/extension/extension-config.js +458 -0
  99. package/lib/extension/index.js +102 -0
  100. package/lib/extension/manifest.js +486 -0
  101. package/lib/extension/package-changed.js +63 -0
  102. package/lib/extension/plugin-config.js +113 -0
  103. package/lib/grid-register.js +4 -4
  104. package/lib/logsink.js +4 -0
  105. package/lib/main.js +54 -92
  106. package/lib/schema/arg-spec.js +11 -7
  107. package/lib/schema/cli-args.js +1 -1
  108. package/lib/schema/cli-transformers.js +0 -1
  109. package/lib/schema/keywords.js +1 -2
  110. package/lib/schema/schema.js +62 -31
  111. package/lib/utils.js +48 -45
  112. package/package.json +30 -24
  113. package/{postinstall.js → scripts/postinstall.js} +1 -1
  114. package/types/appium-manifest.d.ts +61 -0
  115. package/types/cli.d.ts +134 -0
  116. package/types/extension.d.ts +56 -0
  117. package/types/external-manifest.d.ts +58 -0
  118. package/types/index.d.ts +7 -0
  119. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  120. package/build/check-npm-pack-files.js +0 -23
  121. package/build/commands-yml/parse.js +0 -319
  122. package/build/commands-yml/validator.js +0 -130
  123. package/build/index.js +0 -19
  124. package/build/lib/appium-config.schema.json +0 -0
  125. package/build/lib/cli/npm.js +0 -220
  126. package/build/lib/driver-config.js +0 -100
  127. package/build/lib/drivers.js +0 -100
  128. package/build/lib/ext-config-io.js +0 -165
  129. package/build/lib/extension-config.js +0 -320
  130. package/build/lib/plugin-config.js +0 -69
  131. package/build/lib/plugins.js +0 -18
  132. package/build/lib/schema/appium-config-schema.js +0 -253
  133. package/build/postinstall.js +0 -90
  134. package/build/test/cli/cli-e2e-specs.js +0 -221
  135. package/build/test/cli/cli-helpers.js +0 -86
  136. package/build/test/cli/cli-specs.js +0 -71
  137. package/build/test/cli/fixtures/test-driver/package.json +0 -27
  138. package/build/test/cli/schema-args-specs.js +0 -48
  139. package/build/test/cli/schema-e2e-specs.js +0 -47
  140. package/build/test/config-e2e-specs.js +0 -112
  141. package/build/test/config-file-e2e-specs.js +0 -191
  142. package/build/test/config-file-specs.js +0 -281
  143. package/build/test/config-specs.js +0 -258
  144. package/build/test/driver-e2e-specs.js +0 -435
  145. package/build/test/driver-specs.js +0 -386
  146. package/build/test/ext-config-io-specs.js +0 -181
  147. package/build/test/extension-config-specs.js +0 -365
  148. package/build/test/fixtures/allow-feat.txt +0 -5
  149. package/build/test/fixtures/caps.json +0 -3
  150. package/build/test/fixtures/config/allow-insecure.txt +0 -3
  151. package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
  152. package/build/test/fixtures/config/appium.config.bad.json +0 -32
  153. package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
  154. package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
  155. package/build/test/fixtures/config/appium.config.good.js +0 -40
  156. package/build/test/fixtures/config/appium.config.good.json +0 -33
  157. package/build/test/fixtures/config/appium.config.good.yaml +0 -30
  158. package/build/test/fixtures/config/appium.config.invalid.json +0 -31
  159. package/build/test/fixtures/config/appium.config.security-array.json +0 -5
  160. package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
  161. package/build/test/fixtures/config/appium.config.security-path.json +0 -5
  162. package/build/test/fixtures/config/driver-fake.config.json +0 -8
  163. package/build/test/fixtures/config/nodeconfig.json +0 -3
  164. package/build/test/fixtures/config/plugin-fake.config.json +0 -0
  165. package/build/test/fixtures/default-args.js +0 -35
  166. package/build/test/fixtures/deny-feat.txt +0 -5
  167. package/build/test/fixtures/driver.schema.js +0 -20
  168. package/build/test/fixtures/extensions.yaml +0 -27
  169. package/build/test/fixtures/flattened-schema.js +0 -532
  170. package/build/test/fixtures/plugin.schema.js +0 -20
  171. package/build/test/fixtures/schema-with-extensions.js +0 -28
  172. package/build/test/grid-register-specs.js +0 -74
  173. package/build/test/helpers.js +0 -75
  174. package/build/test/logger-specs.js +0 -76
  175. package/build/test/npm-specs.js +0 -20
  176. package/build/test/parser-specs.js +0 -319
  177. package/build/test/plugin-e2e-specs.js +0 -316
  178. package/build/test/schema/arg-spec-specs.js +0 -70
  179. package/build/test/schema/cli-args-specs.js +0 -408
  180. package/build/test/schema/schema-specs.js +0 -407
  181. package/build/test/utils-specs.js +0 -288
  182. package/lib/cli/npm.js +0 -251
  183. package/lib/driver-config.js +0 -101
  184. package/lib/drivers.js +0 -84
  185. package/lib/ext-config-io.js +0 -287
  186. package/lib/extension-config.js +0 -366
  187. package/lib/plugin-config.js +0 -63
  188. package/lib/plugins.js +0 -13
  189. package/lib/schema/appium-config-schema.js +0 -287
  190. package/types/appium-config.d.ts +0 -197
  191. package/types/types.d.ts +0 -206
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Thrown when Appium tried to proxy a command using a driver's `proxyCommand` method but the
3
+ * method did not exist
4
+ */
5
+ export class NoDriverProxyCommandError extends Error {
6
+ constructor();
7
+ /**
8
+ * @type {Readonly<string>}
9
+ */
10
+ code: Readonly<string>;
11
+ }
12
+ export type ExternalDriver = import('@appium/types').ExternalDriver;
13
+ export type W3CCapabilities = import('@appium/types').W3CCapabilities;
14
+ export type DriverData = import('@appium/types').DriverData;
15
+ export type DriverOpts = import('@appium/types').DriverOpts;
16
+ export type Constraints = import('@appium/types').Constraints;
17
+ export type AppiumServer = import('@appium/types').AppiumServer;
18
+ export type ExtensionType = import('../types').ExtensionType;
19
+ export type PluginClass = import('../types/extension').PluginClass;
20
+ export type DriverConfig = import('./extension/driver-config').DriverConfig;
21
+ /**
22
+ * Used by {@linkcode AppiumDriver.createSession } and {@linkcode AppiumDriver.deleteSession } to describe
23
+ * result.
24
+ */
25
+ export type SessionHandlerResult<V> = {
26
+ value?: V | undefined;
27
+ error?: Error | undefined;
28
+ protocol?: string | undefined;
29
+ };
30
+ export type SessionHandler = import('@appium/types').SessionHandler<SessionHandlerResult<any[]>, SessionHandlerResult<void>>;
31
+ /**
32
+ * @implements {SessionHandler}
33
+ */
34
+ export class AppiumDriver extends DriverCore implements SessionHandler {
35
+ /**
36
+ * @param {DriverOpts} opts
37
+ */
38
+ constructor(opts: DriverOpts);
39
+ /**
40
+ * Access to sessions list must be guarded with a Semaphore, because
41
+ * it might be changed by other async calls at any time
42
+ * It is not recommended to access this property directly from the outside
43
+ * @type {Record<string,ExternalDriver>}
44
+ */
45
+ sessions: Record<string, ExternalDriver>;
46
+ /**
47
+ * Access to pending drivers list must be guarded with a Semaphore, because
48
+ * it might be changed by other async calls at any time
49
+ * It is not recommended to access this property directly from the outside
50
+ * @type {Record<string,ExternalDriver[]>}
51
+ */
52
+ pendingDrivers: Record<string, ExternalDriver[]>;
53
+ /**
54
+ * List of active plugins
55
+ * @type {PluginClass[]}
56
+ */
57
+ pluginClasses: PluginClass[];
58
+ /**
59
+ * map of sessions to actual plugin instances per session
60
+ * @type {Record<string,InstanceType<PluginClass>[]>}
61
+ */
62
+ sessionPlugins: Record<string, InstanceType<PluginClass>[]>;
63
+ /**
64
+ * some commands are sessionless, so we need a set of plugins for them
65
+ * @type {InstanceType<PluginClass>[]}
66
+ */
67
+ sessionlessPlugins: InstanceType<PluginClass>[];
68
+ /** @type {DriverConfig} */
69
+ driverConfig: DriverConfig;
70
+ /** @type {AppiumServer} */
71
+ server: AppiumServer;
72
+ desiredCapConstraints: Readonly<import("@appium/types").Constraints>;
73
+ args: {
74
+ address: string;
75
+ allowCors: boolean;
76
+ allowInsecure: import("@appium/types").AllowInsecureConfig;
77
+ basePath: string;
78
+ callbackAddress: string | undefined;
79
+ callbackPort: number;
80
+ debugLogSpacing: boolean;
81
+ defaultCapabilities: import("@appium/types").DefaultCapabilitiesConfig | undefined;
82
+ denyInsecure: import("@appium/types").DenyInsecureConfig;
83
+ driver: import("@appium/types").DriverConfig | undefined;
84
+ keepAliveTimeout: number;
85
+ localTimezone: boolean;
86
+ logFile: string | undefined;
87
+ logFilters: import("@appium/types").LogFiltersConfig | undefined;
88
+ loglevel: import("@appium/types").LogLevelConfig;
89
+ logNoColors: boolean;
90
+ logTimestamp: boolean;
91
+ longStacktrace: boolean;
92
+ noPermsCheck: boolean;
93
+ nodeconfig: import("@appium/types").NodeconfigConfig | undefined;
94
+ plugin: import("@appium/types").PluginConfig | undefined;
95
+ port: number;
96
+ relaxedSecurityEnabled: boolean;
97
+ sessionOverride: boolean;
98
+ strictCaps: boolean;
99
+ tmpDir: string | undefined;
100
+ traceDir: string | undefined;
101
+ useDrivers: import("@appium/types").UseDriversConfig;
102
+ usePlugins: import("@appium/types").UsePluginsConfig;
103
+ webhook: string | undefined;
104
+ };
105
+ sessionExists(sessionId: any): boolean;
106
+ driverForSession(sessionId: any): import("@appium/types").ExternalDriver;
107
+ getStatus(): Promise<{
108
+ build: import("../types").BuildInfo;
109
+ }>;
110
+ getSessions(): Promise<{
111
+ id: string;
112
+ capabilities: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
113
+ [x: string]: any;
114
+ }> | undefined;
115
+ }[]>;
116
+ printNewSessionAnnouncement(driverName: any, driverVersion: any, driverBaseVersion: any): void;
117
+ /**
118
+ * Validate and assign CLI args for a driver or plugin
119
+ *
120
+ * If the extension has provided a schema, validation has already happened.
121
+ *
122
+ * Any arg which is equal to its default value will not be assigned to the extension.
123
+ * @param {ExtensionType} extType 'driver' or 'plugin'
124
+ * @param {string} extName the name of the extension
125
+ * @param {Object} extInstance the driver or plugin instance
126
+ */
127
+ assignCliArgsToExtension(extType: ExtensionType, extName: string, extInstance: any): void;
128
+ /**
129
+ * Create a new session
130
+ * @param {W3CCapabilities} jsonwpCaps JSONWP formatted desired capabilities
131
+ * @param {W3CCapabilities} reqCaps Required capabilities (JSONWP standard)
132
+ * @param {W3CCapabilities} w3cCapabilities W3C capabilities
133
+ * @param {import('@appium/types').DriverData[]} [driverData]
134
+ */
135
+ createSession(jsonwpCaps: W3CCapabilities, reqCaps: W3CCapabilities, w3cCapabilities: W3CCapabilities, driverData?: import("@appium/types").DriverData[] | undefined): Promise<{
136
+ protocol: any;
137
+ error: any;
138
+ value?: undefined;
139
+ } | {
140
+ protocol: any;
141
+ value: any[];
142
+ error?: undefined;
143
+ }>;
144
+ attachUnexpectedShutdownHandler(driver: any, innerSessionId: any): void;
145
+ /**
146
+ *
147
+ * @param {import('../types/extension').DriverClass} InnerDriver
148
+ * @returns {Promise<DriverData[]>}}
149
+ */
150
+ curSessionDataForDriver(InnerDriver: BaseDriverBase<import("@appium/types").ExternalDriver, import("../types").ExternalDriverStatic>): Promise<DriverData[]>;
151
+ /**
152
+ * @param {string} sessionId
153
+ */
154
+ deleteSession(sessionId: string): Promise<{
155
+ protocol: undefined;
156
+ value: void;
157
+ error?: undefined;
158
+ } | {
159
+ protocol: undefined;
160
+ error: any;
161
+ value?: undefined;
162
+ }>;
163
+ deleteAllSessions(opts?: {}): Promise<void>;
164
+ /**
165
+ * Get the appropriate plugins for a session (or sessionless plugins)
166
+ *
167
+ * @param {?string} sessionId - the sessionId (or null) to use to find plugins
168
+ * @returns {Array} - array of plugin instances
169
+ */
170
+ pluginsForSession(sessionId?: string | null): any[];
171
+ /**
172
+ * To get plugins for a command, we either get the plugin instances associated with the
173
+ * particular command's session, or in the case of sessionless plugins, pull from the set of
174
+ * plugin instances reserved for sessionless commands (and we lazily create plugin instances on
175
+ * first use)
176
+ *
177
+ * @param {string} cmd - the name of the command to find a plugin to handle
178
+ * @param {?string} sessionId - the particular session for which to find a plugin, or null if
179
+ * sessionless
180
+ */
181
+ pluginsToHandleCmd(cmd: string, sessionId?: string | null): any[];
182
+ createPluginInstances(): import("../types").PluginProto[];
183
+ /**
184
+ *
185
+ * @param {string} cmd
186
+ * @param {...any} args
187
+ * @returns {Promise<{value: any, error?: Error, protocol: string} | import('type-fest').AsyncReturnType<import('@appium/types').Driver['executeCommand']>>}
188
+ */
189
+ executeCommand(cmd: string, ...args: any[]): Promise<any>;
190
+ wrapCommandWithPlugins({ driver, cmd, args, next, cmdHandledBy, plugins }: {
191
+ driver: any;
192
+ cmd: any;
193
+ args: any;
194
+ next: any;
195
+ cmdHandledBy: any;
196
+ plugins: any;
197
+ }): any;
198
+ logPluginHandlerReport(plugins: any, { cmd, cmdHandledBy }: {
199
+ cmd: any;
200
+ cmdHandledBy: any;
201
+ }): void;
202
+ executeWrappedCommand({ wrappedCmd, protocol }: {
203
+ wrappedCmd: any;
204
+ protocol: any;
205
+ }): Promise<{
206
+ value: any;
207
+ error: any;
208
+ protocol: any;
209
+ }>;
210
+ proxyActive(sessionId: any): boolean;
211
+ getProxyAvoidList(sessionId: any): [string, RegExp][];
212
+ canProxy(sessionId: any): boolean;
213
+ }
214
+ import { DriverCore } from "@appium/base-driver";
215
+ //# sourceMappingURL=appium.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appium.d.ts","sourceRoot":"","sources":["../../lib/appium.js"],"names":[],"mappings":"AAktBA;;;GAGG;AACH;IAME,cAKC;IAVD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEgB;CAQ3C;6BAKY,OAAO,eAAe,EAAE,cAAc;8BACtC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;4BACpC,OAAO,UAAU,EAAE,aAAa;0BAChC,OAAO,oBAAoB,EAAE,WAAW;2BACxC,OAAO,2BAA2B,EAAE,YAAY;;;;;;;;;;6BAchD,OAAO,eAAe,EAAE,cAAc,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAC,qBAAqB,IAAI,CAAC,CAAC;AAhuB3G;;GAEG;AACH;IAgDE;;OAEG;IACH,kBAFW,UAAU,EAuBpB;IAvED;;;;;OAKG;IACH,UAFU,OAAO,MAAM,EAAC,cAAc,CAAC,CAEzB;IAEd;;;;;OAKG;IACH,gBAFU,OAAO,MAAM,EAAC,cAAc,EAAE,CAAC,CAErB;IASpB;;;OAGG;IACH,eAFU,WAAW,EAAE,CAEJ;IAEnB;;;OAGG;IACH,gBAFU,OAAO,MAAM,EAAC,aAAa,WAAW,CAAC,EAAE,CAAC,CAEhC;IAEpB;;;OAGG;IACH,oBAFU,aAAa,WAAW,CAAC,EAAE,CAEb;IAExB,2BAA2B;IAC3B,cADW,YAAY,CACV;IAEb,2BAA2B;IAC3B,QADW,YAAY,CAChB;IAgBL,qEAAyD;IAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAqB;IA6BvB,uCAGC;IAED,yEAEC;IAED;;OAIC;IAED;;;;;SAIC;IAED,+FAcC;IAED;;;;;;;;;OASG;IACH,kCAJW,aAAa,WACb,MAAM,0BAchB;IAED;;;;;;OAMG;IACH,0BALW,eAAe,WACf,eAAe,mBACf,eAAe;;;;;;;;OAuJzB;IAED,wEA8BC;IAED;;;;OAIG;IACH,uIAFa,QAAQ,UAAU,EAAE,CAAC,CAejC;IAED;;OAEG;IACH,yBAFW,MAAM;;;;;;;;OAwChB;IAED,4CAsBC;IAED;;;;;OAKG;IACH,8BAHY,MAAM,gBAejB;IAED;;;;;;;;;OASG;IACH,wBAJW,MAAM,cACL,MAAM,gBAQjB;IAED,0DAOC;IAED;;;;;OAKG;IACH,oBAJW,MAAM,WACF,GAAG,kBAuHjB;IAED;;;;;;;YAuBC;IAED;;;aAkBC;IAED;;;;;;;OAsBC;IAED,qCAGC;IAED,sDAGC;IAED,kCAGC;CACF"}