@draggable/i18n 1.1.1 → 1.2.0
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/README.md +207 -8
- package/dist/i18n.cjs +9 -0
- package/dist/i18n.cjs.min.js +3 -3
- package/dist/i18n.cjs.min.js.gz +0 -0
- package/dist/i18n.d.cts +131 -0
- package/dist/i18n.d.ts +131 -0
- package/dist/i18n.es.min.js +3 -3
- package/dist/i18n.es.min.js.gz +0 -0
- package/dist/i18n.iife.min.js +3 -3
- package/dist/i18n.iife.min.js.gz +0 -0
- package/dist/i18n.umd.min.js +3 -3
- package/dist/i18n.umd.min.js.gz +0 -0
- package/package.json +26 -4
package/dist/i18n.d.cts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** A language: translation keys mapped to strings */
|
|
2
|
+
export type LanguageStrings = Record<string, string>
|
|
3
|
+
|
|
4
|
+
/** Languages keyed by locale, eg. `{ 'en-US': { hello: 'Hello' } }` */
|
|
5
|
+
export type Languages = Record<string, LanguageStrings>
|
|
6
|
+
|
|
7
|
+
/** Arguments for placeholder substitution: an object of named values or a single primitive for every token */
|
|
8
|
+
export type I18NArgs = Record<string, unknown> | string | number | boolean | null | undefined
|
|
9
|
+
|
|
10
|
+
/** Passed to `onMissing` when a key or a placeholder argument is missing */
|
|
11
|
+
export interface MissingInfo {
|
|
12
|
+
/** translation key that was requested */
|
|
13
|
+
key: string
|
|
14
|
+
/** locale that was requested */
|
|
15
|
+
locale: string
|
|
16
|
+
/** `'key'` when the translation is missing, `'arg'` when a placeholder has no value */
|
|
17
|
+
type: 'key' | 'arg'
|
|
18
|
+
/** placeholder name, only set when `type` is `'arg'` */
|
|
19
|
+
arg?: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Return a string to use it in place of the missing key or argument */
|
|
23
|
+
export type OnMissingHandler = (info: MissingInfo) => string | void
|
|
24
|
+
|
|
25
|
+
export interface I18NOptions {
|
|
26
|
+
/** extension of remote language files, default `'.lang'` */
|
|
27
|
+
extension?: string
|
|
28
|
+
/** local or remote directory containing language files, default `'assets/lang/'` */
|
|
29
|
+
location?: string
|
|
30
|
+
/** list of available locales, default `['en-US']` */
|
|
31
|
+
langs?: string[]
|
|
32
|
+
/** initial locale, defaults to the first of `langs` when falsy, default `'en-US'` */
|
|
33
|
+
locale?: string | null
|
|
34
|
+
/** languages available without fetching */
|
|
35
|
+
preloaded?: Languages
|
|
36
|
+
/** keys that take precedence over loaded and preloaded languages */
|
|
37
|
+
override?: Languages
|
|
38
|
+
/**
|
|
39
|
+
* Locale(s) to fall back to when a key is missing. Lookup order: requested locale,
|
|
40
|
+
* its base language if loaded (`pt-BR` → `pt`), then each fallback locale.
|
|
41
|
+
* When set, empty string values count as present.
|
|
42
|
+
*/
|
|
43
|
+
fallbackLocale?: string | string[]
|
|
44
|
+
/** called for missing keys (in `get`/`t`) and missing placeholder arguments */
|
|
45
|
+
onMissing?: OnMissingHandler
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface I18NConfig extends I18NOptions {
|
|
49
|
+
extension: string
|
|
50
|
+
location: string
|
|
51
|
+
langs: string[]
|
|
52
|
+
override: Languages
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type TranslateFunction = (key: string, args?: I18NArgs) => string
|
|
56
|
+
|
|
57
|
+
export interface I18NInstance {
|
|
58
|
+
config: I18NConfig
|
|
59
|
+
/** loaded languages keyed by locale */
|
|
60
|
+
langs: Languages
|
|
61
|
+
/** locales that have been loaded */
|
|
62
|
+
loaded: string[]
|
|
63
|
+
/** current locale */
|
|
64
|
+
locale: string
|
|
65
|
+
/** current language, set by `setCurrent()` / `init()` */
|
|
66
|
+
current?: LanguageStrings
|
|
67
|
+
/** available locales */
|
|
68
|
+
readonly getLangs: string[]
|
|
69
|
+
|
|
70
|
+
/** parse and apply options, does not fetch */
|
|
71
|
+
processConfig(options?: I18NOptions): void
|
|
72
|
+
/** apply options and load the current (and fallback) locale */
|
|
73
|
+
init(options?: I18NOptions): Promise<LanguageStrings>
|
|
74
|
+
/** add a language from an object or `.lang` file contents */
|
|
75
|
+
addLanguage(locale: string, lang?: LanguageStrings | string): void
|
|
76
|
+
/** merge a language (and its overrides) into the loaded languages */
|
|
77
|
+
applyLanguage(locale: string, lang?: LanguageStrings): LanguageStrings
|
|
78
|
+
/** fetch a language file, cached unless `useCache` is false */
|
|
79
|
+
loadLang(locale: string, useCache?: boolean): Promise<LanguageStrings>
|
|
80
|
+
/** load a language if needed and make it current */
|
|
81
|
+
setCurrent(locale?: string): Promise<LanguageStrings>
|
|
82
|
+
|
|
83
|
+
/** translated string with placeholders replaced, or undefined when missing */
|
|
84
|
+
get(key: string, args?: I18NArgs, locale?: string): string | undefined
|
|
85
|
+
/** translated string with placeholders replaced, falls back to the key */
|
|
86
|
+
t(key: string, args?: I18NArgs, locale?: string): string
|
|
87
|
+
/** `t` bound to a locale */
|
|
88
|
+
forLocale(locale: string): TranslateFunction
|
|
89
|
+
/** raw string for a key, without placeholder replacement or plurals */
|
|
90
|
+
getValue(key: string, locale?: string): string | undefined
|
|
91
|
+
/** first loaded language containing the key */
|
|
92
|
+
getFallbackValue(key: string): string | undefined
|
|
93
|
+
/** plural form of a key (`key.zero`, `key.one`, `key.other`, ...) */
|
|
94
|
+
getPluralValue(key: string, count: number, locale?: string): string | undefined
|
|
95
|
+
/** configured fallback locales */
|
|
96
|
+
getFallbackLocales(): string[]
|
|
97
|
+
/** locales checked in order when `fallbackLocale` is configured */
|
|
98
|
+
getLocaleChain(locale?: string): string[]
|
|
99
|
+
/** set a string in the current language or the given locale */
|
|
100
|
+
put(key: string, string: string, locale?: string): string
|
|
101
|
+
/** RegExp matching a placeholder token literally */
|
|
102
|
+
makeSafe(str: string): RegExp
|
|
103
|
+
/** invoke `onMissing`, returns its string result */
|
|
104
|
+
handleMissing(info: MissingInfo): string | undefined
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface I18NConstructor {
|
|
108
|
+
/** create a new instance */
|
|
109
|
+
new (options?: I18NOptions): I18NInstance
|
|
110
|
+
/** get the singleton instance, options are only used when it is first created */
|
|
111
|
+
(options?: I18NOptions): I18NInstance
|
|
112
|
+
readonly prototype: I18NInstance
|
|
113
|
+
|
|
114
|
+
/** parse `.lang` file contents */
|
|
115
|
+
processFile(text: string): LanguageStrings
|
|
116
|
+
/** parse `.lang` file contents */
|
|
117
|
+
fromFile(text: string): LanguageStrings
|
|
118
|
+
/** parse `.lang` file contents, alias of `processFile` */
|
|
119
|
+
parse(text: string): LanguageStrings
|
|
120
|
+
/** get the singleton instance, options are only used when it is first created */
|
|
121
|
+
getInstance(options?: I18NOptions): I18NInstance
|
|
122
|
+
/** discard the singleton instance, the default export keeps its reference */
|
|
123
|
+
resetInstance(): void
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export declare const I18N: I18NConstructor
|
|
127
|
+
export type I18N = I18NInstance
|
|
128
|
+
|
|
129
|
+
/** singleton instance */
|
|
130
|
+
declare const i18n: I18NInstance
|
|
131
|
+
export default i18n
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** A language: translation keys mapped to strings */
|
|
2
|
+
export type LanguageStrings = Record<string, string>
|
|
3
|
+
|
|
4
|
+
/** Languages keyed by locale, eg. `{ 'en-US': { hello: 'Hello' } }` */
|
|
5
|
+
export type Languages = Record<string, LanguageStrings>
|
|
6
|
+
|
|
7
|
+
/** Arguments for placeholder substitution: an object of named values or a single primitive for every token */
|
|
8
|
+
export type I18NArgs = Record<string, unknown> | string | number | boolean | null | undefined
|
|
9
|
+
|
|
10
|
+
/** Passed to `onMissing` when a key or a placeholder argument is missing */
|
|
11
|
+
export interface MissingInfo {
|
|
12
|
+
/** translation key that was requested */
|
|
13
|
+
key: string
|
|
14
|
+
/** locale that was requested */
|
|
15
|
+
locale: string
|
|
16
|
+
/** `'key'` when the translation is missing, `'arg'` when a placeholder has no value */
|
|
17
|
+
type: 'key' | 'arg'
|
|
18
|
+
/** placeholder name, only set when `type` is `'arg'` */
|
|
19
|
+
arg?: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Return a string to use it in place of the missing key or argument */
|
|
23
|
+
export type OnMissingHandler = (info: MissingInfo) => string | void
|
|
24
|
+
|
|
25
|
+
export interface I18NOptions {
|
|
26
|
+
/** extension of remote language files, default `'.lang'` */
|
|
27
|
+
extension?: string
|
|
28
|
+
/** local or remote directory containing language files, default `'assets/lang/'` */
|
|
29
|
+
location?: string
|
|
30
|
+
/** list of available locales, default `['en-US']` */
|
|
31
|
+
langs?: string[]
|
|
32
|
+
/** initial locale, defaults to the first of `langs` when falsy, default `'en-US'` */
|
|
33
|
+
locale?: string | null
|
|
34
|
+
/** languages available without fetching */
|
|
35
|
+
preloaded?: Languages
|
|
36
|
+
/** keys that take precedence over loaded and preloaded languages */
|
|
37
|
+
override?: Languages
|
|
38
|
+
/**
|
|
39
|
+
* Locale(s) to fall back to when a key is missing. Lookup order: requested locale,
|
|
40
|
+
* its base language if loaded (`pt-BR` → `pt`), then each fallback locale.
|
|
41
|
+
* When set, empty string values count as present.
|
|
42
|
+
*/
|
|
43
|
+
fallbackLocale?: string | string[]
|
|
44
|
+
/** called for missing keys (in `get`/`t`) and missing placeholder arguments */
|
|
45
|
+
onMissing?: OnMissingHandler
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface I18NConfig extends I18NOptions {
|
|
49
|
+
extension: string
|
|
50
|
+
location: string
|
|
51
|
+
langs: string[]
|
|
52
|
+
override: Languages
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type TranslateFunction = (key: string, args?: I18NArgs) => string
|
|
56
|
+
|
|
57
|
+
export interface I18NInstance {
|
|
58
|
+
config: I18NConfig
|
|
59
|
+
/** loaded languages keyed by locale */
|
|
60
|
+
langs: Languages
|
|
61
|
+
/** locales that have been loaded */
|
|
62
|
+
loaded: string[]
|
|
63
|
+
/** current locale */
|
|
64
|
+
locale: string
|
|
65
|
+
/** current language, set by `setCurrent()` / `init()` */
|
|
66
|
+
current?: LanguageStrings
|
|
67
|
+
/** available locales */
|
|
68
|
+
readonly getLangs: string[]
|
|
69
|
+
|
|
70
|
+
/** parse and apply options, does not fetch */
|
|
71
|
+
processConfig(options?: I18NOptions): void
|
|
72
|
+
/** apply options and load the current (and fallback) locale */
|
|
73
|
+
init(options?: I18NOptions): Promise<LanguageStrings>
|
|
74
|
+
/** add a language from an object or `.lang` file contents */
|
|
75
|
+
addLanguage(locale: string, lang?: LanguageStrings | string): void
|
|
76
|
+
/** merge a language (and its overrides) into the loaded languages */
|
|
77
|
+
applyLanguage(locale: string, lang?: LanguageStrings): LanguageStrings
|
|
78
|
+
/** fetch a language file, cached unless `useCache` is false */
|
|
79
|
+
loadLang(locale: string, useCache?: boolean): Promise<LanguageStrings>
|
|
80
|
+
/** load a language if needed and make it current */
|
|
81
|
+
setCurrent(locale?: string): Promise<LanguageStrings>
|
|
82
|
+
|
|
83
|
+
/** translated string with placeholders replaced, or undefined when missing */
|
|
84
|
+
get(key: string, args?: I18NArgs, locale?: string): string | undefined
|
|
85
|
+
/** translated string with placeholders replaced, falls back to the key */
|
|
86
|
+
t(key: string, args?: I18NArgs, locale?: string): string
|
|
87
|
+
/** `t` bound to a locale */
|
|
88
|
+
forLocale(locale: string): TranslateFunction
|
|
89
|
+
/** raw string for a key, without placeholder replacement or plurals */
|
|
90
|
+
getValue(key: string, locale?: string): string | undefined
|
|
91
|
+
/** first loaded language containing the key */
|
|
92
|
+
getFallbackValue(key: string): string | undefined
|
|
93
|
+
/** plural form of a key (`key.zero`, `key.one`, `key.other`, ...) */
|
|
94
|
+
getPluralValue(key: string, count: number, locale?: string): string | undefined
|
|
95
|
+
/** configured fallback locales */
|
|
96
|
+
getFallbackLocales(): string[]
|
|
97
|
+
/** locales checked in order when `fallbackLocale` is configured */
|
|
98
|
+
getLocaleChain(locale?: string): string[]
|
|
99
|
+
/** set a string in the current language or the given locale */
|
|
100
|
+
put(key: string, string: string, locale?: string): string
|
|
101
|
+
/** RegExp matching a placeholder token literally */
|
|
102
|
+
makeSafe(str: string): RegExp
|
|
103
|
+
/** invoke `onMissing`, returns its string result */
|
|
104
|
+
handleMissing(info: MissingInfo): string | undefined
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface I18NConstructor {
|
|
108
|
+
/** create a new instance */
|
|
109
|
+
new (options?: I18NOptions): I18NInstance
|
|
110
|
+
/** get the singleton instance, options are only used when it is first created */
|
|
111
|
+
(options?: I18NOptions): I18NInstance
|
|
112
|
+
readonly prototype: I18NInstance
|
|
113
|
+
|
|
114
|
+
/** parse `.lang` file contents */
|
|
115
|
+
processFile(text: string): LanguageStrings
|
|
116
|
+
/** parse `.lang` file contents */
|
|
117
|
+
fromFile(text: string): LanguageStrings
|
|
118
|
+
/** parse `.lang` file contents, alias of `processFile` */
|
|
119
|
+
parse(text: string): LanguageStrings
|
|
120
|
+
/** get the singleton instance, options are only used when it is first created */
|
|
121
|
+
getInstance(options?: I18NOptions): I18NInstance
|
|
122
|
+
/** discard the singleton instance, the default export keeps its reference */
|
|
123
|
+
resetInstance(): void
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export declare const I18N: I18NConstructor
|
|
127
|
+
export type I18N = I18NInstance
|
|
128
|
+
|
|
129
|
+
/** singleton instance */
|
|
130
|
+
declare const i18n: I18NInstance
|
|
131
|
+
export default i18n
|
package/dist/i18n.es.min.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
@draggable/i18n - https://github.com/Draggable/i18n
|
|
4
|
-
Version: 1.1.
|
|
4
|
+
Version: 1.1.2
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
Object.freeze({method:"GET",body:""});var t={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",override:{}},e=null,n=new Proxy(class
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5lcy5taW4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2ZldGNoLmpzIiwiLi4vc3JjL21pMThuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRlZmF1bHRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSh7IG1ldGhvZDogJ0dFVCcsIGJvZHk6ICcnIH0pXG4vKipcbiAqIEZldGNoZXMgYSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGZldGNoLlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnM9e31dIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmZXRjaCByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnMuaGVhZGVyc10gLSBIZWFkZXJzIHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZldGNoT3B0aW9ucy5tZXRob2RdIC0gVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSAoZS5nLiwgJ0dFVCcsICdQT1NUJykuXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IFtmZXRjaE9wdGlvbnMuYm9keV0gLSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3BvbnNlIG9iamVjdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybi5vayAtIEluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAyMDAtMjk5LlxuICogQHJldHVybiB7bnVtYmVyfSByZXR1cm4uc3RhdHVzIC0gVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm4uc3RhdHVzVGV4dCAtIFRoZSBIVFRQIHN0YXR1cyBtZXNzYWdlIG9mIHRoZSByZXNwb25zZS5cbiAqIEByZXR1cm4ge01hcDxzdHJpbmcsIHN0cmluZz59IHJldHVybi5oZWFkZXJzIC0gVGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7QnVmZmVyfSByZXR1cm4uYm9keSAtIFRoZSBib2R5IG9mIHRoZSByZXNwb25zZSBhcyBhIEJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8QnVmZmVyPn0gcmV0dXJuLmFycmF5QnVmZmVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgYm9keSBhcyBhbiBBcnJheUJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8T2JqZWN0Pn0gcmV0dXJuLmpzb24gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBib2R5IHBhcnNlZCBhcyBKU09OLlxuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZXIgPSB1cmwuZW5kc1dpdGgoJy5sYW5nJykgPyAndGV4dCcgOiAnanNvbidcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2VbaGFuZGxlcl0oKVxuICAgIHJldHVybiBkYXRhXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVGhlcmUgaGFzIGJlZW4gYSBwcm9ibGVtIHdpdGggeW91ciBmZXRjaCBvcGVyYXRpb246JywgZXJyb3IpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwiaW1wb3J0IHsgZmV0Y2hEYXRhIH0gZnJvbSAnLi9mZXRjaC5qcydcblxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XG4gIGV4dGVuc2lvbjogJy5sYW5nJyxcbiAgLy8gbG9jYWwgb3IgcmVtb3RlIGRpcmVjdG9yeSBjb250YWluaW5nIGxhbmd1YWdlIGZpbGVzXG4gIGxvY2F0aW9uOiAnYXNzZXRzL2xhbmcvJyxcbiAgLy8gbGlzdCBvZiBhdmFpbGFibGUgbG9jYWxlcywgaGFuZHkgZm9yIHBvcHVsYXRpbmcgc2VsZWN0b3IuXG4gIGxhbmdzOiBbJ2VuLVVTJ10sXG4gIGxvY2FsZTogJ2VuLVVTJywgLy8gaW5pdCB3aXRoIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VcbiAgb3ZlcnJpZGU6IHt9LFxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2UgaG9sZGVyXG5sZXQgaW5zdGFuY2UgPSBudWxsXG5cbi8qKlxuICogTWFpbiBpMThuIGNsYXNzXG4gKiBAY2xhc3MgSTE4TkJhc2VcbiAqIEBjbGFzc2Rlc2MgbWV0aG9kcyBhbmQgZGF0YSBzdG9yZSBmb3IgaTE4blxuICovXG5jbGFzcyBJMThOQmFzZSB7XG4gIC8qKlxuICAgKiBQcm9jZXNzIG9wdGlvbnMgYW5kIHN0YXJ0IHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSBERUZBVUxUX0NPTkZJRykge1xuICAgIHRoaXMubGFuZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5sb2FkZWQgPSBbXVxuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyhvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuZCBmb3JtYXQgY29uZmlnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBwcm9jZXNzQ29uZmlnKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCAuLi5yZXN0T3B0aW9ucyB9ID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4ub3B0aW9ucyB9XG4gICAgLy8gRW5zdXJlIGxvY2F0aW9uIGVuZHMgd2l0aCBhIHNsYXNoXG4gICAgY29uc3QgcGFyc2VkTG9jYXRpb24gPSBsb2NhdGlvbi5lbmRzV2l0aCgnLycpID8gbG9jYXRpb24gOiBgJHtsb2NhdGlvbn0vYFxuICAgIHRoaXMuY29uZmlnID0geyBsb2NhdGlvbjogcGFyc2VkTG9jYXRpb24sIC4uLnJlc3RPcHRpb25zIH1cblxuICAgIGNvbnN0IHsgcHJlbG9hZGVkID0ge30sIG92ZXJyaWRlID0ge30gfSA9IHRoaXMuY29uZmlnXG5cbiAgICAvLyBNZXJnZSBsb2NhbGVzIGZyb20gYm90aCBwcmVsb2FkZWQgYW5kIG92ZXJyaWRlXG4gICAgLy8gVGhpcyBzdXBwb3J0cyBsZWdhY3kgdXNhZ2Ugd2hlcmUgb3ZlcnJpZGUgZGVmaW5lZCBlbnRpcmUgbGFuZ3VhZ2VzXG4gICAgY29uc3QgYWxsTG9jYWxlcyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKHByZWxvYWRlZCksIC4uLk9iamVjdC5rZXlzKG92ZXJyaWRlKV0pXG5cbiAgICAvLyBBcHBseSBsYW5ndWFnZXMgZnJvbSBib3RoIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGVcbiAgICAvLyBhcHBseUxhbmd1YWdlIHdpbGwgbWVyZ2UgdGhlbSBwcm9wZXJseSAoZXhpc3RpbmcgKyBwcmVsb2FkZWQgKyBvdmVycmlkZSlcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBhbGxMb2NhbGVzKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZWRMYW5nID0gcHJlbG9hZGVkW2xvY2FsZV0gfHwge31cbiAgICAgIGNvbnN0IG92ZXJyaWRlTGFuZyA9IG92ZXJyaWRlW2xvY2FsZV0gfHwge31cbiAgICAgIC8vIE1lcmdlIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGUgZm9yIHRoaXMgbG9jYWxlXG4gICAgICBjb25zdCBtZXJnZWRMYW5nID0geyAuLi5wcmVsb2FkZWRMYW5nLCAuLi5vdmVycmlkZUxhbmcgfVxuICAgICAgdGhpcy5hcHBseUxhbmd1YWdlKGxvY2FsZSwgbWVyZ2VkTGFuZylcbiAgICB9XG5cbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuY29uZmlnLmxvY2FsZSB8fCB0aGlzLmNvbmZpZy5sYW5nc1swXVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbGFuZ3VhZ2UgYW5kIHNldCBkZWZhdWx0XG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgcmVzb2x2ZXMgbGFuZ3VhZ2VcbiAgICovXG4gIGluaXQob3B0aW9ucykge1xuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyh7IC4uLnRoaXMuY29uZmlnLCAuLi5vcHRpb25zIH0pXG4gICAgcmV0dXJuIHRoaXMuc2V0Q3VycmVudCh0aGlzLmxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbGFuZ3VhZ2UgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gbGFuZ1xuICAgKi9cbiAgYWRkTGFuZ3VhZ2UobG9jYWxlLCBsYW5nID0ge30pIHtcbiAgICBsYW5nID0gdHlwZW9mIGxhbmcgPT09ICdzdHJpbmcnID8gSTE4TkJhc2UucHJvY2Vzc0ZpbGUobGFuZykgOiBsYW5nXG4gICAgdGhpcy5hcHBseUxhbmd1YWdlKGxvY2FsZSwgbGFuZylcbiAgICB0aGlzLmxvYWRlZC5wdXNoKGxvY2FsZSlcbiAgICB0aGlzLmNvbmZpZy5sYW5ncy5wdXNoKGxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSBzdHJpbmcgZnJvbSBhIGxvYWRlZCBsYW5ndWFnZSBmaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5ICAtIHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgd2UgYXJlIHRyeWluZyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZSAtIGxvY2FsZSB0byBjaGVjayBmb3IgdmFsdWVcbiAgICogQHJldHVybiB7U3RyaW5nfSBsYW5ndWFnZSBzdHJpbmcgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRWYWx1ZShrZXksIGxvY2FsZSA9IHRoaXMubG9jYWxlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmxhbmdzW2xvY2FsZV0/LltrZXldXG4gICAgcmV0dXJuIHZhbHVlIHx8IHRoaXMuZ2V0RmFsbGJhY2tWYWx1ZShrZXkpXG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGxhbmd1YWdlIHRoYXQgaGFzIGRlc2lyZWQga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgdmFsdWUga2V5XG4gICAqIEByZXR1cm4ge1N0cmluZ30gZm91bmQgdmFsdWUgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRGYWxsYmFja1ZhbHVlKGtleSkge1xuICAgIGNvbnN0IGZhbGxiYWNrTGFuZyA9IE9iamVjdC52YWx1ZXModGhpcy5sYW5ncykuZmluZChsYW5nID0+IGxhbmdba2V5XSlcbiAgICByZXR1cm4gZmFsbGJhY2tMYW5nPy5ba2V5XVxuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FwZSB2YXJpYWJsZSBzeW50YXhcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgZXNjYXBlZCBzdHJcbiAgICovXG4gIG1ha2VTYWZlKHN0cikge1xuICAgIGNvbnN0IG1hcE9iaiA9IHtcbiAgICAgICd7JzogU3RyaW5nLnJhd2BcXHtgLFxuICAgICAgJ30nOiBTdHJpbmcucmF3YFxcfWAsXG4gICAgICAnfCc6IFN0cmluZy5yYXdgXFx8YCxcbiAgICB9XG5cbiAgICBjb25zdCBlc2NhcGVkU3RyID0gc3RyLnJlcGxhY2VBbGwoL1t7fXxdL2csIG1hdGNoZWQgPT4gbWFwT2JqW21hdGNoZWRdKVxuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZFN0ciwgJ2cnKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvcmFyaWx5IHB1dCBhIHN0cmluZyBpbnRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIGxhbmd1YWdlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyaW5nXG4gICAqIEByZXR1cm4ge1N0cmluZ30gc3RyaW5nIGluIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICovXG4gIHB1dChrZXksIHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFtrZXldID0gc3RyaW5nXG5cbiAgICByZXR1cm4gc3RyaW5nXG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYXJndW1lbnRzIGZvciB0aGUgcmVxdWVzdGVkIHN0cmluZ1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGtleSAgdGhlIGtleSB3ZSB1c2UgdG8gbG9va3VwIG91ciB0cmFuc2xhdGlvblxuICAgKiBAcGFyYW0gIHttdWx0aX0gIGFyZ3MgIHN0cmluZywgbnVtYmVyIG9yIG9iamVjdCBjb250YWluaW5nIG91ciBhcmd1bWVudHNcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgIHVwZGF0ZWQgc3RyaW5nIHRyYW5zbGF0aW9uXG4gICAqL1xuICBnZXQoa2V5LCBhcmdzKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShrZXkpXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTm8gcmVwbGFjZW1lbnQgbmVlZGVkIGlmIG5vIGFyZ3MgcHJvdmlkZWRcbiAgICBpZiAoIWFyZ3MpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGNvbnN0IHRva2VucyA9IHZhbHVlLm1hdGNoKC9cXHtbXn1dKz9cXH0vZylcblxuICAgIC8vIE5vIHRva2VucyB0byByZXBsYWNlXG4gICAgaWYgKCF0b2tlbnMpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIC8vIE9iamVjdCBhcmdzOiByZXBsYWNlIGVhY2ggdG9rZW4gd2l0aCBjb3JyZXNwb25kaW5nIGtleVxuICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgIGNvbnN0IHRva2VuS2V5ID0gdG9rZW4uc2xpY2UoMSwgLTEpXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSh0aGlzLm1ha2VTYWZlKHRva2VuKSwgYXJnc1t0b2tlbktleV0gPz8gJycpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFByaW1pdGl2ZSBhcmdzOiByZXBsYWNlIGFsbCB0b2tlbnMgd2l0aCBzYW1lIHZhbHVlXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2VBbGwoL1xce1tefV0rP1xcfS9nLCBhcmdzKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBtZXRob2Q6IFByb2Nlc3MgYSBsYW5ndWFnZSBmaWxlIGZyb20gcmF3IHRleHRcbiAgICogQHBhcmFtICB7U3RyaW5nfSByZXNwb25zZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHByb2Nlc3NlZCBsYW5ndWFnZVxuICAgKi9cbiAgc3RhdGljIHByb2Nlc3NGaWxlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIEkxOE4uZnJvbUZpbGUocmVzcG9uc2UucmVwbGFjZUFsbCgnXFxuXFxuJywgJ1xcbicpKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBtZXRob2Q6IFR1cm4gcmF3IHRleHQgZnJvbSB0aGUgbGFuZ3VhZ2UgZmlsZXMgaW50byBmYW5jeSBKU09OXG4gICAqIEBwYXJhbSAge1N0cmluZ30gcmF3VGV4dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGNvbnZlcnRlZCBsYW5ndWFnZSBmaWxlXG4gICAqL1xuICBzdGF0aWMgZnJvbUZpbGUocmF3VGV4dCkge1xuICAgIGNvbnN0IGxpbmVzID0gcmF3VGV4dC5zcGxpdCgnXFxuJylcbiAgICBjb25zdCBsYW5nID0ge31cblxuICAgIGZvciAobGV0IG1hdGNoZXMsIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL14oLis/KSAqPz0gKj8oW15cXG5dKykvXG4gICAgICBtYXRjaGVzID0gcmVnZXguZXhlYyhsaW5lc1tpXSlcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGxhbmdbbWF0Y2hlc1sxXV0gPSBtYXRjaGVzWzJdLnRyaW0oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYW5nXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7STE4TkJhc2V9IHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZSA9IG5ldyBJMThOQmFzZShvcHRpb25zKVxuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gICAqL1xuICBzdGF0aWMgcmVzZXRJbnN0YW5jZSgpIHtcbiAgICBpbnN0YW5jZSA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgcmVtb3RlbHkgc3RvcmVkIGxhbmd1YWdlIGZpbGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gdXNlQ2FjaGVcbiAgICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgcmVzb2x2ZXMgcmVzcG9uc2VcbiAgICovXG4gIGFzeW5jIGxvYWRMYW5nKGxvY2FsZSwgdXNlQ2FjaGUgPSB0cnVlKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBsYW5ndWFnZSBpZiBhbHJlYWR5IGxvYWRlZFxuICAgIGlmICh0aGlzLmxvYWRlZC5pbmNsdWRlcyhsb2NhbGUpICYmIHVzZUNhY2hlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5nc1tsb2NhbGVdXG4gICAgfVxuICAgIC8vIEZldGNoIGFuZCBwcm9jZXNzIGxhbmd1YWdlIGZpbGVcbiAgICBjb25zdCBsYW5nRmlsZSA9IGAke3RoaXMuY29uZmlnLmxvY2F0aW9ufSR7bG9jYWxlfSR7dGhpcy5jb25maWcuZXh0ZW5zaW9ufWBcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsYW5nID0gYXdhaXQgZmV0Y2hEYXRhKGxhbmdGaWxlKVxuICAgICAgY29uc3QgcHJvY2Vzc2VkRmlsZSA9IEkxOE5CYXNlLnByb2Nlc3NGaWxlKGxhbmcpXG4gICAgICB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlLCBwcm9jZXNzZWRGaWxlKVxuICAgICAgcmV0dXJuIHRoaXMubGFuZ3NbbG9jYWxlXVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICByZXR1cm4gdGhpcy5hcHBseUxhbmd1YWdlKGxvY2FsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYXBwbGllcyBvdmVycmlkZXMgZnJvbSBjb25maWdcbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbGFuZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IG92ZXJyaWRlbiBsYW5ndWFnZVxuICAgKi9cbiAgYXBwbHlMYW5ndWFnZShsb2NhbGUsIGxhbmcgPSB7fSkge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5jb25maWcub3ZlcnJpZGVbbG9jYWxlXSB8fCB7fVxuICAgIGNvbnN0IGV4aXN0aW5nTGFuZyA9IHRoaXMubGFuZ3NbbG9jYWxlXSB8fCB7fVxuICAgIHRoaXMubGFuZ3NbbG9jYWxlXSA9IHsgLi4uZXhpc3RpbmdMYW5nLCAuLi5sYW5nLCAuLi5vdmVycmlkZSB9XG4gICAgdGhpcy5sb2FkZWQucHVzaChsb2NhbGUpXG4gICAgcmV0dXJuIHRoaXMubGFuZ3NbbG9jYWxlXVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBjdXJyZW50bHkgYXZhaWxhYmxlIGxhbmd1YWdlc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IGFsbCBjb25maWd1cmVkIGxhbmd1YWdlc1xuICAgKi9cbiAgZ2V0IGdldExhbmdzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5sYW5nc1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gc2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIHRvIHRoZSBsb2NhbCBwcm92aWRlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gICBsb2NhbGVcbiAgICogQHJldHVybiB7UHJvbWlzZX0gbGFuZ3VhZ2VcbiAgICovXG4gIGFzeW5jIHNldEN1cnJlbnQobG9jYWxlID0gJ2VuLVVTJykge1xuICAgIGlmICghdGhpcy5sb2FkZWQuaW5jbHVkZXMobG9jYWxlKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTGFuZyhsb2NhbGUpXG4gICAgfVxuXG4gICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVcbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmxhbmdzW2xvY2FsZV1cblxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRcbiAgfVxufVxuXG4vKipcbiAqIFByb3h5IHdyYXBwZXIgdGhhdCBlbmFibGVzIHNpbmdsZXRvbiBwYXR0ZXJuOlxuICogLSBJMThOKCkgcmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gKiAtIG5ldyBJMThOKCkgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3QgSTE4TiA9IG5ldyBQcm94eShJMThOQmFzZSwge1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gSTE4TigpIGlzIGludm9rZWQgYXMgYSBmdW5jdGlvbiAod2l0aG91dCBuZXcpXG4gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKi9cbiAgYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSB7XG4gICAgcmV0dXJuIHRhcmdldC5nZXRJbnN0YW5jZSguLi5hcmdzKVxuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBuZXcgSTE4TigpIGlzIGludm9rZWRcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0KHRhcmdldCwgYXJncykge1xuICAgIHJldHVybiBuZXcgdGFyZ2V0KC4uLmFyZ3MpXG4gIH0sXG5cbiAgLyoqXG4gICAqIFByb3h5IHByb3BlcnR5IGFjY2VzcyB0byB0aGUgYmFzZSBjbGFzc1xuICAgKi9cbiAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgIHJldHVybiB0YXJnZXRbcHJvcF1cbiAgfSxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEkxOE4uZ2V0SW5zdGFuY2UoKVxuIl0sIm1hcHBpbmdzIjoiQUFBdUIsT0FBTyxPQUFPLENBQUUsT0FBUSxNQUFPLEtBQU0sS0NFNUQsSUFBTSxFQUFpQixDQUNyQixVQUFXLFFBRVgsU0FBVSxlQUVWLE1BQU8sQ0FBQyxTQUNSLE9BQVEsUUFDUixTQUFVLENBQUEsR0FJUixFQUFXLEtBa1JGLEVBQU8sSUFBSSxNQTNReEIsTUFBTSxFQUtKLFdBQUEsQ0FBWSxFQUFVLEdBQ3BCLEtBQUssTUFBUSxPQUFPLE9BQU8sTUFDM0IsS0FBSyxPQUFTLEdBQ2QsS0FBSyxjQUFjLEdBT3JCLGFBQUEsQ0FBYyxHQUNaLE1BQU0sU0FBRSxLQUFhLEdBQWdCLElBQUssS0FBbUIsR0FFdkQsRUFBaUIsRUFBUyxTQUFTLEtBQU8sRUFBVyxHQUFHLEtBQzlELEtBQUssT0FBUyxDQUFFLFNBQVUsS0FBbUIsR0FFN0MsTUFBTSxVQUFFLEVBQVksQ0FBQSxFQUFFLFNBQUUsRUFBVyxDQUFBLEdBQU8sS0FBSyxPQUl6QyxFQUFhLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxNQUFlLE9BQU8sS0FBSyxLQUl0RSxJQUFLLE1BQU0sS0FBVSxFQUFZLENBQy9CLE1BR00sRUFBYSxJQUhHLEVBQVUsSUFBVyxDQUFBLEtBQ3RCLEVBQVMsSUFBVyxDQUFBLEdBR3pDLEtBQUssY0FBYyxFQUFRLEdBRzdCLEtBQUssT0FBUyxLQUFL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
|
|
8
|
+
Object.freeze({method:"GET",body:""});var t={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",override:{}},e=null,n=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s=(t,e)=>{Array.isArray(t)&&!t.includes(e)&&t.push(e)},l=(t,e)=>e?null!=t:Boolean(t),a=/* @__PURE__ */new Map,i=(t,e)=>{const n=/* @__PURE__ */new Set;return 0===t&&n.add("zero"),n.add(((t,e)=>{const n=1===e?"one":"other";if("undefined"==typeof Intl||"function"!=typeof Intl.PluralRules)return n;if(!a.has(t)){let e=null;try{e=new Intl.PluralRules(String(t).replaceAll("_","-"))}catch{}a.set(t,e)}const s=a.get(t);return s?s.select(e):n})(e,t)),n.add("other"),[...n]},o=new Proxy(class a{constructor(e=t){this.langs=Object.create(null),this.loaded=[],this.processConfig(e)}processConfig(e){const{location:n,...s}={...t,...e},l=n.endsWith("/")?n:`${n}/`;Array.isArray(s.langs)&&(s.langs=[...new Set(s.langs)]),this.config={location:l,...s};const{preloaded:a={},override:i={}}=this.config,o=/* @__PURE__ */new Set([...Object.keys(a),...Object.keys(i)]);for(const t of o){const e={...a[t]||{},...i[t]||{}};this.applyLanguage(t,e)}this.locale=this.config.locale||this.config.langs[0]}init(t){this.processConfig({...this.config,...t});const e=this.getFallbackLocales().filter(t=>!this.loaded.includes(t));return e.length?Promise.all([this.setCurrent(this.locale),...e.map(t=>this.loadLang(t))]).then(([t])=>t):this.setCurrent(this.locale)}addLanguage(t,e={}){e="string"==typeof e?a.processFile(e):e,this.applyLanguage(t,e),s(this.loaded,t),s(this.config.langs,t)}getFallbackLocales(){const{fallbackLocale:t}=this.config;return[].concat(t??[]).filter(t=>"string"==typeof t&&t)}getLocaleChain(t=this.locale){const e=[t],n=String(t).split(/[-_]/)[0];return n&&this.langs[n]&&e.push(n),e.push(...this.getFallbackLocales()),[...new Set(e)]}getValue(t,e=this.locale){if(!this.config.fallbackLocale)return this.langs[e]?.[t]||this.getFallbackValue(t);for(const s of this.getLocaleChain(e)){const e=this.langs[s];if(e&&n(e,t)&&l(e[t],!0))return e[t]}}getPluralValue(t,e,s=this.locale){const a=Boolean(this.config.fallbackLocale),o=a?this.getLocaleChain(s):/* @__PURE__ */new Set([s,...Object.keys(this.langs)]);for(const r of o){const s=this.langs[r];if(s)for(const o of i(e,r)){const e=`${t}.${o}`;if(n(s,e)&&l(s[e],a))return s[e]}}}handleMissing(t){const{onMissing:e}=this.config;if("function"==typeof e){const n=e(t);if("string"==typeof n)return n}}getFallbackValue(t){return Object.values(this.langs).find(e=>e[t])?.[t]}makeSafe(t){const e={"{":String.raw`\{`,"}":String.raw`\}`,"|":String.raw`\|`},n=t.replaceAll(/[{}|]/g,t=>e[t]);return new RegExp(n,"g")}put(t,e,n){let s;return s=void 0===n?this.current||(this.langs[this.locale]??={}):this.langs[n]??={},s[t]=e,e}get(t,e,n=this.locale){const s=Boolean(this.config.fallbackLocale);let a=this.getValue(t,n);if(!l(a,s)){const s=(t=>"number"==typeof t?t:t&&"object"==typeof t&&"number"==typeof t.count?t.count:void 0)(e);a=void 0===s?void 0:this.getPluralValue(t,s,n)}if(!l(a,s))return this.handleMissing({key:t,locale:n,type:"key"});if(!e&&0!==e)return a;const i=a.match(/\{[^}]+?\}/g);if(!i)return a;if("object"==typeof e)for(const l of i){const s=l.slice(1,-1);let i=e[s];null==i&&(i=this.handleMissing({key:t,locale:n,type:"arg",arg:s})??""),a=a.replace(this.makeSafe(l),i)}else a=a.replaceAll(/\{[^}]+?\}/g,e);return a}t(t,e,n){const s=this.get(t,e,n);return void 0===s?t:s}forLocale(t){return(e,n)=>this.t(e,n,t)}static processFile(t){return o.fromFile(t)}static fromFile(t){const e=String(t).replaceAll("\r\n","\n").split("\n"),n={},s=/^(.+?) *?= *?([^\n]+)/,l=t=>{const e=s.exec(t),l=e?.[1].trim();l&&(n[l]=e[2].trim())};let a=null;for(const i of e){let t=i;if(null!==a)t=a+i.trimStart(),a=null;else if(/^\s*[#;]/.test(i))continue;/(^|[^\\])\\$/.test(t)?a=t.slice(0,-1):l(t)}return null!==a&&l(a),n}static parse(t){return o.processFile(t)}static getInstance(t){return e||(e=new a(t)),e}static resetInstance(){e=null}async loadLang(t,e=!0){if(this.loaded.includes(t)&&e)return this.langs[t];const n=`${this.config.location}${t}${this.config.extension}`;try{const e=await async function(t){try{const e=await fetch(t);if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return await e[t.endsWith(".lang")?"text":"json"]()}catch(e){throw e}}(n),s="string"==typeof e?a.processFile(e):e;return this.applyLanguage(t,s),this.langs[t]}catch(s){return this.applyLanguage(t)}}applyLanguage(t,e={}){const n=this.config.override[t]||{},l=this.langs[t]||{};return this.langs[t]={...l,...e,...n},this.current&&t===this.locale&&(this.current=this.langs[t]),s(this.loaded,t),this.langs[t]}get getLangs(){return this.config.langs}async setCurrent(t="en-US"){return this.loaded.includes(t)||await this.loadLang(t),this.locale=t,this.current=this.langs[t],this.current}},{apply:(t,e,n)=>t.getInstance(...n),construct:(t,e)=>new t(...e),get:(t,e)=>t[e]}),r=o.getInstance();export{o as I18N,r as default};
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5lcy5taW4uanMiLCJuYW1lcyI6WyJPYmplY3QiLCJmcmVlemUiLCJtZXRob2QiLCJib2R5IiwiREVGQVVMVF9DT05GSUciLCJleHRlbnNpb24iLCJsb2NhdGlvbiIsImxhbmdzIiwibG9jYWxlIiwib3ZlcnJpZGUiLCJpbnN0YW5jZSIsImhhc093biIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInB1c2hVbmlxdWUiLCJhcnIiLCJpdGVtIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJwdXNoIiwiaXNQcmVzZW50IiwidmFsdWUiLCJzdHJpY3QiLCJCb29sZWFuIiwicGx1cmFsUnVsZXNDYWNoZSIsIk1hcCIsImdldFBsdXJhbFN1ZmZpeGVzIiwiY291bnQiLCJzdWZmaXhlcyIsIlNldCIsImFkZCIsImJhc2ljQ2F0ZWdvcnkiLCJJbnRsIiwiUGx1cmFsUnVsZXMiLCJoYXMiLCJydWxlcyIsIlN0cmluZyIsInJlcGxhY2VBbGwiLCJzZXQiLCJnZXQiLCJzZWxlY3QiLCJnZXRQbHVyYWxDYXRlZ29yeSIsIkkxOE4iLCJQcm94eSIsIkkxOE5CYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwidGhpcyIsImNyZWF0ZSIsImxvYWRlZCIsInByb2Nlc3NDb25maWciLCJyZXN0T3B0aW9ucyIsInBhcnNlZExvY2F0aW9uIiwiZW5kc1dpdGgiLCJjb25maWciLCJwcmVsb2FkZWQiLCJhbGxMb2NhbGVzIiwia2V5cyIsIm1lcmdlZExhbmciLCJhcHBseUxhbmd1YWdlIiwiaW5pdCIsImZhbGxiYWNrcyIsImdldEZhbGxiYWNrTG9jYWxlcyIsImZpbHRlciIsImxlbmd0aCIsIlByb21pc2UiLCJhbGwiLCJzZXRDdXJyZW50IiwibWFwIiwibG9hZExhbmciLCJ0aGVuIiwiY3VycmVudCIsImFkZExhbmd1YWdlIiwibGFuZyIsInByb2Nlc3NGaWxlIiwiZmFsbGJhY2tMb2NhbGUiLCJjb25jYXQiLCJnZXRMb2NhbGVDaGFpbiIsImNoYWluIiwiYmFzZUxvY2FsZSIsInNwbGl0IiwiZ2V0VmFsdWUiLCJnZXRGYWxsYmFja1ZhbHVlIiwiY2hhaW5Mb2NhbGUiLCJnZXRQbHVyYWxWYWx1ZSIsImxvY2FsZXMiLCJwbHVyYWxMb2NhbGUiLCJzdWZmaXgiLCJwbHVyYWxLZXkiLCJoYW5kbGVNaXNzaW5nIiwiaW5mbyIsIm9uTWlzc2luZyIsInJlc3VsdCIsInZhbHVlcyIsImZpbmQiLCJtYWtlU2FmZSIsInN0ciIsIm1hcE9iaiIsInJhdyIsImVzY2FwZWRTdHIiLCJtYXRjaGVkIiwiUmVnRXhwIiwicHV0Iiwic3RyaW5nIiwiYXJncyIsImdldENvdW50IiwidHlwZSIsInRva2VucyIsIm1hdGNoIiwidG9rZW4iLCJ0b2tlbktleSIsInNsaWNlIiwicmVwbGFjZW1lbnQiLCJhcmciLCJyZXBsYWNlIiwidCIsImZvckxvY2FsZSIsInJlc3BvbnNlIiwiZnJvbUZpbGUiLCJyYXdUZXh0IiwibGluZXMiLCJyZWdleCIsInBhcnNlTGluZSIsImxpbmUiLCJtYXRjaGVzIiwiZXhlYyIsInRyaW0iLCJjb250aW51ZWQiLCJsb2dpY2FsTGluZSIsInRyaW1TdGFydCIsInRlc3QiLCJwYXJzZSIsInRleHQiLCJnZXRJbnN0YW5jZSIsInJlc2V0SW5zdGFuY2UiLCJ1c2VDYWNoZSIsImxhbmdGaWxlIiwiYXN5bmMiLCJ1cmwiLCJmZXRjaCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJlcnJvciIsImZldGNoRGF0YSIsInByb2Nlc3NlZEZpbGUiLCJlcnIiLCJleGlzdGluZ0xhbmciLCJnZXRMYW5ncyIsImFwcGx5IiwidGFyZ2V0IiwidGhpc0FyZyIsImNvbnN0cnVjdCIsInByb3AiLCJtaTE4bl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2ZldGNoLmpzIiwiLi4vc3JjL21pMThuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRlZmF1bHRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSh7IG1ldGhvZDogJ0dFVCcsIGJvZHk6ICcnIH0pXG4vKipcbiAqIEZldGNoZXMgYSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGZldGNoLlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnM9e31dIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmZXRjaCByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnMuaGVhZGVyc10gLSBIZWFkZXJzIHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZldGNoT3B0aW9ucy5tZXRob2RdIC0gVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSAoZS5nLiwgJ0dFVCcsICdQT1NUJykuXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IFtmZXRjaE9wdGlvbnMuYm9keV0gLSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3BvbnNlIG9iamVjdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybi5vayAtIEluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAyMDAtMjk5LlxuICogQHJldHVybiB7bnVtYmVyfSByZXR1cm4uc3RhdHVzIC0gVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm4uc3RhdHVzVGV4dCAtIFRoZSBIVFRQIHN0YXR1cyBtZXNzYWdlIG9mIHRoZSByZXNwb25zZS5cbiAqIEByZXR1cm4ge01hcDxzdHJpbmcsIHN0cmluZz59IHJldHVybi5oZWFkZXJzIC0gVGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7QnVmZmVyfSByZXR1cm4uYm9keSAtIFRoZSBib2R5IG9mIHRoZSByZXNwb25zZSBhcyBhIEJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8QnVmZmVyPn0gcmV0dXJuLmFycmF5QnVmZmVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgYm9keSBhcyBhbiBBcnJheUJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8T2JqZWN0Pn0gcmV0dXJuLmpzb24gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBib2R5IHBhcnNlZCBhcyBKU09OLlxuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZXIgPSB1cmwuZW5kc1dpdGgoJy5sYW5nJykgPyAndGV4dCcgOiAnanNvbidcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2VbaGFuZGxlcl0oKVxuICAgIHJldHVybiBkYXRhXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVGhlcmUgaGFzIGJlZW4gYSBwcm9ibGVtIHdpdGggeW91ciBmZXRjaCBvcGVyYXRpb246JywgZXJyb3IpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwiaW1wb3J0IHsgZmV0Y2hEYXRhIH0gZnJvbSAnLi9mZXRjaC5qcydcblxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XG4gIGV4dGVuc2lvbjogJy5sYW5nJyxcbiAgLy8gbG9jYWwgb3IgcmVtb3RlIGRpcmVjdG9yeSBjb250YWluaW5nIGxhbmd1YWdlIGZpbGVzXG4gIGxvY2F0aW9uOiAnYXNzZXRzL2xhbmcvJyxcbiAgLy8gbGlzdCBvZiBhdmFpbGFibGUgbG9jYWxlcywgaGFuZHkgZm9yIHBvcHVsYXRpbmcgc2VsZWN0b3IuXG4gIGxhbmdzOiBbJ2VuLVVTJ10sXG4gIGxvY2FsZTogJ2VuLVVTJywgLy8gaW5pdCB3aXRoIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VcbiAgb3ZlcnJpZGU6IHt9LFxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2UgaG9sZGVyXG5sZXQgaW5zdGFuY2UgPSBudWxsXG5cbmNvbnN0IGhhc093biA9IChvYmosIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxuXG4vKipcbiAqIEFkZCBhbiBpdGVtIHRvIGFuIGFycmF5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICogQHBhcmFtIHsqfSBpdGVtXG4gKi9cbmNvbnN0IHB1c2hVbmlxdWUgPSAoYXJyLCBpdGVtKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikgJiYgIWFyci5pbmNsdWRlcyhpdGVtKSkge1xuICAgIGFyci5wdXNoKGl0ZW0pXG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbG9va2VkIHVwIHZhbHVlIGNvdW50cyBhcyBwcmVzZW50LlxuICogTGVnYWN5IGxvb2t1cHMgdHJlYXQgZW1wdHkgc3RyaW5ncyBhcyBtaXNzaW5nLCBmYWxsYmFja0xvY2FsZSBsb29rdXBzIGRvIG5vdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc3RyaWN0IHRydWUgd2hlbiBmYWxsYmFja0xvY2FsZSBpcyBjb25maWd1cmVkXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5jb25zdCBpc1ByZXNlbnQgPSAodmFsdWUsIHN0cmljdCkgPT4gKHN0cmljdCA/IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgOiBCb29sZWFuKHZhbHVlKSlcblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwbHVyYWwgY291bnQgZnJvbSBnZXQvdCBhcmdzXG4gKiBAcGFyYW0geyp9IGFyZ3NcbiAqIEByZXR1cm4ge051bWJlcnx1bmRlZmluZWR9XG4gKi9cbmNvbnN0IGdldENvdW50ID0gYXJncyA9PiB7XG4gIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYXJnc1xuICB9XG4gIGlmIChhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYXJncy5jb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYXJncy5jb3VudFxuICB9XG59XG5cbmNvbnN0IHBsdXJhbFJ1bGVzQ2FjaGUgPSBuZXcgTWFwKClcblxuLyoqXG4gKiBHZXQgdGhlIENMRFIgcGx1cmFsIGNhdGVnb3J5IGZvciBhIGNvdW50IGluIGEgbG9jYWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge1N0cmluZ30gcGx1cmFsIGNhdGVnb3J5LCBlZy4gJ29uZScsICdmZXcnLCAnb3RoZXInXG4gKi9cbmNvbnN0IGdldFBsdXJhbENhdGVnb3J5ID0gKGxvY2FsZSwgY291bnQpID0+IHtcbiAgY29uc3QgYmFzaWNDYXRlZ29yeSA9IGNvdW50ID09PSAxID8gJ29uZScgOiAnb3RoZXInXG4gIGlmICh0eXBlb2YgSW50bCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIEludGwuUGx1cmFsUnVsZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmFzaWNDYXRlZ29yeVxuICB9XG4gIGlmICghcGx1cmFsUnVsZXNDYWNoZS5oYXMobG9jYWxlKSkge1xuICAgIGxldCBydWxlcyA9IG51bGxcbiAgICB0cnkge1xuICAgICAgcnVsZXMgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyhTdHJpbmcobG9jYWxlKS5yZXBsYWNlQWxsKCdfJywgJy0nKSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGludmFsaWQgbG9jYWxlIHRhZ1xuICAgIH1cbiAgICBwbHVyYWxSdWxlc0NhY2hlLnNldChsb2NhbGUsIHJ1bGVzKVxuICB9XG4gIGNvbnN0IHJ1bGVzID0gcGx1cmFsUnVsZXNDYWNoZS5nZXQobG9jYWxlKVxuICByZXR1cm4gcnVsZXMgPyBydWxlcy5zZWxlY3QoY291bnQpIDogYmFzaWNDYXRlZ29yeVxufVxuXG4vKipcbiAqIFBsdXJhbCBrZXkgc3VmZml4ZXMgdG8gdHJ5LCBpbiBvcmRlclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX1cbiAqL1xuY29uc3QgZ2V0UGx1cmFsU3VmZml4ZXMgPSAoY291bnQsIGxvY2FsZSkgPT4ge1xuICBjb25zdCBzdWZmaXhlcyA9IG5ldyBTZXQoKVxuICBpZiAoY291bnQgPT09IDApIHtcbiAgICBzdWZmaXhlcy5hZGQoJ3plcm8nKVxuICB9XG4gIHN1ZmZpeGVzLmFkZChnZXRQbHVyYWxDYXRlZ29yeShsb2NhbGUsIGNvdW50KSlcbiAgc3VmZml4ZXMuYWRkKCdvdGhlcicpXG4gIHJldHVybiBbLi4uc3VmZml4ZXNdXG59XG5cbi8qKlxuICogTWFpbiBpMThuIGNsYXNzXG4gKiBAY2xhc3MgSTE4TkJhc2VcbiAqIEBjbGFzc2Rlc2MgbWV0aG9kcyBhbmQgZGF0YSBzdG9yZSBmb3IgaTE4blxuICovXG5jbGFzcyBJMThOQmFzZSB7XG4gIC8qKlxuICAgKiBQcm9jZXNzIG9wdGlvbnMgYW5kIHN0YXJ0IHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSBERUZBVUxUX0NPTkZJRykge1xuICAgIHRoaXMubGFuZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5sb2FkZWQgPSBbXVxuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyhvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuZCBmb3JtYXQgY29uZmlnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBwcm9jZXNzQ29uZmlnKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCAuLi5yZXN0T3B0aW9ucyB9ID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4ub3B0aW9ucyB9XG4gICAgLy8gRW5zdXJlIGxvY2F0aW9uIGVuZHMgd2l0aCBhIHNsYXNoXG4gICAgY29uc3QgcGFyc2VkTG9jYXRpb24gPSBsb2NhdGlvbi5lbmRzV2l0aCgnLycpID8gbG9jYXRpb24gOiBgJHtsb2NhdGlvbn0vYFxuICAgIC8vIENvcHkgbGFuZ3Mgc28gdGhlIGRlZmF1bHRzIGFuZCB1c2VyIHN1cHBsaWVkIGFycmF5cyBhcmUgbmV2ZXIgbXV0YXRlZFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3RPcHRpb25zLmxhbmdzKSkge1xuICAgICAgcmVzdE9wdGlvbnMubGFuZ3MgPSBbLi4ubmV3IFNldChyZXN0T3B0aW9ucy5sYW5ncyldXG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0geyBsb2NhdGlvbjogcGFyc2VkTG9jYXRpb24sIC4uLnJlc3RPcHRpb25zIH1cblxuICAgIGNvbnN0IHsgcHJlbG9hZGVkID0ge30sIG92ZXJyaWRlID0ge30gfSA9IHRoaXMuY29uZmlnXG5cbiAgICAvLyBNZXJnZSBsb2NhbGVzIGZyb20gYm90aCBwcmVsb2FkZWQgYW5kIG92ZXJyaWRlXG4gICAgLy8gVGhpcyBzdXBwb3J0cyBsZWdhY3kgdXNhZ2Ugd2hlcmUgb3ZlcnJpZGUgZGVmaW5lZCBlbnRpcmUgbGFuZ3VhZ2VzXG4gICAgY29uc3QgYWxsTG9jYWxlcyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKHByZWxvYWRlZCksIC4uLk9iamVjdC5rZXlzKG92ZXJyaWRlKV0pXG5cbiAgICAvLyBBcHBseSBsYW5ndWFnZXMgZnJvbSBib3RoIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGVcbiAgICAvLyBhcHBseUxhbmd1YWdlIHdpbGwgbWVyZ2UgdGhlbSBwcm9wZXJseSAoZXhpc3RpbmcgKyBwcmVsb2FkZWQgKyBvdmVycmlkZSlcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBhbGxMb2NhbGVzKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZWRMYW5nID0gcHJlbG9hZGVkW2xvY2FsZV0gfHwge31cbiAgICAgIGNvbnN0IG92ZXJyaWRlTGFuZyA9IG92ZXJyaWRlW2xvY2FsZV0gfHwge31cbiAgICAgIC8vIE1lcmdlIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGUgZm9yIHRoaXMgbG9jYWxlXG4gICAgICBjb25zdCBtZXJnZWRMYW5nID0geyAuLi5wcmVsb2FkZWRMYW5nLCAuLi5vdmVycmlkZUxhbmcgfVxuICAgICAgdGhpcy5hcHBseUxhbmd1YWdlKGxvY2FsZSwgbWVyZ2VkTGFuZylcbiAgICB9XG5cbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuY29uZmlnLmxvY2FsZSB8fCB0aGlzLmNvbmZpZy5sYW5nc1swXVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbGFuZ3VhZ2UgYW5kIHNldCBkZWZhdWx0XG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgcmVzb2x2ZXMgbGFuZ3VhZ2VcbiAgICovXG4gIGluaXQob3B0aW9ucykge1xuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyh7IC4uLnRoaXMuY29uZmlnLCAuLi5vcHRpb25zIH0pXG4gICAgLy8gRmFsbGJhY2sgbG9jYWxlcyBhcmUgbG9hZGVkIGFsb25nc2lkZSB0aGUgY3VycmVudCBsb2NhbGUgc28gbG9va3VwcyBjYW4gZmFsbCBiYWNrIHRvIHRoZW1cbiAgICBjb25zdCBmYWxsYmFja3MgPSB0aGlzLmdldEZhbGxiYWNrTG9jYWxlcygpLmZpbHRlcihsb2NhbGUgPT4gIXRoaXMubG9hZGVkLmluY2x1ZGVzKGxvY2FsZSkpXG4gICAgaWYgKCFmYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRDdXJyZW50KHRoaXMubG9jYWxlKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuc2V0Q3VycmVudCh0aGlzLmxvY2FsZSksIC4uLmZhbGxiYWNrcy5tYXAobG9jYWxlID0+IHRoaXMubG9hZExhbmcobG9jYWxlKSldKS50aGVuKFxuICAgICAgKFtjdXJyZW50XSkgPT4gY3VycmVudCxcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGxhbmd1YWdlIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGxhbmdcbiAgICovXG4gIGFkZExhbmd1YWdlKGxvY2FsZSwgbGFuZyA9IHt9KSB7XG4gICAgbGFuZyA9IHR5cGVvZiBsYW5nID09PSAnc3RyaW5nJyA/IEkxOE5CYXNlLnByb2Nlc3NGaWxlKGxhbmcpIDogbGFuZ1xuICAgIHRoaXMuYXBwbHlMYW5ndWFnZShsb2NhbGUsIGxhbmcpXG4gICAgcHVzaFVuaXF1ZSh0aGlzLmxvYWRlZCwgbG9jYWxlKVxuICAgIHB1c2hVbmlxdWUodGhpcy5jb25maWcubGFuZ3MsIGxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVkIGZhbGxiYWNrIGxvY2FsZXNcbiAgICogQHJldHVybiB7U3RyaW5nW119XG4gICAqL1xuICBnZXRGYWxsYmFja0xvY2FsZXMoKSB7XG4gICAgY29uc3QgeyBmYWxsYmFja0xvY2FsZSB9ID0gdGhpcy5jb25maWdcbiAgICByZXR1cm4gW10uY29uY2F0KGZhbGxiYWNrTG9jYWxlID8/IFtdKS5maWx0ZXIobG9jYWxlID0+IHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnICYmIGxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbGVzIGNoZWNrZWQsIGluIG9yZGVyLCB3aGVuIGxvb2tpbmcgdXAgYSBrZXkgd2l0aCBmYWxsYmFja0xvY2FsZSBjb25maWd1cmVkOlxuICAgKiByZXF1ZXN0ZWQgbG9jYWxlLCBpdHMgYmFzZSBsYW5ndWFnZSAoaWYgbG9hZGVkKSwgdGhlbiBlYWNoIGZhbGxiYWNrIGxvY2FsZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcmV0dXJuIHtTdHJpbmdbXX1cbiAgICovXG4gIGdldExvY2FsZUNoYWluKGxvY2FsZSA9IHRoaXMubG9jYWxlKSB7XG4gICAgY29uc3QgY2hhaW4gPSBbbG9jYWxlXVxuICAgIGNvbnN0IGJhc2VMb2NhbGUgPSBTdHJpbmcobG9jYWxlKS5zcGxpdCgvWy1fXS8pWzBdXG4gICAgaWYgKGJhc2VMb2NhbGUgJiYgdGhpcy5sYW5nc1tiYXNlTG9jYWxlXSkge1xuICAgICAgY2hhaW4ucHVzaChiYXNlTG9jYWxlKVxuICAgIH1cbiAgICBjaGFpbi5wdXNoKC4uLnRoaXMuZ2V0RmFsbGJhY2tMb2NhbGVzKCkpXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGNoYWluKV1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSBzdHJpbmcgZnJvbSBhIGxvYWRlZCBsYW5ndWFnZSBmaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5ICAtIHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgd2UgYXJlIHRyeWluZyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZSAtIGxvY2FsZSB0byBjaGVjayBmb3IgdmFsdWVcbiAgICogQHJldHVybiB7U3RyaW5nfSBsYW5ndWFnZSBzdHJpbmcgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRWYWx1ZShrZXksIGxvY2FsZSA9IHRoaXMubG9jYWxlKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYWluTG9jYWxlIG9mIHRoaXMuZ2V0TG9jYWxlQ2hhaW4obG9jYWxlKSkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nc1tjaGFpbkxvY2FsZV1cbiAgICAgICAgaWYgKGxhbmcgJiYgaGFzT3duKGxhbmcsIGtleSkgJiYgaXNQcmVzZW50KGxhbmdba2V5XSwgdHJ1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbGFuZ1trZXldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYW5nc1tsb2NhbGVdPy5ba2V5XVxuICAgIHJldHVybiB2YWx1ZSB8fCB0aGlzLmdldEZhbGxiYWNrVmFsdWUoa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBwbHVyYWwgZm9ybSBvZiBrZXksIGVnLiBga2V5Lnplcm9gLCBga2V5Lm9uZWAsIGBrZXkub3RoZXJgXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSAge051bWJlcn0gY291bnRcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHJldHVybiB7U3RyaW5nfSBwbHVyYWwgc3RyaW5nIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0UGx1cmFsVmFsdWUoa2V5LCBjb3VudCwgbG9jYWxlID0gdGhpcy5sb2NhbGUpIHtcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKVxuICAgIGNvbnN0IGxvY2FsZXMgPSBzdHJpY3QgPyB0aGlzLmdldExvY2FsZUNoYWluKGxvY2FsZSkgOiBuZXcgU2V0KFtsb2NhbGUsIC4uLk9iamVjdC5rZXlzKHRoaXMubGFuZ3MpXSlcblxuICAgIGZvciAoY29uc3QgcGx1cmFsTG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdzW3BsdXJhbExvY2FsZV1cbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzdWZmaXggb2YgZ2V0UGx1cmFsU3VmZml4ZXMoY291bnQsIHBsdXJhbExvY2FsZSkpIHtcbiAgICAgICAgY29uc3QgcGx1cmFsS2V5ID0gYCR7a2V5fS4ke3N1ZmZpeH1gXG4gICAgICAgIGlmIChoYXNPd24obGFuZywgcGx1cmFsS2V5KSAmJiBpc1ByZXNlbnQobGFuZ1twbHVyYWxLZXldLCBzdHJpY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhbmdbcGx1cmFsS2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBhIG1pc3Npbmcga2V5IG9yIGFyZ3VtZW50IHRvIHRoZSBvbk1pc3NpbmcgaGFuZGxlclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGluZm8geyBrZXksIGxvY2FsZSwgdHlwZSwgYXJnIH1cbiAgICogQHJldHVybiB7U3RyaW5nfSByZXBsYWNlbWVudCBzdHJpbmcgcmV0dXJuZWQgYnkgb25NaXNzaW5nIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgaGFuZGxlTWlzc2luZyhpbmZvKSB7XG4gICAgY29uc3QgeyBvbk1pc3NpbmcgfSA9IHRoaXMuY29uZmlnXG4gICAgaWYgKHR5cGVvZiBvbk1pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9uTWlzc2luZyhpbmZvKVxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGxhbmd1YWdlIHRoYXQgaGFzIGRlc2lyZWQga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgdmFsdWUga2V5XG4gICAqIEByZXR1cm4ge1N0cmluZ30gZm91bmQgdmFsdWUgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRGYWxsYmFja1ZhbHVlKGtleSkge1xuICAgIGNvbnN0IGZhbGxiYWNrTGFuZyA9IE9iamVjdC52YWx1ZXModGhpcy5sYW5ncykuZmluZChsYW5nID0+IGxhbmdba2V5XSlcbiAgICByZXR1cm4gZmFsbGJhY2tMYW5nPy5ba2V5XVxuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FwZSB2YXJpYWJsZSBzeW50YXhcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgZXNjYXBlZCBzdHJcbiAgICovXG4gIG1ha2VTYWZlKHN0cikge1xuICAgIGNvbnN0IG1hcE9iaiA9IHtcbiAgICAgICd7JzogU3RyaW5nLnJhd2BcXHtgLFxuICAgICAgJ30nOiBTdHJpbmcucmF3YFxcfWAsXG4gICAgICAnfCc6IFN0cmluZy5yYXdgXFx8YCxcbiAgICB9XG5cbiAgICBjb25zdCBlc2NhcGVkU3RyID0gc3RyLnJlcGxhY2VBbGwoL1t7fXxdL2csIG1hdGNoZWQgPT4gbWFwT2JqW21hdGNoZWRdKVxuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZFN0ciwgJ2cnKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvcmFyaWx5IHB1dCBhIHN0cmluZyBpbnRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIGxhbmd1YWdlLCBvciB0aGUgZ2l2ZW4gbG9jYWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSB0byB3cml0ZSB0b1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyBpbiBjdXJyZW50IGxhbmd1YWdlXG4gICAqL1xuICBwdXQoa2V5LCBzdHJpbmcsIGxvY2FsZSkge1xuICAgIGxldCBsYW5nXG4gICAgaWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYW5nID0gdGhpcy5jdXJyZW50IHx8ICh0aGlzLmxhbmdzW3RoaXMubG9jYWxlXSA/Pz0ge30pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbmcgPSB0aGlzLmxhbmdzW2xvY2FsZV0gPz89IHt9XG4gICAgfVxuICAgIGxhbmdba2V5XSA9IHN0cmluZ1xuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmb3IgdGhlIHJlcXVlc3RlZCBzdHJpbmdcbiAgICogQHBhcmFtICB7U3RyaW5nfSBrZXkgIHRoZSBrZXkgd2UgdXNlIHRvIGxvb2t1cCBvdXIgdHJhbnNsYXRpb25cbiAgICogQHBhcmFtICB7bXVsdGl9ICBhcmdzICBzdHJpbmcsIG51bWJlciBvciBvYmplY3QgY29udGFpbmluZyBvdXIgYXJndW1lbnRzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSwgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgbG9jYWxlXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICB1cGRhdGVkIHN0cmluZyB0cmFuc2xhdGlvblxuICAgKi9cbiAgZ2V0KGtleSwgYXJncywgbG9jYWxlID0gdGhpcy5sb2NhbGUpIHtcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKVxuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoa2V5LCBsb2NhbGUpXG5cbiAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSwgc3RyaWN0KSkge1xuICAgICAgY29uc3QgY291bnQgPSBnZXRDb3VudChhcmdzKVxuICAgICAgdmFsdWUgPSBjb3VudCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5nZXRQbHVyYWxWYWx1ZShrZXksIGNvdW50LCBsb2NhbGUpXG4gICAgfVxuXG4gICAgaWYgKCFpc1ByZXNlbnQodmFsdWUsIHN0cmljdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1pc3NpbmcoeyBrZXksIGxvY2FsZSwgdHlwZTogJ2tleScgfSlcbiAgICB9XG5cbiAgICAvLyBObyByZXBsYWNlbWVudCBuZWVkZWQgaWYgbm8gYXJncyBwcm92aWRlZFxuICAgIGlmICghYXJncyAmJiBhcmdzICE9PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbnMgPSB2YWx1ZS5tYXRjaCgvXFx7W159XSs/XFx9L2cpXG5cbiAgICAvLyBObyB0b2tlbnMgdG8gcmVwbGFjZVxuICAgIGlmICghdG9rZW5zKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICAvLyBPYmplY3QgYXJnczogcmVwbGFjZSBlYWNoIHRva2VuIHdpdGggY29ycmVzcG9uZGluZyBrZXlcbiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBjb25zdCB0b2tlbktleSA9IHRva2VuLnNsaWNlKDEsIC0xKVxuICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBhcmdzW3Rva2VuS2V5XVxuICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT09IHVuZGVmaW5lZCB8fCByZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdGhpcy5oYW5kbGVNaXNzaW5nKHsga2V5LCBsb2NhbGUsIHR5cGU6ICdhcmcnLCBhcmc6IHRva2VuS2V5IH0pID8/ICcnXG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHRoaXMubWFrZVNhZmUodG9rZW4pLCByZXBsYWNlbWVudClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJpbWl0aXZlIGFyZ3M6IHJlcGxhY2UgYWxsIHRva2VucyB3aXRoIHNhbWUgdmFsdWVcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgvXFx7W159XSs/XFx9L2csIGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvKipcbiAgICogTGlrZSBnZXQoKSBidXQgYWx3YXlzIHJldHVybnMgYSBzdHJpbmcsIGZhbGxpbmcgYmFjayB0byB0aGUga2V5IGl0c2VsZlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGtleSAgdGhlIGtleSB3ZSB1c2UgdG8gbG9va3VwIG91ciB0cmFuc2xhdGlvblxuICAgKiBAcGFyYW0gIHttdWx0aX0gIGFyZ3MgIHN0cmluZywgbnVtYmVyIG9yIG9iamVjdCBjb250YWluaW5nIG91ciBhcmd1bWVudHNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGUgb3B0aW9uYWwgbG9jYWxlLCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBsb2NhbGVcbiAgICogQHJldHVybiB7U3RyaW5nfSB0cmFuc2xhdGVkIHN0cmluZyBvciBrZXlcbiAgICovXG4gIHQoa2V5LCBhcmdzLCBsb2NhbGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGtleSwgYXJncywgbG9jYWxlKVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB0cmFuc2xhdGUgZnVuY3Rpb24gYm91bmQgdG8gYSBsb2NhbGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHJldHVybiB7RnVuY3Rpb259IChrZXksIGFyZ3MpID0+IHN0cmluZ1xuICAgKi9cbiAgZm9yTG9jYWxlKGxvY2FsZSkge1xuICAgIHJldHVybiAoa2V5LCBhcmdzKSA9PiB0aGlzLnQoa2V5LCBhcmdzLCBsb2NhbGUpXG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZDogUHJvY2VzcyBhIGxhbmd1YWdlIGZpbGUgZnJvbSByYXcgdGV4dFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHJlc3BvbnNlXG4gICAqIEByZXR1cm4ge09iamVjdH0gcHJvY2Vzc2VkIGxhbmd1YWdlXG4gICAqL1xuICBzdGF0aWMgcHJvY2Vzc0ZpbGUocmVzcG9uc2UpIHtcbiAgICAvLyBibGFuayBsaW5lcyBhcmUgaWdub3JlZCBieSBmcm9tRmlsZVxuICAgIHJldHVybiBJMThOLmZyb21GaWxlKHJlc3BvbnNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBtZXRob2Q6IFR1cm4gcmF3IHRleHQgZnJvbSB0aGUgbGFuZ3VhZ2UgZmlsZXMgaW50byBmYW5jeSBKU09OXG4gICAqIFN1cHBvcnRzIGAjYCBhbmQgYDtgIGZ1bGwtbGluZSBjb21tZW50cyBhbmQgdHJhaWxpbmcgYFxcYCBsaW5lIGNvbnRpbnVhdGlvblxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHJhd1RleHRcbiAgICogQHJldHVybiB7T2JqZWN0fSBjb252ZXJ0ZWQgbGFuZ3VhZ2UgZmlsZVxuICAgKi9cbiAgc3RhdGljIGZyb21GaWxlKHJhd1RleHQpIHtcbiAgICBjb25zdCBsaW5lcyA9IFN0cmluZyhyYXdUZXh0KS5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJykuc3BsaXQoJ1xcbicpXG4gICAgY29uc3QgbGFuZyA9IHt9XG4gICAgY29uc3QgcmVnZXggPSAvXiguKz8pICo/PSAqPyhbXlxcbl0rKS9cbiAgICBjb25zdCBwYXJzZUxpbmUgPSBsaW5lID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZWdleC5leGVjKGxpbmUpXG4gICAgICBjb25zdCBrZXkgPSBtYXRjaGVzPy5bMV0udHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGxhbmdba2V5XSA9IG1hdGNoZXNbMl0udHJpbSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRpbnVlZCA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGxldCBsb2dpY2FsTGluZSA9IGxpbmVcbiAgICAgIGlmIChjb250aW51ZWQgIT09IG51bGwpIHtcbiAgICAgICAgbG9naWNhbExpbmUgPSBjb250aW51ZWQgKyBsaW5lLnRyaW1TdGFydCgpXG4gICAgICAgIGNvbnRpbnVlZCA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoL15cXHMqWyM7XS8udGVzdChsaW5lKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBhIHNpbmdsZSB0cmFpbGluZyBiYWNrc2xhc2ggam9pbnMgdGhlIG5leHQgbGluZVxuICAgICAgaWYgKC8oXnxbXlxcXFxdKVxcXFwkLy50ZXN0KGxvZ2ljYWxMaW5lKSkge1xuICAgICAgICBjb250aW51ZWQgPSBsb2dpY2FsTGluZS5zbGljZSgwLCAtMSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgcGFyc2VMaW5lKGxvZ2ljYWxMaW5lKVxuICAgIH1cblxuICAgIGlmIChjb250aW51ZWQgIT09IG51bGwpIHtcbiAgICAgIHBhcnNlTGluZShjb250aW51ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kOiBQYXJzZSB0aGUgY29udGVudHMgb2YgYSBgLmxhbmdgIGZpbGUsIGFsaWFzIG9mIHByb2Nlc3NGaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHByb2Nlc3NlZCBsYW5ndWFnZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlKHRleHQpIHtcbiAgICByZXR1cm4gSTE4Ti5wcm9jZXNzRmlsZSh0ZXh0KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge0kxOE5CYXNlfSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShvcHRpb25zKSB7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgSTE4TkJhc2Uob3B0aW9ucylcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICAgKi9cbiAgc3RhdGljIHJlc2V0SW5zdGFuY2UoKSB7XG4gICAgaW5zdGFuY2UgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHJlbW90ZWx5IHN0b3JlZCBsYW5ndWFnZSBmaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IHVzZUNhY2hlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgIHJlc29sdmVzIHJlc3BvbnNlXG4gICAqL1xuICBhc3luYyBsb2FkTGFuZyhsb2NhbGUsIHVzZUNhY2hlID0gdHJ1ZSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgbGFuZ3VhZ2UgaWYgYWxyZWFkeSBsb2FkZWRcbiAgICBpZiAodGhpcy5sb2FkZWQuaW5jbHVkZXMobG9jYWxlKSAmJiB1c2VDYWNoZSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ3NbbG9jYWxlXVxuICAgIH1cbiAgICAvLyBGZXRjaCBhbmQgcHJvY2VzcyBsYW5ndWFnZSBmaWxlXG4gICAgY29uc3QgbGFuZ0ZpbGUgPSBgJHt0aGlzLmNvbmZpZy5sb2NhdGlvbn0ke2xvY2FsZX0ke3RoaXMuY29uZmlnLmV4dGVuc2lvbn1gXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbGFuZyA9IGF3YWl0IGZldGNoRGF0YShsYW5nRmlsZSlcbiAgICAgIGNvbnN0IHByb2Nlc3NlZEZpbGUgPSB0eXBlb2YgbGFuZyA9PT0gJ3N0cmluZycgPyBJMThOQmFzZS5wcm9jZXNzRmlsZShsYW5nKSA6IGxhbmdcbiAgICAgIHRoaXMuYXBwbHlMYW5ndWFnZShsb2NhbGUsIHByb2Nlc3NlZEZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5sYW5nc1tsb2NhbGVdXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIHJldHVybiB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhcHBsaWVzIG92ZXJyaWRlcyBmcm9tIGNvbmZpZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYW5nXG4gICAqIEByZXR1cm4ge09iamVjdH0gb3ZlcnJpZGVuIGxhbmd1YWdlXG4gICAqL1xuICBhcHBseUxhbmd1YWdlKGxvY2FsZSwgbGFuZyA9IHt9KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLmNvbmZpZy5vdmVycmlkZVtsb2NhbGVdIHx8IHt9XG4gICAgY29uc3QgZXhpc3RpbmdMYW5nID0gdGhpcy5sYW5nc1tsb2NhbGVdIHx8IHt9XG4gICAgdGhpcy5sYW5nc1tsb2NhbGVdID0geyAuLi5leGlzdGluZ0xhbmcsIC4uLmxhbmcsIC4uLm92ZXJyaWRlIH1cbiAgICAvLyBrZWVwIHRoZSBjdXJyZW50IGxhbmd1YWdlIHJlZmVyZW5jZSBpbiBzeW5jXG4gICAgaWYgKHRoaXMuY3VycmVudCAmJiBsb2NhbGUgPT09IHRoaXMubG9jYWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmxhbmdzW2xvY2FsZV1cbiAgICB9XG4gICAgcHVzaFVuaXF1ZSh0aGlzLmxvYWRlZCwgbG9jYWxlKVxuICAgIHJldHVybiB0aGlzLmxhbmdzW2xvY2FsZV1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gY3VycmVudGx5IGF2YWlsYWJsZSBsYW5ndWFnZXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBhbGwgY29uZmlndXJlZCBsYW5ndWFnZXNcbiAgICovXG4gIGdldCBnZXRMYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubGFuZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIHNldCB0aGUgY3VycmVudCBsYW5ndWFnZSB0byB0aGUgbG9jYWwgcHJvdmlkZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9ICAgbG9jYWxlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IGxhbmd1YWdlXG4gICAqL1xuICBhc3luYyBzZXRDdXJyZW50KGxvY2FsZSA9ICdlbi1VUycpIHtcbiAgICBpZiAoIXRoaXMubG9hZGVkLmluY2x1ZGVzKGxvY2FsZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZExhbmcobG9jYWxlKVxuICAgIH1cblxuICAgIHRoaXMubG9jYWxlID0gbG9jYWxlXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5sYW5nc1tsb2NhbGVdXG5cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eSB3cmFwcGVyIHRoYXQgZW5hYmxlcyBzaW5nbGV0b24gcGF0dGVybjpcbiAqIC0gSTE4TigpIHJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZVxuICogLSBuZXcgSTE4TigpIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNvbnN0IEkxOE4gPSBuZXcgUHJveHkoSTE4TkJhc2UsIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIEkxOE4oKSBpcyBpbnZva2VkIGFzIGEgZnVuY3Rpb24gKHdpdGhvdXQgbmV3KVxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuICAgIHJldHVybiB0YXJnZXQuZ2V0SW5zdGFuY2UoLi4uYXJncylcbiAgfSxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gbmV3IEkxOE4oKSBpcyBpbnZva2VkXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdCh0YXJnZXQsIGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IHRhcmdldCguLi5hcmdzKVxuICB9LFxuXG4gIC8qKlxuICAgKiBQcm94eSBwcm9wZXJ0eSBhY2Nlc3MgdG8gdGhlIGJhc2UgY2xhc3NcbiAgICovXG4gIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICByZXR1cm4gdGFyZ2V0W3Byb3BdXG4gIH0sXG59KVxuXG5leHBvcnQgZGVmYXVsdCBJMThOLmdldEluc3RhbmNlKClcbiJdLCJtYXBwaW5ncyI6IkFBQXVCQSxPQUFPQyxPQUFPLENBQUVDLE9BQVEsTUFBT0MsS0FBTSxLQ0U1RCxJQUFNQyxFQUFpQixDQUNyQkMsVUFBVyxRQUVYQyxTQUFVLGVBRVZDLE1BQU8sQ0FBQyxTQUNSQyxPQUFRLFFBQ1JDLFNBQVUsQ0FBQyxHQUlUQyxFQUFXLEtBRVRDLEVBQUEsQ0FBVUMsRUFBS0MsSUFBUWIsT0FBT2MsVUFBVUMsZUFBZUMsS0FB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
|
package/dist/i18n.es.min.js.gz
CHANGED
|
Binary file
|
package/dist/i18n.iife.min.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
@draggable/i18n - https://github.com/Draggable/i18n
|
|
4
|
-
Version: 1.1.
|
|
4
|
+
Version: 1.1.2
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
var i18n=function(t){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Object.freeze({method:"GET",body:""});var e={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",override:{}},n=null,s=new Proxy(class t{constructor(t=e){this.langs=Object.create(null),this.loaded=[],this.processConfig(t)}processConfig(t){const{location:n,...s}={...e,...t},
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5paWZlLm1pbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvZmV0Y2guanMiLCIuLi9zcmMvbWkxOG4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHsgbWV0aG9kOiAnR0VUJywgYm9keTogJycgfSlcbi8qKlxuICogRmV0Y2hlcyBhIHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgdG8gZmV0Y2guXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZldGNoT3B0aW9ucz17fV0gLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZldGNoIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZldGNoT3B0aW9ucy5oZWFkZXJzXSAtIEhlYWRlcnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmV0Y2hPcHRpb25zLm1ldGhvZF0gLSBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChlLmcuLCAnR0VUJywgJ1BPU1QnKS5cbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0gW2ZldGNoT3B0aW9ucy5ib2R5XSAtIFRoZSBib2R5IG9mIHRoZSByZXF1ZXN0LlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzcG9uc2Ugb2JqZWN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJuLm9rIC0gSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDIwMC0yOTkuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJldHVybi5zdGF0dXMgLSBUaGUgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybi5zdGF0dXNUZXh0IC0gVGhlIEhUVFAgc3RhdHVzIG1lc3NhZ2Ugb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7TWFwPHN0cmluZywgc3RyaW5nPn0gcmV0dXJuLmhlYWRlcnMgLSBUaGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHJldHVybi5ib2R5IC0gVGhlIGJvZHkgb2YgdGhlIHJlc3BvbnNlIGFzIGEgQnVmZmVyLlxuICogQHJldHVybiB7ZnVuY3Rpb24oKTogUHJvbWlzZTxCdWZmZXI+fSByZXR1cm4uYXJyYXlCdWZmZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBib2R5IGFzIGFuIEFycmF5QnVmZmVyLlxuICogQHJldHVybiB7ZnVuY3Rpb24oKTogUHJvbWlzZTxPYmplY3Q+fSByZXR1cm4uanNvbiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGJvZHkgcGFyc2VkIGFzIEpTT04uXG4gKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSh1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybClcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlciA9IHVybC5lbmRzV2l0aCgnLmxhbmcnKSA/ICd0ZXh0JyA6ICdqc29uJ1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZVtoYW5kbGVyXSgpXG4gICAgcmV0dXJuIGRhdGFcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdUaGVyZSBoYXMgYmVlbiBhIHByb2JsZW0gd2l0aCB5b3VyIGZldGNoIG9wZXJhdGlvbjonLCBlcnJvcilcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCJpbXBvcnQgeyBmZXRjaERhdGEgfSBmcm9tICcuL2ZldGNoLmpzJ1xuXG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHtcbiAgZXh0ZW5zaW9uOiAnLmxhbmcnLFxuICAvLyBsb2NhbCBvciByZW1vdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbGFuZ3VhZ2UgZmlsZXNcbiAgbG9jYXRpb246ICdhc3NldHMvbGFuZy8nLFxuICAvLyBsaXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzLCBoYW5keSBmb3IgcG9wdWxhdGluZyBzZWxlY3Rvci5cbiAgbGFuZ3M6IFsnZW4tVVMnXSxcbiAgbG9jYWxlOiAnZW4tVVMnLCAvLyBpbml0IHdpdGggdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZVxuICBvdmVycmlkZToge30sXG59XG5cbi8vIFNpbmdsZXRvbiBpbnN0YW5jZSBob2xkZXJcbmxldCBpbnN0YW5jZSA9IG51bGxcblxuLyoqXG4gKiBNYWluIGkxOG4gY2xhc3NcbiAqIEBjbGFzcyBJMThOQmFzZVxuICogQGNsYXNzZGVzYyBtZXRob2RzIGFuZCBkYXRhIHN0b3JlIGZvciBpMThuXG4gKi9cbmNsYXNzIEkxOE5CYXNlIHtcbiAgLyoqXG4gICAqIFByb2Nlc3Mgb3B0aW9ucyBhbmQgc3RhcnQgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IERFRkFVTFRfQ09ORklHKSB7XG4gICAgdGhpcy5sYW5ncyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB0aGlzLmxvYWRlZCA9IFtdXG4gICAgdGhpcy5wcm9jZXNzQ29uZmlnKG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW5kIGZvcm1hdCBjb25maWdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHByb2Nlc3NDb25maWcob3B0aW9ucykge1xuICAgIGNvbnN0IHsgbG9jYXRpb24sIC4uLnJlc3RPcHRpb25zIH0gPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5vcHRpb25zIH1cbiAgICAvLyBFbnN1cmUgbG9jYXRpb24gZW5kcyB3aXRoIGEgc2xhc2hcbiAgICBjb25zdCBwYXJzZWRMb2NhdGlvbiA9IGxvY2F0aW9uLmVuZHNXaXRoKCcvJykgPyBsb2NhdGlvbiA6IGAke2xvY2F0aW9ufS9gXG4gICAgdGhpcy5jb25maWcgPSB7IGxvY2F0aW9uOiBwYXJzZWRMb2NhdGlvbiwgLi4ucmVzdE9wdGlvbnMgfVxuXG4gICAgY29uc3QgeyBwcmVsb2FkZWQgPSB7fSwgb3ZlcnJpZGUgPSB7fSB9ID0gdGhpcy5jb25maWdcblxuICAgIC8vIE1lcmdlIGxvY2FsZXMgZnJvbSBib3RoIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGVcbiAgICAvLyBUaGlzIHN1cHBvcnRzIGxlZ2FjeSB1c2FnZSB3aGVyZSBvdmVycmlkZSBkZWZpbmVkIGVudGlyZSBsYW5ndWFnZXNcbiAgICBjb25zdCBhbGxMb2NhbGVzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMocHJlbG9hZGVkKSwgLi4uT2JqZWN0LmtleXMob3ZlcnJpZGUpXSlcblxuICAgIC8vIEFwcGx5IGxhbmd1YWdlcyBmcm9tIGJvdGggcHJlbG9hZGVkIGFuZCBvdmVycmlkZVxuICAgIC8vIGFwcGx5TGFuZ3VhZ2Ugd2lsbCBtZXJnZSB0aGVtIHByb3Blcmx5IChleGlzdGluZyArIHByZWxvYWRlZCArIG92ZXJyaWRlKVxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGFsbExvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHByZWxvYWRlZExhbmcgPSBwcmVsb2FkZWRbbG9jYWxlXSB8fCB7fVxuICAgICAgY29uc3Qgb3ZlcnJpZGVMYW5nID0gb3ZlcnJpZGVbbG9jYWxlXSB8fCB7fVxuICAgICAgLy8gTWVyZ2UgcHJlbG9hZGVkIGFuZCBvdmVycmlkZSBmb3IgdGhpcyBsb2NhbGVcbiAgICAgIGNvbnN0IG1lcmdlZExhbmcgPSB7IC4uLnByZWxvYWRlZExhbmcsIC4uLm92ZXJyaWRlTGFuZyB9XG4gICAgICB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlLCBtZXJnZWRMYW5nKVxuICAgIH1cblxuICAgIHRoaXMubG9jYWxlID0gdGhpcy5jb25maWcubG9jYWxlIHx8IHRoaXMuY29uZmlnLmxhbmdzWzBdXG4gIH1cblxuICAvKipcbiAgICogTG9hZCBsYW5ndWFnZSBhbmQgc2V0IGRlZmF1bHRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgICByZXNvbHZlcyBsYW5ndWFnZVxuICAgKi9cbiAgaW5pdChvcHRpb25zKSB7XG4gICAgdGhpcy5wcm9jZXNzQ29uZmlnKHsgLi4udGhpcy5jb25maWcsIC4uLm9wdGlvbnMgfSlcbiAgICByZXR1cm4gdGhpcy5zZXRDdXJyZW50KHRoaXMubG9jYWxlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBsYW5ndWFnZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBsYW5nXG4gICAqL1xuICBhZGRMYW5ndWFnZShsb2NhbGUsIGxhbmcgPSB7fSkge1xuICAgIGxhbmcgPSB0eXBlb2YgbGFuZyA9PT0gJ3N0cmluZycgPyBJMThOQmFzZS5wcm9jZXNzRmlsZShsYW5nKSA6IGxhbmdcbiAgICB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlLCBsYW5nKVxuICAgIHRoaXMubG9hZGVkLnB1c2gobG9jYWxlKVxuICAgIHRoaXMuY29uZmlnLmxhbmdzLnB1c2gobG9jYWxlKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhIHN0cmluZyBmcm9tIGEgbG9hZGVkIGxhbmd1YWdlIGZpbGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBrZXkgIC0gdGhlIGtleSBmb3IgdGhlIHN0cmluZyB3ZSBhcmUgdHJ5aW5nIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlIC0gbG9jYWxlIHRvIGNoZWNrIGZvciB2YWx1ZVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGxhbmd1YWdlIHN0cmluZyBvciB1bmRlZmluZWRcbiAgICovXG4gIGdldFZhbHVlKGtleSwgbG9jYWxlID0gdGhpcy5sb2NhbGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubGFuZ3NbbG9jYWxlXT8uW2tleV1cbiAgICByZXR1cm4gdmFsdWUgfHwgdGhpcy5nZXRGYWxsYmFja1ZhbHVlKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgbGFuZ3VhZ2UgdGhhdCBoYXMgZGVzaXJlZCBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSB2YWx1ZSBrZXlcbiAgICogQHJldHVybiB7U3RyaW5nfSBmb3VuZCB2YWx1ZSBvciB1bmRlZmluZWRcbiAgICovXG4gIGdldEZhbGxiYWNrVmFsdWUoa2V5KSB7XG4gICAgY29uc3QgZmFsbGJhY2tMYW5nID0gT2JqZWN0LnZhbHVlcyh0aGlzLmxhbmdzKS5maW5kKGxhbmcgPT4gbGFuZ1trZXldKVxuICAgIHJldHVybiBmYWxsYmFja0xhbmc/LltrZXldXG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlIHZhcmlhYmxlIHN5bnRheFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICBlc2NhcGVkIHN0clxuICAgKi9cbiAgbWFrZVNhZmUoc3RyKSB7XG4gICAgY29uc3QgbWFwT2JqID0ge1xuICAgICAgJ3snOiBTdHJpbmcucmF3YFxce2AsXG4gICAgICAnfSc6IFN0cmluZy5yYXdgXFx9YCxcbiAgICAgICd8JzogU3RyaW5nLnJhd2BcXHxgLFxuICAgIH1cblxuICAgIGNvbnN0IGVzY2FwZWRTdHIgPSBzdHIucmVwbGFjZUFsbCgvW3t9fF0vZywgbWF0Y2hlZCA9PiBtYXBPYmpbbWF0Y2hlZF0pXG5cbiAgICByZXR1cm4gbmV3IFJlZ0V4cChlc2NhcGVkU3RyLCAnZycpXG4gIH1cblxuICAvKipcbiAgICogVGVtcG9yYXJpbHkgcHV0IGEgc3RyaW5nIGludG8gdGhlIGN1cnJlbnRseSBsb2FkZWQgbGFuZ3VhZ2VcbiAgICogQHBhcmFtICB7U3RyaW5nfSBrZXlcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJpbmdcbiAgICogQHJldHVybiB7U3RyaW5nfSBzdHJpbmcgaW4gY3VycmVudCBsYW5ndWFnZVxuICAgKi9cbiAgcHV0KGtleSwgc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50W2tleV0gPSBzdHJpbmdcblxuICAgIHJldHVybiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhcmd1bWVudHMgZm9yIHRoZSByZXF1ZXN0ZWQgc3RyaW5nXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5ICB0aGUga2V5IHdlIHVzZSB0byBsb29rdXAgb3VyIHRyYW5zbGF0aW9uXG4gICAqIEBwYXJhbSAge211bHRpfSAgYXJncyAgc3RyaW5nLCBudW1iZXIgb3Igb2JqZWN0IGNvbnRhaW5pbmcgb3VyIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgdXBkYXRlZCBzdHJpbmcgdHJhbnNsYXRpb25cbiAgICovXG4gIGdldChrZXksIGFyZ3MpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGtleSlcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBObyByZXBsYWNlbWVudCBuZWVkZWQgaWYgbm8gYXJncyBwcm92aWRlZFxuICAgIGlmICghYXJncykge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW5zID0gdmFsdWUubWF0Y2goL1xce1tefV0rP1xcfS9nKVxuXG4gICAgLy8gTm8gdG9rZW5zIHRvIHJlcGxhY2VcbiAgICBpZiAoIXRva2Vucykge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgLy8gT2JqZWN0IGFyZ3M6IHJlcGxhY2UgZWFjaCB0b2tlbiB3aXRoIGNvcnJlc3BvbmRpbmcga2V5XG4gICAgaWYgKHR5cGVvZiBhcmdzID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgY29uc3QgdG9rZW5LZXkgPSB0b2tlbi5zbGljZSgxLCAtMSlcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHRoaXMubWFrZVNhZmUodG9rZW4pLCBhcmdzW3Rva2VuS2V5XSA/PyAnJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJpbWl0aXZlIGFyZ3M6IHJlcGxhY2UgYWxsIHRva2VucyB3aXRoIHNhbWUgdmFsdWVcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgvXFx7W159XSs/XFx9L2csIGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZDogUHJvY2VzcyBhIGxhbmd1YWdlIGZpbGUgZnJvbSByYXcgdGV4dFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHJlc3BvbnNlXG4gICAqIEByZXR1cm4ge09iamVjdH0gcHJvY2Vzc2VkIGxhbmd1YWdlXG4gICAqL1xuICBzdGF0aWMgcHJvY2Vzc0ZpbGUocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gSTE4Ti5mcm9tRmlsZShyZXNwb25zZS5yZXBsYWNlQWxsKCdcXG5cXG4nLCAnXFxuJykpXG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZDogVHVybiByYXcgdGV4dCBmcm9tIHRoZSBsYW5ndWFnZSBmaWxlcyBpbnRvIGZhbmN5IEpTT05cbiAgICogQHBhcmFtICB7U3RyaW5nfSByYXdUZXh0XG4gICAqIEByZXR1cm4ge09iamVjdH0gY29udmVydGVkIGxhbmd1YWdlIGZpbGVcbiAgICovXG4gIHN0YXRpYyBmcm9tRmlsZShyYXdUZXh0KSB7XG4gICAgY29uc3QgbGluZXMgPSByYXdUZXh0LnNwbGl0KCdcXG4nKVxuICAgIGNvbnN0IGxhbmcgPSB7fVxuXG4gICAgZm9yIChsZXQgbWF0Y2hlcywgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXiguKz8pICo/PSAqPyhbXlxcbl0rKS9cbiAgICAgIG1hdGNoZXMgPSByZWdleC5leGVjKGxpbmVzW2ldKVxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgbGFuZ1ttYXRjaGVzWzFdXSA9IG1hdGNoZXNbMl0udHJpbSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtJMThOQmFzZX0gc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZ2V0SW5zdGFuY2Uob3B0aW9ucykge1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlID0gbmV3IEkxOE5CYXNlKG9wdGlvbnMpXG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAgICovXG4gIHN0YXRpYyByZXNldEluc3RhbmNlKCkge1xuICAgIGluc3RhbmNlID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSByZW1vdGVseSBzdG9yZWQgbGFuZ3VhZ2UgZmlsZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcGFyYW0gIHtCb29sZWFufSB1c2VDYWNoZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICByZXNvbHZlcyByZXNwb25zZVxuICAgKi9cbiAgYXN5bmMgbG9hZExhbmcobG9jYWxlLCB1c2VDYWNoZSA9IHRydWUpIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIGxhbmd1YWdlIGlmIGFscmVhZHkgbG9hZGVkXG4gICAgaWYgKHRoaXMubG9hZGVkLmluY2x1ZGVzKGxvY2FsZSkgJiYgdXNlQ2FjaGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhbmdzW2xvY2FsZV1cbiAgICB9XG4gICAgLy8gRmV0Y2ggYW5kIHByb2Nlc3MgbGFuZ3VhZ2UgZmlsZVxuICAgIGNvbnN0IGxhbmdGaWxlID0gYCR7dGhpcy5jb25maWcubG9jYXRpb259JHtsb2NhbGV9JHt0aGlzLmNvbmZpZy5leHRlbnNpb259YFxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxhbmcgPSBhd2FpdCBmZXRjaERhdGEobGFuZ0ZpbGUpXG4gICAgICBjb25zdCBwcm9jZXNzZWRGaWxlID0gSTE4TkJhc2UucHJvY2Vzc0ZpbGUobGFuZylcbiAgICAgIHRoaXMuYXBwbHlMYW5ndWFnZShsb2NhbGUsIHByb2Nlc3NlZEZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5sYW5nc1tsb2NhbGVdXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIHJldHVybiB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhcHBsaWVzIG92ZXJyaWRlcyBmcm9tIGNvbmZpZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYW5nXG4gICAqIEByZXR1cm4ge09iamVjdH0gb3ZlcnJpZGVuIGxhbmd1YWdlXG4gICAqL1xuICBhcHBseUxhbmd1YWdlKGxvY2FsZSwgbGFuZyA9IHt9KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLmNvbmZpZy5vdmVycmlkZVtsb2NhbGVdIHx8IHt9XG4gICAgY29uc3QgZXhpc3RpbmdMYW5nID0gdGhpcy5sYW5nc1tsb2NhbGVdIHx8IHt9XG4gICAgdGhpcy5sYW5nc1tsb2NhbGVdID0geyAuLi5leGlzdGluZ0xhbmcsIC4uLmxhbmcsIC4uLm92ZXJyaWRlIH1cbiAgICB0aGlzLmxvYWRlZC5wdXNoKGxvY2FsZSlcbiAgICByZXR1cm4gdGhpcy5sYW5nc1tsb2NhbGVdXG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGN1cnJlbnRseSBhdmFpbGFibGUgbGFuZ3VhZ2VzXG4gICAqIEByZXR1cm4ge09iamVjdH0gYWxsIGNvbmZpZ3VyZWQgbGFuZ3VhZ2VzXG4gICAqL1xuICBnZXQgZ2V0TGFuZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmxhbmdzXG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBzZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgdG8gdGhlIGxvY2FsIHByb3ZpZGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSAgIGxvY2FsZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBsYW5ndWFnZVxuICAgKi9cbiAgYXN5bmMgc2V0Q3VycmVudChsb2NhbGUgPSAnZW4tVVMnKSB7XG4gICAgaWYgKCF0aGlzLmxvYWRlZC5pbmNsdWRlcyhsb2NhbGUpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRMYW5nKGxvY2FsZSlcbiAgICB9XG5cbiAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZVxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMubGFuZ3NbbG9jYWxlXVxuXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFxuICB9XG59XG5cbi8qKlxuICogUHJveHkgd3JhcHBlciB0aGF0IGVuYWJsZXMgc2luZ2xldG9uIHBhdHRlcm46XG4gKiAtIEkxOE4oKSByZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAqIC0gbmV3IEkxOE4oKSBjcmVhdGVzIGEgbmV3IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBJMThOID0gbmV3IFByb3h5KEkxOE5CYXNlLCB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBJMThOKCkgaXMgaW52b2tlZCBhcyBhIGZ1bmN0aW9uICh3aXRob3V0IG5ldylcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICByZXR1cm4gdGFyZ2V0LmdldEluc3RhbmNlKC4uLmFyZ3MpXG4gIH0sXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIG5ldyBJMThOKCkgaXMgaW52b2tlZFxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3QodGFyZ2V0LCBhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyB0YXJnZXQoLi4uYXJncylcbiAgfSxcblxuICAvKipcbiAgICogUHJveHkgcHJvcGVydHkgYWNjZXNzIHRvIHRoZSBiYXNlIGNsYXNzXG4gICAqL1xuICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgcmV0dXJuIHRhcmdldFtwcm9wXVxuICB9LFxufSlcblxuZXhwb3J0IGRlZmF1bHQgSTE4Ti5nZXRJbnN0YW5jZSgpXG4iXSwibWFwcGluZ3MiOiI4R0FBdUIsT0FBTyxPQUFPLENBQUUsT0FBUSxNQUFPLEtBQU0sS0NFNUQsSUFBTSxFQUFpQixDQUNyQixVQUFXLFFBRVgsU0FBVSxlQUVWLE1BQU8sQ0FBQyxTQUNSLE9BQVEsUUFDUixTQUFVLENBQUEsR0FJUixFQUFXLEtBa1JGLEVBQU8sSUFBSSxNQTNReEIsTUFBTSxFQUtKLFdBQUEsQ0FBWSxFQUFVLEdBQ3BCLEtBQUssTUFBUSxPQUFPLE9BQU8sTUFDM0IsS0FBSyxPQUFTLEdBQ2QsS0FBSyxjQUFjLEdBT3JCLGFBQUEsQ0FBYyxHQUNaLE1BQU0sU0FBRSxLQUFhLEdBQWdCLElBQUssS0FBbUIsR0FFdkQsRUFBaUIsRUFBUyxTQUFTLEtBQU8sRUFBVyxHQUFHLEtBQzlELEtBQUssT0FBUyxDQUFFLFNBQVUsS0FBbUIsR0FFN0MsTUFBTSxVQUFFLEVBQVksQ0FBQSxFQUFFLFNBQUUsRUFBVyxDQUFBLEdBQU8sS0FBSyxPQUl6QyxFQUFhLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxNQUFlLE9BQU8sS0FBSyxLQUl0RSxJQUFLLE1BQU0sS0FBVSxFQUFZLENBQy9CLE1BR00sRUFBYSxJQUhHLEVBQVUsSUFBVyxDQUFBLEtBQ3RCLEVBQVMsSUFBVyxDQUFBLEdBR3pDLEtBQUssY0FBYyxFQUFRLEdBRzdCLEtBQUssT0FBUyxLQUFLLE9BQU8sUUFBVSxLQUFLLE9BQU8sTUFBTSxHQVF4RCxJQUFBLENBQUssR0FFSCxPQURBLEtBQUssY0FBYyxJQUFLLEtBQUssVUFBVyxJQUNqQyxLQUFLLFdBQVcsS0FBSyxRQVE5QixXQUFBLENBQVksRUFBUSxFQUFPLENBQUEsR0FDekIsRUFBdUIsaUJBQVQsRUFBb0IsRUFBUyxZQUFZLEdBQVEsRUFDL0QsS0FBSyxjQUFjLEVBQVEsR0FDM0IsS0FBSyxPQUFPLEtBQUssR0FDakIsS0FBSyxPQUFPLE1BQU0sS0FBSyxHQVN6QixRQUFBLENBQVMsRUFBSyxFQUFTLEtBQUssUUFFMUIsT0FEYyxLQUFLLE1BQU0sS0FBVSxJQUNuQixLQUFLLGlCQUFpQixHQVF4QyxnQkFBQSxDQUFpQixHQUVmLE9BRHFCLE9BQU8sT0FBTyxLQUFLLE9BQU8sS0FBSyxHQUFRLEVBQUssTUFDM0MsR0FReEIsUUFBQSxDQUFTLEdBQ1AsTUFBTSxFQUFTLENBQ2IsSUFBSyxPQUFPLEdBQUcsS0FDZixJQUFLLE9BQU8sR0FBRyxLQUNmLElBQUssT0FBTyxHQUFHLE1BR1gsRUFBYSxFQUFJLFdBQVcsU0FBVSxHQUFXLEVBQU8sSUFFOUQsT0FBTyxJQUFJLE9BQU8sRUFBWSxLQVNoQyxHQUFBLENBQUksRUFBSyxHQUdQLE9BRkEsS0FBSyxRQUFRLEdBQU8sRUFFYixFQVNULEdBQUEsQ0FBSSxFQUFLLEdBQ1AsSUFBSSxFQUFRLEtBQUssU0FBUyxHQUMxQixJQUFLLEVBQ0gsT0FJRixJQUFLLEVBQ0gsT0FBTyxFQUdULE1BQU0sRUFBUyxFQUFNLE1BQU0sZUFHM0IsSUFBSyxFQUNILE9BQU8sRUFJVCxHQUFvQixpQkFBVCxFQUNULElBQUssTUFBTSxLQUFTLEVBQVEsQ0FDMUIsTUFBTSxFQUFXLEVBQU0sTUFBTSxHQUFHLEdBQ2hDLEVBQVEsRUFBTSxRQUFRLEtBQUssU0FBUyxHQUFRLEVBQUssSUFBYSxTQUloRSxFQUFRLEVBQU0sV0FBVyxjQUFlLEdBRzFDLE9BQU8sRUFRVCxrQkFBTyxDQUFZLEdBQ2pCLE9BQU8sRUFBSyxTQUFTLEVBQVMsV0FBVyxPQUFRLE9BUW5ELGVBQU8sQ0FBUyxHQUNkLE1BQU0sRUFBUSxFQUFRLE1BQU0sTUFDdEIsRUFBTyxDQUFBLEVBRWIsSUFBSyxJQUFJLEVBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBRXpDLEVBQVUsd0JBQU0sS0FBSyxFQUFNLElBQ3ZCLElBQ0YsRUFBSyxFQUFRLElBQU0sRUFBUSxHQUFHLFFBSWxDLE9BQU8sRUFRVCxrQkFBTyxDQUFZLEdBSWpCLE9BSEssSUFDSCxFQUFXLElBQUksRUFBUyxJQUVuQixFQU1ULG9CQUFPLEdBQ0wsRUFBVyxLQVNiLGNBQU0sQ0FBUyxFQUFRLEdBQVcsR0FFaEMsR0FBSSxLQUFLLE9BQU8sU0FBUyxJQUFXLEVBQ2xDLE9BQU8sS0FBSyxNQUFNLEdBR3BCLE1BQU0sRUFBVyxHQUFHLEtBQUssT0FBTyxXQUFXLElBQVMsS0FBSyxPQUFPLFlBRWhFLElBQ0UsTUFBTSxRRHROWixlQUFnQyxHQUM5QixJQUNFLE1BQU0sUUFBaUIsTUFBTSxHQUM3QixJQUFLLEVBQVMsR0FDWixNQUFNLElBQUksTUFBTSx1QkFBdUIsRUFBUyxVQUlsRCxhQURtQixFQURILEVBQUksU0FBUyxTQUFXLE9BQVMsZ0JBRzFDLEdBRVAsTUFBTSxHQzJNZSxDQUFVLEdBQ3ZCLEVBQWdCLEVBQVMsWUFBWSxHQUUzQyxPQURBLEtBQUssY0FBYyxFQUFRLEdBQ3BCLEtBQUssTUFBTSxTQUNYLEdBRVAsT0FBTyxLQUFLLGNBQWMsSUFVOUIsYUFBQSxDQUFjLEVBQVEsRUFBTyxDQUFBLEdBQzNCLE1BQU0sRUFBVyxLQUFLLE9BQU8sU0FBUyxJQUFXLENBQUEsRUFDM0MsRUFBZSxLQUFLLE1BQU0sSUFBVyxDQUFBLEVBRzNDLE9BRkEsS0FBSyxNQUFNLEdBQVUsSUFBSyxLQUFpQixLQUFTLEdBQ3BELEtBQUssT0FBTyxLQUFLLEdBQ1YsS0FBSyxNQUFNLEdBT3BCLFlBQUksR0FDRixPQUFPLEtBQUssT0FBTyxNQVFyQixnQkFBTSxDQUFXLEVBQVMsU0FReEIsT0FQSyxLQUFLLE9BQU8sU0FBUyxVQUNsQixLQUFLLFNBQVMsR0FHdEIsS0FBSyxPQUFTLEVBQ2QsS0FBSyxRQUFVLEtBQUssTUFBTSxHQUVuQixLQUFLLFVBU3dCLENBS3RDLE1BQUEsQ0FBTSxFQUFRLEVBQVMsSUFDZCxFQUFPLGVBQWUsR0FPL0IsVUFBQSxDQUFVLEVBQVEsSUFDVCxJQUFJLEtBQVUsR0FNdkIsSUFBQSxDQUFJLEVBQVEsSUFDSCxFQUFPLEtBSWxCLEVBQWUsRUFBSyJ9
|
|
8
|
+
var i18n=function(t){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Object.freeze({method:"GET",body:""});var e={extension:".lang",location:"assets/lang/",langs:["en-US"],locale:"en-US",override:{}},n=null,s=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),l=(t,e)=>{Array.isArray(t)&&!t.includes(e)&&t.push(e)},a=(t,e)=>e?null!=t:Boolean(t),i=new Map,o=(t,e)=>{const n=new Set;return 0===t&&n.add("zero"),n.add(((t,e)=>{const n=1===e?"one":"other";if("undefined"==typeof Intl||"function"!=typeof Intl.PluralRules)return n;if(!i.has(t)){let e=null;try{e=new Intl.PluralRules(String(t).replaceAll("_","-"))}catch{}i.set(t,e)}const s=i.get(t);return s?s.select(e):n})(e,t)),n.add("other"),[...n]},r=new Proxy(class t{constructor(t=e){this.langs=Object.create(null),this.loaded=[],this.processConfig(t)}processConfig(t){const{location:n,...s}={...e,...t},l=n.endsWith("/")?n:`${n}/`;Array.isArray(s.langs)&&(s.langs=[...new Set(s.langs)]),this.config={location:l,...s};const{preloaded:a={},override:i={}}=this.config,o=new Set([...Object.keys(a),...Object.keys(i)]);for(const e of o){const t={...a[e]||{},...i[e]||{}};this.applyLanguage(e,t)}this.locale=this.config.locale||this.config.langs[0]}init(t){this.processConfig({...this.config,...t});const e=this.getFallbackLocales().filter(t=>!this.loaded.includes(t));return e.length?Promise.all([this.setCurrent(this.locale),...e.map(t=>this.loadLang(t))]).then(([t])=>t):this.setCurrent(this.locale)}addLanguage(e,n={}){n="string"==typeof n?t.processFile(n):n,this.applyLanguage(e,n),l(this.loaded,e),l(this.config.langs,e)}getFallbackLocales(){const{fallbackLocale:t}=this.config;return[].concat(t??[]).filter(t=>"string"==typeof t&&t)}getLocaleChain(t=this.locale){const e=[t],n=String(t).split(/[-_]/)[0];return n&&this.langs[n]&&e.push(n),e.push(...this.getFallbackLocales()),[...new Set(e)]}getValue(t,e=this.locale){if(!this.config.fallbackLocale)return this.langs[e]?.[t]||this.getFallbackValue(t);for(const n of this.getLocaleChain(e)){const e=this.langs[n];if(e&&s(e,t)&&a(e[t],!0))return e[t]}}getPluralValue(t,e,n=this.locale){const l=Boolean(this.config.fallbackLocale),i=l?this.getLocaleChain(n):new Set([n,...Object.keys(this.langs)]);for(const r of i){const n=this.langs[r];if(n)for(const i of o(e,r)){const e=`${t}.${i}`;if(s(n,e)&&a(n[e],l))return n[e]}}}handleMissing(t){const{onMissing:e}=this.config;if("function"==typeof e){const n=e(t);if("string"==typeof n)return n}}getFallbackValue(t){return Object.values(this.langs).find(e=>e[t])?.[t]}makeSafe(t){const e={"{":String.raw`\{`,"}":String.raw`\}`,"|":String.raw`\|`},n=t.replaceAll(/[{}|]/g,t=>e[t]);return new RegExp(n,"g")}put(t,e,n){let s;return s=void 0===n?this.current||(this.langs[this.locale]??={}):this.langs[n]??={},s[t]=e,e}get(t,e,n=this.locale){const s=Boolean(this.config.fallbackLocale);let l=this.getValue(t,n);if(!a(l,s)){const s=(t=>"number"==typeof t?t:t&&"object"==typeof t&&"number"==typeof t.count?t.count:void 0)(e);l=void 0===s?void 0:this.getPluralValue(t,s,n)}if(!a(l,s))return this.handleMissing({key:t,locale:n,type:"key"});if(!e&&0!==e)return l;const i=l.match(/\{[^}]+?\}/g);if(!i)return l;if("object"==typeof e)for(const a of i){const s=a.slice(1,-1);let i=e[s];null==i&&(i=this.handleMissing({key:t,locale:n,type:"arg",arg:s})??""),l=l.replace(this.makeSafe(a),i)}else l=l.replaceAll(/\{[^}]+?\}/g,e);return l}t(t,e,n){const s=this.get(t,e,n);return void 0===s?t:s}forLocale(t){return(e,n)=>this.t(e,n,t)}static processFile(t){return r.fromFile(t)}static fromFile(t){const e=String(t).replaceAll("\r\n","\n").split("\n"),n={},s=/^(.+?) *?= *?([^\n]+)/,l=t=>{const e=s.exec(t),l=e?.[1].trim();l&&(n[l]=e[2].trim())};let a=null;for(const i of e){let t=i;if(null!==a)t=a+i.trimStart(),a=null;else if(/^\s*[#;]/.test(i))continue;/(^|[^\\])\\$/.test(t)?a=t.slice(0,-1):l(t)}return null!==a&&l(a),n}static parse(t){return r.processFile(t)}static getInstance(e){return n||(n=new t(e)),n}static resetInstance(){n=null}async loadLang(e,n=!0){if(this.loaded.includes(e)&&n)return this.langs[e];const s=`${this.config.location}${e}${this.config.extension}`;try{const n=await async function(t){try{const e=await fetch(t);if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return await e[t.endsWith(".lang")?"text":"json"]()}catch(e){throw e}}(s),l="string"==typeof n?t.processFile(n):n;return this.applyLanguage(e,l),this.langs[e]}catch(l){return this.applyLanguage(e)}}applyLanguage(t,e={}){const n=this.config.override[t]||{},s=this.langs[t]||{};return this.langs[t]={...s,...e,...n},this.current&&t===this.locale&&(this.current=this.langs[t]),l(this.loaded,t),this.langs[t]}get getLangs(){return this.config.langs}async setCurrent(t="en-US"){return this.loaded.includes(t)||await this.loadLang(t),this.locale=t,this.current=this.langs[t],this.current}},{apply:(t,e,n)=>t.getInstance(...n),construct:(t,e)=>new t(...e),get:(t,e)=>t[e]}),c=r.getInstance();return t.I18N=r,t.default=c,t}({});
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5paWZlLm1pbi5qcyIsIm5hbWVzIjpbImkxOG4iLCJleHBvcnRzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydGllcyIsIl9fZXNNb2R1bGUiLCJ2YWx1ZSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiZnJlZXplIiwibWV0aG9kIiwiYm9keSIsIkRFRkFVTFRfQ09ORklHIiwiZXh0ZW5zaW9uIiwibG9jYXRpb24iLCJsYW5ncyIsImxvY2FsZSIsIm92ZXJyaWRlIiwiaW5zdGFuY2UiLCJoYXNPd24iLCJvYmoiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwdXNoVW5pcXVlIiwiYXJyIiwiaXRlbSIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVzIiwicHVzaCIsImlzUHJlc2VudCIsInN0cmljdCIsIkJvb2xlYW4iLCJwbHVyYWxSdWxlc0NhY2hlIiwiTWFwIiwiZ2V0UGx1cmFsU3VmZml4ZXMiLCJjb3VudCIsInN1ZmZpeGVzIiwiU2V0IiwiYWRkIiwiYmFzaWNDYXRlZ29yeSIsIkludGwiLCJQbHVyYWxSdWxlcyIsImhhcyIsInJ1bGVzIiwiU3RyaW5nIiwicmVwbGFjZUFsbCIsInNldCIsImdldCIsInNlbGVjdCIsImdldFBsdXJhbENhdGVnb3J5IiwiSTE4TiIsIlByb3h5IiwiSTE4TkJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJ0aGlzIiwiY3JlYXRlIiwibG9hZGVkIiwicHJvY2Vzc0NvbmZpZyIsInJlc3RPcHRpb25zIiwicGFyc2VkTG9jYXRpb24iLCJlbmRzV2l0aCIsImNvbmZpZyIsInByZWxvYWRlZCIsImFsbExvY2FsZXMiLCJrZXlzIiwibWVyZ2VkTGFuZyIsImFwcGx5TGFuZ3VhZ2UiLCJpbml0IiwiZmFsbGJhY2tzIiwiZ2V0RmFsbGJhY2tMb2NhbGVzIiwiZmlsdGVyIiwibGVuZ3RoIiwiUHJvbWlzZSIsImFsbCIsInNldEN1cnJlbnQiLCJtYXAiLCJsb2FkTGFuZyIsInRoZW4iLCJjdXJyZW50IiwiYWRkTGFuZ3VhZ2UiLCJsYW5nIiwicHJvY2Vzc0ZpbGUiLCJmYWxsYmFja0xvY2FsZSIsImNvbmNhdCIsImdldExvY2FsZUNoYWluIiwiY2hhaW4iLCJiYXNlTG9jYWxlIiwic3BsaXQiLCJnZXRWYWx1ZSIsImdldEZhbGxiYWNrVmFsdWUiLCJjaGFpbkxvY2FsZSIsImdldFBsdXJhbFZhbHVlIiwibG9jYWxlcyIsInBsdXJhbExvY2FsZSIsInN1ZmZpeCIsInBsdXJhbEtleSIsImhhbmRsZU1pc3NpbmciLCJpbmZvIiwib25NaXNzaW5nIiwicmVzdWx0IiwidmFsdWVzIiwiZmluZCIsIm1ha2VTYWZlIiwic3RyIiwibWFwT2JqIiwicmF3IiwiZXNjYXBlZFN0ciIsIm1hdGNoZWQiLCJSZWdFeHAiLCJwdXQiLCJzdHJpbmciLCJhcmdzIiwiZ2V0Q291bnQiLCJ0eXBlIiwidG9rZW5zIiwibWF0Y2giLCJ0b2tlbiIsInRva2VuS2V5Iiwic2xpY2UiLCJyZXBsYWNlbWVudCIsImFyZyIsInJlcGxhY2UiLCJ0IiwiZm9yTG9jYWxlIiwicmVzcG9uc2UiLCJmcm9tRmlsZSIsInJhd1RleHQiLCJsaW5lcyIsInJlZ2V4IiwicGFyc2VMaW5lIiwibGluZSIsIm1hdGNoZXMiLCJleGVjIiwidHJpbSIsImNvbnRpbnVlZCIsImxvZ2ljYWxMaW5lIiwidHJpbVN0YXJ0IiwidGVzdCIsInBhcnNlIiwidGV4dCIsImdldEluc3RhbmNlIiwicmVzZXRJbnN0YW5jZSIsInVzZUNhY2hlIiwibGFuZ0ZpbGUiLCJhc3luYyIsInVybCIsImZldGNoIiwib2siLCJFcnJvciIsInN0YXR1cyIsImVycm9yIiwiZmV0Y2hEYXRhIiwicHJvY2Vzc2VkRmlsZSIsImVyciIsImV4aXN0aW5nTGFuZyIsImdldExhbmdzIiwiYXBwbHkiLCJ0YXJnZXQiLCJ0aGlzQXJnIiwiY29uc3RydWN0IiwicHJvcCIsIm1pMThuX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2ZldGNoLmpzIiwiLi4vc3JjL21pMThuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRlZmF1bHRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSh7IG1ldGhvZDogJ0dFVCcsIGJvZHk6ICcnIH0pXG4vKipcbiAqIEZldGNoZXMgYSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGZldGNoLlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnM9e31dIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmZXRjaCByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtmZXRjaE9wdGlvbnMuaGVhZGVyc10gLSBIZWFkZXJzIHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZldGNoT3B0aW9ucy5tZXRob2RdIC0gVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSAoZS5nLiwgJ0dFVCcsICdQT1NUJykuXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IFtmZXRjaE9wdGlvbnMuYm9keV0gLSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3BvbnNlIG9iamVjdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybi5vayAtIEluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAyMDAtMjk5LlxuICogQHJldHVybiB7bnVtYmVyfSByZXR1cm4uc3RhdHVzIC0gVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm4uc3RhdHVzVGV4dCAtIFRoZSBIVFRQIHN0YXR1cyBtZXNzYWdlIG9mIHRoZSByZXNwb25zZS5cbiAqIEByZXR1cm4ge01hcDxzdHJpbmcsIHN0cmluZz59IHJldHVybi5oZWFkZXJzIC0gVGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybiB7QnVmZmVyfSByZXR1cm4uYm9keSAtIFRoZSBib2R5IG9mIHRoZSByZXNwb25zZSBhcyBhIEJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8QnVmZmVyPn0gcmV0dXJuLmFycmF5QnVmZmVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgYm9keSBhcyBhbiBBcnJheUJ1ZmZlci5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKCk6IFByb21pc2U8T2JqZWN0Pn0gcmV0dXJuLmpzb24gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBib2R5IHBhcnNlZCBhcyBKU09OLlxuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZXIgPSB1cmwuZW5kc1dpdGgoJy5sYW5nJykgPyAndGV4dCcgOiAnanNvbidcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2VbaGFuZGxlcl0oKVxuICAgIHJldHVybiBkYXRhXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVGhlcmUgaGFzIGJlZW4gYSBwcm9ibGVtIHdpdGggeW91ciBmZXRjaCBvcGVyYXRpb246JywgZXJyb3IpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwiaW1wb3J0IHsgZmV0Y2hEYXRhIH0gZnJvbSAnLi9mZXRjaC5qcydcblxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XG4gIGV4dGVuc2lvbjogJy5sYW5nJyxcbiAgLy8gbG9jYWwgb3IgcmVtb3RlIGRpcmVjdG9yeSBjb250YWluaW5nIGxhbmd1YWdlIGZpbGVzXG4gIGxvY2F0aW9uOiAnYXNzZXRzL2xhbmcvJyxcbiAgLy8gbGlzdCBvZiBhdmFpbGFibGUgbG9jYWxlcywgaGFuZHkgZm9yIHBvcHVsYXRpbmcgc2VsZWN0b3IuXG4gIGxhbmdzOiBbJ2VuLVVTJ10sXG4gIGxvY2FsZTogJ2VuLVVTJywgLy8gaW5pdCB3aXRoIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VcbiAgb3ZlcnJpZGU6IHt9LFxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2UgaG9sZGVyXG5sZXQgaW5zdGFuY2UgPSBudWxsXG5cbmNvbnN0IGhhc093biA9IChvYmosIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxuXG4vKipcbiAqIEFkZCBhbiBpdGVtIHRvIGFuIGFycmF5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICogQHBhcmFtIHsqfSBpdGVtXG4gKi9cbmNvbnN0IHB1c2hVbmlxdWUgPSAoYXJyLCBpdGVtKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikgJiYgIWFyci5pbmNsdWRlcyhpdGVtKSkge1xuICAgIGFyci5wdXNoKGl0ZW0pXG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbG9va2VkIHVwIHZhbHVlIGNvdW50cyBhcyBwcmVzZW50LlxuICogTGVnYWN5IGxvb2t1cHMgdHJlYXQgZW1wdHkgc3RyaW5ncyBhcyBtaXNzaW5nLCBmYWxsYmFja0xvY2FsZSBsb29rdXBzIGRvIG5vdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc3RyaWN0IHRydWUgd2hlbiBmYWxsYmFja0xvY2FsZSBpcyBjb25maWd1cmVkXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5jb25zdCBpc1ByZXNlbnQgPSAodmFsdWUsIHN0cmljdCkgPT4gKHN0cmljdCA/IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgOiBCb29sZWFuKHZhbHVlKSlcblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwbHVyYWwgY291bnQgZnJvbSBnZXQvdCBhcmdzXG4gKiBAcGFyYW0geyp9IGFyZ3NcbiAqIEByZXR1cm4ge051bWJlcnx1bmRlZmluZWR9XG4gKi9cbmNvbnN0IGdldENvdW50ID0gYXJncyA9PiB7XG4gIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYXJnc1xuICB9XG4gIGlmIChhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYXJncy5jb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYXJncy5jb3VudFxuICB9XG59XG5cbmNvbnN0IHBsdXJhbFJ1bGVzQ2FjaGUgPSBuZXcgTWFwKClcblxuLyoqXG4gKiBHZXQgdGhlIENMRFIgcGx1cmFsIGNhdGVnb3J5IGZvciBhIGNvdW50IGluIGEgbG9jYWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge1N0cmluZ30gcGx1cmFsIGNhdGVnb3J5LCBlZy4gJ29uZScsICdmZXcnLCAnb3RoZXInXG4gKi9cbmNvbnN0IGdldFBsdXJhbENhdGVnb3J5ID0gKGxvY2FsZSwgY291bnQpID0+IHtcbiAgY29uc3QgYmFzaWNDYXRlZ29yeSA9IGNvdW50ID09PSAxID8gJ29uZScgOiAnb3RoZXInXG4gIGlmICh0eXBlb2YgSW50bCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIEludGwuUGx1cmFsUnVsZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmFzaWNDYXRlZ29yeVxuICB9XG4gIGlmICghcGx1cmFsUnVsZXNDYWNoZS5oYXMobG9jYWxlKSkge1xuICAgIGxldCBydWxlcyA9IG51bGxcbiAgICB0cnkge1xuICAgICAgcnVsZXMgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyhTdHJpbmcobG9jYWxlKS5yZXBsYWNlQWxsKCdfJywgJy0nKSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGludmFsaWQgbG9jYWxlIHRhZ1xuICAgIH1cbiAgICBwbHVyYWxSdWxlc0NhY2hlLnNldChsb2NhbGUsIHJ1bGVzKVxuICB9XG4gIGNvbnN0IHJ1bGVzID0gcGx1cmFsUnVsZXNDYWNoZS5nZXQobG9jYWxlKVxuICByZXR1cm4gcnVsZXMgPyBydWxlcy5zZWxlY3QoY291bnQpIDogYmFzaWNDYXRlZ29yeVxufVxuXG4vKipcbiAqIFBsdXJhbCBrZXkgc3VmZml4ZXMgdG8gdHJ5LCBpbiBvcmRlclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX1cbiAqL1xuY29uc3QgZ2V0UGx1cmFsU3VmZml4ZXMgPSAoY291bnQsIGxvY2FsZSkgPT4ge1xuICBjb25zdCBzdWZmaXhlcyA9IG5ldyBTZXQoKVxuICBpZiAoY291bnQgPT09IDApIHtcbiAgICBzdWZmaXhlcy5hZGQoJ3plcm8nKVxuICB9XG4gIHN1ZmZpeGVzLmFkZChnZXRQbHVyYWxDYXRlZ29yeShsb2NhbGUsIGNvdW50KSlcbiAgc3VmZml4ZXMuYWRkKCdvdGhlcicpXG4gIHJldHVybiBbLi4uc3VmZml4ZXNdXG59XG5cbi8qKlxuICogTWFpbiBpMThuIGNsYXNzXG4gKiBAY2xhc3MgSTE4TkJhc2VcbiAqIEBjbGFzc2Rlc2MgbWV0aG9kcyBhbmQgZGF0YSBzdG9yZSBmb3IgaTE4blxuICovXG5jbGFzcyBJMThOQmFzZSB7XG4gIC8qKlxuICAgKiBQcm9jZXNzIG9wdGlvbnMgYW5kIHN0YXJ0IHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSBERUZBVUxUX0NPTkZJRykge1xuICAgIHRoaXMubGFuZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5sb2FkZWQgPSBbXVxuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyhvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuZCBmb3JtYXQgY29uZmlnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBwcm9jZXNzQ29uZmlnKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCAuLi5yZXN0T3B0aW9ucyB9ID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4ub3B0aW9ucyB9XG4gICAgLy8gRW5zdXJlIGxvY2F0aW9uIGVuZHMgd2l0aCBhIHNsYXNoXG4gICAgY29uc3QgcGFyc2VkTG9jYXRpb24gPSBsb2NhdGlvbi5lbmRzV2l0aCgnLycpID8gbG9jYXRpb24gOiBgJHtsb2NhdGlvbn0vYFxuICAgIC8vIENvcHkgbGFuZ3Mgc28gdGhlIGRlZmF1bHRzIGFuZCB1c2VyIHN1cHBsaWVkIGFycmF5cyBhcmUgbmV2ZXIgbXV0YXRlZFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3RPcHRpb25zLmxhbmdzKSkge1xuICAgICAgcmVzdE9wdGlvbnMubGFuZ3MgPSBbLi4ubmV3IFNldChyZXN0T3B0aW9ucy5sYW5ncyldXG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0geyBsb2NhdGlvbjogcGFyc2VkTG9jYXRpb24sIC4uLnJlc3RPcHRpb25zIH1cblxuICAgIGNvbnN0IHsgcHJlbG9hZGVkID0ge30sIG92ZXJyaWRlID0ge30gfSA9IHRoaXMuY29uZmlnXG5cbiAgICAvLyBNZXJnZSBsb2NhbGVzIGZyb20gYm90aCBwcmVsb2FkZWQgYW5kIG92ZXJyaWRlXG4gICAgLy8gVGhpcyBzdXBwb3J0cyBsZWdhY3kgdXNhZ2Ugd2hlcmUgb3ZlcnJpZGUgZGVmaW5lZCBlbnRpcmUgbGFuZ3VhZ2VzXG4gICAgY29uc3QgYWxsTG9jYWxlcyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKHByZWxvYWRlZCksIC4uLk9iamVjdC5rZXlzKG92ZXJyaWRlKV0pXG5cbiAgICAvLyBBcHBseSBsYW5ndWFnZXMgZnJvbSBib3RoIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGVcbiAgICAvLyBhcHBseUxhbmd1YWdlIHdpbGwgbWVyZ2UgdGhlbSBwcm9wZXJseSAoZXhpc3RpbmcgKyBwcmVsb2FkZWQgKyBvdmVycmlkZSlcbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBhbGxMb2NhbGVzKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZWRMYW5nID0gcHJlbG9hZGVkW2xvY2FsZV0gfHwge31cbiAgICAgIGNvbnN0IG92ZXJyaWRlTGFuZyA9IG92ZXJyaWRlW2xvY2FsZV0gfHwge31cbiAgICAgIC8vIE1lcmdlIHByZWxvYWRlZCBhbmQgb3ZlcnJpZGUgZm9yIHRoaXMgbG9jYWxlXG4gICAgICBjb25zdCBtZXJnZWRMYW5nID0geyAuLi5wcmVsb2FkZWRMYW5nLCAuLi5vdmVycmlkZUxhbmcgfVxuICAgICAgdGhpcy5hcHBseUxhbmd1YWdlKGxvY2FsZSwgbWVyZ2VkTGFuZylcbiAgICB9XG5cbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuY29uZmlnLmxvY2FsZSB8fCB0aGlzLmNvbmZpZy5sYW5nc1swXVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbGFuZ3VhZ2UgYW5kIHNldCBkZWZhdWx0XG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgcmVzb2x2ZXMgbGFuZ3VhZ2VcbiAgICovXG4gIGluaXQob3B0aW9ucykge1xuICAgIHRoaXMucHJvY2Vzc0NvbmZpZyh7IC4uLnRoaXMuY29uZmlnLCAuLi5vcHRpb25zIH0pXG4gICAgLy8gRmFsbGJhY2sgbG9jYWxlcyBhcmUgbG9hZGVkIGFsb25nc2lkZSB0aGUgY3VycmVudCBsb2NhbGUgc28gbG9va3VwcyBjYW4gZmFsbCBiYWNrIHRvIHRoZW1cbiAgICBjb25zdCBmYWxsYmFja3MgPSB0aGlzLmdldEZhbGxiYWNrTG9jYWxlcygpLmZpbHRlcihsb2NhbGUgPT4gIXRoaXMubG9hZGVkLmluY2x1ZGVzKGxvY2FsZSkpXG4gICAgaWYgKCFmYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRDdXJyZW50KHRoaXMubG9jYWxlKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuc2V0Q3VycmVudCh0aGlzLmxvY2FsZSksIC4uLmZhbGxiYWNrcy5tYXAobG9jYWxlID0+IHRoaXMubG9hZExhbmcobG9jYWxlKSldKS50aGVuKFxuICAgICAgKFtjdXJyZW50XSkgPT4gY3VycmVudCxcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGxhbmd1YWdlIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGxhbmdcbiAgICovXG4gIGFkZExhbmd1YWdlKGxvY2FsZSwgbGFuZyA9IHt9KSB7XG4gICAgbGFuZyA9IHR5cGVvZiBsYW5nID09PSAnc3RyaW5nJyA/IEkxOE5CYXNlLnByb2Nlc3NGaWxlKGxhbmcpIDogbGFuZ1xuICAgIHRoaXMuYXBwbHlMYW5ndWFnZShsb2NhbGUsIGxhbmcpXG4gICAgcHVzaFVuaXF1ZSh0aGlzLmxvYWRlZCwgbG9jYWxlKVxuICAgIHB1c2hVbmlxdWUodGhpcy5jb25maWcubGFuZ3MsIGxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVkIGZhbGxiYWNrIGxvY2FsZXNcbiAgICogQHJldHVybiB7U3RyaW5nW119XG4gICAqL1xuICBnZXRGYWxsYmFja0xvY2FsZXMoKSB7XG4gICAgY29uc3QgeyBmYWxsYmFja0xvY2FsZSB9ID0gdGhpcy5jb25maWdcbiAgICByZXR1cm4gW10uY29uY2F0KGZhbGxiYWNrTG9jYWxlID8/IFtdKS5maWx0ZXIobG9jYWxlID0+IHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnICYmIGxvY2FsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbGVzIGNoZWNrZWQsIGluIG9yZGVyLCB3aGVuIGxvb2tpbmcgdXAgYSBrZXkgd2l0aCBmYWxsYmFja0xvY2FsZSBjb25maWd1cmVkOlxuICAgKiByZXF1ZXN0ZWQgbG9jYWxlLCBpdHMgYmFzZSBsYW5ndWFnZSAoaWYgbG9hZGVkKSwgdGhlbiBlYWNoIGZhbGxiYWNrIGxvY2FsZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZVxuICAgKiBAcmV0dXJuIHtTdHJpbmdbXX1cbiAgICovXG4gIGdldExvY2FsZUNoYWluKGxvY2FsZSA9IHRoaXMubG9jYWxlKSB7XG4gICAgY29uc3QgY2hhaW4gPSBbbG9jYWxlXVxuICAgIGNvbnN0IGJhc2VMb2NhbGUgPSBTdHJpbmcobG9jYWxlKS5zcGxpdCgvWy1fXS8pWzBdXG4gICAgaWYgKGJhc2VMb2NhbGUgJiYgdGhpcy5sYW5nc1tiYXNlTG9jYWxlXSkge1xuICAgICAgY2hhaW4ucHVzaChiYXNlTG9jYWxlKVxuICAgIH1cbiAgICBjaGFpbi5wdXNoKC4uLnRoaXMuZ2V0RmFsbGJhY2tMb2NhbGVzKCkpXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGNoYWluKV1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSBzdHJpbmcgZnJvbSBhIGxvYWRlZCBsYW5ndWFnZSBmaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5ICAtIHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgd2UgYXJlIHRyeWluZyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGxvY2FsZSAtIGxvY2FsZSB0byBjaGVjayBmb3IgdmFsdWVcbiAgICogQHJldHVybiB7U3RyaW5nfSBsYW5ndWFnZSBzdHJpbmcgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRWYWx1ZShrZXksIGxvY2FsZSA9IHRoaXMubG9jYWxlKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYWluTG9jYWxlIG9mIHRoaXMuZ2V0TG9jYWxlQ2hhaW4obG9jYWxlKSkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nc1tjaGFpbkxvY2FsZV1cbiAgICAgICAgaWYgKGxhbmcgJiYgaGFzT3duKGxhbmcsIGtleSkgJiYgaXNQcmVzZW50KGxhbmdba2V5XSwgdHJ1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbGFuZ1trZXldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYW5nc1tsb2NhbGVdPy5ba2V5XVxuICAgIHJldHVybiB2YWx1ZSB8fCB0aGlzLmdldEZhbGxiYWNrVmFsdWUoa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBwbHVyYWwgZm9ybSBvZiBrZXksIGVnLiBga2V5Lnplcm9gLCBga2V5Lm9uZWAsIGBrZXkub3RoZXJgXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSAge051bWJlcn0gY291bnRcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHJldHVybiB7U3RyaW5nfSBwbHVyYWwgc3RyaW5nIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0UGx1cmFsVmFsdWUoa2V5LCBjb3VudCwgbG9jYWxlID0gdGhpcy5sb2NhbGUpIHtcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKVxuICAgIGNvbnN0IGxvY2FsZXMgPSBzdHJpY3QgPyB0aGlzLmdldExvY2FsZUNoYWluKGxvY2FsZSkgOiBuZXcgU2V0KFtsb2NhbGUsIC4uLk9iamVjdC5rZXlzKHRoaXMubGFuZ3MpXSlcblxuICAgIGZvciAoY29uc3QgcGx1cmFsTG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdzW3BsdXJhbExvY2FsZV1cbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzdWZmaXggb2YgZ2V0UGx1cmFsU3VmZml4ZXMoY291bnQsIHBsdXJhbExvY2FsZSkpIHtcbiAgICAgICAgY29uc3QgcGx1cmFsS2V5ID0gYCR7a2V5fS4ke3N1ZmZpeH1gXG4gICAgICAgIGlmIChoYXNPd24obGFuZywgcGx1cmFsS2V5KSAmJiBpc1ByZXNlbnQobGFuZ1twbHVyYWxLZXldLCBzdHJpY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhbmdbcGx1cmFsS2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBhIG1pc3Npbmcga2V5IG9yIGFyZ3VtZW50IHRvIHRoZSBvbk1pc3NpbmcgaGFuZGxlclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGluZm8geyBrZXksIGxvY2FsZSwgdHlwZSwgYXJnIH1cbiAgICogQHJldHVybiB7U3RyaW5nfSByZXBsYWNlbWVudCBzdHJpbmcgcmV0dXJuZWQgYnkgb25NaXNzaW5nIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgaGFuZGxlTWlzc2luZyhpbmZvKSB7XG4gICAgY29uc3QgeyBvbk1pc3NpbmcgfSA9IHRoaXMuY29uZmlnXG4gICAgaWYgKHR5cGVvZiBvbk1pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9uTWlzc2luZyhpbmZvKVxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGxhbmd1YWdlIHRoYXQgaGFzIGRlc2lyZWQga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgdmFsdWUga2V5XG4gICAqIEByZXR1cm4ge1N0cmluZ30gZm91bmQgdmFsdWUgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRGYWxsYmFja1ZhbHVlKGtleSkge1xuICAgIGNvbnN0IGZhbGxiYWNrTGFuZyA9IE9iamVjdC52YWx1ZXModGhpcy5sYW5ncykuZmluZChsYW5nID0+IGxhbmdba2V5XSlcbiAgICByZXR1cm4gZmFsbGJhY2tMYW5nPy5ba2V5XVxuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FwZSB2YXJpYWJsZSBzeW50YXhcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgZXNjYXBlZCBzdHJcbiAgICovXG4gIG1ha2VTYWZlKHN0cikge1xuICAgIGNvbnN0IG1hcE9iaiA9IHtcbiAgICAgICd7JzogU3RyaW5nLnJhd2BcXHtgLFxuICAgICAgJ30nOiBTdHJpbmcucmF3YFxcfWAsXG4gICAgICAnfCc6IFN0cmluZy5yYXdgXFx8YCxcbiAgICB9XG5cbiAgICBjb25zdCBlc2NhcGVkU3RyID0gc3RyLnJlcGxhY2VBbGwoL1t7fXxdL2csIG1hdGNoZWQgPT4gbWFwT2JqW21hdGNoZWRdKVxuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZFN0ciwgJ2cnKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvcmFyaWx5IHB1dCBhIHN0cmluZyBpbnRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIGxhbmd1YWdlLCBvciB0aGUgZ2l2ZW4gbG9jYWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSAge1N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSB0byB3cml0ZSB0b1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyBpbiBjdXJyZW50IGxhbmd1YWdlXG4gICAqL1xuICBwdXQoa2V5LCBzdHJpbmcsIGxvY2FsZSkge1xuICAgIGxldCBsYW5nXG4gICAgaWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYW5nID0gdGhpcy5jdXJyZW50IHx8ICh0aGlzLmxhbmdzW3RoaXMubG9jYWxlXSA/Pz0ge30pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbmcgPSB0aGlzLmxhbmdzW2xvY2FsZV0gPz89IHt9XG4gICAgfVxuICAgIGxhbmdba2V5XSA9IHN0cmluZ1xuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmb3IgdGhlIHJlcXVlc3RlZCBzdHJpbmdcbiAgICogQHBhcmFtICB7U3RyaW5nfSBrZXkgIHRoZSBrZXkgd2UgdXNlIHRvIGxvb2t1cCBvdXIgdHJhbnNsYXRpb25cbiAgICogQHBhcmFtICB7bXVsdGl9ICBhcmdzICBzdHJpbmcsIG51bWJlciBvciBvYmplY3QgY29udGFpbmluZyBvdXIgYXJndW1lbnRzXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSwgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgbG9jYWxlXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgICB1cGRhdGVkIHN0cmluZyB0cmFuc2xhdGlvblxuICAgKi9cbiAgZ2V0KGtleSwgYXJncywgbG9jYWxlID0gdGhpcy5sb2NhbGUpIHtcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKHRoaXMuY29uZmlnLmZhbGxiYWNrTG9jYWxlKVxuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoa2V5LCBsb2NhbGUpXG5cbiAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSwgc3RyaWN0KSkge1xuICAgICAgY29uc3QgY291bnQgPSBnZXRDb3VudChhcmdzKVxuICAgICAgdmFsdWUgPSBjb3VudCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5nZXRQbHVyYWxWYWx1ZShrZXksIGNvdW50LCBsb2NhbGUpXG4gICAgfVxuXG4gICAgaWYgKCFpc1ByZXNlbnQodmFsdWUsIHN0cmljdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1pc3NpbmcoeyBrZXksIGxvY2FsZSwgdHlwZTogJ2tleScgfSlcbiAgICB9XG5cbiAgICAvLyBObyByZXBsYWNlbWVudCBuZWVkZWQgaWYgbm8gYXJncyBwcm92aWRlZFxuICAgIGlmICghYXJncyAmJiBhcmdzICE9PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbnMgPSB2YWx1ZS5tYXRjaCgvXFx7W159XSs/XFx9L2cpXG5cbiAgICAvLyBObyB0b2tlbnMgdG8gcmVwbGFjZVxuICAgIGlmICghdG9rZW5zKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICAvLyBPYmplY3QgYXJnczogcmVwbGFjZSBlYWNoIHRva2VuIHdpdGggY29ycmVzcG9uZGluZyBrZXlcbiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBjb25zdCB0b2tlbktleSA9IHRva2VuLnNsaWNlKDEsIC0xKVxuICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBhcmdzW3Rva2VuS2V5XVxuICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT09IHVuZGVmaW5lZCB8fCByZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdGhpcy5oYW5kbGVNaXNzaW5nKHsga2V5LCBsb2NhbGUsIHR5cGU6ICdhcmcnLCBhcmc6IHRva2VuS2V5IH0pID8/ICcnXG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHRoaXMubWFrZVNhZmUodG9rZW4pLCByZXBsYWNlbWVudClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJpbWl0aXZlIGFyZ3M6IHJlcGxhY2UgYWxsIHRva2VucyB3aXRoIHNhbWUgdmFsdWVcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgvXFx7W159XSs/XFx9L2csIGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvKipcbiAgICogTGlrZSBnZXQoKSBidXQgYWx3YXlzIHJldHVybnMgYSBzdHJpbmcsIGZhbGxpbmcgYmFjayB0byB0aGUga2V5IGl0c2VsZlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGtleSAgdGhlIGtleSB3ZSB1c2UgdG8gbG9va3VwIG91ciB0cmFuc2xhdGlvblxuICAgKiBAcGFyYW0gIHttdWx0aX0gIGFyZ3MgIHN0cmluZywgbnVtYmVyIG9yIG9iamVjdCBjb250YWluaW5nIG91ciBhcmd1bWVudHNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGUgb3B0aW9uYWwgbG9jYWxlLCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBsb2NhbGVcbiAgICogQHJldHVybiB7U3RyaW5nfSB0cmFuc2xhdGVkIHN0cmluZyBvciBrZXlcbiAgICovXG4gIHQoa2V5LCBhcmdzLCBsb2NhbGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGtleSwgYXJncywgbG9jYWxlKVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB0cmFuc2xhdGUgZnVuY3Rpb24gYm91bmQgdG8gYSBsb2NhbGVcbiAgICogQHBhcmFtICB7U3RyaW5nfSBsb2NhbGVcbiAgICogQHJldHVybiB7RnVuY3Rpb259IChrZXksIGFyZ3MpID0+IHN0cmluZ1xuICAgKi9cbiAgZm9yTG9jYWxlKGxvY2FsZSkge1xuICAgIHJldHVybiAoa2V5LCBhcmdzKSA9PiB0aGlzLnQoa2V5LCBhcmdzLCBsb2NhbGUpXG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZDogUHJvY2VzcyBhIGxhbmd1YWdlIGZpbGUgZnJvbSByYXcgdGV4dFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHJlc3BvbnNlXG4gICAqIEByZXR1cm4ge09iamVjdH0gcHJvY2Vzc2VkIGxhbmd1YWdlXG4gICAqL1xuICBzdGF0aWMgcHJvY2Vzc0ZpbGUocmVzcG9uc2UpIHtcbiAgICAvLyBibGFuayBsaW5lcyBhcmUgaWdub3JlZCBieSBmcm9tRmlsZVxuICAgIHJldHVybiBJMThOLmZyb21GaWxlKHJlc3BvbnNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBtZXRob2Q6IFR1cm4gcmF3IHRleHQgZnJvbSB0aGUgbGFuZ3VhZ2UgZmlsZXMgaW50byBmYW5jeSBKU09OXG4gICAqIFN1cHBvcnRzIGAjYCBhbmQgYDtgIGZ1bGwtbGluZSBjb21tZW50cyBhbmQgdHJhaWxpbmcgYFxcYCBsaW5lIGNvbnRpbnVhdGlvblxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHJhd1RleHRcbiAgICogQHJldHVybiB7T2JqZWN0fSBjb252ZXJ0ZWQgbGFuZ3VhZ2UgZmlsZVxuICAgKi9cbiAgc3RhdGljIGZyb21GaWxlKHJhd1RleHQpIHtcbiAgICBjb25zdCBsaW5lcyA9IFN0cmluZyhyYXdUZXh0KS5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJykuc3BsaXQoJ1xcbicpXG4gICAgY29uc3QgbGFuZyA9IHt9XG4gICAgY29uc3QgcmVnZXggPSAvXiguKz8pICo/PSAqPyhbXlxcbl0rKS9cbiAgICBjb25zdCBwYXJzZUxpbmUgPSBsaW5lID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZWdleC5leGVjKGxpbmUpXG4gICAgICBjb25zdCBrZXkgPSBtYXRjaGVzPy5bMV0udHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGxhbmdba2V5XSA9IG1hdGNoZXNbMl0udHJpbSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRpbnVlZCA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGxldCBsb2dpY2FsTGluZSA9IGxpbmVcbiAgICAgIGlmIChjb250aW51ZWQgIT09IG51bGwpIHtcbiAgICAgICAgbG9naWNhbExpbmUgPSBjb250aW51ZWQgKyBsaW5lLnRyaW1TdGFydCgpXG4gICAgICAgIGNvbnRpbnVlZCA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoL15cXHMqWyM7XS8udGVzdChsaW5lKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBhIHNpbmdsZSB0cmFpbGluZyBiYWNrc2xhc2ggam9pbnMgdGhlIG5leHQgbGluZVxuICAgICAgaWYgKC8oXnxbXlxcXFxdKVxcXFwkLy50ZXN0KGxvZ2ljYWxMaW5lKSkge1xuICAgICAgICBjb250aW51ZWQgPSBsb2dpY2FsTGluZS5zbGljZSgwLCAtMSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgcGFyc2VMaW5lKGxvZ2ljYWxMaW5lKVxuICAgIH1cblxuICAgIGlmIChjb250aW51ZWQgIT09IG51bGwpIHtcbiAgICAgIHBhcnNlTGluZShjb250aW51ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kOiBQYXJzZSB0aGUgY29udGVudHMgb2YgYSBgLmxhbmdgIGZpbGUsIGFsaWFzIG9mIHByb2Nlc3NGaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHByb2Nlc3NlZCBsYW5ndWFnZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlKHRleHQpIHtcbiAgICByZXR1cm4gSTE4Ti5wcm9jZXNzRmlsZSh0ZXh0KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge0kxOE5CYXNlfSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShvcHRpb25zKSB7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgSTE4TkJhc2Uob3B0aW9ucylcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICAgKi9cbiAgc3RhdGljIHJlc2V0SW5zdGFuY2UoKSB7XG4gICAgaW5zdGFuY2UgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHJlbW90ZWx5IHN0b3JlZCBsYW5ndWFnZSBmaWxlXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IHVzZUNhY2hlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgIHJlc29sdmVzIHJlc3BvbnNlXG4gICAqL1xuICBhc3luYyBsb2FkTGFuZyhsb2NhbGUsIHVzZUNhY2hlID0gdHJ1ZSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgbGFuZ3VhZ2UgaWYgYWxyZWFkeSBsb2FkZWRcbiAgICBpZiAodGhpcy5sb2FkZWQuaW5jbHVkZXMobG9jYWxlKSAmJiB1c2VDYWNoZSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ3NbbG9jYWxlXVxuICAgIH1cbiAgICAvLyBGZXRjaCBhbmQgcHJvY2VzcyBsYW5ndWFnZSBmaWxlXG4gICAgY29uc3QgbGFuZ0ZpbGUgPSBgJHt0aGlzLmNvbmZpZy5sb2NhdGlvbn0ke2xvY2FsZX0ke3RoaXMuY29uZmlnLmV4dGVuc2lvbn1gXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbGFuZyA9IGF3YWl0IGZldGNoRGF0YShsYW5nRmlsZSlcbiAgICAgIGNvbnN0IHByb2Nlc3NlZEZpbGUgPSB0eXBlb2YgbGFuZyA9PT0gJ3N0cmluZycgPyBJMThOQmFzZS5wcm9jZXNzRmlsZShsYW5nKSA6IGxhbmdcbiAgICAgIHRoaXMuYXBwbHlMYW5ndWFnZShsb2NhbGUsIHByb2Nlc3NlZEZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5sYW5nc1tsb2NhbGVdXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIHJldHVybiB0aGlzLmFwcGx5TGFuZ3VhZ2UobG9jYWxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhcHBsaWVzIG92ZXJyaWRlcyBmcm9tIGNvbmZpZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYW5nXG4gICAqIEByZXR1cm4ge09iamVjdH0gb3ZlcnJpZGVuIGxhbmd1YWdlXG4gICAqL1xuICBhcHBseUxhbmd1YWdlKGxvY2FsZSwgbGFuZyA9IHt9KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLmNvbmZpZy5vdmVycmlkZVtsb2NhbGVdIHx8IHt9XG4gICAgY29uc3QgZXhpc3RpbmdMYW5nID0gdGhpcy5sYW5nc1tsb2NhbGVdIHx8IHt9XG4gICAgdGhpcy5sYW5nc1tsb2NhbGVdID0geyAuLi5leGlzdGluZ0xhbmcsIC4uLmxhbmcsIC4uLm92ZXJyaWRlIH1cbiAgICAvLyBrZWVwIHRoZSBjdXJyZW50IGxhbmd1YWdlIHJlZmVyZW5jZSBpbiBzeW5jXG4gICAgaWYgKHRoaXMuY3VycmVudCAmJiBsb2NhbGUgPT09IHRoaXMubG9jYWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmxhbmdzW2xvY2FsZV1cbiAgICB9XG4gICAgcHVzaFVuaXF1ZSh0aGlzLmxvYWRlZCwgbG9jYWxlKVxuICAgIHJldHVybiB0aGlzLmxhbmdzW2xvY2FsZV1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gY3VycmVudGx5IGF2YWlsYWJsZSBsYW5ndWFnZXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBhbGwgY29uZmlndXJlZCBsYW5ndWFnZXNcbiAgICovXG4gIGdldCBnZXRMYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubGFuZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIHNldCB0aGUgY3VycmVudCBsYW5ndWFnZSB0byB0aGUgbG9jYWwgcHJvdmlkZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9ICAgbG9jYWxlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IGxhbmd1YWdlXG4gICAqL1xuICBhc3luYyBzZXRDdXJyZW50KGxvY2FsZSA9ICdlbi1VUycpIHtcbiAgICBpZiAoIXRoaXMubG9hZGVkLmluY2x1ZGVzKGxvY2FsZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZExhbmcobG9jYWxlKVxuICAgIH1cblxuICAgIHRoaXMubG9jYWxlID0gbG9jYWxlXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5sYW5nc1tsb2NhbGVdXG5cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eSB3cmFwcGVyIHRoYXQgZW5hYmxlcyBzaW5nbGV0b24gcGF0dGVybjpcbiAqIC0gSTE4TigpIHJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZVxuICogLSBuZXcgSTE4TigpIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNvbnN0IEkxOE4gPSBuZXcgUHJveHkoSTE4TkJhc2UsIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIEkxOE4oKSBpcyBpbnZva2VkIGFzIGEgZnVuY3Rpb24gKHdpdGhvdXQgbmV3KVxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuICAgIHJldHVybiB0YXJnZXQuZ2V0SW5zdGFuY2UoLi4uYXJncylcbiAgfSxcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gbmV3IEkxOE4oKSBpcyBpbnZva2VkXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdCh0YXJnZXQsIGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IHRhcmdldCguLi5hcmdzKVxuICB9LFxuXG4gIC8qKlxuICAgKiBQcm94eSBwcm9wZXJ0eSBhY2Nlc3MgdG8gdGhlIGJhc2UgY2xhc3NcbiAgICovXG4gIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICByZXR1cm4gdGFyZ2V0W3Byb3BdXG4gIH0sXG59KVxuXG5leHBvcnQgZGVmYXVsdCBJMThOLmdldEluc3RhbmNlKClcbiJdLCJtYXBwaW5ncyI6IkEsOEdBQXVCRSxPQUFPTSxPQUFPLENBQUVDLE9BQVEsTUFBT0MsS0FBTSxLQ0U1RCxJQUFNQyxFQUFpQixDQUNyQkMsVUFBVyxRQUVYQyxTQUFVLGVBRVZDLE1BQU8sQ0FBQyxT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
|
package/dist/i18n.iife.min.js.gz
CHANGED
|
Binary file
|