@things-factory/auth-base 10.1.4 → 10.1.7
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.
- package/CHANGELOG.md +16 -0
- package/dist-client/auth.d.ts +9 -1
- package/dist-client/auth.js +12 -3
- package/dist-client/auth.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/profile.d.ts +1 -0
- package/dist-server/controllers/signin.js +33 -12
- package/dist-server/controllers/signin.js.map +1 -1
- package/dist-server/controllers/unlock-user.js +21 -2
- package/dist-server/controllers/unlock-user.js.map +1 -1
- package/dist-server/index.js +8 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/router/auth-public-process-router.js +32 -5
- package/dist-server/router/auth-public-process-router.js.map +1 -1
- package/dist-server/service/index.d.ts +3 -1
- package/dist-server/service/index.js +15 -11
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/privilege/privilege-directive.d.ts +15 -0
- package/dist-server/service/privilege/privilege-directive.js +27 -6
- package/dist-server/service/privilege/privilege-directive.js.map +1 -1
- package/dist-server/service/role/index.d.ts +2 -1
- package/dist-server/service/role/index.js +2 -1
- package/dist-server/service/role/index.js.map +1 -1
- package/dist-server/service/role/role-mutation.d.ts +17 -1
- package/dist-server/service/role/role-mutation.js +126 -7
- package/dist-server/service/role/role-mutation.js.map +1 -1
- package/dist-server/service/role/role-privilege-query.d.ts +14 -0
- package/dist-server/service/role/role-privilege-query.js +37 -0
- package/dist-server/service/role/role-privilege-query.js.map +1 -0
- package/dist-server/service/role/role-query.d.ts +61 -1
- package/dist-server/service/role/role-query.js +114 -55
- package/dist-server/service/role/role-query.js.map +1 -1
- package/dist-server/service/role-template/index.d.ts +4 -0
- package/dist-server/service/role-template/index.js +9 -0
- package/dist-server/service/role-template/index.js.map +1 -0
- package/dist-server/service/role-template/role-template-mutation.d.ts +39 -0
- package/dist-server/service/role-template/role-template-mutation.js +124 -0
- package/dist-server/service/role-template/role-template-mutation.js.map +1 -0
- package/dist-server/service/role-template/role-template-query.d.ts +11 -0
- package/dist-server/service/role-template/role-template-query.js +79 -0
- package/dist-server/service/role-template/role-template-query.js.map +1 -0
- package/dist-server/service/role-template/role-template-types.d.ts +51 -0
- package/dist-server/service/role-template/role-template-types.js +71 -0
- package/dist-server/service/role-template/role-template-types.js.map +1 -0
- package/dist-server/service/role-template/role-template.d.ts +110 -0
- package/dist-server/service/role-template/role-template.js +129 -0
- package/dist-server/service/role-template/role-template.js.map +1 -0
- package/dist-server/service/user/user.d.ts +1 -0
- package/dist-server/service/user/user.js +55 -13
- package/dist-server/service/user/user.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/account-lock-rule.d.ts +79 -0
- package/dist-server/utils/account-lock-rule.js +114 -0
- package/dist-server/utils/account-lock-rule.js.map +1 -0
- package/dist-server/utils/lock-duration.d.ts +3 -0
- package/dist-server/utils/lock-duration.js +36 -0
- package/dist-server/utils/lock-duration.js.map +1 -0
- package/package.json +4 -4
- package/tests/account-lock-db.test.ts +216 -0
- package/tests/account-lock-rule.test.ts +141 -0
- package/tests/compiled.ts +41 -0
- package/tests/has-privilege-db.test.ts +198 -0
- package/tests/lock-recovery.test.ts +204 -0
- package/tests/password-hashing.test.ts +131 -0
- package/tests/password-persistence.test.ts +147 -0
- package/tests/permission-gate.test.ts +226 -0
- package/tests/privilege-directive.test.ts +180 -0
- package/tests/role-mutation-db.test.ts +263 -0
- package/tests/role-privileges-db.test.ts +226 -0
- package/tests/role-template-seed-db.test.ts +179 -0
- package/tests/role-template.test.ts +126 -0
- package/tests/signin-policy.test.ts +200 -0
- package/tests/token-issuance.test.ts +240 -0
- package/translations/en.json +161 -1
- package/translations/ko.json +161 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,3 +6,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
|
6
6
|
and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
<!-- ## [Unreleased] -->
|
|
9
|
+
|
|
10
|
+
### Removed
|
|
11
|
+
|
|
12
|
+
- **`checkRolePreset` query.** It read `config.get('rolePreset')` and returned the value
|
|
13
|
+
unchanged while declaring `[Role]`, and it carried no `@privilege` — any signed-in user
|
|
14
|
+
could read whatever an installation had put there. No repository here set the key or
|
|
15
|
+
called the query, but this package ships to npm and consumers outside cannot be counted,
|
|
16
|
+
so the removal is recorded here. Role templates replace what it was reaching for.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **Role templates** (`registerRoleTemplate`, `roleTemplates`, `createRoleFromTemplate`).
|
|
21
|
+
An application declares the seats it offers — `{ category, axes }` per module — and an
|
|
22
|
+
administrator starts a role from one instead of picking privileges out of a list of 84.
|
|
23
|
+
Templates live in a boot registry rather than a table, and seeding runs once: the role
|
|
24
|
+
belongs to the administrator afterwards.
|
package/dist-client/auth.d.ts
CHANGED
|
@@ -32,7 +32,15 @@ declare class ClientAuth {
|
|
|
32
32
|
get credential(): any;
|
|
33
33
|
route(path: any, redirected: any): void;
|
|
34
34
|
updateProfile(formProps: any): Promise<string>;
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Change the password, and say whether it took.
|
|
37
|
+
*
|
|
38
|
+
* The listeners still get the message, as before. The boolean is for the caller that has the
|
|
39
|
+
* form in front of it: the change-password screen used to clear all three fields the moment
|
|
40
|
+
* it called this, so a wrong current password wiped what the person had typed and they had to
|
|
41
|
+
* enter everything again. Existing callers that ignore the return value behave as they did.
|
|
42
|
+
*/
|
|
43
|
+
changePassword(formProps: any): Promise<boolean>;
|
|
36
44
|
deleteUser(params: any): Promise<string>;
|
|
37
45
|
profile(): Promise<void>;
|
|
38
46
|
signout(): Promise<void>;
|
package/dist-client/auth.js
CHANGED
|
@@ -145,6 +145,14 @@ class ClientAuth {
|
|
|
145
145
|
}
|
|
146
146
|
throw new Error(message);
|
|
147
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Change the password, and say whether it took.
|
|
150
|
+
*
|
|
151
|
+
* The listeners still get the message, as before. The boolean is for the caller that has the
|
|
152
|
+
* form in front of it: the change-password screen used to clear all three fields the moment
|
|
153
|
+
* it called this, so a wrong current password wiped what the person had typed and they had to
|
|
154
|
+
* enter everything again. Existing callers that ignore the return value behave as they did.
|
|
155
|
+
*/
|
|
148
156
|
async changePassword(formProps) {
|
|
149
157
|
try {
|
|
150
158
|
const response = await fetch('/auth/change-pass', {
|
|
@@ -156,13 +164,14 @@ class ClientAuth {
|
|
|
156
164
|
const message = await response.text();
|
|
157
165
|
if (response.ok) {
|
|
158
166
|
this.onPasswordChanged({ message });
|
|
167
|
+
return true;
|
|
159
168
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
169
|
+
this.onAuthError({ message });
|
|
170
|
+
return false;
|
|
163
171
|
}
|
|
164
172
|
catch (e) {
|
|
165
173
|
this.onAuthError(e);
|
|
174
|
+
return false;
|
|
166
175
|
}
|
|
167
176
|
}
|
|
168
177
|
async deleteUser(params) {
|
package/dist-client/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../client/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/* [ AUTH PATH ]\n signinPath = '/auth/signin'\n signoutPath = '/auth/signout'\n profilePath = '/auth/profile'\n updateProfilePath = '/auth/update-profile'\n changepassPath = '/auth/change-pass'\n deleteUserPath = '/auth/delete-user'\n*/\n\nconst HEADER_JSON = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n}\ntype AuthEventName = 'profile' | 'signin' | 'signout' | 'presignout' | 'passwordchange' | 'error'\ntype AuthEventHandler = (e?: {\n accessToken?: string\n credential?: string\n domains: any[]\n domain: any\n languages?: { code: string; display: string }[]\n}) => void\ntype AuthErrorHandler = (err: any) => void\n\nclass ClientAuth {\n private listeners: {\n profile: AuthEventHandler[]\n signout: AuthEventHandler[]\n signin: AuthEventHandler[]\n presignout: AuthEventHandler[]\n passwordchange: AuthEventHandler[]\n error: AuthErrorHandler[]\n } = {\n profile: [],\n signout: [],\n signin: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n\n private authRequiredEventListener = this.onAuthRequired.bind(this)\n private activateRequiredEventListener = this.onActivateRequired.bind(this)\n\n private _credential: any\n private accessToken?: string\n private domains: any[] = []\n private domain: any\n private languages: { code: string; display: string }[] = []\n\n constructor() {\n document.addEventListener('auth-required', this.authRequiredEventListener)\n document.addEventListener('activate-required', this.activateRequiredEventListener)\n }\n\n on(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n listeners.push(handler)\n } else {\n console.log('unknown event', event)\n }\n\n if (event == 'profile' && this._credential) {\n /* \n 특별히 event 가 profile 인 경우에는 이미 fetch된 credential이 있다면, 콜백을 해준다. \n 시스템 bootstrap에서 profile 이벤트가 사용되는 경우가 많은데, profile도 매우 초기에 fetch 되므로 레이스컨디션이 발생할 수 있기 때문에, 확실하게 event 콜백을 보장하기 위해서이다.\n */\n handler({ credential: this._credential, domains: this.domains, domain: this.domain, languages: this.languages })\n }\n }\n\n off(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n let idx = listeners.indexOf(handler)\n idx >= 0 && listeners.splice(idx, 1)\n } else {\n console.log('unknown event', event)\n }\n }\n\n dispose() {\n document.removeEventListener('auth-required', this.authRequiredEventListener)\n document.removeEventListener('activate-required', this.activateRequiredEventListener)\n\n this.listeners = {\n profile: [],\n signin: [],\n signout: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n }\n\n private onProfileFetched({ credential, accessToken, domains, domain, languages }) {\n this._credential = credential\n this.domains = domains\n this.domain = domain\n this.languages = languages\n\n if (accessToken && !this.accessToken) {\n /*\n 기존에 세션을 가지거나, 액세스토큰으로 인증된 경우,\n 이 경우는 signin 이벤트리스너들을 호출해서 authenticated 상태로 되도록 유도한다.\n */\n this.accessToken = accessToken\n this.listeners.signin.forEach(handler => handler({ accessToken, domains, domain, languages }))\n }\n accessToken && (this.accessToken = accessToken)\n this.listeners.profile.forEach(handler => handler({ credential, domains, domain, languages }))\n }\n\n private async onPreSignout() {\n for (let onpresignout of this.listeners.presignout) {\n await onpresignout()\n }\n }\n\n private onAuthError(error) {\n /* signin, signup 과정에서 에러가 발생한 경우 */\n this.listeners?.error.forEach(handler => handler(error))\n }\n\n private onPasswordChanged(result) {\n //event is passwordchange, handler is result\n this.listeners?.passwordchange.forEach(handler => handler(result))\n }\n\n private onAuthRequired(e) {\n console.warn('authentication required')\n let url = new URL(window.location.href)\n url.pathname = '/auth/signin'\n url.searchParams.append('redirect_to', window.location.href)\n\n window.location.href = url.href\n }\n\n private onActivateRequired(e) {\n console.warn('activate required')\n var params = new URLSearchParams()\n params.append('email', e.email)\n\n window.location.replace(`/auth/activate?${params}`)\n }\n\n get credential() {\n return this._credential\n }\n\n route(path, redirected) {\n /* history에 남긴다. redirected된 상태임을 남긴다. */\n const location = window.location\n const origin = location.origin || location.protocol + '//' + location.host\n const href = `${origin}${path}`\n\n if (location.pathname === path) return\n\n // popstate 이벤트가 history.back() 에서만 발생하므로\n // 히스토리에 두번을 넣고 back()을 호출하는 편법을 사용함.\n // forward history가 한번 남는 문제가 있으나 signin 프로세스 중에만 발생하므로 큰 문제는 아님.\n // 이 로직은 login process가 어플리케이션 구조에 종속되는 것을 최소화하기 위함임.\n // 예를 들면, redux 구조에 들어가지 않아도 로그인 프로세스가 동작하도록 한 것임.\n window.history.pushState({ redirected }, '', href)\n window.history.pushState({}, '', href)\n\n window.history.back()\n }\n\n async updateProfile(formProps) {\n const response = await fetch('/auth/update-profile', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n try {\n await this.profile()\n } catch (e) {\n /* ignore profile refresh error */\n }\n\n return message\n }\n\n throw new Error(message)\n }\n\n async changePassword(formProps) {\n try {\n const response = await fetch('/auth/change-pass', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n this.onPasswordChanged({ message })\n } else {\n this.onAuthError({ message })\n }\n } catch (e) {\n this.onAuthError(e)\n }\n }\n\n async deleteUser(params) {\n const response = await fetch('/auth/delete-user', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(params)\n })\n\n const message = await response.text()\n if (response.ok) {\n return message\n } else {\n throw new Error(message)\n }\n }\n\n async profile() {\n try {\n var searchParams = new URLSearchParams(location.search)\n var token = searchParams.get('token')\n var headers = JSON.parse(JSON.stringify(HEADER_JSON))\n\n if (token) {\n headers.authorization = `Bearer ${token}`\n }\n\n const response = await fetch('/auth/profile', {\n method: 'GET',\n credentials: 'include',\n headers\n })\n\n if (response.ok) {\n if (response.redirected) {\n location.href = response.url\n return\n }\n\n const data = await response.json()\n\n this.onProfileFetched({\n credential: data.user,\n accessToken: data.token,\n domains: data.domains,\n domain: data.domain,\n languages: data.languages\n })\n\n return\n }\n } catch (e) {\n this.onAuthError(e)\n }\n }\n\n async signout() {\n await this.onPreSignout()\n\n window.location.href = '/auth/signout'\n }\n}\n\nexport const auth = new ClientAuth()\n"]}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../client/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/* [ AUTH PATH ]\n signinPath = '/auth/signin'\n signoutPath = '/auth/signout'\n profilePath = '/auth/profile'\n updateProfilePath = '/auth/update-profile'\n changepassPath = '/auth/change-pass'\n deleteUserPath = '/auth/delete-user'\n*/\n\nconst HEADER_JSON = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n}\ntype AuthEventName = 'profile' | 'signin' | 'signout' | 'presignout' | 'passwordchange' | 'error'\ntype AuthEventHandler = (e?: {\n accessToken?: string\n credential?: string\n domains: any[]\n domain: any\n languages?: { code: string; display: string }[]\n}) => void\ntype AuthErrorHandler = (err: any) => void\n\nclass ClientAuth {\n private listeners: {\n profile: AuthEventHandler[]\n signout: AuthEventHandler[]\n signin: AuthEventHandler[]\n presignout: AuthEventHandler[]\n passwordchange: AuthEventHandler[]\n error: AuthErrorHandler[]\n } = {\n profile: [],\n signout: [],\n signin: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n\n private authRequiredEventListener = this.onAuthRequired.bind(this)\n private activateRequiredEventListener = this.onActivateRequired.bind(this)\n\n private _credential: any\n private accessToken?: string\n private domains: any[] = []\n private domain: any\n private languages: { code: string; display: string }[] = []\n\n constructor() {\n document.addEventListener('auth-required', this.authRequiredEventListener)\n document.addEventListener('activate-required', this.activateRequiredEventListener)\n }\n\n on(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n listeners.push(handler)\n } else {\n console.log('unknown event', event)\n }\n\n if (event == 'profile' && this._credential) {\n /* \n 특별히 event 가 profile 인 경우에는 이미 fetch된 credential이 있다면, 콜백을 해준다. \n 시스템 bootstrap에서 profile 이벤트가 사용되는 경우가 많은데, profile도 매우 초기에 fetch 되므로 레이스컨디션이 발생할 수 있기 때문에, 확실하게 event 콜백을 보장하기 위해서이다.\n */\n handler({ credential: this._credential, domains: this.domains, domain: this.domain, languages: this.languages })\n }\n }\n\n off(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n let idx = listeners.indexOf(handler)\n idx >= 0 && listeners.splice(idx, 1)\n } else {\n console.log('unknown event', event)\n }\n }\n\n dispose() {\n document.removeEventListener('auth-required', this.authRequiredEventListener)\n document.removeEventListener('activate-required', this.activateRequiredEventListener)\n\n this.listeners = {\n profile: [],\n signin: [],\n signout: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n }\n\n private onProfileFetched({ credential, accessToken, domains, domain, languages }) {\n this._credential = credential\n this.domains = domains\n this.domain = domain\n this.languages = languages\n\n if (accessToken && !this.accessToken) {\n /*\n 기존에 세션을 가지거나, 액세스토큰으로 인증된 경우,\n 이 경우는 signin 이벤트리스너들을 호출해서 authenticated 상태로 되도록 유도한다.\n */\n this.accessToken = accessToken\n this.listeners.signin.forEach(handler => handler({ accessToken, domains, domain, languages }))\n }\n accessToken && (this.accessToken = accessToken)\n this.listeners.profile.forEach(handler => handler({ credential, domains, domain, languages }))\n }\n\n private async onPreSignout() {\n for (let onpresignout of this.listeners.presignout) {\n await onpresignout()\n }\n }\n\n private onAuthError(error) {\n /* signin, signup 과정에서 에러가 발생한 경우 */\n this.listeners?.error.forEach(handler => handler(error))\n }\n\n private onPasswordChanged(result) {\n //event is passwordchange, handler is result\n this.listeners?.passwordchange.forEach(handler => handler(result))\n }\n\n private onAuthRequired(e) {\n console.warn('authentication required')\n let url = new URL(window.location.href)\n url.pathname = '/auth/signin'\n url.searchParams.append('redirect_to', window.location.href)\n\n window.location.href = url.href\n }\n\n private onActivateRequired(e) {\n console.warn('activate required')\n var params = new URLSearchParams()\n params.append('email', e.email)\n\n window.location.replace(`/auth/activate?${params}`)\n }\n\n get credential() {\n return this._credential\n }\n\n route(path, redirected) {\n /* history에 남긴다. redirected된 상태임을 남긴다. */\n const location = window.location\n const origin = location.origin || location.protocol + '//' + location.host\n const href = `${origin}${path}`\n\n if (location.pathname === path) return\n\n // popstate 이벤트가 history.back() 에서만 발생하므로\n // 히스토리에 두번을 넣고 back()을 호출하는 편법을 사용함.\n // forward history가 한번 남는 문제가 있으나 signin 프로세스 중에만 발생하므로 큰 문제는 아님.\n // 이 로직은 login process가 어플리케이션 구조에 종속되는 것을 최소화하기 위함임.\n // 예를 들면, redux 구조에 들어가지 않아도 로그인 프로세스가 동작하도록 한 것임.\n window.history.pushState({ redirected }, '', href)\n window.history.pushState({}, '', href)\n\n window.history.back()\n }\n\n async updateProfile(formProps) {\n const response = await fetch('/auth/update-profile', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n try {\n await this.profile()\n } catch (e) {\n /* ignore profile refresh error */\n }\n\n return message\n }\n\n throw new Error(message)\n }\n\n /**\n * Change the password, and say whether it took.\n *\n * The listeners still get the message, as before. The boolean is for the caller that has the\n * form in front of it: the change-password screen used to clear all three fields the moment\n * it called this, so a wrong current password wiped what the person had typed and they had to\n * enter everything again. Existing callers that ignore the return value behave as they did.\n */\n async changePassword(formProps): Promise<boolean> {\n try {\n const response = await fetch('/auth/change-pass', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n this.onPasswordChanged({ message })\n return true\n }\n\n this.onAuthError({ message })\n return false\n } catch (e) {\n this.onAuthError(e)\n return false\n }\n }\n\n async deleteUser(params) {\n const response = await fetch('/auth/delete-user', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(params)\n })\n\n const message = await response.text()\n if (response.ok) {\n return message\n } else {\n throw new Error(message)\n }\n }\n\n async profile() {\n try {\n var searchParams = new URLSearchParams(location.search)\n var token = searchParams.get('token')\n var headers = JSON.parse(JSON.stringify(HEADER_JSON))\n\n if (token) {\n headers.authorization = `Bearer ${token}`\n }\n\n const response = await fetch('/auth/profile', {\n method: 'GET',\n credentials: 'include',\n headers\n })\n\n if (response.ok) {\n if (response.redirected) {\n location.href = response.url\n return\n }\n\n const data = await response.json()\n\n this.onProfileFetched({\n credential: data.user,\n accessToken: data.token,\n domains: data.domains,\n domain: data.domain,\n languages: data.languages\n })\n\n return\n }\n } catch (e) {\n this.onAuthError(e)\n }\n }\n\n async signout() {\n await this.onPreSignout()\n\n window.location.href = '/auth/signout'\n }\n}\n\nexport const auth = new ClientAuth()\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../client/apply-domain-theme.ts","../client/auth.ts","../../../node_modules/@operato/shell/dist/src/types/domain.d.ts","../../../node_modules/@operato/shell/dist/src/types/user.d.ts","../../../node_modules/@operato/shell/dist/src/types/role.d.ts","../../../node_modules/@operato/shell/dist/src/types/privilege.d.ts","../../../node_modules/@operato/shell/dist/src/types/types.d.ts","../../../node_modules/@operato/shell/dist/src/types/index.d.ts","../../../node_modules/redux/index.d.ts","../../../node_modules/@operato/shell/dist/src/lazy-reducer-enhancer.d.ts","../../../node_modules/@operato/shell/dist/src/store.d.ts","../../../node_modules/@operato/shell/dist/src/actions/app.d.ts","../../../node_modules/@operato/shell/dist/src/actions/route.d.ts","../../../node_modules/@operato/shell/dist/src/actions/busy.d.ts","../../../node_modules/@operato/shell/dist/src/actions/const.d.ts","../../../node_modules/@operato/shell/dist/src/actions/index.d.ts","../../../node_modules/@lit/reactive-element/css-tag.d.ts","../../../node_modules/@lit/reactive-element/reactive-controller.d.ts","../../../node_modules/@lit/reactive-element/reactive-element.d.ts","../../../node_modules/lit-html/directive.d.ts","../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/lit-html/lit-html.d.ts","../../../node_modules/lit-element/lit-element.d.ts","../../../node_modules/lit-html/is-server.d.ts","../../../node_modules/lit/index.d.ts","../../../node_modules/@operato/shell/dist/src/app/pages/page-view.d.ts","../../../node_modules/@operato/shell/dist/src/object-store.d.ts","../../../node_modules/@operato/shell/dist/src/custom-alert.d.ts","../../../node_modules/@operato/shell/dist/src/connect-mixin.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/app-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/context-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/font-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/layout-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/menu-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/route-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/snackbar-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/index.d.ts","../../../node_modules/@operato/shell/dist/src/index.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/redux/dist/redux.d.ts","../../../node_modules/immer/dist/immer.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/reselect/dist/reselect.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/redux-thunk/dist/redux-thunk.d.ts","../../../node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts","../../../node_modules/@reduxjs/toolkit/dist/index.d.ts","../client/actions/auth.ts","../client/reducers/auth.ts","../../../node_modules/lit-html/async-directive.d.ts","../../../node_modules/lit/async-directive.d.ts","../client/profiled.ts","../client/directive/privileged.ts","../client/bootstrap.ts","../../../node_modules/@simplewebauthn/browser/script/types/dom.d.ts","../../../node_modules/@simplewebauthn/browser/script/types/index.d.ts","../../../node_modules/@simplewebauthn/browser/script/methods/startregistration.d.ts","../../../node_modules/@simplewebauthn/browser/script/methods/startauthentication.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/browsersupportswebauthn.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/platformauthenticatorisavailable.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/browsersupportswebauthnautofill.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/base64urlstringtobuffer.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/buffertobase64urlstring.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/webauthnabortservice.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/webauthnerror.d.ts","../../../node_modules/@simplewebauthn/browser/script/index.d.ts","../client/verify-webauthn.ts","../client/index.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/dispatcher1-wrapper.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/ffi.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/iter.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vfs.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[129,194,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,258],[79,80,129,194,202,207,210,212,213,214,227],[74,75,76,77,129,194,202,207,210,212,213,214,227],[87,129,194,202,207,210,212,213,214,227],[71,129,194,202,207,210,212,213,214,227],[92,93,94,95,96,97,98,129,194,202,207,210,212,213,214,227],[70,73,78,88,89,90,91,99,129,194,202,207,210,212,213,214,227],[71,72,129,194,202,207,210,212,213,214,227],[65,66,67,68,69,129,194,202,207,210,212,213,214,227],[66,67,129,194,202,207,210,212,213,214,227],[65,66,68,129,194,202,207,210,212,213,214,227],[101,102,103,104,105,129,194,202,207,210,212,213,214,227],[62,129,194,202,207,210,212,213,214,227],[101,129,194,202,207,210,212,213,214,227],[115,116,117,118,119,120,121,122,123,124,129,194,202,207,210,212,213,214,227],[115,129,194,202,207,210,212,213,214,227],[114,129,194,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,260,263],[129,191,192,194,202,207,210,212,213,214,227],[129,193,194,202,207,210,212,213,214,227],[194,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,236],[129,194,195,200,202,205,207,210,212,213,214,216,227,232,245],[129,194,195,196,202,205,207,210,212,213,214,227],[129,194,197,202,207,210,212,213,214,227,246],[129,194,198,199,202,207,210,212,213,214,218,227],[129,194,199,202,207,210,212,213,214,227,232,242],[129,194,200,202,205,207,210,212,213,214,216,227],[129,193,194,201,202,207,210,212,213,214,227],[129,194,202,203,207,210,212,213,214,227],[129,194,202,204,205,207,210,212,213,214,227],[129,193,194,202,205,207,210,212,213,214,227],[129,194,202,205,207,208,210,212,213,214,227,232,245],[129,194,202,205,207,208,210,212,213,214,227,234,236],[129,181,194,202,205,207,209,210,212,213,214,216,227,232,245],[129,194,202,205,207,209,210,212,213,214,216,227,232,242,245],[129,194,202,207,209,210,211,212,213,214,227,232,242,245],[128,129,130,131,132,133,134,135,136,137,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254],[129,194,202,205,207,210,212,213,214,227],[129,194,202,207,210,212,214,227],[129,194,202,207,210,212,213,214,215,227,245],[129,194,202,205,207,210,212,213,214,216,227,232],[129,194,202,207,210,212,213,214,218,227],[129,194,202,207,210,212,213,214,219,227],[129,194,202,205,207,210,212,213,214,222,227],[129,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,250,251,252,253],[129,194,202,207,210,212,213,214,224,227],[129,194,202,207,210,212,213,214,225,227],[129,194,199,202,207,208,210,212,213,214,216,227,234,242],[129,194,202,205,207,210,212,213,214,227,228],[129,194,202,207,210,212,213,214,227,229,246,250],[129,194,202,205,207,210,212,213,214,227,232,234,235,236],[129,194,202,207,210,212,213,214,227,233,236],[129,194,202,205,207,210,212,213,214,227,232,234],[129,194,202,205,207,210,212,213,214,227,232,235,236],[129,194,202,207,210,212,213,214,227,236,246],[129,194,202,207,210,212,213,214,227,237],[129,191,194,202,207,210,212,213,214,227,232,239,245],[129,194,202,207,210,212,213,214,227,232,238],[129,194,202,205,207,210,212,213,214,227,240,241],[129,194,202,207,210,212,213,214,227,240,241],[129,194,199,202,207,210,212,213,214,216,227,232,242],[129,194,202,207,210,212,213,214,227,243],[129,194,202,207,210,212,213,214,216,227,244],[129,194,202,207,209,210,212,213,214,225,227,245],[129,194,202,207,210,212,213,214,227,246,247],[129,194,199,202,207,210,212,213,214,227,247],[129,194,202,207,210,212,213,214,227,232,248],[129,194,202,207,208,210,212,213,214,227],[129,194,202,207,210,212,213,214,215,227,250],[129,194,202,207,210,212,213,214,227,251],[129,194,197,202,207,210,212,213,214,227],[129,194,199,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,246],[129,181,194,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,245],[129,194,202,207,210,212,213,214,227,252],[129,194,202,207,210,212,213,214,222,227],[129,194,202,207,210,212,213,214,227,241],[129,181,194,202,205,207,208,210,212,213,214,222,227,232,236,245,248,250,252],[129,194,202,207,210,212,213,214,227,232,253],[129,194,202,207,210,212,213,214,227,234,254],[129,194,202,207,210,212,213,214,227,256,262],[129,194,202,207,210,212,213,214,227,260],[129,194,202,207,210,212,213,214,227,257,261],[81,84,129,194,202,207,210,212,213,214,227],[82,84,129,194,202,207,210,212,213,214,227],[84,129,194,202,207,210,212,213,214,227],[82,83,129,194,202,207,210,212,213,214,227],[109,129,194,202,207,210,212,213,214,227],[81,84,85,86,129,194,202,207,210,212,213,214,227],[129,194,202,207,210,212,213,214,227,259],[129,144,147,150,151,194,202,207,210,212,213,214,227,245],[129,147,194,202,207,210,212,213,214,227,232,245],[129,147,151,194,202,207,210,212,213,214,227,245],[129,194,202,207,210,212,213,214,227,232],[129,141,194,202,207,210,212,213,214,227],[129,145,194,202,207,210,212,213,214,227],[129,143,144,147,194,202,207,210,212,213,214,227,245],[129,194,202,207,210,212,213,214,216,227,242],[129,194,202,207,210,212,213,214,227,255],[129,141,194,202,207,210,212,213,214,227,255],[129,143,147,194,202,207,210,212,213,214,216,227,245],[129,138,139,140,142,146,194,202,205,207,210,212,213,214,227,232,245],[129,147,194,202,207,210,212,213,214,227],[129,147,156,165,194,202,207,210,212,213,214,227],[129,139,145,194,202,207,210,212,213,214,227],[129,147,175,176,194,202,207,210,212,213,214,227],[129,139,142,147,194,202,207,210,212,213,214,227,236,245,255],[129,143,147,194,202,207,210,212,213,214,227,245],[129,138,194,202,207,210,212,213,214,227],[129,141,142,143,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,176,177,178,179,180,194,202,207,210,212,213,214,227],[129,147,168,171,194,202,207,210,212,213,214,227],[129,147,156,158,159,194,202,207,210,212,213,214,227],[129,145,147,158,160,194,202,207,210,212,213,214,227],[129,146,194,202,207,210,212,213,214,227],[129,139,141,147,194,202,207,210,212,213,214,227],[129,147,151,158,160,194,202,207,210,212,213,214,227],[129,151,194,202,207,210,212,213,214,227],[129,145,147,150,194,202,207,210,212,213,214,227,245],[129,139,143,147,156,194,202,207,210,212,213,214,227],[129,147,168,194,202,207,210,212,213,214,227],[129,160,194,202,207,210,212,213,214,227],[129,139,143,147,151,194,202,207,210,212,213,214,227],[129,141,147,175,194,202,207,210,212,213,214,227,236,252,255],[62,106,129,194,202,207,210,212,213,214,227],[62,63,64,100,107,108,112,129,194,202,207,210,212,213,214,227],[62,87,110,111,129,194,202,207,210,212,213,214,227],[62,63,64,111,112,126,129,194,202,207,210,212,213,214,227],[62,64,129,194,202,207,210,212,213,214,227],[62,107,129,194,202,207,210,212,213,214,227],[62,125,129,194,202,207,210,212,213,214,227]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"a7a3212a86d7b7056d4f2bc603ab4e4617e60c4c1de43f7f748a7fe49e34b716","signature":"5f134c4c2c11151cc2fb386434a43e64216c5cda94652d54480b8c345f0a8765"},{"version":"12506337384de9157659fcb9c7470563ce9ee0ed707cbea8517621e6041d789b","signature":"ead7c69443921d68ef00bb0c31d11c3eddefd5cbfca08f7a6979b5bb46a2a2c6"},{"version":"4d4cf93a6b4c81851ad759e4569b6feb7a701e80b13a6f9d8d9c6012bbb86bd6","impliedFormat":99},{"version":"2e6035af8f3e43bf95e4983329c8277d66f9b271106af27b99a85d1c1b9daf4a","impliedFormat":99},{"version":"df32d43311e85715e2a573239a4bbc5b78ebaf29af2af5fa8c85370197997515","impliedFormat":99},{"version":"3a792bbf677343364a1d9b7197c6e4e512764f17364efd656b1a3598f2a9e820","impliedFormat":99},{"version":"3d7c0b593a29d717b2b2ba3f03f819c3c48bf9e250d79c4a31860af80f177e8c","impliedFormat":99},{"version":"e576aa80090f8b6020355ca8d7f4184067c84389f4b92125be29e03b1f6c5194","impliedFormat":99},{"version":"fd624f7d7b264922476685870f08c5e1c6d6a0f05dee2429a9747b41f6b699d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"487213b1bcbdaa470cf59a4cea3f8a939b9222e74b455fe0fd2f0dc2346cc3c0","impliedFormat":99},{"version":"8a9e962b8c98aa48377773c40ac7a3e530fb3354cec48fdb59d8e2df3a624a0c","affectsGlobalScope":true,"impliedFormat":99},{"version":"641089f0b8094ef74b9d4b3364d5dec1592d5e3b8a51c1ba491bc8872049e79a","impliedFormat":99},{"version":"8e33e65ce7fcd3cb20e29505452daa51543003d5db597f1aca2a51ff9043c8a7","impliedFormat":99},{"version":"b42033bf1067564808e4d360d79281667c2b3b0792c2d615ab641eb85974d4ba","impliedFormat":99},{"version":"7af29b0589483f7bb8a99405ddb849f34bc053146184561ed4179e02f5fe4d0f","impliedFormat":99},{"version":"ad3ee9f7d14ad8b7ae8094d0f1a2276656f7a970827d4030d1dead7c2d765f75","impliedFormat":99},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"9c7568f9c75cf6a7d35dc9f18c5971cd5b21344c686c7cce56b3558d3305d40f","impliedFormat":99},{"version":"fc48282c397084016a939e1b3f91dcaf4199b6cba339d91d8b2dc2acade79762","impliedFormat":99},{"version":"3e62a55b950132d6eeacc607b7a1bff990d5484347b2be5a1f54db51af30ff25","impliedFormat":99},{"version":"8b86f33b7e06e2f0a3bf4703cf9d8b0baab016e36b83f2a33dac184f061e17ea","impliedFormat":99},{"version":"88c205bacab539d8e844b80a1ec76fc649fbc731f12dfd7cca160976b5ddfd5a","impliedFormat":99},{"version":"565d32dce0b8761e7cfafe40c56a8a0fab0bb9e7bb35a31d9712643b3c8dbbc4","impliedFormat":99},{"version":"4bde12afd6fdd6e52d7316e00adfbccd70becc3ebd9c4f647d07caef53a474ae","impliedFormat":99},{"version":"a7e588bdba05f1fb78f83e50ee62c93565134d3b996babf2697c2b43fcf17ce0","impliedFormat":99},{"version":"218a0f93d7091c68718ec4260f41f3a61b5ecb7e786a8c04e296292ff41db8f0","impliedFormat":99},{"version":"cf45487aeb18b31f1001b99d06793986ac3e6840b0602f9cf3756a2724348bf4","impliedFormat":99},{"version":"81f0a95843ae6e5a006addc4b5c217b075057ff82c9bc319655de21a13ba9f10","impliedFormat":99},{"version":"1a68f44e90ac5c261a3157004a7ec18759982b91fd725537d6db919d83601dd1","impliedFormat":99},{"version":"bb9f78774fda656644386e88b8522ddf5da7b9a2eeaf1df18dc4f5bef7bb8bbb","impliedFormat":99},{"version":"f734b58ea162765ff4d4a36f671ee06da898921e985a2064510f4925ec1ed062","affectsGlobalScope":true,"impliedFormat":1},{"version":"57658b130a56abe2ba4f7eb1490038f0b31aa2f3cc2e42d24032626fcf6b1be3","impliedFormat":1},{"version":"d602ffb629af03e2a9c0858f9a0dcd790bfe92fe9a967b968bc35cfb3c58e68a","impliedFormat":1},{"version":"9c5c84c449a3d74e417343410ba9f1bd8bfeb32abd16945a1b3d0592ded31bc8","impliedFormat":1},{"version":"a7f09d2aaf994dbfd872eda4f2411d619217b04dbe0916202304e7a3d4b0f5f8","impliedFormat":1},{"version":"86ac756569f83cf0571646c916b546634652e92a775e964304912ecafa81dc42","impliedFormat":1},{"version":"35d2253283b5bcabd4868955daffeaed9b4e282c7cb0b4148dfdcd9dae0fd536","signature":"59407654647c0831f7ff4a9b4634cb71bb84489332362161ed31eedf22cd19e3"},{"version":"f30b1a6eb8c7813c82a7ec4f775ec257b6381d3f90521d0909224e4ea1320c11","signature":"6a716b8d3a52002354a3e530ee6c90d52209af1f53eaefb9c4527228bf0a6f67"},{"version":"c42f9b18f5f559b133cf9b409f678afb30df9c6498865aae9a1abad0f1e727a8","impliedFormat":99},{"version":"eabff483c855b848eefb979dbfb64c8858444c56a2f3ea0e59de026ef03fd089","impliedFormat":99},{"version":"5b206e920675fab40846ba051f960c659641b87cd7c96ab305430a4d194d60ea","signature":"d75a3e4665db49528093a3d868b69a53ac6bfc368b232d4db3130fd0a5e543c2"},{"version":"899e65531fad0a9d3919d74807fedbd4d4a81d27c1b8f20a571c41415f809a84","signature":"08c15205c0ba0a9bc25bde594fea32eb055e6ae3e4976605d211caae7cfce25c"},{"version":"85e8e2c95b3392357e552bd0a0743ea6f6bf6f4c3171c50784eb478e44d4625b","signature":"596db3582d22224cd33f191d8a1a39020114727f4d8957922e31335d8ae79312"},{"version":"bf0417239296a11383a61200870c123f6c9e5b5caf85cf2157b4a6e5c7a95fcb","impliedFormat":1},{"version":"f2aea0e6fbad26c1cbd6c51fad9d45efff5497f8b7cb571492eb08d84ed87927","impliedFormat":1},{"version":"921f399a6557f008bd36b4bc8dd6e8ac18575029d3271f5515ad82ee5b7f172e","impliedFormat":1},{"version":"21d0c1a87611b1e7fe1a7763e5e5c494dfa0b3cf1307ce829145c397e971969b","impliedFormat":1},{"version":"8c468d84a4116a378a6c6050a86f5441efa036faa235834ef204fdbfe8c17943","impliedFormat":1},{"version":"0a1c65731eb1680e494e0b485ff3a4106e29323b9f5931da23d9a612cbe84e45","impliedFormat":1},{"version":"a331abe7151957a7266888db8a11eb72da8bed8ceee46cc187dd280ebd89c619","impliedFormat":1},{"version":"1f1d06065bf428cbc1cc9e9a0ea0d32a4cf10bcfd3e87dfcd1a5422262d41d55","impliedFormat":1},{"version":"6ea653d5c31c1bb800010ef040494a1fc5e4ce0cda8b9786124f0e7018993cb3","impliedFormat":1},{"version":"80d2736093ff441d579360306b062e2441fc8100b3fb3a90691bc0f533fa6382","impliedFormat":1},{"version":"cde0d6a59761c6dd05836af4f8684e420e6df695fa22f94cc09cc9ddcec7cef7","impliedFormat":1},{"version":"686660ddef40e8aacc8ee90a1fb5e1969c640177657a5e068a7e2dd2fb9a6e76","impliedFormat":1},{"version":"997c14dffeb1bbffe14e7f79307295aa83d7ef1ee38762c13514d53ae43d2ede","signature":"e899b1dbfb78597e87307ffaccf5617114bfc97fd39a0b773cbefebfd5c3a870"},{"version":"36b559565d00cf6f00ca4c72b63f98b17a97b3202b4b1e15aa0072e9b2b36749","signature":"b4e5bad8d876a91492d122e50592b733b03c989e6272bf51f4d54271437afedb"},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9b68a1c3f8f45b4c199fa5b3ac09497230cb8f2f0cdcfebe5817b30b836a64a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f53a7652392cf26ebbe4e29fd0672aa87c93bd6d0241289c13fab87b9ac35c8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00a630557d1622ad312633bdbfbdb9c6b7220d948dca9f899db30679f160074","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"88809d6c1b9c78d04a133646a6feb926def05a8774c308c7c93bc32ee163d271","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"21d7fab00c101ddf754b392e11534e6b20c6bda269b2ccbcdf3453cbe21d8a39","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"d3c85d4dde1a4918009e37426ee4a940cbbd4100e2e74d03e2de0d50a77bb488","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"60e3ba4b2d24548107060e5d13bffafbbbaa53d001c07bbe40386deda569b5e8","impliedFormat":1},{"version":"a712be2c8cbe0154bd17d1d7bff503d7c04331e0745eb9eea3d303e0e5d9401e","impliedFormat":1},{"version":"25bd6ae1b97ea991433337310fc406cc7c9f271b67b7c79dd24eee384759f3d4","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"38004e6801340cb890afb8cb5a9fc8972297e7f88ab94026e4b0b3c61fb32f8a","impliedFormat":1},{"version":"4ca7fb8f6018ea836b1ad24f67d5e7c2cf7410af7462e0ccc90b012944f5d7ae","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"149f9a9e7f04e67afa0e2a49fc0ff421035c01d6b793cfcae7d2e9f6819431e2","impliedFormat":1},{"version":"e8a9dfa4c75ef6d25df8b40eaa9c31e0a69452aaf2ced4a3f4215dbdbaa876f4","impliedFormat":1},{"version":"a70af845a2eb9dd6e2723e319e14ea7fb28b129ec1361c21509b49305448c323","impliedFormat":1},{"version":"b53dc572d4f187904207ae1166652de47aab8eeb00c254d009cb226863076b56","impliedFormat":1},{"version":"57354d2f022ed64ede57b2e052306dd076a138b551abc7d30ef5e6718ce2f76a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"f501234c5aeeeb5d7659412335227466aaacf30b952372d60afeb21c02c96348","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"358f74dc35927dc88ea86dd201a2b98e701c281615e6b30a4c153eb0bb90ef71","impliedFormat":1},{"version":"8b91ff5bb912be3ea213cbcf0075aace1f5d4ff249a0d227ed673868cb7bfabc","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"706abfbafe0ed5f685357375e89bbf48879549ea1772185d77d15f587c5c9400","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"013ff793053d33a15be4614efdd6c50247bbf0b26d6bc58ba338622a7441b543","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"e99963ae1e3a48ca7a7958c02f3e88bb963eb7978c28b68ae6b8c9f03309d83c","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"594ae90cacd813fa392ff80d2e0a8eff4e41f4a136329a940e321399dd8895b4","impliedFormat":1},{"version":"d1f333ade8ff35a409b4984e1f11956fe11c61855b0c7e9b59f0313e48b40c4a","impliedFormat":1},{"version":"0224aa4b3464895d69c413a640a19ac2166778a74eb5eb3b36b021c72d42b274","impliedFormat":1},{"version":"575aa163c4c32e5b82e0e99b1f9f80806e1d78bfa259706e05139251c022277b","affectsGlobalScope":true,"impliedFormat":1},{"version":"47d917e731d06acf182baa38ac2fbd720c3555fa9160e6a40d47994515f7f0ea","impliedFormat":1},{"version":"2fbf504c4791f9d32cd766cfe6b605bcda63289b925401953a7900db9af85348","impliedFormat":1},{"version":"ed0fb633cae35948d9e144004299a4bdf1ab912667c787b7fbffcd6d8c7b92a2","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"4c8a22ece1ef9fb4659ec034e1131310ca188975f39948ab38f7e4485cb46d1f","impliedFormat":1},{"version":"9c90f502816bd0179556bb875e86c944af3f6b995cde63199edbe4e0b1219aba","impliedFormat":1},{"version":"97581dc7099ef3d844c83706d53a7ecf895c0e867fbf6b9dc035bb3080f677bd","impliedFormat":1},{"version":"e494b286c8e27c52f8c7f945aa80ff223f2a3cd4f7a2619fa8991f1459e26f07","impliedFormat":1},{"version":"f54f5f9e10bbceba7515dfad0ffc89dffdb8d749d0604594c57a725cf6d79c20","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"8c7e618c2a91ea7f6b5cca272a295864e92c16413be8fc56a943e8c7d5320011","affectsGlobalScope":true,"impliedFormat":1},{"version":"beabd75eab00f72e79feb85f6bbe81b549461a2c870674923c24a8d180d6cf07","impliedFormat":1},{"version":"9d37b8a9678efbcdf38238b59ce8e6f7db70aba1a516f3a4a671a301dbacfb3d","impliedFormat":1},{"version":"a47a792b8cff71443be8dfb199f2b77e102a7bf9d4f90c18059f05d9af2d7413","impliedFormat":1},{"version":"ad50512520720d10294c629cb4e2df23891c3fcbeaca00fbfb9e6bbea65f3dd6","impliedFormat":1},{"version":"22e77cc53de19959fdb4c4876e7bafd2f2a8cf8ead059abf7b299efe85f76251","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"ba389fd3d7fba6670e97bc82eb12469dcb371d22f24e63859c1df5a083c823ed","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"97234c5303866576f913d0ccae7d58d6322d9e803c7bf1228a3fda46ab8087b2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5336674547d832b901f47d5602c61dd4ba91796a4711235aa4aead3386ce05a4","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"73eeb740dacc45adc607a4f59f90fa9dbe2717d93d82f115f45f34e18f8d644a","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"d251cda16f3f6a3e07f07c9e6e823ef6c583c63f653eb8777dafa749a78298e3","impliedFormat":1},{"version":"18b03a8395192811131170042d6af50c4292b0d708789dbf5bc805b6dd9f4c14","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"c0e37f7ba036ce58cb5aa6f416581afd3abe9b15c62bb801f1c10e862cb40b32","impliedFormat":1},{"version":"441b9bb09013654aa3d050e68b06464d8959b473e85868249d9d18f692acd35b","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"55246f15e33ff1e2e9e679b25fa9790a48db55dc63d567fe25fac8b6a0efe911","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"925734f303b7f0cc111d42aeb21781d38a79e6d5ac05b2b1400cd1861a75d27b","impliedFormat":1},{"version":"5b26c4dd672d88336bb929787c9bfb55119e80ba89ec6dc923da1c063892843e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"b8e805bcd8cfb7986d2bcf5e785e34fdfe0cb2f31a89b585e2c9204513efa8cf","impliedFormat":1},{"version":"f12624a4a8d042b68914eac1b0a16571fc1c523173fcdf2517c65d191bd5a86c","impliedFormat":1},{"version":"cd2a656ba1d250c2002190b683e3826bf4362b6919450bc0f9bbf5612ebad837","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"441a29b18cc64c37fb196172ec1e499f60d5792edc89648e6cb550180c81050f","impliedFormat":1},{"version":"1ec3f3a5f04cc42df33274fbe5c0937d9a9e06f249a7a26288d7d54f0763ffd4","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"77c6da9644791cee637e5034370ae7b6ad04017599deb0786b1c8fd658cbb5cf","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"aed8f3e5c7e53462565eedf34a9bcb700393cb2c1ab0c768602b929c3ed3145d","impliedFormat":1},{"version":"8e2577e7262051fd3c5bd6ca2b2056d358ff8853565720f92455860824c25188","impliedFormat":1},{"version":"7ec8d7d483f7394f9da611b10d3a0e402f76ff5c991261e6ce43a15f81ca4258","impliedFormat":1},{"version":"bb9dbb4b2ad81e3e71ec5ba4314973718555b9d04ba2a17dfbf875efecb8e2c0","impliedFormat":1},{"version":"9021dc5be8f3a87af5cede29221188a6497e2092b6889e0be212ef6b6b7153e9","impliedFormat":1},{"version":"4a8c8fd951d9fd9e0775f0aae8ed1f8b528204e24a2600bea3a1228ea83de52c","impliedFormat":1},{"version":"32eccc272f35e34ff1c3d33d2c8d05e6821a6e95f648e118a5f4a0f3512895ac","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"632c45ccb4cdc2c3a80c7a36a63dd7763016e59cac5e07bfb3e37e3548957028","impliedFormat":1},{"version":"ec62d16f95636123624a69191a35b5df44b4b0a6428977e856c5739c0a787471","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"c46f111af647c4134ae869653130610d62da321f90ebf19e186a3ea4bed79350","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[63,64,107,108,[111,113],126,127],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"useDefineForClassFields":false},"referencedMap":[[256,1],[259,2],[79,1],[80,1],[81,3],[74,1],[76,1],[77,1],[78,4],[75,1],[88,5],[91,6],[92,5],[93,5],[94,5],[99,7],[95,5],[96,5],[97,5],[98,5],[90,1],[100,8],[72,6],[89,1],[73,9],[65,1],[70,10],[68,11],[67,12],[69,1],[66,1],[106,13],[105,14],[104,15],[101,1],[103,1],[121,1],[118,1],[120,1],[122,1],[119,1],[123,1],[124,1],[125,16],[117,17],[116,17],[114,1],[115,18],[258,1],[264,19],[191,20],[192,20],[193,21],[129,22],[194,23],[195,24],[196,25],[197,26],[198,27],[199,28],[200,29],[201,30],[202,31],[203,31],[204,32],[205,33],[206,1],[207,34],[208,35],[130,1],[128,1],[209,36],[210,37],[211,38],[255,39],[212,40],[213,41],[214,40],[215,42],[216,43],[218,44],[219,45],[220,45],[221,45],[222,46],[223,47],[224,48],[225,49],[226,50],[227,51],[228,51],[229,52],[230,1],[231,1],[232,53],[233,54],[234,55],[235,56],[236,57],[237,58],[238,59],[239,60],[240,61],[241,62],[242,63],[243,64],[244,65],[245,66],[246,67],[247,68],[248,69],[249,70],[250,71],[251,72],[131,40],[132,1],[133,73],[134,74],[135,1],[136,75],[137,1],[182,76],[183,77],[184,78],[185,78],[186,79],[187,1],[188,23],[189,80],[190,77],[252,81],[253,82],[254,83],[83,1],[217,1],[257,1],[263,84],[102,1],[261,85],[262,86],[85,87],[109,88],[82,89],[86,1],[84,90],[110,91],[87,92],[260,93],[71,1],[62,1],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[58,1],[59,1],[156,94],[170,95],[153,96],[171,97],[180,98],[144,99],[145,100],[143,101],[179,102],[174,103],[178,104],[147,105],[157,106],[167,107],[146,108],[177,109],[141,110],[142,103],[148,106],[149,1],[155,111],[152,106],[139,112],[181,113],[172,114],[160,115],[159,106],[161,116],[164,117],[158,118],[162,119],[175,102],[150,120],[151,121],[165,122],[140,97],[169,123],[168,106],[154,121],[163,124],[166,125],[173,1],[138,1],[176,126],[107,127],[63,14],[64,14],[113,128],[112,129],[127,130],[111,131],[108,132],[126,133]],"version":"5.9.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../client/apply-domain-theme.ts","../client/auth.ts","../../../node_modules/@operato/shell/dist/src/types/domain.d.ts","../../../node_modules/@operato/shell/dist/src/types/user.d.ts","../../../node_modules/@operato/shell/dist/src/types/role.d.ts","../../../node_modules/@operato/shell/dist/src/types/privilege.d.ts","../../../node_modules/@operato/shell/dist/src/types/types.d.ts","../../../node_modules/@operato/shell/dist/src/types/index.d.ts","../../../node_modules/redux/index.d.ts","../../../node_modules/@operato/shell/dist/src/lazy-reducer-enhancer.d.ts","../../../node_modules/@operato/shell/dist/src/store.d.ts","../../../node_modules/@operato/shell/dist/src/actions/app.d.ts","../../../node_modules/@operato/shell/dist/src/actions/route.d.ts","../../../node_modules/@operato/shell/dist/src/actions/busy.d.ts","../../../node_modules/@operato/shell/dist/src/actions/const.d.ts","../../../node_modules/@operato/shell/dist/src/actions/index.d.ts","../../../node_modules/@lit/reactive-element/css-tag.d.ts","../../../node_modules/@lit/reactive-element/reactive-controller.d.ts","../../../node_modules/@lit/reactive-element/reactive-element.d.ts","../../../node_modules/lit-html/directive.d.ts","../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/lit-html/lit-html.d.ts","../../../node_modules/lit-element/lit-element.d.ts","../../../node_modules/lit-html/is-server.d.ts","../../../node_modules/lit/index.d.ts","../../../node_modules/@operato/shell/dist/src/app/pages/page-view.d.ts","../../../node_modules/@operato/shell/dist/src/object-store.d.ts","../../../node_modules/@operato/shell/dist/src/custom-alert.d.ts","../../../node_modules/@operato/shell/dist/src/connect-mixin.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/app-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/context-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/font-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/layout-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/menu-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/route-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/snackbar-controller.d.ts","../../../node_modules/@operato/shell/dist/src/controllers/index.d.ts","../../../node_modules/@operato/shell/dist/src/index.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/redux/dist/redux.d.ts","../../../node_modules/immer/dist/immer.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/reselect/dist/reselect.d.ts","../../../node_modules/@reduxjs/toolkit/node_modules/redux-thunk/dist/redux-thunk.d.ts","../../../node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts","../../../node_modules/@reduxjs/toolkit/dist/index.d.ts","../client/actions/auth.ts","../client/reducers/auth.ts","../../../node_modules/lit-html/async-directive.d.ts","../../../node_modules/lit/async-directive.d.ts","../client/profiled.ts","../client/directive/privileged.ts","../client/bootstrap.ts","../../../node_modules/@simplewebauthn/browser/script/types/dom.d.ts","../../../node_modules/@simplewebauthn/browser/script/types/index.d.ts","../../../node_modules/@simplewebauthn/browser/script/methods/startregistration.d.ts","../../../node_modules/@simplewebauthn/browser/script/methods/startauthentication.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/browsersupportswebauthn.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/platformauthenticatorisavailable.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/browsersupportswebauthnautofill.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/base64urlstringtobuffer.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/buffertobase64urlstring.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/webauthnabortservice.d.ts","../../../node_modules/@simplewebauthn/browser/script/helpers/webauthnerror.d.ts","../../../node_modules/@simplewebauthn/browser/script/index.d.ts","../client/verify-webauthn.ts","../client/index.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[131,181,198,199],[131,181,198,199,234],[77,78,131,181,198,199],[72,73,74,75,131,181,198,199],[85,131,181,198,199],[69,131,181,198,199],[90,91,92,93,94,95,96,131,181,198,199],[68,71,76,86,87,88,89,97,131,181,198,199],[69,70,131,181,198,199],[63,64,65,66,67,131,181,198,199],[64,65,131,181,198,199],[63,64,66,131,181,198,199],[99,100,101,102,103,131,181,198,199],[60,131,181,198,199],[99,131,181,198,199],[113,114,115,116,117,118,119,120,121,122,131,181,198,199],[113,131,181,198,199],[112,131,181,198,199],[131,181,198,199,236,239],[131,178,179,181,198,199],[131,180,181,198,199],[181,198,199],[131,181,186,198,199,216],[131,181,182,187,192,198,199,201,213,224],[131,181,182,183,192,198,199,201],[126,127,128,131,181,198,199],[131,181,184,198,199,225],[131,181,185,186,193,198,199,202],[131,181,186,198,199,213,221],[131,181,187,189,192,198,199,201],[131,180,181,188,198,199],[131,181,189,190,198,199],[131,181,191,192,198,199],[131,180,181,192,198,199],[131,181,192,193,194,198,199,213,224],[131,181,192,193,194,198,199,208,213,216],[131,173,181,189,192,195,198,199,201,213,224],[131,181,192,193,195,196,198,199,201,213,221,224],[131,181,195,197,198,199,213,221,224],[129,130,131,132,133,134,135,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[131,181,192,198,199],[131,181,198,199,200,224],[131,181,189,192,198,199,201,213],[131,181,198,199,202],[131,181,198,199,203],[131,180,181,198,199,204],[131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[131,181,198,199,206],[131,181,198,199,207],[131,181,192,198,199,208,209],[131,181,198,199,208,210,225,227],[131,181,193,198,199],[131,181,192,198,199,213,214,216],[131,181,198,199,215,216],[131,181,198,199,213,214],[131,181,198,199,216],[131,181,198,199,217],[131,178,181,198,199,213,218,224],[131,181,192,198,199,219,220],[131,181,198,199,219,220],[131,181,186,198,199,201,213,221],[131,181,198,199,222],[131,181,198,199,201,223],[131,181,195,198,199,207,224],[131,181,186,198,199,225],[131,181,198,199,213,226],[131,181,198,199,200,227],[131,181,198,199,228],[131,173,181,198,199],[131,173,181,192,194,198,199,204,213,216,224,226,227,229],[131,181,198,199,213,230],[131,181,198,199,232,238],[131,181,198,199,236],[131,181,198,199,233,237],[79,82,131,181,198,199],[80,82,131,181,198,199],[82,131,181,198,199],[80,81,131,181,198,199],[107,131,181,198,199],[79,82,83,84,131,181,198,199],[131,181,198,199,235],[131,145,149,181,198,199,224],[131,145,181,198,199,213,224],[131,140,181,198,199],[131,142,145,181,198,199,221,224],[131,181,198,199,201,221],[131,181,198,199,231],[131,140,181,198,199,231],[131,142,145,181,198,199,201,224],[131,137,138,141,144,181,192,198,199,213,224],[131,145,152,181,198,199],[131,137,143,181,198,199],[131,145,166,167,181,198,199],[131,141,145,181,198,199,216,224,231],[131,166,181,198,199,231],[131,139,140,181,198,199,231],[131,145,181,198,199],[131,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,169,170,171,172,181,198,199],[131,145,160,181,198,199],[131,145,152,153,181,198,199],[131,143,145,153,154,181,198,199],[131,144,181,198,199],[131,137,140,145,181,198,199],[131,145,149,153,154,181,198,199],[131,149,181,198,199],[131,143,145,148,181,198,199,224],[131,137,142,145,152,181,198,199],[131,181,198,199,213],[131,140,145,166,181,198,199,229,231],[60,104,131,181,198,199],[60,61,62,98,105,106,110,131,181,198,199],[60,85,108,109,131,181,198,199],[60,61,62,109,110,124,131,181,198,199],[60,62,131,181,198,199],[60,105,131,181,198,199],[60,123,131,181,198,199]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"a7a3212a86d7b7056d4f2bc603ab4e4617e60c4c1de43f7f748a7fe49e34b716","signature":"5f134c4c2c11151cc2fb386434a43e64216c5cda94652d54480b8c345f0a8765"},{"version":"116b5d05f8e96a037535630db93d5f287b2c1e391236ee789b390d92c55480d6","signature":"1d9de26d14590958541b7bcf5d1b219be0f98054bafbc5d2e79e4c7c5f4420e7"},{"version":"4d4cf93a6b4c81851ad759e4569b6feb7a701e80b13a6f9d8d9c6012bbb86bd6","impliedFormat":99},{"version":"2e6035af8f3e43bf95e4983329c8277d66f9b271106af27b99a85d1c1b9daf4a","impliedFormat":99},{"version":"df32d43311e85715e2a573239a4bbc5b78ebaf29af2af5fa8c85370197997515","impliedFormat":99},{"version":"3a792bbf677343364a1d9b7197c6e4e512764f17364efd656b1a3598f2a9e820","impliedFormat":99},{"version":"3d7c0b593a29d717b2b2ba3f03f819c3c48bf9e250d79c4a31860af80f177e8c","impliedFormat":99},{"version":"e576aa80090f8b6020355ca8d7f4184067c84389f4b92125be29e03b1f6c5194","impliedFormat":99},{"version":"fd624f7d7b264922476685870f08c5e1c6d6a0f05dee2429a9747b41f6b699d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"487213b1bcbdaa470cf59a4cea3f8a939b9222e74b455fe0fd2f0dc2346cc3c0","impliedFormat":99},{"version":"8a9e962b8c98aa48377773c40ac7a3e530fb3354cec48fdb59d8e2df3a624a0c","affectsGlobalScope":true,"impliedFormat":99},{"version":"641089f0b8094ef74b9d4b3364d5dec1592d5e3b8a51c1ba491bc8872049e79a","impliedFormat":99},{"version":"8e33e65ce7fcd3cb20e29505452daa51543003d5db597f1aca2a51ff9043c8a7","impliedFormat":99},{"version":"b42033bf1067564808e4d360d79281667c2b3b0792c2d615ab641eb85974d4ba","impliedFormat":99},{"version":"7af29b0589483f7bb8a99405ddb849f34bc053146184561ed4179e02f5fe4d0f","impliedFormat":99},{"version":"ad3ee9f7d14ad8b7ae8094d0f1a2276656f7a970827d4030d1dead7c2d765f75","impliedFormat":99},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"9c7568f9c75cf6a7d35dc9f18c5971cd5b21344c686c7cce56b3558d3305d40f","impliedFormat":99},{"version":"fc48282c397084016a939e1b3f91dcaf4199b6cba339d91d8b2dc2acade79762","impliedFormat":99},{"version":"3e62a55b950132d6eeacc607b7a1bff990d5484347b2be5a1f54db51af30ff25","impliedFormat":99},{"version":"8b86f33b7e06e2f0a3bf4703cf9d8b0baab016e36b83f2a33dac184f061e17ea","impliedFormat":99},{"version":"88c205bacab539d8e844b80a1ec76fc649fbc731f12dfd7cca160976b5ddfd5a","impliedFormat":99},{"version":"565d32dce0b8761e7cfafe40c56a8a0fab0bb9e7bb35a31d9712643b3c8dbbc4","impliedFormat":99},{"version":"4bde12afd6fdd6e52d7316e00adfbccd70becc3ebd9c4f647d07caef53a474ae","impliedFormat":99},{"version":"a7e588bdba05f1fb78f83e50ee62c93565134d3b996babf2697c2b43fcf17ce0","impliedFormat":99},{"version":"218a0f93d7091c68718ec4260f41f3a61b5ecb7e786a8c04e296292ff41db8f0","impliedFormat":99},{"version":"cf45487aeb18b31f1001b99d06793986ac3e6840b0602f9cf3756a2724348bf4","impliedFormat":99},{"version":"81f0a95843ae6e5a006addc4b5c217b075057ff82c9bc319655de21a13ba9f10","impliedFormat":99},{"version":"1a68f44e90ac5c261a3157004a7ec18759982b91fd725537d6db919d83601dd1","impliedFormat":99},{"version":"bb9f78774fda656644386e88b8522ddf5da7b9a2eeaf1df18dc4f5bef7bb8bbb","impliedFormat":99},{"version":"f734b58ea162765ff4d4a36f671ee06da898921e985a2064510f4925ec1ed062","affectsGlobalScope":true,"impliedFormat":1},{"version":"57658b130a56abe2ba4f7eb1490038f0b31aa2f3cc2e42d24032626fcf6b1be3","impliedFormat":1},{"version":"d602ffb629af03e2a9c0858f9a0dcd790bfe92fe9a967b968bc35cfb3c58e68a","impliedFormat":1},{"version":"9c5c84c449a3d74e417343410ba9f1bd8bfeb32abd16945a1b3d0592ded31bc8","impliedFormat":1},{"version":"a7f09d2aaf994dbfd872eda4f2411d619217b04dbe0916202304e7a3d4b0f5f8","impliedFormat":1},{"version":"86ac756569f83cf0571646c916b546634652e92a775e964304912ecafa81dc42","impliedFormat":1},{"version":"35d2253283b5bcabd4868955daffeaed9b4e282c7cb0b4148dfdcd9dae0fd536","signature":"59407654647c0831f7ff4a9b4634cb71bb84489332362161ed31eedf22cd19e3"},{"version":"f30b1a6eb8c7813c82a7ec4f775ec257b6381d3f90521d0909224e4ea1320c11","signature":"6a716b8d3a52002354a3e530ee6c90d52209af1f53eaefb9c4527228bf0a6f67"},{"version":"c42f9b18f5f559b133cf9b409f678afb30df9c6498865aae9a1abad0f1e727a8","impliedFormat":99},{"version":"eabff483c855b848eefb979dbfb64c8858444c56a2f3ea0e59de026ef03fd089","impliedFormat":99},{"version":"5b206e920675fab40846ba051f960c659641b87cd7c96ab305430a4d194d60ea","signature":"d75a3e4665db49528093a3d868b69a53ac6bfc368b232d4db3130fd0a5e543c2"},{"version":"899e65531fad0a9d3919d74807fedbd4d4a81d27c1b8f20a571c41415f809a84","signature":"08c15205c0ba0a9bc25bde594fea32eb055e6ae3e4976605d211caae7cfce25c"},{"version":"85e8e2c95b3392357e552bd0a0743ea6f6bf6f4c3171c50784eb478e44d4625b","signature":"596db3582d22224cd33f191d8a1a39020114727f4d8957922e31335d8ae79312"},{"version":"bf0417239296a11383a61200870c123f6c9e5b5caf85cf2157b4a6e5c7a95fcb","impliedFormat":1},{"version":"f2aea0e6fbad26c1cbd6c51fad9d45efff5497f8b7cb571492eb08d84ed87927","impliedFormat":1},{"version":"921f399a6557f008bd36b4bc8dd6e8ac18575029d3271f5515ad82ee5b7f172e","impliedFormat":1},{"version":"21d0c1a87611b1e7fe1a7763e5e5c494dfa0b3cf1307ce829145c397e971969b","impliedFormat":1},{"version":"8c468d84a4116a378a6c6050a86f5441efa036faa235834ef204fdbfe8c17943","impliedFormat":1},{"version":"0a1c65731eb1680e494e0b485ff3a4106e29323b9f5931da23d9a612cbe84e45","impliedFormat":1},{"version":"a331abe7151957a7266888db8a11eb72da8bed8ceee46cc187dd280ebd89c619","impliedFormat":1},{"version":"1f1d06065bf428cbc1cc9e9a0ea0d32a4cf10bcfd3e87dfcd1a5422262d41d55","impliedFormat":1},{"version":"6ea653d5c31c1bb800010ef040494a1fc5e4ce0cda8b9786124f0e7018993cb3","impliedFormat":1},{"version":"80d2736093ff441d579360306b062e2441fc8100b3fb3a90691bc0f533fa6382","impliedFormat":1},{"version":"cde0d6a59761c6dd05836af4f8684e420e6df695fa22f94cc09cc9ddcec7cef7","impliedFormat":1},{"version":"686660ddef40e8aacc8ee90a1fb5e1969c640177657a5e068a7e2dd2fb9a6e76","impliedFormat":1},{"version":"997c14dffeb1bbffe14e7f79307295aa83d7ef1ee38762c13514d53ae43d2ede","signature":"e899b1dbfb78597e87307ffaccf5617114bfc97fd39a0b773cbefebfd5c3a870"},{"version":"36b559565d00cf6f00ca4c72b63f98b17a97b3202b4b1e15aa0072e9b2b36749","signature":"b4e5bad8d876a91492d122e50592b733b03c989e6272bf51f4d54271437afedb"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[61,62,105,106,[109,111],124,125],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"useDefineForClassFields":false},"referencedMap":[[232,1],[235,2],[77,1],[78,1],[79,3],[72,1],[74,1],[75,1],[76,4],[73,1],[86,5],[89,6],[90,5],[91,5],[92,5],[97,7],[93,5],[94,5],[95,5],[96,5],[88,1],[98,8],[70,6],[87,1],[71,9],[63,1],[68,10],[66,11],[65,12],[67,1],[64,1],[104,13],[103,14],[102,15],[99,1],[101,1],[119,1],[116,1],[118,1],[120,1],[117,1],[121,1],[122,1],[123,16],[115,17],[114,17],[112,1],[113,18],[234,1],[240,19],[178,20],[179,20],[180,21],[131,22],[181,23],[182,24],[183,25],[126,1],[129,26],[127,1],[128,1],[184,27],[185,28],[186,29],[187,30],[188,31],[189,32],[190,32],[191,33],[192,34],[193,35],[194,36],[132,1],[130,1],[195,37],[196,38],[197,39],[231,40],[198,41],[199,1],[200,42],[201,43],[202,44],[203,45],[204,46],[205,47],[206,48],[207,49],[208,50],[209,50],[210,51],[211,1],[212,52],[213,53],[215,54],[214,55],[216,56],[217,57],[218,58],[219,59],[220,60],[221,61],[222,62],[223,63],[224,64],[225,65],[226,66],[227,67],[228,68],[133,1],[134,1],[135,1],[174,69],[175,1],[176,1],[177,56],[229,70],[230,71],[81,1],[136,1],[233,1],[239,72],[100,1],[237,73],[238,74],[83,75],[107,76],[80,77],[84,1],[82,78],[108,79],[85,80],[236,81],[69,1],[60,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[152,82],[162,83],[151,82],[172,84],[143,85],[142,86],[171,87],[165,88],[170,89],[145,90],[159,91],[144,92],[168,93],[140,94],[139,87],[169,95],[141,96],[146,97],[147,1],[150,97],[137,1],[173,98],[163,99],[154,100],[155,101],[157,102],[153,103],[156,104],[166,87],[148,105],[149,106],[158,107],[138,108],[161,99],[160,97],[164,1],[167,109],[105,110],[61,14],[62,14],[111,111],[110,112],[125,113],[109,114],[106,115],[124,116]],"version":"5.9.3"}
|
|
@@ -18,6 +18,7 @@ export declare function updateProfile({ id }: {
|
|
|
18
18
|
status: import("../service/user/user.js").UserStatus;
|
|
19
19
|
failCount: number;
|
|
20
20
|
passwordUpdatedAt: Date;
|
|
21
|
+
lockedAt: Date;
|
|
21
22
|
owner: boolean;
|
|
22
23
|
credentials: import("../index.js").WebAuthCredential[];
|
|
23
24
|
usersAuthProviders: import("../index.js").UsersAuthProviders[];
|
|
@@ -6,6 +6,8 @@ const shell_1 = require("@things-factory/shell");
|
|
|
6
6
|
const unlock_user_js_1 = require("../controllers/unlock-user.js");
|
|
7
7
|
const auth_error_js_1 = require("../errors/auth-error.js");
|
|
8
8
|
const user_js_1 = require("../service/user/user.js");
|
|
9
|
+
const account_lock_rule_js_1 = require("../utils/account-lock-rule.js");
|
|
10
|
+
const lock_duration_js_1 = require("../utils/lock-duration.js");
|
|
9
11
|
async function signin(attrs, context) {
|
|
10
12
|
const { domain } = context?.state || {};
|
|
11
13
|
const { username } = attrs;
|
|
@@ -32,22 +34,41 @@ async function signin(attrs, context) {
|
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
if (user.status == user_js_1.UserStatus.LOCKED) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
/* 시계는 한 번만 읽는다 — 두 번 읽으면 경계에 걸린 잠금이 두 판정 사이에서 갈린다. */
|
|
38
|
+
const now = new Date();
|
|
39
|
+
if ((0, account_lock_rule_js_1.isAccountLocked)(user, now, (0, lock_duration_js_1.lockDurationMinutes)())) {
|
|
40
|
+
(0, unlock_user_js_1.sendUnlockUserEmail)({
|
|
41
|
+
user,
|
|
42
|
+
context
|
|
43
|
+
});
|
|
44
|
+
throw new auth_error_js_1.AuthError({
|
|
45
|
+
errorCode: auth_error_js_1.AuthError.ERROR_CODES.USER_LOCKED,
|
|
46
|
+
detail: {
|
|
47
|
+
username: user.username,
|
|
48
|
+
email: user.email
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/*
|
|
53
|
+
* 시간이 지나 스스로 풀렸다 — 그 자리에서 행을 되돌리고 계속 진행한다. 주기 작업으로
|
|
54
|
+
* 풀지 않는 이유는 `account-lock-rule.ts` 에 있다(계정이 10만이면 그것이 따로 일이 된다).
|
|
55
|
+
*
|
|
56
|
+
* `failCount` 도 함께 0 으로 둔다. 그래서 **잠금이 곧 실패 셈의 창**이 된다 — 이 계정이
|
|
57
|
+
* 다시 잠기려면 지금부터 다섯 번을 틀려야 한다.
|
|
58
|
+
*/
|
|
59
|
+
user.status = user_js_1.UserStatus.ACTIVATED;
|
|
60
|
+
user.failCount = 0;
|
|
61
|
+
user.lockedAt = null;
|
|
62
|
+
await repository.save(user);
|
|
46
63
|
}
|
|
47
64
|
if (!user_js_1.User.verify(user.password, attrs.password, user.salt)) {
|
|
48
65
|
user.failCount++;
|
|
49
|
-
if (user.failCount >= 5)
|
|
66
|
+
if (user.failCount >= 5) {
|
|
50
67
|
user.status = user_js_1.UserStatus.LOCKED;
|
|
68
|
+
/* 언제 풀리나를 계산할 수 있게 시각을 남긴다. 이 칸이 비면 판정 규칙이
|
|
69
|
+
잠금을 유지하는 쪽으로 기운다. */
|
|
70
|
+
user.lockedAt = new Date();
|
|
71
|
+
}
|
|
51
72
|
await repository.save(user);
|
|
52
73
|
if (user.status == user_js_1.UserStatus.LOCKED) {
|
|
53
74
|
(0, unlock_user_js_1.sendUnlockUserEmail)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signin.js","sourceRoot":"","sources":["../../server/controllers/signin.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"signin.js","sourceRoot":"","sources":["../../server/controllers/signin.ts"],"names":[],"mappings":";;AASA,wBAiHC;AA1HD,qCAA+B;AAC/B,iDAAqD;AAErD,kEAAmE;AACnE,2DAAmD;AACnD,qDAA0D;AAC1D,wEAA+D;AAC/D,gEAA+D;AAExD,KAAK,UAAU,MAAM,CAAC,KAA6C,EAAE,OAAQ;IAClF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAA;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAE1B,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,cAAI,CAAC,CAAA;IAEtC,IAAI,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAClC,KAAK,EAAE,EAAE,QAAQ,EAAE;QACnB,SAAS,EAAE,CAAC,SAAS,CAAC;KACvB,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,IAAI,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YAC9B,KAAK,EAAE;gBACL,KAAK,EAAE,IAAA,eAAK,EAAC,QAAQ,CAAC;aACvB;YACD,SAAS,EAAE,CAAC,SAAS,CAAC;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,yBAAS,CAAC;YAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,cAAc;SAChD,CAAC,CAAA;IAEJ,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,yBAAS,CAAC;YAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,YAAY;SAC9C,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAU,CAAC,MAAM,EAAE,CAAC;QACrC,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QAEtB,IAAI,IAAA,sCAAe,EAAC,IAAI,EAAE,GAAG,EAAE,IAAA,sCAAmB,GAAE,CAAC,EAAE,CAAC;YACtD,IAAA,oCAAmB,EAAC;gBAClB,IAAI;gBACJ,OAAO;aACR,CAAC,CAAA;YACF,MAAM,IAAI,yBAAS,CAAC;gBAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,WAAW;gBAC5C,MAAM,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAA;QACJ,CAAC;QAED;;;;;;WAMG;QACH,IAAI,CAAC,MAAM,GAAG,oBAAU,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,CAAC,cAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,SAAS,EAAE,CAAA;QAChB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,oBAAU,CAAC,MAAM,CAAA;YAC/B;mCACuB;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5B,CAAC;QACD,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAU,CAAC,MAAM,EAAE,CAAC;YACrC,IAAA,oCAAmB,EAAC;gBAClB,IAAI;gBACJ,OAAO;aACR,CAAC,CAAA;YACF,MAAM,IAAI,yBAAS,CAAC;gBAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,WAAW;gBAC5C,MAAM,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,IAAI,yBAAS,CAAC;YAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,oBAAoB;YACrD,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;SACF,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAU,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,yBAAS,CAAC;YAClB,SAAS,EAAE,yBAAS,CAAC,WAAW,CAAC,kBAAkB;YACnD,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;KAC5B,CAAA;AACH,CAAC","sourcesContent":["import { ILike } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\n\nimport { sendUnlockUserEmail } from '../controllers/unlock-user.js'\nimport { AuthError } from '../errors/auth-error.js'\nimport { User, UserStatus } from '../service/user/user.js'\nimport { isAccountLocked } from '../utils/account-lock-rule.js'\nimport { lockDurationMinutes } from '../utils/lock-duration.js'\n\nexport async function signin(attrs: { username: string; password: string }, context?) {\n const { domain } = context?.state || {}\n const { username } = attrs\n\n const repository = getRepository(User)\n\n var user = await repository.findOne({\n where: { username },\n relations: ['domains']\n })\n\n if (!user && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(username)) {\n user = await repository.findOne({\n where: {\n email: ILike(username)\n },\n relations: ['domains']\n })\n }\n\n if (!user)\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.USER_NOT_FOUND\n })\n\n if (user.status == UserStatus.DELETED) {\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.USER_DELETED\n })\n }\n\n if (user.status == UserStatus.LOCKED) {\n /* 시계는 한 번만 읽는다 — 두 번 읽으면 경계에 걸린 잠금이 두 판정 사이에서 갈린다. */\n const now = new Date()\n\n if (isAccountLocked(user, now, lockDurationMinutes())) {\n sendUnlockUserEmail({\n user,\n context\n })\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.USER_LOCKED,\n detail: {\n username: user.username,\n email: user.email\n }\n })\n }\n\n /*\n * 시간이 지나 스스로 풀렸다 — 그 자리에서 행을 되돌리고 계속 진행한다. 주기 작업으로\n * 풀지 않는 이유는 `account-lock-rule.ts` 에 있다(계정이 10만이면 그것이 따로 일이 된다).\n *\n * `failCount` 도 함께 0 으로 둔다. 그래서 **잠금이 곧 실패 셈의 창**이 된다 — 이 계정이\n * 다시 잠기려면 지금부터 다섯 번을 틀려야 한다.\n */\n user.status = UserStatus.ACTIVATED\n user.failCount = 0\n user.lockedAt = null\n\n await repository.save(user)\n }\n\n if (!User.verify(user.password, attrs.password, user.salt)) {\n user.failCount++\n if (user.failCount >= 5) {\n user.status = UserStatus.LOCKED\n /* 언제 풀리나를 계산할 수 있게 시각을 남긴다. 이 칸이 비면 판정 규칙이\n 잠금을 유지하는 쪽으로 기운다. */\n user.lockedAt = new Date()\n }\n await repository.save(user)\n if (user.status == UserStatus.LOCKED) {\n sendUnlockUserEmail({\n user,\n context\n })\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.USER_LOCKED,\n detail: {\n username: user.username,\n email: user.email\n }\n })\n }\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.PASSWORD_NOT_MATCHED,\n detail: {\n username: user.username,\n email: user.email,\n failCount: user.failCount\n }\n })\n } else {\n user.failCount = 0\n await repository.save(user)\n }\n\n if (user.status == UserStatus.INACTIVE) {\n throw new AuthError({\n errorCode: AuthError.ERROR_CODES.USER_NOT_ACTIVATED,\n detail: {\n username: user.username,\n email: user.email\n }\n })\n }\n\n return {\n user,\n token: await user.sign({ subdomain: domain?.subdomain }),\n domains: user.domains || []\n }\n}\n"]}
|
|
@@ -33,14 +33,33 @@ async function sendUnlockUserEmail({ user, context }) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
async function unlockUser(token, password) {
|
|
36
|
-
|
|
36
|
+
/*
|
|
37
|
+
* An absent condition is not a narrow condition — TypeORM drops `undefined` from `where`.
|
|
38
|
+
*
|
|
39
|
+
* Without this guard, a call with no token searched `{ type: UNLOCK }` alone and matched
|
|
40
|
+
* **anyone's** pending unlock token, then handed that account the password the caller chose.
|
|
41
|
+
* Both halves are reachable without credentials: five wrong guesses lock a victim and mint the
|
|
42
|
+
* token, and `/auth/unlock-user` accepted a body with a password and no token because its own
|
|
43
|
+
* guard read `!(token || password)`.
|
|
44
|
+
*
|
|
45
|
+
* [확인함] 2026-09-09 · locked a victim by failing signin five times, posted a password with no
|
|
46
|
+
* token, and signed in as them — status activated, failCount 0, password the attacker's.
|
|
47
|
+
*/
|
|
48
|
+
if (!token || !password) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const verification = await (0, shell_1.getRepository)(verification_token_js_1.VerificationToken).findOne({
|
|
37
52
|
where: {
|
|
38
53
|
token,
|
|
39
54
|
type: verification_token_js_1.VerificationTokenType.UNLOCK
|
|
40
55
|
}
|
|
41
56
|
});
|
|
42
|
-
|
|
57
|
+
/* Refuse a token that is gone, rather than destructuring null — a reused link showed the
|
|
58
|
+
screen a 500 instead of a reason. `resetPassword` refuses the same way. */
|
|
59
|
+
if (!verification?.userId) {
|
|
43
60
|
return false;
|
|
61
|
+
}
|
|
62
|
+
const { userId } = verification;
|
|
44
63
|
var userInfo = await (0, shell_1.getRepository)(user_js_1.User).findOneBy({ id: userId });
|
|
45
64
|
if (!userInfo)
|
|
46
65
|
return false;
|