@openmeter/sdk 1.0.0-beta.23 → 1.0.0-beta.230

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 (165) hide show
  1. package/README.md +234 -146
  2. package/dist/cjs/index.cjs +18 -0
  3. package/dist/cjs/index.cjs.map +1 -0
  4. package/dist/cjs/index.d.cts +1 -0
  5. package/dist/cjs/src/client/addons.cjs +105 -0
  6. package/dist/cjs/src/client/addons.cjs.map +1 -0
  7. package/dist/cjs/src/client/addons.d.cts +152 -0
  8. package/dist/cjs/src/client/apps.cjs +247 -0
  9. package/dist/cjs/src/client/apps.cjs.map +1 -0
  10. package/dist/cjs/src/client/apps.d.cts +327 -0
  11. package/dist/cjs/src/client/billing.cjs +375 -0
  12. package/dist/cjs/src/client/billing.cjs.map +1 -0
  13. package/dist/cjs/src/client/billing.d.cts +563 -0
  14. package/dist/cjs/src/client/common.cjs +47 -0
  15. package/dist/cjs/src/client/common.cjs.map +1 -0
  16. package/dist/cjs/src/client/common.d.cts +30 -0
  17. package/dist/cjs/src/client/customers.cjs +469 -0
  18. package/dist/cjs/src/client/customers.cjs.map +1 -0
  19. package/dist/cjs/src/client/customers.d.cts +620 -0
  20. package/dist/cjs/src/client/debug.cjs +27 -0
  21. package/dist/cjs/src/client/debug.cjs.map +1 -0
  22. package/dist/cjs/src/client/debug.d.cts +17 -0
  23. package/dist/cjs/src/client/entitlements.cjs +372 -0
  24. package/dist/cjs/src/client/entitlements.cjs.map +1 -0
  25. package/dist/cjs/src/client/entitlements.d.cts +670 -0
  26. package/dist/cjs/src/client/events.cjs +113 -0
  27. package/dist/cjs/src/client/events.cjs.map +1 -0
  28. package/dist/cjs/src/client/events.d.cts +48 -0
  29. package/dist/cjs/src/client/features.cjs +78 -0
  30. package/dist/cjs/src/client/features.cjs.map +1 -0
  31. package/dist/cjs/src/client/features.d.cts +90 -0
  32. package/dist/cjs/src/client/index.cjs +122 -0
  33. package/dist/cjs/src/client/index.cjs.map +1 -0
  34. package/dist/cjs/src/client/index.d.cts +54 -0
  35. package/dist/cjs/src/client/info.cjs +42 -0
  36. package/dist/cjs/src/client/info.cjs.map +1 -0
  37. package/dist/cjs/src/client/info.d.cts +34 -0
  38. package/dist/cjs/src/client/meters.cjs +160 -0
  39. package/dist/cjs/src/client/meters.cjs.map +1 -0
  40. package/dist/cjs/src/client/meters.d.cts +220 -0
  41. package/dist/cjs/src/client/notifications.cjs +269 -0
  42. package/dist/cjs/src/client/notifications.cjs.map +1 -0
  43. package/dist/cjs/src/client/notifications.d.cts +412 -0
  44. package/dist/cjs/src/client/plans.cjs +204 -0
  45. package/dist/cjs/src/client/plans.cjs.map +1 -0
  46. package/dist/cjs/src/client/plans.d.cts +252 -0
  47. package/dist/cjs/src/client/portal.cjs +55 -0
  48. package/dist/cjs/src/client/portal.cjs.map +1 -0
  49. package/dist/cjs/src/client/portal.d.cts +48 -0
  50. package/dist/cjs/src/client/schemas.cjs +3 -0
  51. package/dist/cjs/src/client/schemas.cjs.map +1 -0
  52. package/dist/cjs/src/client/schemas.d.cts +28002 -0
  53. package/dist/cjs/src/client/subjects.cjs +76 -0
  54. package/dist/cjs/src/client/subjects.cjs.map +1 -0
  55. package/dist/cjs/src/client/subjects.d.cts +79 -0
  56. package/dist/cjs/src/client/subscription-addons.cjs +70 -0
  57. package/dist/cjs/src/client/subscription-addons.cjs.map +1 -0
  58. package/dist/cjs/src/client/subscription-addons.d.cts +123 -0
  59. package/dist/cjs/src/client/subscriptions.cjs +132 -0
  60. package/dist/cjs/src/client/subscriptions.cjs.map +1 -0
  61. package/dist/cjs/src/client/subscriptions.d.cts +180 -0
  62. package/dist/cjs/src/client/utils.cjs +67 -0
  63. package/dist/cjs/src/client/utils.cjs.map +1 -0
  64. package/dist/cjs/src/client/utils.d.cts +12 -0
  65. package/dist/cjs/src/portal/index.cjs +89 -0
  66. package/dist/cjs/src/portal/index.cjs.map +1 -0
  67. package/dist/cjs/src/portal/index.d.cts +43 -0
  68. package/dist/cjs/src/react/context.cjs +35 -0
  69. package/dist/cjs/src/react/context.cjs.map +1 -0
  70. package/dist/cjs/src/react/context.d.cts +9 -0
  71. package/dist/cjs/src/zod/index.cjs +13679 -0
  72. package/dist/cjs/src/zod/index.cjs.map +1 -0
  73. package/dist/cjs/src/zod/index.d.cts +6360 -0
  74. package/dist/index.d.ts +1 -14
  75. package/dist/index.js +2 -15
  76. package/dist/index.js.map +1 -0
  77. package/dist/src/client/addons.d.ts +152 -0
  78. package/dist/src/client/addons.js +101 -0
  79. package/dist/src/client/addons.js.map +1 -0
  80. package/dist/src/client/apps.d.ts +327 -0
  81. package/dist/src/client/apps.js +240 -0
  82. package/dist/src/client/apps.js.map +1 -0
  83. package/dist/src/client/billing.d.ts +563 -0
  84. package/dist/src/client/billing.js +368 -0
  85. package/dist/src/client/billing.js.map +1 -0
  86. package/dist/src/client/common.d.ts +30 -0
  87. package/dist/src/client/common.js +42 -0
  88. package/dist/src/client/common.js.map +1 -0
  89. package/dist/src/client/customers.d.ts +620 -0
  90. package/dist/src/client/customers.js +461 -0
  91. package/dist/src/client/customers.js.map +1 -0
  92. package/dist/src/client/debug.d.ts +17 -0
  93. package/dist/src/client/debug.js +23 -0
  94. package/dist/src/client/debug.js.map +1 -0
  95. package/dist/src/client/entitlements.d.ts +670 -0
  96. package/dist/src/client/entitlements.js +365 -0
  97. package/dist/src/client/entitlements.js.map +1 -0
  98. package/dist/src/client/events.d.ts +48 -0
  99. package/dist/src/client/events.js +108 -0
  100. package/dist/src/client/events.js.map +1 -0
  101. package/dist/src/client/features.d.ts +90 -0
  102. package/dist/src/client/features.js +74 -0
  103. package/dist/src/client/features.js.map +1 -0
  104. package/dist/src/client/index.d.ts +54 -0
  105. package/dist/src/client/index.js +82 -0
  106. package/dist/src/client/index.js.map +1 -0
  107. package/dist/src/client/info.d.ts +34 -0
  108. package/dist/src/client/info.js +38 -0
  109. package/dist/src/client/info.js.map +1 -0
  110. package/dist/src/client/meters.d.ts +220 -0
  111. package/dist/src/client/meters.js +156 -0
  112. package/dist/src/client/meters.js.map +1 -0
  113. package/dist/src/client/notifications.d.ts +412 -0
  114. package/dist/src/client/notifications.js +262 -0
  115. package/dist/src/client/notifications.js.map +1 -0
  116. package/dist/src/client/plans.d.ts +252 -0
  117. package/dist/src/client/plans.js +199 -0
  118. package/dist/src/client/plans.js.map +1 -0
  119. package/dist/src/client/portal.d.ts +48 -0
  120. package/dist/src/client/portal.js +51 -0
  121. package/dist/src/client/portal.js.map +1 -0
  122. package/dist/src/client/schemas.d.ts +28002 -0
  123. package/dist/src/client/schemas.js +2 -0
  124. package/dist/src/client/schemas.js.map +1 -0
  125. package/dist/src/client/subjects.d.ts +79 -0
  126. package/dist/src/client/subjects.js +72 -0
  127. package/dist/src/client/subjects.js.map +1 -0
  128. package/dist/src/client/subscription-addons.d.ts +123 -0
  129. package/dist/src/client/subscription-addons.js +66 -0
  130. package/dist/src/client/subscription-addons.js.map +1 -0
  131. package/dist/src/client/subscriptions.d.ts +180 -0
  132. package/dist/src/client/subscriptions.js +128 -0
  133. package/dist/src/client/subscriptions.js.map +1 -0
  134. package/dist/src/client/utils.d.ts +12 -0
  135. package/dist/src/client/utils.js +61 -0
  136. package/dist/src/client/utils.js.map +1 -0
  137. package/dist/src/portal/index.d.ts +43 -0
  138. package/dist/src/portal/index.js +52 -0
  139. package/dist/src/portal/index.js.map +1 -0
  140. package/dist/src/react/context.d.ts +9 -0
  141. package/dist/src/react/context.js +16 -0
  142. package/dist/src/react/context.js.map +1 -0
  143. package/dist/src/zod/index.d.ts +6360 -0
  144. package/dist/src/zod/index.js +13615 -0
  145. package/dist/src/zod/index.js.map +1 -0
  146. package/dist/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +82 -40
  148. package/dist/clients/client.d.ts +0 -40
  149. package/dist/clients/client.js +0 -104
  150. package/dist/clients/event.d.ts +0 -79
  151. package/dist/clients/event.js +0 -53
  152. package/dist/clients/meter.d.ts +0 -71
  153. package/dist/clients/meter.js +0 -64
  154. package/dist/clients/portal.d.ts +0 -23
  155. package/dist/clients/portal.js +0 -37
  156. package/dist/next.d.ts +0 -15
  157. package/dist/next.js +0 -46
  158. package/dist/schemas/openapi.d.ts +0 -460
  159. package/dist/schemas/openapi.js +0 -5
  160. package/dist/test/agent.d.ts +0 -2
  161. package/dist/test/agent.js +0 -178
  162. package/dist/test/mocks.d.ts +0 -12
  163. package/dist/test/mocks.js +0 -32
  164. package/index.ts +0 -22
  165. package/next.ts +0 -76
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # OpenMeter Node SDK
1
+ # OpenMeter JavaScript SDK
2
2
 
3
3
  ## Install
4
4
 
@@ -6,174 +6,262 @@
6
6
  npm install --save @openmeter/sdk
7
7
  ```
8
8
 
9
- ## Example
9
+ ## Configuration for accessing the OpenMeter API
10
10
 
11
- ```ts
12
- import { OpenMeter, type Event } from '@openmeter/sdk'
13
-
14
- const openmeter = new OpenMeter({ baseUrl: 'http://localhost:8888' })
15
-
16
- // Ingesting an event
17
- const event: Event = {
18
- specversion: '1.0',
19
- id: 'id-1',
20
- source: 'my-app',
21
- type: 'my-type',
22
- subject: 'my-awesome-user-id',
23
- time: new Date(),
24
- data: {
25
- api_calls: 1,
26
- },
27
- }
28
- await openmeter.events.ingest(event)
29
-
30
- // Fetching a meter
31
- const meter = await openmeter.meters.get('m1')
32
- ```
33
-
34
- ## API
35
-
36
- ### Events
37
-
38
- #### ingest
11
+ To use the OpenMeter SDK on your backend, you need to configure `baseUrl` and `apiKey` for OpenMeter Cloud:
39
12
 
40
13
  ```ts
41
- import { type Event } from '@openmeter/sdk'
42
-
43
- const event: Event = {
44
- specversion: '1.0',
45
- id: 'id-1',
46
- source: 'my-app',
47
- type: 'my-type',
48
- subject: 'my-awesome-user-id',
49
- time: new Date(),
50
- data: {
51
- api_calls: 1,
52
- },
53
- }
54
- await openmeter.events.ingest(event)
55
- ```
14
+ import { OpenMeter } from '@openmeter/sdk'
56
15
 
57
- #### list
58
-
59
- Retrieve latest raw events. Useful for debugging.
60
-
61
- ```ts
62
- const events = await openmeter.events.list()
63
- ```
64
-
65
- ### Meters
66
-
67
- #### list
68
-
69
- List meters.
70
-
71
- ```ts
72
- const meters = await openmeter.meters.list()
16
+ const openmeter = new OpenMeter({
17
+ baseUrl: 'https://openmeter.cloud',
18
+ apiKey: 'om_...',
19
+ })
73
20
  ```
74
21
 
75
- #### get
22
+ ## Configuration for accessing the OpenMeter Portal API
76
23
 
77
- Get one meter by slug.
24
+ To use the OpenMeter Portal SDK on your frontend, you need to configure it use a portal token in your configuration:
78
25
 
79
26
  ```ts
80
- const meter = await openmeter.meters.get('m1')
81
- ```
82
-
83
- #### query
27
+ import { OpenMeter } from '@openmeter/sdk/portal'
84
28
 
85
- Query meter values.
86
-
87
- ```ts
88
- import { WindowSize } from '@openmeter/sdk'
89
-
90
- const values = await openmeter.meters.query('my-meter-slug', {
91
- subject: ['user-1'],
92
- groupBy: ['method', 'path'],
93
- from: new Date('2021-01-01'),
94
- to: new Date('2021-01-02'),
95
- windowSize: WindowSize.HOUR,
29
+ const openmeter = new OpenMeter({
30
+ baseUrl: 'https://openmeter.cloud',
31
+ portalToken: 'om_portal_...',
96
32
  })
97
33
  ```
98
34
 
99
- #### subjects
35
+ ## Configuration for accessing the OpenMeter React SDK
100
36
 
101
- List meter subjects.
37
+ To use the OpenMeter React SDK for the portal API, you need to configure a Portal Client and a React Context:
102
38
 
103
39
  ```ts
104
- const subjects = await openmeter.meters.subjects('my-meter-slug')
105
- ```
106
-
107
- ### Portal
40
+ import {
41
+ OpenMeter,
42
+ OpenMeterProvider,
43
+ useOpenMeter,
44
+ } from '@openmeter/sdk/react'
45
+
46
+ function App() {
47
+ // get portal token from your backend
48
+ const openmeter = new OpenMeter({
49
+ baseUrl: 'https://openmeter.cloud',
50
+ portalToken,
51
+ })
108
52
 
109
- #### createToken
53
+ return (
54
+ <OpenMeterProvider value={openmeter}>
55
+ <UsageComponent />
56
+ {/* ... */}
57
+ </OpenMeterProvider>
58
+ )
59
+ }
110
60
 
111
- Create subject specific tokens.
112
- Useful to build consumer dashboards.
61
+ function UsageComponent() {
62
+ // get openmeter client from context
63
+ const openmeter = useOpenMeter()
113
64
 
114
- ```ts
115
- const token = await openmeter.portal.createToken({ subject: 'customer-1' })
65
+ // ...
66
+ }
116
67
  ```
117
68
 
118
- #### invalidateTokens
119
-
120
- Invalidate portal tokens for all or specific subjects.
69
+ ## Ingest usage events
121
70
 
122
71
  ```ts
123
- await openmeter.portal.invalidateTokens()
124
- ```
125
-
126
- ## Helpers
127
-
128
- ### Vercel AI SDK / Next.js
129
-
130
- The OpenAI streaming API used by the Vercel AI SDK doesn't return token usage metadata by default.
131
- The OpenMeter `createOpenAIStreamCallback` helper function decorates the callback with a `onUsage`
132
- callback which you can use to report usage to OpenMeter.
72
+ // Ingest a single AI token usage event
73
+ await openmeter.events.ingest({
74
+ type: 'ai-tokens',
75
+ subject: 'customer-acme-corp',
76
+ id: 'evt_01234567', // optional: auto-generated if not provided
77
+ source: 'llm-api-gateway', // optional: defaults to '@openmeter/sdk'
78
+ time: new Date(), // optional: defaults to current time
79
+ data: {
80
+ model: 'gpt-4',
81
+ type: 'input',
82
+ tokens: 1250,
83
+ },
84
+ })
133
85
 
134
- ```ts
135
- import OpenAI from 'openai'
136
- import { OpenAIStream, StreamingTextResponse } from 'ai'
137
- import { createOpenAIStreamCallback } from '@openmeter/sdk'
138
-
139
- export async function POST(req: Request) {
140
- const { messages } = await req.json()
141
- const model = 'gpt-3.5-turbo'
142
-
143
- const response = await openai.chat.completions.create({
144
- model,
145
- messages,
146
- stream: true,
147
- })
86
+ // Ingest multiple events in a batch for better performance
87
+ await openmeter.events.ingest([
88
+ {
89
+ type: 'ai-tokens',
90
+ subject: 'customer-acme-corp',
91
+ data: { model: 'gpt-4', type: 'input', tokens: 850 },
92
+ },
93
+ {
94
+ type: 'ai-tokens',
95
+ subject: 'customer-acme-corp',
96
+ data: { model: 'gpt-4', type: 'output', tokens: 850 },
97
+ },
98
+ ])
99
+ ```
148
100
 
149
- const streamCallbacks = await createOpenAIStreamCallback(
150
- {
151
- model,
152
- prompts: messages.map(({ content }) => content),
153
- },
154
- {
155
- // onToken() => {...}
156
- // onFinal() => {...}
157
- async onUsage(usage) {
158
- try {
159
- await openmeter.events.ingest({
160
- source: 'my-app',
161
- type: 'my-event-type',
162
- subject: 'my-customer-id',
163
- data: {
164
- // Usage is { total_tokens, prompt_tokens, completion_tokens }
165
- ...usage,
166
- model,
167
- },
168
- })
169
- } catch (err) {
170
- console.error('failed to ingest usage', err)
171
- }
172
- },
173
- }
174
- )
101
+ ## Client API Reference
102
+
103
+ The OpenMeter SDK provides a comprehensive client interface organized into logical groups. Below is a complete reference of all available methods.
104
+
105
+ ### Overview
106
+
107
+ | Namespace | Resource | Operation | Method | Description |
108
+ |-----------|----------|-----------|--------|-------------|
109
+ | **[Events](#events)** | | | | Track usage by ingesting events |
110
+ | | Events | Create | [`openmeter.events.ingest(events)`](./src/client/events.ts#L19) | Ingest a single event or batch of events |
111
+ | | Events | Read | [`openmeter.events.list(params?)`](./src/client/events.ts#L41) | List ingested events with advanced filtering |
112
+ | | Events | Read | [`openmeter.events.listV2(params?)`](./src/client/events.ts#L60) | List ingested events with advanced filtering (V2) |
113
+ | **[Meters](#meters)** | | | | Track and aggregate usage data from events |
114
+ | | Meters | Create | [`openmeter.meters.create(meter)`](./src/client/meters.ts#L19) | Create a new meter |
115
+ | | Meters | Read | [`openmeter.meters.get(idOrSlug)`](./src/client/meters.ts#L34) | Get a meter by ID or slug |
116
+ | | Meters | Read | [`openmeter.meters.list()`](./src/client/meters.ts#L55) | List all meters |
117
+ | | Meters | Read | [`openmeter.meters.query(idOrSlug, query?)`](./src/client/meters.ts#L70) | Query usage data |
118
+ | | Meters | Update | [`openmeter.meters.update(idOrSlug, meter)`](./src/client/meters.ts#L100) | Update a meter by ID or slug |
119
+ | | Meters | Delete | [`openmeter.meters.delete(idOrSlug)`](./src/client/meters.ts#L124) | Delete a meter by ID or slug |
120
+ | **[Subjects](#subjects)** | | | | Manage entities that consume resources |
121
+ | | Subjects | Create | [`openmeter.subjects.upsert(subjects)`](./src/client/subjects.ts#L21) | Create or update one or multiple subjects |
122
+ | | Subjects | Read | [`openmeter.subjects.get(idOrKey)`](./src/client/subjects.ts#L39) | Get a subject by ID or key |
123
+ | | Subjects | Read | [`openmeter.subjects.list()`](./src/client/subjects.ts#L60) | List all subjects |
124
+ | | Subjects | Delete | [`openmeter.subjects.delete(idOrKey)`](./src/client/subjects.ts#L74) | Delete a subject by ID or key |
125
+ | **[Customers](#customers)** | | | | Manage customer subscription lifecycles and plan assignments |
126
+ | | Customers | Create | [`openmeter.customers.create(customer)`](./src/client/customers.ts#L37) | Create a new customer |
127
+ | | Customers | Read | [`openmeter.customers.get(customerIdOrKey)`](./src/client/customers.ts#L52) | Get a customer by ID or key |
128
+ | | Customers | Read | [`openmeter.customers.list(query?)`](./src/client/customers.ts#L123) | List all customers |
129
+ | | Customers | Read | [`openmeter.customers.getAccess(customerIdOrKey)`](./src/client/customers.ts#L143) | Get customer access information |
130
+ | | Customers | Read | [`openmeter.customers.listSubscriptions(customerIdOrKey, query?)`](./src/client/customers.ts#L169) | List customer subscriptions |
131
+ | | Customers | Update | [`openmeter.customers.update(customerIdOrKey, customer)`](./src/client/customers.ts#L75) | Update a customer |
132
+ | | Customers | Delete | [`openmeter.customers.delete(customerIdOrKey)`](./src/client/customers.ts#L99) | Delete a customer |
133
+ | | Apps | Update | [`openmeter.customers.apps.upsert(customerIdOrKey, appData)`](./src/client/customers.ts#L200) | Upsert app data |
134
+ | | Apps | Read | [`openmeter.customers.apps.list(customerIdOrKey)`](./src/client/customers.ts#L228) | List app data |
135
+ | | Apps | Delete | [`openmeter.customers.apps.delete(customerIdOrKey, appId)`](./src/client/customers.ts#L254) | Delete app data |
136
+ | | Stripe | Update | [`openmeter.customers.stripe.upsert(customerIdOrKey, appDataBase)`](./src/client/customers.ts#L285) | Upsert Stripe app data |
137
+ | | Stripe | Read | [`openmeter.customers.stripe.get(customerIdOrKey)`](./src/client/customers.ts#L313) | Get Stripe app data |
138
+ | | Stripe | Create | [`openmeter.customers.stripe.createPortalSession(customerIdOrKey, params)`](./src/client/customers.ts#L337) | Create a Stripe customer portal session |
139
+ | | Entitlements V1 | Read | [`openmeter.customers.entitlementsV1.value(customerIdOrKey, featureKey)`](./src/client/customers.ts#L372) | Get entitlement value (V1 API) |
140
+ | | Entitlements | Read | [`openmeter.customers.entitlements.list(customerIdOrKey)`](./src/client/customers.ts#L401) | List entitlements |
141
+ | | Entitlements | Create | [`openmeter.customers.entitlements.create(customerIdOrKey, entitlement)`](./src/client/customers.ts#L428) | Create an entitlement |
142
+ | | Entitlements | Read | [`openmeter.customers.entitlements.get(customerIdOrKey, featureKeyOrId)`](./src/client/customers.ts#L454) | Get an entitlement |
143
+ | | Entitlements | Delete | [`openmeter.customers.entitlements.delete(customerIdOrKey, entitlementId)`](./src/client/customers.ts#L479) | Delete an entitlement |
144
+ | | Entitlements | Update | [`openmeter.customers.entitlements.override(customerIdOrKey, featureKeyOrId, entitlement)`](./src/client/customers.ts#L505) | Override an entitlement |
145
+ | | Entitlements | Read | [`openmeter.customers.entitlements.value(customerIdOrKey, featureKeyOrId, query?)`](./src/client/customers.ts#L588) | Get entitlement value |
146
+ | | Entitlements | Read | [`openmeter.customers.entitlements.history(customerIdOrKey, featureKeyOrId, query?)`](./src/client/customers.ts#L617) | Get entitlement history |
147
+ | | Entitlements | Update | [`openmeter.customers.entitlements.resetUsage(customerIdOrKey, entitlementId, body?)`](./src/client/customers.ts#L653) | Reset usage |
148
+ | | Entitlements | Read | [`openmeter.customers.entitlements.listGrants(customerIdOrKey, featureKeyOrId, query?)`](./src/client/customers.ts#L532) | List grants |
149
+ | | Entitlements | Create | [`openmeter.customers.entitlements.createGrant(customerIdOrKey, featureKeyOrId, grant)`](./src/client/customers.ts#L561) | Create a grant |
150
+ | **[Features](#features)** | | | | Define application capabilities and services |
151
+ | | Features | Create | [`openmeter.features.create(feature)`](./src/client/features.ts#L24) | Create a new feature |
152
+ | | Features | Read | [`openmeter.features.get(featureIdOrKey)`](./src/client/features.ts#L39) | Get a feature by ID |
153
+ | | Features | Read | [`openmeter.features.list(params?)`](./src/client/features.ts#L61) | List all features |
154
+ | | Features | Delete | [`openmeter.features.delete(featureIdOrKey)`](./src/client/features.ts#L84) | Delete a feature by ID |
155
+ | **[Entitlements (V1)](#entitlements-v1)** | | | | Subject-based usage limits and access controls |
156
+ | | Entitlements | Create | [`openmeter.entitlementsV1.create(subjectIdOrKey, entitlement)`](./src/client/entitlements.ts#L40) | Create an entitlement for a subject |
157
+ | | Entitlements | Read | [`openmeter.entitlementsV1.get(entitlementId)`](./src/client/entitlements.ts#L68) | Get an entitlement by ID |
158
+ | | Entitlements | Read | [`openmeter.entitlementsV1.list(query?)`](./src/client/entitlements.ts#L91) | List all entitlements |
159
+ | | Entitlements | Read | [`openmeter.entitlementsV1.value(subjectIdOrKey, featureIdOrKey, query?)`](./src/client/entitlements.ts#L147) | Get the value of an entitlement |
160
+ | | Entitlements | Read | [`openmeter.entitlementsV1.history(subjectIdOrKey, entitlementIdOrFeatureKey, query?)`](./src/client/entitlements.ts#L180) | Get the history of an entitlement |
161
+ | | Entitlements | Update | [`openmeter.entitlementsV1.override(subjectIdOrKey, entitlementIdOrFeatureKey, override)`](./src/client/entitlements.ts#L213) | Override an entitlement |
162
+ | | Entitlements | Update | [`openmeter.entitlementsV1.reset(subjectIdOrKey, entitlementIdOrFeatureKey, reset?)`](./src/client/entitlements.ts#L247) | Reset entitlement usage |
163
+ | | Entitlements | Delete | [`openmeter.entitlementsV1.delete(subjectIdOrKey, entitlementId)`](./src/client/entitlements.ts#L116) | Delete an entitlement |
164
+ | | Grants | Create | [`openmeter.entitlementsV1.grants.create(subjectIdOrKey, entitlementIdOrFeatureKey, grant)`](./src/client/entitlements.ts#L283) | Create a grant for an entitlement |
165
+ | | Grants | Read | [`openmeter.entitlementsV1.grants.list(subjectIdOrKey, entitlementIdOrFeatureKey, query?)`](./src/client/entitlements.ts#L314) | List grants for an entitlement |
166
+ | | Grants | Read | [`openmeter.entitlementsV1.grants.listAll(query?)`](./src/client/entitlements.ts#L345) | List all grants |
167
+ | | Grants | Delete | [`openmeter.entitlementsV1.grants.void(entitlementId, grantId)`](./src/client/entitlements.ts#L369) | Void a grant |
168
+ | **[Entitlements](#entitlements)** | | | | Customer-based entitlements and access controls |
169
+ | | Entitlements | Read | [`openmeter.entitlements.list(query?)`](./src/client/entitlements.ts#L404) | List all entitlements (admin purposes) |
170
+ | | Entitlements | Read | [`openmeter.entitlements.get(entitlementId)`](./src/client/entitlements.ts#L425) | Get an entitlement by ID |
171
+ | | Grants | Read | [`openmeter.entitlements.grants.list(query?)`](./src/client/entitlements.ts#L453) | List all grants (admin purposes) |
172
+ | | Grants | Delete | [`openmeter.entitlements.grants.void(grantId)`](./src/client/entitlements.ts#L478) | Void a grant |
173
+ | **[Plans](#plans)** | | | | Manage subscription plans and pricing|
174
+ | | Plans | Create | [`openmeter.plans.create(plan)`](./src/client/plans.ts#L28) | Create a new plan|
175
+ | | Plans | Read | [`openmeter.plans.get(planId)`](./src/client/plans.ts#L44) | Get a plan by ID|
176
+ | | Plans | Read | [`openmeter.plans.list(query?)`](./src/client/plans.ts#L66) | List all plans|
177
+ | | Plans | Update | [`openmeter.plans.update(planId, plan)`](./src/client/plans.ts#L85) | Update a plan|
178
+ | | Plans | Delete | [`openmeter.plans.delete(planId)`](./src/client/plans.ts#L105) | Delete a plan by ID|
179
+ | | Plans | Other | [`openmeter.plans.archive(planId)`](./src/client/plans.ts#L123) | Archive a plan|
180
+ | | Plans | Other | [`openmeter.plans.publish(planId)`](./src/client/plans.ts#L141) | Publish a plan|
181
+ | | Addons | Read | [`openmeter.plans.addons.list(planId)`](./src/client/plans.ts#L168) | List addons|
182
+ | | Addons | Create | [`openmeter.plans.addons.create(planId, addon)`](./src/client/plans.ts#L191) | Create an addon|
183
+ | | Addons | Read | [`openmeter.plans.addons.get(planId, planAddonId)`](./src/client/plans.ts#L212) | Get an addon by ID|
184
+ | | Addons | Update | [`openmeter.plans.addons.update(planId, planAddonId, addon)`](./src/client/plans.ts#L238) | Update an addon|
185
+ | | Addons | Delete | [`openmeter.plans.addons.delete(planId, planAddonId)`](./src/client/plans.ts#L263) | Delete an addon by ID|
186
+ | **[Addons](#addons)** | | | | Manage standalone addons available across plans|
187
+ | | Addons | Create | [`openmeter.addons.create(addon)`](./src/client/addons.ts#L15) | Create a new addon|
188
+ | | Addons | Read | [`openmeter.addons.get(addonId)`](./src/client/addons.ts#L48) | Get an addon by ID|
189
+ | | Addons | Read | [`openmeter.addons.list(query?)`](./src/client/addons.ts#L30) | List all addons|
190
+ | | Addons | Update | [`openmeter.addons.update(addonId, addon)`](./src/client/addons.ts#L64) | Update an addon|
191
+ | | Addons | Delete | [`openmeter.addons.delete(addonId)`](./src/client/addons.ts#L84) | Delete an addon by ID|
192
+ | | Addons | Other | [`openmeter.addons.publish(addonId)`](./src/client/addons.ts#L99) | Publish an addon|
193
+ | | Addons | Other | [`openmeter.addons.archive(addonId)`](./src/client/addons.ts#L114) | Archive an addon|
194
+ | **[Subscriptions](#subscriptions)** | | | | Manage customer subscriptions|
195
+ | | Subscriptions | Create | [`openmeter.subscriptions.create(body)`](./src/client/subscriptions.ts#L24) | Create a new subscription|
196
+ | | Subscriptions | Read | [`openmeter.subscriptions.get(subscriptionId)`](./src/client/subscriptions.ts#L39) | Get a subscription by ID|
197
+ | | Subscriptions | Update | [`openmeter.subscriptions.edit(subscriptionId, body)`](./src/client/subscriptions.ts#L61) | Edit a subscription|
198
+ | | Subscriptions | Delete | [`openmeter.subscriptions.delete(subscriptionId)`](./src/client/subscriptions.ts#L180) | Delete a subscription (only scheduled)|
199
+ | | Subscriptions | Other | [`openmeter.subscriptions.cancel(subscriptionId, body?)`](./src/client/subscriptions.ts#L85) | Cancel a subscription|
200
+ | | Subscriptions | Other | [`openmeter.subscriptions.change(subscriptionId, body)`](./src/client/subscriptions.ts#L110) | Change a subscription (upgrade/downgrade)|
201
+ | | Subscriptions | Other | [`openmeter.subscriptions.migrate(subscriptionId, body)`](./src/client/subscriptions.ts#L135) | Migrate to a new plan version|
202
+ | | Subscriptions | Other | [`openmeter.subscriptions.unscheduleCancelation(subscriptionId)`](./src/client/subscriptions.ts#L158) | Unschedule a subscription cancelation|
203
+ | **[Subscription Addons](#subscription-addons)** | | | | Manage addons attached to specific subscriptions|
204
+ | | Subscription Addons | Create | [`openmeter.subscriptionAddons.create(subscriptionId, body)`](./src/client/subscription-addons.ts#L16) | Create a new subscription addon|
205
+ | | Subscription Addons | Read | [`openmeter.subscriptionAddons.get(subscriptionId, subscriptionAddonId)`](./src/client/subscription-addons.ts#L58) | Get a subscription addon by ID|
206
+ | | Subscription Addons | Read | [`openmeter.subscriptionAddons.list(subscriptionId)`](./src/client/subscription-addons.ts#L39) | List all addons of a subscription|
207
+ | | Subscription Addons | Update | [`openmeter.subscriptionAddons.update(subscriptionId, subscriptionAddonId, body)`](./src/client/subscription-addons.ts#L82) | Update a subscription addon|
208
+ | **[Billing](#billing)** | | | | Comprehensive billing management (profiles, invoices, overrides)|
209
+ | | Profiles | Create | [`openmeter.billing.profiles.create(profile)`](./src/client/billing.ts#L42) | Create a billing profile|
210
+ | | Profiles | Read | [`openmeter.billing.profiles.get(id)`](./src/client/billing.ts#L60) | Get a billing profile by ID|
211
+ | | Profiles | Read | [`openmeter.billing.profiles.list(query?)`](./src/client/billing.ts#L80) | List billing profiles|
212
+ | | Profiles | Update | [`openmeter.billing.profiles.update(id, profile)`](./src/client/billing.ts#L101) | Update a billing profile|
213
+ | | Profiles | Delete | [`openmeter.billing.profiles.delete(id)`](./src/client/billing.ts#L123) | Delete a billing profile|
214
+ | | Invoices | Read | [`openmeter.billing.invoices.list(query?)`](./src/client/billing.ts#L150) | List invoices|
215
+ | | Invoices | Read | [`openmeter.billing.invoices.get(id, query?)`](./src/client/billing.ts#L170) | Get an invoice by ID|
216
+ | | Invoices | Update | [`openmeter.billing.invoices.update(id, invoice)`](./src/client/billing.ts#L192) | Update an invoice (draft or earlier)|
217
+ | | Invoices | Delete | [`openmeter.billing.invoices.delete(id)`](./src/client/billing.ts#L213) | Delete an invoice (draft or earlier)|
218
+ | | Invoices | Other | [`openmeter.billing.invoices.advance(id)`](./src/client/billing.ts#L235) | Advance invoice to next status|
219
+ | | Invoices | Other | [`openmeter.billing.invoices.approve(id)`](./src/client/billing.ts#L257) | Approve an invoice (sends to customer)|
220
+ | | Invoices | Other | [`openmeter.billing.invoices.retry(id, body?)`](./src/client/billing.ts#L278) | Retry advancing after failure|
221
+ | | Invoices | Other | [`openmeter.billing.invoices.void(id)`](./src/client/billing.ts#L302) | Void an invoice|
222
+ | | Invoices | Other | [`openmeter.billing.invoices.recalculateTax(id)`](./src/client/billing.ts#L325) | Recalculate invoice tax amounts|
223
+ | | Invoices | Other | [`openmeter.billing.invoices.simulate(customerId, query?)`](./src/client/billing.ts#L346) | Simulate an invoice for a customer|
224
+ | | Invoices | Create | [`openmeter.billing.invoices.createLineItems(customerId, body)`](./src/client/billing.ts#L377) | Create pending line items|
225
+ | | Invoices | Create | [`openmeter.billing.invoices.invoicePendingLines(customerId)`](./src/client/billing.ts#L401) | Invoice pending lines|
226
+ | | Customers | Create | [`openmeter.billing.customers.createOverride(customerId, body)`](./src/client/billing.ts#L427) | Create or update a customer override|
227
+ | | Customers | Read | [`openmeter.billing.customers.getOverride(customerId, id)`](./src/client/billing.ts#L450) | Get a customer override|
228
+ | | Customers | Read | [`openmeter.billing.customers.listOverrides(customerId)`](./src/client/billing.ts#L471) | List customer overrides|
229
+ | | Customers | Delete | [`openmeter.billing.customers.deleteOverride(customerId, id)`](./src/client/billing.ts#L489) | Delete a customer override|
230
+ | **[Apps](#apps)** | | | | Manage integrations and app marketplace|
231
+ | | Apps | Read | [`openmeter.apps.list(query?)`](./src/client/apps.ts#L32) | List installed apps|
232
+ | | Apps | Read | [`openmeter.apps.get(id)`](./src/client/apps.ts#L50) | Get an app by ID|
233
+ | | Apps | Update | [`openmeter.apps.update(id, body)`](./src/client/apps.ts#L69) | Update an app|
234
+ | | Apps | Delete | [`openmeter.apps.uninstall(id)`](./src/client/apps.ts#L89) | Uninstall an app|
235
+ | | Marketplace | Read | [`openmeter.apps.marketplace.list(query?)`](./src/client/apps.ts#L115) | List available marketplace apps|
236
+ | | Marketplace | Read | [`openmeter.apps.marketplace.get(id)`](./src/client/apps.ts#L133) | Get marketplace listing details|
237
+ | | Marketplace | Read | [`openmeter.apps.marketplace.getOauth2InstallUrl(id, redirectUrl)`](./src/client/apps.ts#L151) | Get OAuth2 install URL|
238
+ | | Marketplace | Other | [`openmeter.apps.marketplace.authorizeOauth2(id, body)`](./src/client/apps.ts#L172) | Authorize OAuth2 code|
239
+ | | Marketplace | Create | [`openmeter.apps.marketplace.installWithAPIKey(id, body)`](./src/client/apps.ts#L193) | Install app with API key|
240
+ | | Stripe | Create | [`openmeter.apps.stripe.createCheckoutSession(body)`](./src/client/apps.ts#L223) | Create a Stripe checkout session|
241
+ | | Stripe | Update | [`openmeter.apps.stripe.updateApiKey(body)`](./src/client/apps.ts#L243) | Update Stripe API key|
242
+ | | Custom Invoicing | Other | [`openmeter.apps.customInvoicing.draftSynchronized(body)`](./src/client/apps.ts#L271) | Submit draft synchronization results|
243
+ | | Custom Invoicing | Other | [`openmeter.apps.customInvoicing.issuingSynchronized(body)`](./src/client/apps.ts#L295) | Submit issuing synchronization results|
244
+ | | Custom Invoicing | Update | [`openmeter.apps.customInvoicing.updatePaymentStatus(invoiceId, body)`](./src/client/apps.ts#L319) | Update payment status|
245
+ | **[Notifications](#notifications)** | | | | Set up automated notifications for usage thresholds|
246
+ | | Channels | Create | [`openmeter.notifications.channels.create(channel)`](./src/client/notifications.ts#L40) | Create a notification channel|
247
+ | | Channels | Read | [`openmeter.notifications.channels.get(channelId)`](./src/client/notifications.ts#L58) | Get a notification channel by ID|
248
+ | | Channels | Update | [`openmeter.notifications.channels.update(channelId, channel)`](./src/client/notifications.ts#L84) | Update a notification channel|
249
+ | | Channels | Read | [`openmeter.notifications.channels.list(query?)`](./src/client/notifications.ts#L111) | List notification channels|
250
+ | | Channels | Delete | [`openmeter.notifications.channels.delete(channelId)`](./src/client/notifications.ts#L131) | Delete a notification channel|
251
+ | | Rules | Create | [`openmeter.notifications.rules.create(rule)`](./src/client/notifications.ts#L164) | Create a notification rule|
252
+ | | Rules | Read | [`openmeter.notifications.rules.get(ruleId)`](./src/client/notifications.ts#L182) | Get a notification rule by ID|
253
+ | | Rules | Update | [`openmeter.notifications.rules.update(ruleId, rule)`](./src/client/notifications.ts#L205) | Update a notification rule|
254
+ | | Rules | Read | [`openmeter.notifications.rules.list(query?)`](./src/client/notifications.ts#L229) | List notification rules|
255
+ | | Rules | Delete | [`openmeter.notifications.rules.delete(ruleId)`](./src/client/notifications.ts#L249) | Delete a notification rule|
256
+ | | Events | Read | [`openmeter.notifications.events.get(eventId)`](./src/client/notifications.ts#L282) | Get a notification event by ID|
257
+ | | Events | Read | [`openmeter.notifications.events.list(query?)`](./src/client/notifications.ts#L307) | List notification events|
258
+ | **[Portal](#portal)** | | | | Manage consumer portal tokens for customer-facing interfaces|
259
+ | | Portal | Create | [`openmeter.portal.create(body)`](./src/client/portal.ts#L19) | Create a consumer portal token|
260
+ | | Portal | Read | [`openmeter.portal.list(query?)`](./src/client/portal.ts#L34) | List consumer portal tokens|
261
+ | | Portal | Other | [`openmeter.portal.invalidate(query?)`](./src/client/portal.ts#L52) | Invalidate consumer portal tokens|
262
+ | **[Info](#info)** | | | | Utility endpoints for system information|
263
+ | | Info | Read | [`openmeter.info.listCurrencies()`](./src/client/info.ts#L18) | List all supported currencies|
264
+ | | Info | Read | [`openmeter.info.getProgress(id)`](./src/client/info.ts#L32) | Get progress of a long-running operation|
265
+ | **[Debug](#debug)** | | | | Debug utilities for monitoring and troubleshooting|
266
+ | | Debug | Read | [`openmeter.debug.getMetrics()`](./src/client/debug.ts#L18) | Get event ingestion metrics (OpenMetrics format)|
175
267
 
176
- const stream = OpenAIStream(response, streamCallbacks)
177
- return new StreamingTextResponse(stream)
178
- }
179
- ```
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./src/client/index.cjs"), exports);
18
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../index.ts"],"sourcesContent":[null],"mappings":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[0,0,0,0],[1,0,0,0],[2,0,0,0],[3,0,0,0],[4,0,0,0],[5,0,0,0],[6,0,0,0],[7,0,0,0],[8,0,0,0],[9,0,0,0],[10,0,0,0],[11,0,0,0],[12,0,0,0],[13,0,0,0],[14,0,0,0],[15,0,0,0],[16,0,0,0],[17,0,0,0],[18,0,0,0],[19,0,0,0],[20,0,0,0],[21,0,0,0],[22,0,0,0],[44,0,0,0],[45,0,0,0],[46,0,0,0],[47,0,0,0],[48,0,0,0],[49,0,0,0],[50,0,0,0],[51,0,0,0],[52,0,0,0],[53,0,0,0],[54,0,0,0],[55,0,0,0],[56,0,0,0]]],"ignoreList":[]}
@@ -0,0 +1 @@
1
+ export * from './src/client/index.cjs';
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Addons = void 0;
4
+ const utils_js_1 = require("./utils.cjs");
5
+ class Addons {
6
+ client;
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ /**
11
+ * Create a addon
12
+ * @param addon - The addon to create
13
+ * @param options - Optional request options
14
+ * @returns The created addon
15
+ */
16
+ async create(addon, options) {
17
+ const resp = await this.client.POST('/api/v1/addons', {
18
+ body: addon,
19
+ ...options,
20
+ });
21
+ return (0, utils_js_1.transformResponse)(resp);
22
+ }
23
+ /**
24
+ * List addons
25
+ * @param params - Optional parameters for listing addons
26
+ * @param options - Optional request options
27
+ * @returns A list of addons
28
+ */
29
+ async list(params, options) {
30
+ const resp = await this.client.GET('/api/v1/addons', {
31
+ params: { query: params },
32
+ ...options,
33
+ });
34
+ return (0, utils_js_1.transformResponse)(resp);
35
+ }
36
+ /**
37
+ * Get an addon by ID
38
+ * @param addonId - The ID of the addon to retrieve
39
+ * @param options - Optional request options
40
+ * @returns The addon
41
+ */
42
+ async get(addonId, options) {
43
+ const resp = await this.client.GET('/api/v1/addons/{addonId}', {
44
+ params: { path: { addonId } },
45
+ ...options,
46
+ });
47
+ return (0, utils_js_1.transformResponse)(resp);
48
+ }
49
+ /**
50
+ * Update an addon
51
+ * @param addonId - The ID of the addon to update
52
+ * @param addon - The addon data to update
53
+ * @param options - Optional request options
54
+ * @returns The updated addon
55
+ */
56
+ async update(addonId, addon, options) {
57
+ const resp = await this.client.PUT('/api/v1/addons/{addonId}', {
58
+ body: addon,
59
+ params: { path: { addonId } },
60
+ ...options,
61
+ });
62
+ return (0, utils_js_1.transformResponse)(resp);
63
+ }
64
+ /**
65
+ * Delete an addon by ID
66
+ * @param addonId - The ID of the addon to delete
67
+ * @param options - Optional request options
68
+ * @returns void or standard error response structure
69
+ */
70
+ async delete(addonId, options) {
71
+ const resp = await this.client.DELETE('/api/v1/addons/{addonId}', {
72
+ params: { path: { addonId } },
73
+ ...options,
74
+ });
75
+ return (0, utils_js_1.transformResponse)(resp);
76
+ }
77
+ /**
78
+ * Publish an addon
79
+ * @param addonId - The ID of the addon to publish
80
+ * @param options - Optional request options
81
+ * @returns The published addon
82
+ */
83
+ async publish(addonId, options) {
84
+ const resp = await this.client.POST('/api/v1/addons/{addonId}/publish', {
85
+ params: { path: { addonId } },
86
+ ...options,
87
+ });
88
+ return (0, utils_js_1.transformResponse)(resp);
89
+ }
90
+ /**
91
+ * Archive an addon
92
+ * @param addonId - The ID of the addon to archive
93
+ * @param options - Optional request options
94
+ * @returns The archived addon
95
+ */
96
+ async archive(addonId, options) {
97
+ const resp = await this.client.POST('/api/v1/addons/{addonId}/archive', {
98
+ params: { path: { addonId } },
99
+ ...options,
100
+ });
101
+ return (0, utils_js_1.transformResponse)(resp);
102
+ }
103
+ }
104
+ exports.Addons = Addons;
105
+ //# sourceMappingURL=addons.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addons.cjs","names":[],"sources":["../../../../src/client/addons.ts"],"sourcesContent":[null],"mappings":[[],[],[],[[0,0,3,0],[1,0,3,0],[2,0,3,0],[3,0,3,0],[4,0,3,0],[5,0,3,0],[6,0,3,0],[7,0,3,0],[8,0,3,0],[9,0,3,0],[10,0,3,0],[11,0,3,0],[12,0,3,0],[13,0,3,0],[14,0,3,0],[15,0,3,0],[16,0,3,0],[17,0,3,0],[18,0,3,0],[19,0,3,0],[20,0,3,0],[21,0,3,0],[22,0,3,0],[23,0,3,0],[24,0,3,0],[25,0,3,0],[26,0,3,0],[27,0,3,0],[28,0,3,0],[39,0,3,0],[40,0,3,0],[41,0,3,0]],[[0,0,5,0],[1,0,5,0],[2,0,5,0],[3,0,5,0],[4,0,5,0],[5,0,5,0],[6,0,5,13],[7,0,5,13],[8,0,5,13],[9,0,5,13],[10,0,5,13],[11,0,5,13],[12,0,5,19],[13,0,5,19]],[[4,0,6,22],[5,0,6,22],[6,0,6,22],[7,0,6,22],[8,0,6,22],[9,0,6,22],[10,0,6,22]],[[4,0,6,2],[5,0,6,2],[6,0,6,2],[7,0,6,2],[8,0,6,2],[9,0,6,2],[10,0,6,2],[11,0,6,2],[12,0,6,2],[13,0,6,2],[14,0,6,2],[15,0,6,2],[16,0,6,22],[17,0,6,22],[18,0,6,22],[19,0,6,22],[20,0,6,22],[21,0,6,22],[22,0,6,66],[23,0,6,66],[24,0,6,66]],[[8,0,6,22],[9,0,6,22],[10,0,6,22],[11,0,6,22],[12,0,6,22],[13,0,6,22],[14,0,6,22],[15,0,6,22],[16,0,6,22],[17,0,6,22],[18,0,6,22],[19,0,6,28],[20,0,6,28],[21,0,6,28],[22,0,6,22],[23,0,6,22],[24,0,6,22],[25,0,6,22],[26,0,6,22],[27,0,6,22],[28,0,6,28]],[[4,0,6,69]],[[4,0,8,2],[5,0,8,2],[6,0,8,2]],[],[],[],[],[],[[4,0,14,9],[5,0,14,9],[6,0,14,9],[7,0,14,9],[8,0,14,9],[9,0,14,14],[10,0,14,15],[11,0,14,15],[12,0,14,15],[13,0,14,15],[14,0,14,15],[15,0,14,15],[16,0,14,21],[17,0,14,22],[18,0,14,22],[19,0,14,22],[20,0,14,22],[21,0,14,22],[22,0,14,40],[23,0,14,40],[24,0,14,42],[25,0,14,42],[26,0,14,42],[27,0,14,42],[28,0,14,42],[29,0,14,42],[30,0,14,42],[31,0,14,66],[32,0,14,66],[33,0,14,66]],[[8,0,15,4],[9,0,15,4],[10,0,15,4],[11,0,15,4],[12,0,15,4],[13,0,15,4],[14,0,15,10],[15,0,15,10],[16,0,15,10],[17,0,15,10],[18,0,15,14],[19,0,15,14],[20,0,15,14],[21,0,15,17],[22,0,15,17],[23,0,15,17],[24,0,15,17],[25,0,15,17],[26,0,15,17],[27,0,15,23],[28,0,15,23],[29,0,15,23],[30,0,15,23],[31,0,15,27],[32,0,15,28],[33,0,15,28],[34,0,15,28],[35,0,15,28],[36,0,15,28],[37,0,15,28],[38,0,15,34],[39,0,15,35],[40,0,15,35],[41,0,15,35],[42,0,15,35],[43,0,15,39],[44,0,15,40],[45,0,15,40],[46,0,15,40],[47,0,15,40],[48,0,15,40],[49,0,15,40],[50,0,15,40],[51,0,15,40],[52,0,15,40],[53,0,15,40],[54,0,15,40],[55,0,15,40],[56,0,15,40],[57,0,15,40],[58,0,15,40],[59,0,15,40],[60,0,15,56],[61,0,15,56],[62,0,15,58]],[[12,0,16,6],[13,0,16,6],[14,0,16,6],[15,0,16,6],[16,0,16,10],[17,0,16,10],[18,0,16,12],[19,0,16,12],[20,0,16,12],[21,0,16,12],[22,0,16,12],[23,0,16,17]],[[12,0,17,6],[13,0,17,6],[14,0,17,6],[15,0,17,9],[16,0,17,9],[17,0,17,9],[18,0,17,9],[19,0,17,9],[20,0,17,9],[21,0,17,9],[22,0,17,16]],[[9,0,18,5],[10,0,18,6]],[[8,0,20,4],[9,0,20,4],[10,0,20,4],[11,0,20,4],[12,0,20,4],[13,0,20,4],[14,0,20,4],[15,0,20,11],[16,0,20,11],[17,0,20,11],[18,0,20,11],[19,0,20,11],[20,0,20,11],[21,0,20,11],[22,0,20,11],[23,0,20,11],[24,0,20,11],[25,0,20,11],[26,0,20,11],[27,0,20,11],[28,0,20,11],[29,0,20,11],[30,0,20,11],[31,0,20,11],[32,0,20,11],[33,0,20,11],[34,0,20,11],[35,0,20,11],[36,0,20,11],[37,0,20,11],[38,0,20,11],[39,0,20,11],[40,0,20,11],[41,0,20,11],[42,0,20,11],[43,0,20,11],[44,0,20,11],[45,0,20,11],[46,0,20,11],[47,0,20,28],[48,0,20,28],[49,0,20,29],[50,0,20,29],[51,0,20,29],[52,0,20,29],[53,0,20,33],[54,0,20,34]],[[4,0,21,2]],[[4,0,23,2],[5,0,23,2],[6,0,23,2]],[],[],[],[],[],[[4,0,29,9],[5,0,29,9],[6,0,29,9],[7,0,29,9],[8,0,29,9],[9,0,29,14],[10,0,29,15],[11,0,29,15],[12,0,29,15],[13,0,29,15],[14,0,29,19],[15,0,30,4],[16,0,30,4],[17,0,30,4],[18,0,30,4],[19,0,30,4],[20,0,30,4],[21,0,30,60],[22,0,30,60],[23,0,31,4],[24,0,31,4],[25,0,31,4],[26,0,31,4],[27,0,31,4],[28,0,31,4],[29,0,31,4],[30,0,31,28],[31,0,31,28],[32,0,31,28]],[[8,0,33,4],[9,0,33,4],[10,0,33,4],[11,0,33,4],[12,0,33,4],[13,0,33,4],[14,0,33,10],[15,0,33,10],[16,0,33,10],[17,0,33,10],[18,0,33,14],[19,0,33,14],[20,0,33,14],[21,0,33,17],[22,0,33,17],[23,0,33,17],[24,0,33,17],[25,0,33,17],[26,0,33,17],[27,0,33,23],[28,0,33,23],[29,0,33,23],[30,0,33,23],[31,0,33,27],[32,0,33,28],[33,0,33,28],[34,0,33,28],[35,0,33,28],[36,0,33,28],[37,0,33,28],[38,0,33,34],[39,0,33,35],[40,0,33,35],[41,0,33,35],[42,0,33,38],[43,0,33,39],[44,0,33,39],[45,0,33,39],[46,0,33,39],[47,0,33,39],[48,0,33,39],[49,0,33,39],[50,0,33,39],[51,0,33,39],[52,0,33,39],[53,0,33,39],[54,0,33,39],[55,0,33,39],[56,0,33,39],[57,0,33,39],[58,0,33,39],[59,0,33,55],[60,0,33,55],[61,0,33,57]],[[12,0,34,6],[13,0,34,6],[14,0,34,6],[15,0,34,6],[16,0,34,6],[17,0,34,6],[18,0,34,12],[19,0,34,12],[20,0,34,14],[21,0,34,14],[22,0,34,16],[23,0,34,16],[24,0,34,16],[25,0,34,16],[26,0,34,16],[27,0,34,21],[28,0,34,21],[29,0,34,23],[30,0,34,23],[31,0,34,23],[32,0,34,23],[33,0,34,23],[34,0,34,23],[35,0,34,29],[36,0,34,29],[37,0,34,31]],[[12,0,35,6],[13,0,35,6],[14,0,35,6],[15,0,35,9],[16,0,35,9],[17,0,35,9],[18,0,35,9],[19,0,35,9],[20,0,35,9],[21,0,35,9],[22,0,35,16]],[[9,0,36,5],[10,0,36,6]],[[8,0,38,4],[9,0,38,4],[10,0,38,4],[11,0,38,4],[12,0,38,4],[13,0,38,4],[14,0,38,4],[15,0,38,11],[16,0,38,11],[17,0,38,11],[18,0,38,11],[19,0,38,11],[20,0,38,11],[21,0,38,11],[22,0,38,11],[23,0,38,11],[24,0,38,11],[25,0,38,11],[26,0,38,11],[27,0,38,11],[28,0,38,11],[29,0,38,11],[30,0,38,11],[31,0,38,11],[32,0,38,11],[33,0,38,11],[34,0,38,11],[35,0,38,11],[36,0,38,11],[37,0,38,11],[38,0,38,11],[39,0,38,11],[40,0,38,11],[41,0,38,11],[42,0,38,11],[43,0,38,11],[44,0,38,11],[45,0,38,11],[46,0,38,11],[47,0,38,28],[48,0,38,28],[49,0,38,29],[50,0,38,29],[51,0,38,29],[52,0,38,29],[53,0,38,33],[54,0,38,34]],[[4,0,39,2]],[[4,0,41,2],[5,0,41,2],[6,0,41,2]],[],[],[],[],[],[[4,0,47,9],[5,0,47,9],[6,0,47,9],[7,0,47,9],[8,0,47,9],[9,0,47,14],[10,0,47,15],[11,0,47,15],[12,0,47,15],[13,0,47,18],[14,0,47,19],[15,0,47,19],[16,0,47,19],[17,0,47,19],[18,0,47,19],[19,0,47,19],[20,0,47,19],[21,0,47,34],[22,0,47,34],[23,0,47,36],[24,0,47,36],[25,0,47,36],[26,0,47,36],[27,0,47,36],[28,0,47,36],[29,0,47,36],[30,0,47,60],[31,0,47,60],[32,0,47,60]],[[8,0,48,4],[9,0,48,4],[10,0,48,4],[11,0,48,4],[12,0,48,4],[13,0,48,4],[14,0,48,10],[15,0,48,10],[16,0,48,10],[17,0,48,10],[18,0,48,14],[19,0,48,14],[20,0,48,14],[21,0,48,17],[22,0,48,17],[23,0,48,17],[24,0,48,17],[25,0,48,17],[26,0,48,17],[27,0,48,23],[28,0,48,23],[29,0,48,23],[30,0,48,23],[31,0,48,27],[32,0,48,28],[33,0,48,28],[34,0,48,28],[35,0,48,28],[36,0,48,28],[37,0,48,28],[38,0,48,34],[39,0,48,35],[40,0,48,35],[41,0,48,35],[42,0,48,38],[43,0,48,39],[44,0,48,39],[45,0,48,39],[46,0,48,39],[47,0,48,39],[48,0,48,39],[49,0,48,39],[50,0,48,39],[51,0,48,39],[52,0,48,39],[53,0,48,39],[54,0,48,39],[55,0,48,39],[56,0,48,39],[57,0,48,39],[58,0,48,39],[59,0,48,39],[60,0,48,39],[61,0,48,39],[62,0,48,39],[63,0,48,39],[64,0,48,39],[65,0,48,39],[66,0,48,39],[67,0,48,39],[68,0,48,39],[69,0,48,65],[70,0,48,65],[71,0,48,67]],[[12,0,49,6],[13,0,49,6],[14,0,49,6],[15,0,49,6],[16,0,49,6],[17,0,49,6],[18,0,49,12],[19,0,49,12],[20,0,49,14],[21,0,49,14],[22,0,49,16],[23,0,49,16],[24,0,49,16],[25,0,49,16],[26,0,49,20],[27,0,49,20],[28,0,49,22],[29,0,49,22],[30,0,49,24],[31,0,49,24],[32,0,49,24],[33,0,49,24],[34,0,49,24],[35,0,49,24],[36,0,49,24],[37,0,49,31],[38,0,49,31],[39,0,49,33],[40,0,49,33],[41,0,49,35]],[[12,0,50,6],[13,0,50,6],[14,0,50,6],[15,0,50,9],[16,0,50,9],[17,0,50,9],[18,0,50,9],[19,0,50,9],[20,0,50,9],[21,0,50,9],[22,0,50,16]],[[9,0,51,5],[10,0,51,6]],[[8,0,53,4],[9,0,53,4],[10,0,53,4],[11,0,53,4],[12,0,53,4],[13,0,53,4],[14,0,53,4],[15,0,53,11],[16,0,53,11],[17,0,53,11],[18,0,53,11],[19,0,53,11],[20,0,53,11],[21,0,53,11],[22,0,53,11],[23,0,53,11],[24,0,53,11],[25,0,53,11],[26,0,53,11],[27,0,53,11],[28,0,53,11],[29,0,53,11],[30,0,53,11],[31,0,53,11],[32,0,53,11],[33,0,53,11],[34,0,53,11],[35,0,53,11],[36,0,53,11],[37,0,53,11],[38,0,53,11],[39,0,53,11],[40,0,53,11],[41,0,53,11],[42,0,53,11],[43,0,53,11],[44,0,53,11],[45,0,53,11],[46,0,53,11],[47,0,53,28],[48,0,53,28],[49,0,53,29],[50,0,53,29],[51,0,53,29],[52,0,53,29],[53,0,53,33],[54,0,53,34]],[[4,0,54,2]],[[4,0,56,2],[5,0,56,2],[6,0,56,2]],[],[],[],[],[],[],[[4,0,63,9],[5,0,63,9],[6,0,63,9],[7,0,63,9],[8,0,63,9],[9,0,63,14],[10,0,63,15],[11,0,63,15],[12,0,63,15],[13,0,63,15],[14,0,63,15],[15,0,63,15],[16,0,63,21],[17,0,64,4],[18,0,64,4],[19,0,64,4],[20,0,64,4],[21,0,64,4],[22,0,64,4],[23,0,64,4],[24,0,64,19],[25,0,64,19],[26,0,65,4],[27,0,65,4],[28,0,65,4],[29,0,65,4],[30,0,65,4],[31,0,65,82],[32,0,65,82],[33,0,66,4],[34,0,66,4],[35,0,66,4],[36,0,66,4],[37,0,66,4],[38,0,66,4],[39,0,66,4],[40,0,66,28],[41,0,66,28],[42,0,66,28]],[[8,0,68,4],[9,0,68,4],[10,0,68,4],[11,0,68,4],[12,0,68,4],[13,0,68,4],[14,0,68,10],[15,0,68,10],[16,0,68,10],[17,0,68,10],[18,0,68,14],[19,0,68,14],[20,0,68,14],[21,0,68,17],[22,0,68,17],[23,0,68,17],[24,0,68,17],[25,0,68,17],[26,0,68,17],[27,0,68,23],[28,0,68,23],[29,0,68,23],[30,0,68,23],[31,0,68,27],[32,0,68,28],[33,0,68,28],[34,0,68,28],[35,0,68,28],[36,0,68,28],[37,0,68,28],[38,0,68,34],[39,0,68,35],[40,0,68,35],[41,0,68,35],[42,0,68,38],[43,0,68,39],[44,0,68,39],[45,0,68,39],[46,0,68,39],[47,0,68,39],[48,0,68,39],[49,0,68,39],[50,0,68,39],[51,0,68,39],[52,0,68,39],[53,0,68,39],[54,0,68,39],[55,0,68,39],[56,0,68,39],[57,0,68,39],[58,0,68,39],[59,0,68,39],[60,0,68,39],[61,0,68,39],[62,0,68,39],[63,0,68,39],[64,0,68,39],[65,0,68,39],[66,0,68,39],[67,0,68,39],[68,0,68,39],[69,0,68,65],[70,0,68,65],[71,0,68,67]],[[12,0,69,6],[13,0,69,6],[14,0,69,6],[15,0,69,6],[16,0,69,10],[17,0,69,10],[18,0,69,12],[19,0,69,12],[20,0,69,12],[21,0,69,12],[22,0,69,12],[23,0,69,17]],[[12,0,70,6],[13,0,70,6],[14,0,70,6],[15,0,70,6],[16,0,70,6],[17,0,70,6],[18,0,70,12],[19,0,70,12],[20,0,70,14],[21,0,70,14],[22,0,70,16],[23,0,70,16],[24,0,70,16],[25,0,70,16],[26,0,70,20],[27,0,70,20],[28,0,70,22],[29,0,70,22],[30,0,70,24],[31,0,70,24],[32,0,70,24],[33,0,70,24],[34,0,70,24],[35,0,70,24],[36,0,70,24],[37,0,70,31],[38,0,70,31],[39,0,70,33],[40,0,70,33],[41,0,70,35]],[[12,0,71,6],[13,0,71,6],[14,0,71,6],[15,0,71,9],[16,0,71,9],[17,0,71,9],[18,0,71,9],[19,0,71,9],[20,0,71,9],[21,0,71,9],[22,0,71,16]],[[9,0,72,5],[10,0,72,6]],[[8,0,74,4],[9,0,74,4],[10,0,74,4],[11,0,74,4],[12,0,74,4],[13,0,74,4],[14,0,74,4],[15,0,74,11],[16,0,74,11],[17,0,74,11],[18,0,74,11],[19,0,74,11],[20,0,74,11],[21,0,74,11],[22,0,74,11],[23,0,74,11],[24,0,74,11],[25,0,74,11],[26,0,74,11],[27,0,74,11],[28,0,74,11],[29,0,74,11],[30,0,74,11],[31,0,74,11],[32,0,74,11],[33,0,74,11],[34,0,74,11],[35,0,74,11],[36,0,74,11],[37,0,74,11],[38,0,74,11],[39,0,74,11],[40,0,74,11],[41,0,74,11],[42,0,74,11],[43,0,74,11],[44,0,74,11],[45,0,74,11],[46,0,74,11],[47,0,74,28],[48,0,74,28],[49,0,74,29],[50,0,74,29],[51,0,74,29],[52,0,74,29],[53,0,74,33],[54,0,74,34]],[[4,0,75,2]],[[4,0,77,2],[5,0,77,2],[6,0,77,2]],[],[],[],[],[],[[4,0,83,9],[5,0,83,9],[6,0,83,9],[7,0,83,9],[8,0,83,9],[9,0,83,14],[10,0,83,15],[11,0,83,15],[12,0,83,15],[13,0,83,15],[14,0,83,15],[15,0,83,15],[16,0,83,21],[17,0,83,22],[18,0,83,22],[19,0,83,22],[20,0,83,22],[21,0,83,22],[22,0,83,22],[23,0,83,22],[24,0,83,37],[25,0,83,37],[26,0,83,39],[27,0,83,39],[28,0,83,39],[29,0,83,39],[30,0,83,39],[31,0,83,39],[32,0,83,39],[33,0,83,63],[34,0,83,63],[35,0,83,63]],[[8,0,84,4],[9,0,84,4],[10,0,84,4],[11,0,84,4],[12,0,84,4],[13,0,84,4],[14,0,84,10],[15,0,84,10],[16,0,84,10],[17,0,84,10],[18,0,84,14],[19,0,84,14],[20,0,84,14],[21,0,84,17],[22,0,84,17],[23,0,84,17],[24,0,84,17],[25,0,84,17],[26,0,84,17],[27,0,84,23],[28,0,84,23],[29,0,84,23],[30,0,84,23],[31,0,84,27],[32,0,84,28],[33,0,84,28],[34,0,84,28],[35,0,84,28],[36,0,84,28],[37,0,84,28],[38,0,84,34],[39,0,84,35],[40,0,84,35],[41,0,84,35],[42,0,84,35],[43,0,84,35],[44,0,84,35],[45,0,84,41],[46,0,84,42],[47,0,84,42],[48,0,84,42],[49,0,84,42],[50,0,84,42],[51,0,84,42],[52,0,84,42],[53,0,84,42],[54,0,84,42],[55,0,84,42],[56,0,84,42],[57,0,84,42],[58,0,84,42],[59,0,84,42],[60,0,84,42],[61,0,84,42],[62,0,84,42],[63,0,84,42],[64,0,84,42],[65,0,84,42],[66,0,84,42],[67,0,84,42],[68,0,84,42],[69,0,84,42],[70,0,84,42],[71,0,84,42],[72,0,84,68],[73,0,84,68],[74,0,84,70]],[[12,0,85,6],[13,0,85,6],[14,0,85,6],[15,0,85,6],[16,0,85,6],[17,0,85,6],[18,0,85,12],[19,0,85,12],[20,0,85,14],[21,0,85,14],[22,0,85,16],[23,0,85,16],[24,0,85,16],[25,0,85,16],[26,0,85,20],[27,0,85,20],[28,0,85,22],[29,0,85,22],[30,0,85,24],[31,0,85,24],[32,0,85,24],[33,0,85,24],[34,0,85,24],[35,0,85,24],[36,0,85,24],[37,0,85,31],[38,0,85,31],[39,0,85,33],[40,0,85,33],[41,0,85,35]],[[12,0,86,6],[13,0,86,6],[14,0,86,6],[15,0,86,9],[16,0,86,9],[17,0,86,9],[18,0,86,9],[19,0,86,9],[20,0,86,9],[21,0,86,9],[22,0,86,16]],[[9,0,87,5],[10,0,87,6]],[[8,0,89,4],[9,0,89,4],[10,0,89,4],[11,0,89,4],[12,0,89,4],[13,0,89,4],[14,0,89,4],[15,0,89,11],[16,0,89,11],[17,0,89,11],[18,0,89,11],[19,0,89,11],[20,0,89,11],[21,0,89,11],[22,0,89,11],[23,0,89,11],[24,0,89,11],[25,0,89,11],[26,0,89,11],[27,0,89,11],[28,0,89,11],[29,0,89,11],[30,0,89,11],[31,0,89,11],[32,0,89,11],[33,0,89,11],[34,0,89,11],[35,0,89,11],[36,0,89,11],[37,0,89,11],[38,0,89,11],[39,0,89,11],[40,0,89,11],[41,0,89,11],[42,0,89,11],[43,0,89,11],[44,0,89,11],[45,0,89,11],[46,0,89,11],[47,0,89,28],[48,0,89,28],[49,0,89,29],[50,0,89,29],[51,0,89,29],[52,0,89,29],[53,0,89,33],[54,0,89,34]],[[4,0,90,2]],[[4,0,92,2],[5,0,92,2],[6,0,92,2]],[],[],[],[],[],[[4,0,98,9],[5,0,98,9],[6,0,98,9],[7,0,98,9],[8,0,98,9],[9,0,98,14],[10,0,98,15],[11,0,98,15],[12,0,98,15],[13,0,98,15],[14,0,98,15],[15,0,98,15],[16,0,98,15],[17,0,98,22],[18,0,98,23],[19,0,98,23],[20,0,98,23],[21,0,98,23],[22,0,98,23],[23,0,98,23],[24,0,98,23],[25,0,98,38],[26,0,98,38],[27,0,98,40],[28,0,98,40],[29,0,98,40],[30,0,98,40],[31,0,98,40],[32,0,98,40],[33,0,98,40],[34,0,98,64],[35,0,98,64],[36,0,98,64]],[[8,0,99,4],[9,0,99,4],[10,0,99,4],[11,0,99,4],[12,0,99,4],[13,0,99,4],[14,0,99,10],[15,0,99,10],[16,0,99,10],[17,0,99,10],[18,0,99,14],[19,0,99,14],[20,0,99,14],[21,0,99,17],[22,0,99,17],[23,0,99,17],[24,0,99,17],[25,0,99,17],[26,0,99,17],[27,0,99,23],[28,0,99,23],[29,0,99,23],[30,0,99,23],[31,0,99,27],[32,0,99,28],[33,0,99,28],[34,0,99,28],[35,0,99,28],[36,0,99,28],[37,0,99,28],[38,0,99,34],[39,0,99,35],[40,0,99,35],[41,0,99,35],[42,0,99,35],[43,0,99,39],[44,0,99,40],[45,0,99,40],[46,0,99,40],[47,0,99,40],[48,0,99,40],[49,0,99,40],[50,0,99,40],[51,0,99,40],[52,0,99,40],[53,0,99,40],[54,0,99,40],[55,0,99,40],[56,0,99,40],[57,0,99,40],[58,0,99,40],[59,0,99,40],[60,0,99,40],[61,0,99,40],[62,0,99,40],[63,0,99,40],[64,0,99,40],[65,0,99,40],[66,0,99,40],[67,0,99,40],[68,0,99,40],[69,0,99,40],[70,0,99,40],[71,0,99,40],[72,0,99,40],[73,0,99,40],[74,0,99,40],[75,0,99,40],[76,0,99,40],[77,0,99,40],[78,0,99,74],[79,0,99,74],[80,0,99,76]],[[12,0,100,6],[13,0,100,6],[14,0,100,6],[15,0,100,6],[16,0,100,6],[17,0,100,6],[18,0,100,12],[19,0,100,12],[20,0,100,14],[21,0,100,14],[22,0,100,16],[23,0,100,16],[24,0,100,16],[25,0,100,16],[26,0,100,20],[27,0,100,20],[28,0,100,22],[29,0,100,22],[30,0,100,24],[31,0,100,24],[32,0,100,24],[33,0,100,24],[34,0,100,24],[35,0,100,24],[36,0,100,24],[37,0,100,31],[38,0,100,31],[39,0,100,33],[40,0,100,33],[41,0,100,35]],[[12,0,101,6],[13,0,101,6],[14,0,101,6],[15,0,101,9],[16,0,101,9],[17,0,101,9],[18,0,101,9],[19,0,101,9],[20,0,101,9],[21,0,101,9],[22,0,101,16]],[[9,0,102,5],[10,0,102,6]],[[8,0,104,4],[9,0,104,4],[10,0,104,4],[11,0,104,4],[12,0,104,4],[13,0,104,4],[14,0,104,4],[15,0,104,11],[16,0,104,11],[17,0,104,11],[18,0,104,11],[19,0,104,11],[20,0,104,11],[21,0,104,11],[22,0,104,11],[23,0,104,11],[24,0,104,11],[25,0,104,11],[26,0,104,11],[27,0,104,11],[28,0,104,11],[29,0,104,11],[30,0,104,11],[31,0,104,11],[32,0,104,11],[33,0,104,11],[34,0,104,11],[35,0,104,11],[36,0,104,11],[37,0,104,11],[38,0,104,11],[39,0,104,11],[40,0,104,11],[41,0,104,11],[42,0,104,11],[43,0,104,11],[44,0,104,11],[45,0,104,11],[46,0,104,11],[47,0,104,28],[48,0,104,28],[49,0,104,29],[50,0,104,29],[51,0,104,29],[52,0,104,29],[53,0,104,33],[54,0,104,34]],[[4,0,105,2]],[[4,0,107,2],[5,0,107,2],[6,0,107,2]],[],[],[],[],[],[[4,0,113,9],[5,0,113,9],[6,0,113,9],[7,0,113,9],[8,0,113,9],[9,0,113,14],[10,0,113,15],[11,0,113,15],[12,0,113,15],[13,0,113,15],[14,0,113,15],[15,0,113,15],[16,0,113,15],[17,0,113,22],[18,0,113,23],[19,0,113,23],[20,0,113,23],[21,0,113,23],[22,0,113,23],[23,0,113,23],[24,0,113,23],[25,0,113,38],[26,0,113,38],[27,0,113,40],[28,0,113,40],[29,0,113,40],[30,0,113,40],[31,0,113,40],[32,0,113,40],[33,0,113,40],[34,0,113,64],[35,0,113,64],[36,0,113,64]],[[8,0,114,4],[9,0,114,4],[10,0,114,4],[11,0,114,4],[12,0,114,4],[13,0,114,4],[14,0,114,10],[15,0,114,10],[16,0,114,10],[17,0,114,10],[18,0,114,14],[19,0,114,14],[20,0,114,14],[21,0,114,17],[22,0,114,17],[23,0,114,17],[24,0,114,17],[25,0,114,17],[26,0,114,17],[27,0,114,23],[28,0,114,23],[29,0,114,23],[30,0,114,23],[31,0,114,27],[32,0,114,28],[33,0,114,28],[34,0,114,28],[35,0,114,28],[36,0,114,28],[37,0,114,28],[38,0,114,34],[39,0,114,35],[40,0,114,35],[41,0,114,35],[42,0,114,35],[43,0,114,39],[44,0,114,40],[45,0,114,40],[46,0,114,40],[47,0,114,40],[48,0,114,40],[49,0,114,40],[50,0,114,40],[51,0,114,40],[52,0,114,40],[53,0,114,40],[54,0,114,40],[55,0,114,40],[56,0,114,40],[57,0,114,40],[58,0,114,40],[59,0,114,40],[60,0,114,40],[61,0,114,40],[62,0,114,40],[63,0,114,40],[64,0,114,40],[65,0,114,40],[66,0,114,40],[67,0,114,40],[68,0,114,40],[69,0,114,40],[70,0,114,40],[71,0,114,40],[72,0,114,40],[73,0,114,40],[74,0,114,40],[75,0,114,40],[76,0,114,40],[77,0,114,40],[78,0,114,74],[79,0,114,74],[80,0,114,76]],[[12,0,115,6],[13,0,115,6],[14,0,115,6],[15,0,115,6],[16,0,115,6],[17,0,115,6],[18,0,115,12],[19,0,115,12],[20,0,115,14],[21,0,115,14],[22,0,115,16],[23,0,115,16],[24,0,115,16],[25,0,115,16],[26,0,115,20],[27,0,115,20],[28,0,115,22],[29,0,115,22],[30,0,115,24],[31,0,115,24],[32,0,115,24],[33,0,115,24],[34,0,115,24],[35,0,115,24],[36,0,115,24],[37,0,115,31],[38,0,115,31],[39,0,115,33],[40,0,115,33],[41,0,115,35]],[[12,0,116,6],[13,0,116,6],[14,0,116,6],[15,0,116,9],[16,0,116,9],[17,0,116,9],[18,0,116,9],[19,0,116,9],[20,0,116,9],[21,0,116,9],[22,0,116,16]],[[9,0,117,5],[10,0,117,6]],[[8,0,119,4],[9,0,119,4],[10,0,119,4],[11,0,119,4],[12,0,119,4],[13,0,119,4],[14,0,119,4],[15,0,119,11],[16,0,119,11],[17,0,119,11],[18,0,119,11],[19,0,119,11],[20,0,119,11],[21,0,119,11],[22,0,119,11],[23,0,119,11],[24,0,119,11],[25,0,119,11],[26,0,119,11],[27,0,119,11],[28,0,119,11],[29,0,119,11],[30,0,119,11],[31,0,119,11],[32,0,119,11],[33,0,119,11],[34,0,119,11],[35,0,119,11],[36,0,119,11],[37,0,119,11],[38,0,119,11],[39,0,119,11],[40,0,119,11],[41,0,119,11],[42,0,119,11],[43,0,119,11],[44,0,119,11],[45,0,119,11],[46,0,119,11],[47,0,119,28],[48,0,119,28],[49,0,119,29],[50,0,119,29],[51,0,119,29],[52,0,119,29],[53,0,119,33],[54,0,119,34]],[[4,0,120,2]],[],[[0,0,5,0],[1,0,5,0],[2,0,5,0],[3,0,5,0],[4,0,5,0],[5,0,5,0],[6,0,5,0],[7,0,5,0],[8,0,5,0],[9,0,5,0],[10,0,5,0],[11,0,5,0],[12,0,5,0],[13,0,5,0],[14,0,5,0],[15,0,5,0],[16,0,5,0],[17,0,5,0],[18,0,5,0],[19,0,5,0],[20,0,5,0],[21,0,5,0],[22,0,5,0],[23,0,5,0]]],"ignoreList":[]}