@firestitch/common 8.0.12 → 12.1.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/app/directives/autofocus.directive.d.ts +3 -0
- package/app/directives/prevent-default.directive.d.ts +3 -0
- package/app/directives/stop-propagation.directive.d.ts +3 -0
- package/app/fs-common.module.d.ts +14 -0
- package/app/pipes/bytes.pipe.d.ts +3 -0
- package/app/pipes/currency.pipe.d.ts +3 -0
- package/app/pipes/number.pipe.d.ts +3 -0
- package/app/pipes/ordinal-number.pipe.d.ts +3 -0
- package/app/pipes/truncate.pipe.d.ts +3 -0
- package/app/pipes/util.pipe.d.ts +9 -0
- package/app/services/array.service.d.ts +3 -0
- package/app/services/math.service.d.ts +3 -0
- package/app/services/util.service.d.ts +3 -0
- package/app/services/vaildate.service.d.ts +3 -0
- package/bundles/firestitch-common.umd.js +838 -2453
- package/bundles/firestitch-common.umd.js.map +1 -1
- package/esm2015/app/directives/autofocus.directive.js +12 -33
- package/esm2015/app/directives/prevent-default.directive.js +13 -18
- package/esm2015/app/directives/stop-propagation.directive.js +13 -18
- package/esm2015/app/fs-common.module.js +65 -44
- package/esm2015/app/pipes/bytes.pipe.js +10 -15
- package/esm2015/app/pipes/currency.pipe.js +13 -28
- package/esm2015/app/pipes/number.pipe.js +10 -16
- package/esm2015/app/pipes/ordinal-number.pipe.js +10 -15
- package/esm2015/app/pipes/truncate.pipe.js +10 -20
- package/esm2015/app/pipes/util.pipe.js +34 -45
- package/esm2015/app/services/array.service.js +63 -190
- package/esm2015/app/services/math.service.js +9 -17
- package/esm2015/app/services/util.service.js +65 -244
- package/esm2015/app/services/vaildate.service.js +12 -32
- package/esm2015/firestitch-common.js +2 -16
- package/esm2015/libs/array/compare/compare.js +1 -12
- package/esm2015/libs/array/compare/index.js +2 -7
- package/esm2015/libs/array/filter/filter.js +7 -33
- package/esm2015/libs/array/filter/index.js +2 -7
- package/esm2015/libs/array/find/find.js +1 -12
- package/esm2015/libs/array/find/index.js +2 -7
- package/esm2015/libs/array/inArray/inArray.js +1 -11
- package/esm2015/libs/array/inArray/index.js +2 -7
- package/esm2015/libs/array/index/index.js +5 -21
- package/esm2015/libs/array/index.js +14 -19
- package/esm2015/libs/array/indexOf/index.js +2 -7
- package/esm2015/libs/array/indexOf/indexOf.js +3 -18
- package/esm2015/libs/array/keyExists/index.js +2 -7
- package/esm2015/libs/array/keyExists/keyExists.js +1 -11
- package/esm2015/libs/array/ksort/index.js +2 -7
- package/esm2015/libs/array/ksort/ksort.js +3 -17
- package/esm2015/libs/array/list/index.js +2 -7
- package/esm2015/libs/array/list/list.js +3 -20
- package/esm2015/libs/array/nameValue/index.js +2 -7
- package/esm2015/libs/array/nameValue/nameValue.js +9 -40
- package/esm2015/libs/array/remove/index.js +2 -7
- package/esm2015/libs/array/remove/remove.js +1 -12
- package/esm2015/libs/array/rsort/index.js +2 -7
- package/esm2015/libs/array/rsort/rsort.js +1 -11
- package/esm2015/libs/array/sort/index.js +2 -7
- package/esm2015/libs/array/sort/sort.js +3 -20
- package/esm2015/libs/format/acronym/acronym.js +1 -13
- package/esm2015/libs/format/acronym/index.js +2 -7
- package/esm2015/libs/format/bytes/bytes.js +1 -12
- package/esm2015/libs/format/bytes/index.js +2 -7
- package/esm2015/libs/format/currency/currency.js +1 -14
- package/esm2015/libs/format/currency/index.js +2 -7
- package/esm2015/libs/format/index.js +6 -11
- package/esm2015/libs/format/number/index.js +2 -7
- package/esm2015/libs/format/number/number.js +1 -11
- package/esm2015/libs/format/truncate/index.js +2 -7
- package/esm2015/libs/format/truncate/truncate.js +1 -14
- package/esm2015/libs/index.js +5 -10
- package/esm2015/libs/rxjs/delayedRetry.js +5 -43
- package/esm2015/libs/rxjs/keyboard-shortcut.js +18 -0
- package/esm2015/libs/util/boolean/boolean.js +1 -10
- package/esm2015/libs/util/boolean/index.js +2 -7
- package/esm2015/libs/util/debounce/debounce.js +6 -29
- package/esm2015/libs/util/debounce/index.js +2 -7
- package/esm2015/libs/util/get-normalized-path/get-normalized-path.js +1 -11
- package/esm2015/libs/util/get-normalized-path/index.js +1 -6
- package/esm2015/libs/util/guid/guid.js +3 -20
- package/esm2015/libs/util/guid/index.js +2 -7
- package/esm2015/libs/util/index.js +15 -20
- package/esm2015/libs/util/isClass/index.js +2 -7
- package/esm2015/libs/util/isClass/isClass.js +1 -11
- package/esm2015/libs/util/isEmpty/index.js +2 -7
- package/esm2015/libs/util/isEmpty/isEmpty.js +1 -11
- package/esm2015/libs/util/isNumeric/index.js +2 -7
- package/esm2015/libs/util/isNumeric/isNumeric.js +1 -11
- package/esm2015/libs/util/keys/index.js +2 -7
- package/esm2015/libs/util/keys/keys.js +1 -43
- package/esm2015/libs/util/length/index.js +2 -7
- package/esm2015/libs/util/length/length.js +1 -10
- package/esm2015/libs/util/ordinal-number/ordinal-number.js +1 -13
- package/esm2015/libs/util/queue/index.js +2 -7
- package/esm2015/libs/util/queue/operation.js +1 -18
- package/esm2015/libs/util/queue/queue.enum.js +6 -12
- package/esm2015/libs/util/queue/queue.js +14 -168
- package/esm2015/libs/util/remove-query-params/index.js +1 -6
- package/esm2015/libs/util/remove-query-params/remove-query-params.js +1 -10
- package/esm2015/libs/util/resolve/index.js +2 -7
- package/esm2015/libs/util/resolve/resolve.js +6 -29
- package/esm2015/libs/util/stringify/index.js +2 -7
- package/esm2015/libs/util/stringify/stringify.js +1 -10
- package/esm2015/libs/util/throttle/index.js +2 -7
- package/esm2015/libs/util/throttle/throttle.js +6 -23
- package/esm2015/libs/util/uuid/index.js +2 -7
- package/esm2015/libs/util/uuid/uuid.js +1 -9
- package/esm2015/libs/util/value/index.js +2 -7
- package/esm2015/libs/util/value/value.js +1 -12
- package/esm2015/libs/validate/email/email.js +1 -10
- package/esm2015/libs/validate/email/index.js +2 -7
- package/esm2015/libs/validate/index.js +4 -9
- package/esm2015/libs/validate/phone/index.js +2 -7
- package/esm2015/libs/validate/phone/phone.js +1 -11
- package/esm2015/libs/validate/url/index.js +2 -7
- package/esm2015/libs/validate/url/url.js +1 -12
- package/esm2015/public_api.js +12 -7
- package/fesm2015/firestitch-common.js +435 -1809
- package/fesm2015/firestitch-common.js.map +1 -1
- package/firestitch-common.d.ts +1 -9
- package/libs/array/index/index.d.ts +1 -1
- package/libs/rxjs/keyboard-shortcut.d.ts +2 -0
- package/libs/util/queue/queue.d.ts +9 -9
- package/package.json +7 -11
- package/public_api.d.ts +10 -0
- package/bundles/firestitch-common.umd.min.js +0 -16
- package/bundles/firestitch-common.umd.min.js.map +0 -1
- package/esm5/app/directives/autofocus.directive.js +0 -45
- package/esm5/app/directives/prevent-default.directive.js +0 -32
- package/esm5/app/directives/stop-propagation.directive.js +0 -32
- package/esm5/app/fs-common.module.js +0 -79
- package/esm5/app/pipes/bytes.pipe.js +0 -30
- package/esm5/app/pipes/currency.pipe.js +0 -43
- package/esm5/app/pipes/number.pipe.js +0 -32
- package/esm5/app/pipes/ordinal-number.pipe.js +0 -30
- package/esm5/app/pipes/truncate.pipe.js +0 -38
- package/esm5/app/pipes/util.pipe.js +0 -100
- package/esm5/app/services/array.service.js +0 -491
- package/esm5/app/services/math.service.js +0 -42
- package/esm5/app/services/util.service.js +0 -608
- package/esm5/app/services/vaildate.service.js +0 -63
- package/esm5/firestitch-common.js +0 -19
- package/esm5/libs/array/compare/compare.js +0 -19
- package/esm5/libs/array/compare/index.js +0 -7
- package/esm5/libs/array/filter/filter.js +0 -53
- package/esm5/libs/array/filter/index.js +0 -7
- package/esm5/libs/array/find/find.js +0 -17
- package/esm5/libs/array/find/index.js +0 -7
- package/esm5/libs/array/inArray/inArray.js +0 -22
- package/esm5/libs/array/inArray/index.js +0 -7
- package/esm5/libs/array/index/index.js +0 -24
- package/esm5/libs/array/index.js +0 -19
- package/esm5/libs/array/indexOf/index.js +0 -7
- package/esm5/libs/array/indexOf/indexOf.js +0 -31
- package/esm5/libs/array/keyExists/index.js +0 -7
- package/esm5/libs/array/keyExists/keyExists.js +0 -14
- package/esm5/libs/array/ksort/index.js +0 -7
- package/esm5/libs/array/ksort/ksort.js +0 -22
- package/esm5/libs/array/list/index.js +0 -7
- package/esm5/libs/array/list/list.js +0 -31
- package/esm5/libs/array/nameValue/index.js +0 -7
- package/esm5/libs/array/nameValue/nameValue.js +0 -52
- package/esm5/libs/array/remove/index.js +0 -7
- package/esm5/libs/array/remove/remove.js +0 -20
- package/esm5/libs/array/rsort/index.js +0 -7
- package/esm5/libs/array/rsort/rsort.js +0 -15
- package/esm5/libs/array/sort/index.js +0 -7
- package/esm5/libs/array/sort/sort.js +0 -45
- package/esm5/libs/format/acronym/acronym.js +0 -35
- package/esm5/libs/format/acronym/index.js +0 -7
- package/esm5/libs/format/bytes/bytes.js +0 -23
- package/esm5/libs/format/bytes/index.js +0 -7
- package/esm5/libs/format/currency/currency.js +0 -23
- package/esm5/libs/format/currency/index.js +0 -7
- package/esm5/libs/format/index.js +0 -11
- package/esm5/libs/format/number/index.js +0 -7
- package/esm5/libs/format/number/number.js +0 -14
- package/esm5/libs/format/truncate/index.js +0 -7
- package/esm5/libs/format/truncate/truncate.js +0 -28
- package/esm5/libs/index.js +0 -11
- package/esm5/libs/rxjs/delayedRetry.js +0 -65
- package/esm5/libs/util/boolean/boolean.js +0 -14
- package/esm5/libs/util/boolean/index.js +0 -7
- package/esm5/libs/util/debounce/debounce.js +0 -40
- package/esm5/libs/util/debounce/index.js +0 -7
- package/esm5/libs/util/get-normalized-path/get-normalized-path.js +0 -16
- package/esm5/libs/util/get-normalized-path/index.js +0 -7
- package/esm5/libs/util/guid/guid.js +0 -37
- package/esm5/libs/util/guid/index.js +0 -7
- package/esm5/libs/util/index.js +0 -23
- package/esm5/libs/util/isClass/index.js +0 -7
- package/esm5/libs/util/isClass/isClass.js +0 -28
- package/esm5/libs/util/isEmpty/index.js +0 -7
- package/esm5/libs/util/isEmpty/isEmpty.js +0 -23
- package/esm5/libs/util/isNumeric/index.js +0 -7
- package/esm5/libs/util/isNumeric/isNumeric.js +0 -16
- package/esm5/libs/util/keys/index.js +0 -7
- package/esm5/libs/util/keys/keys.js +0 -80
- package/esm5/libs/util/length/index.js +0 -7
- package/esm5/libs/util/length/length.js +0 -20
- package/esm5/libs/util/ordinal-number/ordinal-number.js +0 -22
- package/esm5/libs/util/queue/index.js +0 -8
- package/esm5/libs/util/queue/operation.js +0 -30
- package/esm5/libs/util/queue/queue.enum.js +0 -12
- package/esm5/libs/util/queue/queue.js +0 -367
- package/esm5/libs/util/remove-query-params/index.js +0 -7
- package/esm5/libs/util/remove-query-params/remove-query-params.js +0 -13
- package/esm5/libs/util/resolve/index.js +0 -7
- package/esm5/libs/util/resolve/resolve.js +0 -34
- package/esm5/libs/util/stringify/index.js +0 -7
- package/esm5/libs/util/stringify/stringify.js +0 -13
- package/esm5/libs/util/throttle/index.js +0 -7
- package/esm5/libs/util/throttle/throttle.js +0 -30
- package/esm5/libs/util/uuid/index.js +0 -7
- package/esm5/libs/util/uuid/uuid.js +0 -13
- package/esm5/libs/util/value/index.js +0 -7
- package/esm5/libs/util/value/value.js +0 -20
- package/esm5/libs/validate/email/email.js +0 -13
- package/esm5/libs/validate/email/index.js +0 -7
- package/esm5/libs/validate/index.js +0 -9
- package/esm5/libs/validate/phone/index.js +0 -7
- package/esm5/libs/validate/phone/phone.js +0 -15
- package/esm5/libs/validate/url/index.js +0 -7
- package/esm5/libs/validate/url/url.js +0 -23
- package/esm5/public_api.js +0 -17
- package/fesm5/firestitch-common.js +0 -3284
- package/fesm5/firestitch-common.js.map +0 -1
- package/firestitch-common.metadata.json +0 -1
|
@@ -1,608 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: app/services/util.service.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
/** @type {?} */
|
|
8
|
-
export var KEY_CANCEL = 3;
|
|
9
|
-
/** @type {?} */
|
|
10
|
-
export var KEY_HELP = 6;
|
|
11
|
-
/** @type {?} */
|
|
12
|
-
export var KEY_BACKSPACE = 8;
|
|
13
|
-
/** @type {?} */
|
|
14
|
-
export var KEY_TAB = 9;
|
|
15
|
-
/** @type {?} */
|
|
16
|
-
export var KEY_CLEAR = 12;
|
|
17
|
-
/** @type {?} */
|
|
18
|
-
export var KEY_RETURN = 13;
|
|
19
|
-
/** @type {?} */
|
|
20
|
-
export var KEY_ENTER = 14;
|
|
21
|
-
/** @type {?} */
|
|
22
|
-
export var KEY_SHIFT = 16;
|
|
23
|
-
/** @type {?} */
|
|
24
|
-
export var KEY_CONTROL = 17;
|
|
25
|
-
/** @type {?} */
|
|
26
|
-
export var KEY_ALT = 18;
|
|
27
|
-
/** @type {?} */
|
|
28
|
-
export var KEY_PAUSE = 19;
|
|
29
|
-
/** @type {?} */
|
|
30
|
-
export var KEY_CAPS_LOCK = 20;
|
|
31
|
-
/** @type {?} */
|
|
32
|
-
export var KEY_ESCAPE = 27;
|
|
33
|
-
/** @type {?} */
|
|
34
|
-
export var KEY_SPACE = 32;
|
|
35
|
-
/** @type {?} */
|
|
36
|
-
export var KEY_PAGE_UP = 33;
|
|
37
|
-
/** @type {?} */
|
|
38
|
-
export var KEY_PAGE_DOWN = 34;
|
|
39
|
-
/** @type {?} */
|
|
40
|
-
export var KEY_END = 35;
|
|
41
|
-
/** @type {?} */
|
|
42
|
-
export var KEY_HOME = 36;
|
|
43
|
-
/** @type {?} */
|
|
44
|
-
export var KEY_LEFT = 37;
|
|
45
|
-
/** @type {?} */
|
|
46
|
-
export var KEY_UP = 38;
|
|
47
|
-
/** @type {?} */
|
|
48
|
-
export var KEY_RIGHT = 39;
|
|
49
|
-
/** @type {?} */
|
|
50
|
-
export var KEY_DOWN = 40;
|
|
51
|
-
/** @type {?} */
|
|
52
|
-
export var KEY_PRINTSCREEN = 44;
|
|
53
|
-
/** @type {?} */
|
|
54
|
-
export var KEY_INSERT = 45;
|
|
55
|
-
/** @type {?} */
|
|
56
|
-
export var KEY_DELETE = 46;
|
|
57
|
-
/** @type {?} */
|
|
58
|
-
export var KEY_0 = 48;
|
|
59
|
-
/** @type {?} */
|
|
60
|
-
export var KEY_1 = 49;
|
|
61
|
-
/** @type {?} */
|
|
62
|
-
export var KEY_2 = 50;
|
|
63
|
-
/** @type {?} */
|
|
64
|
-
export var KEY_3 = 51;
|
|
65
|
-
/** @type {?} */
|
|
66
|
-
export var KEY_4 = 52;
|
|
67
|
-
/** @type {?} */
|
|
68
|
-
export var KEY_5 = 53;
|
|
69
|
-
/** @type {?} */
|
|
70
|
-
export var KEY_6 = 54;
|
|
71
|
-
/** @type {?} */
|
|
72
|
-
export var KEY_7 = 55;
|
|
73
|
-
/** @type {?} */
|
|
74
|
-
export var KEY_8 = 56;
|
|
75
|
-
/** @type {?} */
|
|
76
|
-
export var KEY_9 = 57;
|
|
77
|
-
/** @type {?} */
|
|
78
|
-
export var KEY_SEMICOLON = 59;
|
|
79
|
-
/** @type {?} */
|
|
80
|
-
export var KEY_EQUALS = 61;
|
|
81
|
-
/*
|
|
82
|
-
Basically, just copy-pasted functionality from fs-boilerplate v1.x, with some small changes (like we dont have angular.bind anymore, had to go with a workaround)
|
|
83
|
-
There might be a better way to organise constatns but I need to know use-cases
|
|
84
|
-
*/
|
|
85
|
-
var FsUtil = /** @class */ (function () {
|
|
86
|
-
function FsUtil() {
|
|
87
|
-
this.intervals = {};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* @deprecated use @firestitch/common/util/guid instead
|
|
91
|
-
*/
|
|
92
|
-
/**
|
|
93
|
-
* @deprecated use \@firestitch/common/util/guid instead
|
|
94
|
-
* @param {?=} pattern
|
|
95
|
-
* @return {?}
|
|
96
|
-
*/
|
|
97
|
-
FsUtil.prototype.guid = /**
|
|
98
|
-
* @deprecated use \@firestitch/common/util/guid instead
|
|
99
|
-
* @param {?=} pattern
|
|
100
|
-
* @return {?}
|
|
101
|
-
*/
|
|
102
|
-
function (pattern) {
|
|
103
|
-
console.warn('@deprecated use @firestitch/common/util/guid instead');
|
|
104
|
-
pattern = pattern || 'xxxxxx';
|
|
105
|
-
return pattern.replace(/[xy]/g, (/**
|
|
106
|
-
* @param {?} c
|
|
107
|
-
* @return {?}
|
|
108
|
-
*/
|
|
109
|
-
function (c) {
|
|
110
|
-
/** @type {?} */
|
|
111
|
-
var r = Math.random() * 16 | 0;
|
|
112
|
-
/** @type {?} */
|
|
113
|
-
var v = c == 'x' ? r : (r & 0x3 | 0x8);
|
|
114
|
-
return v.toString(16);
|
|
115
|
-
}));
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* @deprecated use import { uuid } from @firestitch/common/util; instead
|
|
119
|
-
*/
|
|
120
|
-
/**
|
|
121
|
-
* @deprecated use import { uuid } from \@firestitch/common/util; instead
|
|
122
|
-
* @return {?}
|
|
123
|
-
*/
|
|
124
|
-
FsUtil.prototype.uuid = /**
|
|
125
|
-
* @deprecated use import { uuid } from \@firestitch/common/util; instead
|
|
126
|
-
* @return {?}
|
|
127
|
-
*/
|
|
128
|
-
function () {
|
|
129
|
-
console.warn('@deprecated use @firestitch/common/util/uuid instead');
|
|
130
|
-
return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* @deprecated use import { resolve } from @firestitch/common/util; instead
|
|
134
|
-
*/
|
|
135
|
-
/**
|
|
136
|
-
* @deprecated use import { resolve } from \@firestitch/common/util; instead
|
|
137
|
-
* @param {?} promise
|
|
138
|
-
* @param {?=} defaults
|
|
139
|
-
* @return {?}
|
|
140
|
-
*/
|
|
141
|
-
FsUtil.prototype.resolve = /**
|
|
142
|
-
* @deprecated use import { resolve } from \@firestitch/common/util; instead
|
|
143
|
-
* @param {?} promise
|
|
144
|
-
* @param {?=} defaults
|
|
145
|
-
* @return {?}
|
|
146
|
-
*/
|
|
147
|
-
function (promise, defaults) {
|
|
148
|
-
if (defaults === void 0) { defaults = []; }
|
|
149
|
-
console.warn('@deprecated use @firestitch/common/util/resolve instead');
|
|
150
|
-
/** @type {?} */
|
|
151
|
-
var result = defaults;
|
|
152
|
-
return new Promise((/**
|
|
153
|
-
* @param {?} resolve
|
|
154
|
-
* @return {?}
|
|
155
|
-
*/
|
|
156
|
-
function (resolve) {
|
|
157
|
-
promise.then((/**
|
|
158
|
-
* @param {?} data
|
|
159
|
-
* @return {?}
|
|
160
|
-
*/
|
|
161
|
-
function (data) {
|
|
162
|
-
Object.keys(data).forEach((/**
|
|
163
|
-
* @param {?} key
|
|
164
|
-
* @return {?}
|
|
165
|
-
*/
|
|
166
|
-
function (key) { return result[key] = data[key]; }));
|
|
167
|
-
resolve(result);
|
|
168
|
-
}));
|
|
169
|
-
}));
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* @deprecated use _.toInteger() instead
|
|
173
|
-
*/
|
|
174
|
-
/**
|
|
175
|
-
* @deprecated use _.toInteger() instead
|
|
176
|
-
* @param {?} value
|
|
177
|
-
* @return {?}
|
|
178
|
-
*/
|
|
179
|
-
FsUtil.prototype.int = /**
|
|
180
|
-
* @deprecated use _.toInteger() instead
|
|
181
|
-
* @param {?} value
|
|
182
|
-
* @return {?}
|
|
183
|
-
*/
|
|
184
|
-
function (value) {
|
|
185
|
-
console.warn('@deprecated use _.toInteger() instead');
|
|
186
|
-
value = parseInt(value);
|
|
187
|
-
if (isNaN(value)) {
|
|
188
|
-
value = 0;
|
|
189
|
-
}
|
|
190
|
-
return value;
|
|
191
|
-
};
|
|
192
|
-
/**
|
|
193
|
-
* @deprecated use _.toFinite() instead
|
|
194
|
-
*/
|
|
195
|
-
/**
|
|
196
|
-
* @deprecated use _.toFinite() instead
|
|
197
|
-
* @param {?} value
|
|
198
|
-
* @return {?}
|
|
199
|
-
*/
|
|
200
|
-
FsUtil.prototype.float = /**
|
|
201
|
-
* @deprecated use _.toFinite() instead
|
|
202
|
-
* @param {?} value
|
|
203
|
-
* @return {?}
|
|
204
|
-
*/
|
|
205
|
-
function (value) {
|
|
206
|
-
console.warn('@deprecated use _.toFinite() instead');
|
|
207
|
-
value = parseFloat(value);
|
|
208
|
-
if (isNaN(value)) {
|
|
209
|
-
value = 0;
|
|
210
|
-
}
|
|
211
|
-
return value;
|
|
212
|
-
};
|
|
213
|
-
/**
|
|
214
|
-
* @deprecated use _.toString() instead
|
|
215
|
-
*/
|
|
216
|
-
/**
|
|
217
|
-
* @deprecated use _.toString() instead
|
|
218
|
-
* @param {?} string
|
|
219
|
-
* @return {?}
|
|
220
|
-
*/
|
|
221
|
-
FsUtil.prototype.string = /**
|
|
222
|
-
* @deprecated use _.toString() instead
|
|
223
|
-
* @param {?} string
|
|
224
|
-
* @return {?}
|
|
225
|
-
*/
|
|
226
|
-
function (string) {
|
|
227
|
-
console.warn('@deprecated use _.toString() instead');
|
|
228
|
-
if (string === null || string === undefined) {
|
|
229
|
-
string = '';
|
|
230
|
-
}
|
|
231
|
-
return (string).toString();
|
|
232
|
-
};
|
|
233
|
-
/**
|
|
234
|
-
* @deprecated use import { isEmpty } from @firestitch/common/util; instead
|
|
235
|
-
*/
|
|
236
|
-
/**
|
|
237
|
-
* @deprecated use import { isEmpty } from \@firestitch/common/util; instead
|
|
238
|
-
* @param {?} value
|
|
239
|
-
* @param {?=} options
|
|
240
|
-
* @return {?}
|
|
241
|
-
*/
|
|
242
|
-
FsUtil.prototype.isEmpty = /**
|
|
243
|
-
* @deprecated use import { isEmpty } from \@firestitch/common/util; instead
|
|
244
|
-
* @param {?} value
|
|
245
|
-
* @param {?=} options
|
|
246
|
-
* @return {?}
|
|
247
|
-
*/
|
|
248
|
-
function (value, options) {
|
|
249
|
-
console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
|
|
250
|
-
options = options || {};
|
|
251
|
-
return value === undefined ||
|
|
252
|
-
value === null ||
|
|
253
|
-
value === false ||
|
|
254
|
-
value === '' ||
|
|
255
|
-
!this.string(value).length ||
|
|
256
|
-
(this.isObject(value) &&
|
|
257
|
-
(value.constructor.name === 'Object' && !Object.keys(value).length)) ||
|
|
258
|
-
(!options.zero && (value === 0 || value === '0'));
|
|
259
|
-
};
|
|
260
|
-
/**
|
|
261
|
-
* @deprecated use _.isInteger() instead
|
|
262
|
-
*/
|
|
263
|
-
/**
|
|
264
|
-
* @deprecated use _.isInteger() instead
|
|
265
|
-
* @param {?} value
|
|
266
|
-
* @param {?=} type
|
|
267
|
-
* @return {?}
|
|
268
|
-
*/
|
|
269
|
-
FsUtil.prototype.isInt = /**
|
|
270
|
-
* @deprecated use _.isInteger() instead
|
|
271
|
-
* @param {?} value
|
|
272
|
-
* @param {?=} type
|
|
273
|
-
* @return {?}
|
|
274
|
-
*/
|
|
275
|
-
function (value, type) {
|
|
276
|
-
console.warn('@deprecated use _.isInteger() instead');
|
|
277
|
-
/** @type {?} */
|
|
278
|
-
var int = !!this.string(value).match(/^\d+$/);
|
|
279
|
-
if (!int) {
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
if (type) {
|
|
283
|
-
return Number.isInteger(value);
|
|
284
|
-
}
|
|
285
|
-
return true;
|
|
286
|
-
};
|
|
287
|
-
/**
|
|
288
|
-
* @deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}
|
|
289
|
-
*/
|
|
290
|
-
/**
|
|
291
|
-
* @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
|
|
292
|
-
* @param {?} object
|
|
293
|
-
* @param {?} func
|
|
294
|
-
* @return {?}
|
|
295
|
-
*/
|
|
296
|
-
FsUtil.prototype.each = /**
|
|
297
|
-
* @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
|
|
298
|
-
* @param {?} object
|
|
299
|
-
* @param {?} func
|
|
300
|
-
* @return {?}
|
|
301
|
-
*/
|
|
302
|
-
function (object, func) {
|
|
303
|
-
console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
|
|
304
|
-
if (!this.isArray(object) && !this.isObject(object)) {
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
Object.keys(object).forEach((/**
|
|
308
|
-
* @param {?} key
|
|
309
|
-
* @return {?}
|
|
310
|
-
*/
|
|
311
|
-
function (key) {
|
|
312
|
-
func(object[key], key);
|
|
313
|
-
}));
|
|
314
|
-
};
|
|
315
|
-
/**
|
|
316
|
-
* @deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
|
|
317
|
-
* or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead
|
|
318
|
-
*/
|
|
319
|
-
/**
|
|
320
|
-
* @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
|
|
321
|
-
* or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
|
|
322
|
-
* @param {?} value
|
|
323
|
-
* @return {?}
|
|
324
|
-
*/
|
|
325
|
-
FsUtil.prototype.isObject = /**
|
|
326
|
-
* @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
|
|
327
|
-
* or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
|
|
328
|
-
* @param {?} value
|
|
329
|
-
* @return {?}
|
|
330
|
-
*/
|
|
331
|
-
function (value) {
|
|
332
|
-
console.warn('@deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject} or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead');
|
|
333
|
-
return value !== null && typeof value === 'object' && !this.isArray(value);
|
|
334
|
-
};
|
|
335
|
-
/**
|
|
336
|
-
* @deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}
|
|
337
|
-
*/
|
|
338
|
-
/**
|
|
339
|
-
* @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
|
|
340
|
-
* @param {?} value
|
|
341
|
-
* @return {?}
|
|
342
|
-
*/
|
|
343
|
-
FsUtil.prototype.isString = /**
|
|
344
|
-
* @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
|
|
345
|
-
* @param {?} value
|
|
346
|
-
* @return {?}
|
|
347
|
-
*/
|
|
348
|
-
function (value) {
|
|
349
|
-
console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
|
|
350
|
-
return typeof value === 'string' || value instanceof String;
|
|
351
|
-
};
|
|
352
|
-
/**
|
|
353
|
-
* @deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}
|
|
354
|
-
*/
|
|
355
|
-
/**
|
|
356
|
-
* @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
|
|
357
|
-
* @param {?} value
|
|
358
|
-
* @return {?}
|
|
359
|
-
*/
|
|
360
|
-
FsUtil.prototype.isArray = /**
|
|
361
|
-
* @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
|
|
362
|
-
* @param {?} value
|
|
363
|
-
* @return {?}
|
|
364
|
-
*/
|
|
365
|
-
function (value) {
|
|
366
|
-
console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
|
|
367
|
-
return value instanceof Array;
|
|
368
|
-
};
|
|
369
|
-
/**
|
|
370
|
-
* @deprecated use import { isNumeric } from @firestitch/common/util; instead
|
|
371
|
-
*/
|
|
372
|
-
/**
|
|
373
|
-
* @deprecated use import { isNumeric } from \@firestitch/common/util; instead
|
|
374
|
-
* @param {?} value
|
|
375
|
-
* @return {?}
|
|
376
|
-
*/
|
|
377
|
-
FsUtil.prototype.isNumeric = /**
|
|
378
|
-
* @deprecated use import { isNumeric } from \@firestitch/common/util; instead
|
|
379
|
-
* @param {?} value
|
|
380
|
-
* @return {?}
|
|
381
|
-
*/
|
|
382
|
-
function (value) {
|
|
383
|
-
console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
|
|
384
|
-
return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
|
|
385
|
-
};
|
|
386
|
-
/**
|
|
387
|
-
* @deprecated use import { isClass } from @firestitch/common/util; instead
|
|
388
|
-
*/
|
|
389
|
-
/**
|
|
390
|
-
* @deprecated use import { isClass } from \@firestitch/common/util; instead
|
|
391
|
-
* @param {?} value
|
|
392
|
-
* @param {?} cls
|
|
393
|
-
* @return {?}
|
|
394
|
-
*/
|
|
395
|
-
FsUtil.prototype.isClass = /**
|
|
396
|
-
* @deprecated use import { isClass } from \@firestitch/common/util; instead
|
|
397
|
-
* @param {?} value
|
|
398
|
-
* @param {?} cls
|
|
399
|
-
* @return {?}
|
|
400
|
-
*/
|
|
401
|
-
function (value, cls) {
|
|
402
|
-
console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
|
|
403
|
-
if (this.isObject(value)) {
|
|
404
|
-
if (this.isString(cls)) {
|
|
405
|
-
if (value.constructor) {
|
|
406
|
-
if (value.constructor.name === cls) {
|
|
407
|
-
return true;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
if (value instanceof cls) {
|
|
413
|
-
return true;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
return false;
|
|
418
|
-
};
|
|
419
|
-
/**
|
|
420
|
-
* @deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}
|
|
421
|
-
*/
|
|
422
|
-
/**
|
|
423
|
-
* @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
|
|
424
|
-
* @param {?} value
|
|
425
|
-
* @return {?}
|
|
426
|
-
*/
|
|
427
|
-
FsUtil.prototype.isBoolean = /**
|
|
428
|
-
* @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
|
|
429
|
-
* @param {?} value
|
|
430
|
-
* @return {?}
|
|
431
|
-
*/
|
|
432
|
-
function (value) {
|
|
433
|
-
console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
|
|
434
|
-
return value === true || value === false;
|
|
435
|
-
};
|
|
436
|
-
/**
|
|
437
|
-
* @deprecated use import { value } from @firestitch/common/util; instead
|
|
438
|
-
*/
|
|
439
|
-
/**
|
|
440
|
-
* @deprecated use import { value } from \@firestitch/common/util; instead
|
|
441
|
-
* @param {?} object
|
|
442
|
-
* @param {?} key
|
|
443
|
-
* @param {?} def
|
|
444
|
-
* @return {?}
|
|
445
|
-
*/
|
|
446
|
-
FsUtil.prototype.value = /**
|
|
447
|
-
* @deprecated use import { value } from \@firestitch/common/util; instead
|
|
448
|
-
* @param {?} object
|
|
449
|
-
* @param {?} key
|
|
450
|
-
* @param {?} def
|
|
451
|
-
* @return {?}
|
|
452
|
-
*/
|
|
453
|
-
function (object, key, def) {
|
|
454
|
-
console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
|
|
455
|
-
if (this.isObject(object) || this.isArray(object)) {
|
|
456
|
-
if (object.hasOwnProperty(key)) {
|
|
457
|
-
return object[key];
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
return def;
|
|
461
|
-
};
|
|
462
|
-
/**
|
|
463
|
-
* @param {?} func
|
|
464
|
-
* @param {?} wait
|
|
465
|
-
* @return {?}
|
|
466
|
-
*/
|
|
467
|
-
FsUtil.prototype.throttle = /**
|
|
468
|
-
* @param {?} func
|
|
469
|
-
* @param {?} wait
|
|
470
|
-
* @return {?}
|
|
471
|
-
*/
|
|
472
|
-
function (func, wait) {
|
|
473
|
-
console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
|
|
474
|
-
/** @type {?} */
|
|
475
|
-
var waiting = false;
|
|
476
|
-
return (/**
|
|
477
|
-
* @return {?}
|
|
478
|
-
*/
|
|
479
|
-
function () {
|
|
480
|
-
if (!waiting) { // If we're not waiting
|
|
481
|
-
func.apply(null, arguments); // Execute users function
|
|
482
|
-
waiting = true; // Prevent future invocations
|
|
483
|
-
setTimeout((/**
|
|
484
|
-
* @return {?}
|
|
485
|
-
*/
|
|
486
|
-
function () {
|
|
487
|
-
waiting = false; // And allow future invocations
|
|
488
|
-
}), wait);
|
|
489
|
-
}
|
|
490
|
-
});
|
|
491
|
-
};
|
|
492
|
-
/**
|
|
493
|
-
* @deprecated use import { debounce } from @firestitch/common/util; instead
|
|
494
|
-
*/
|
|
495
|
-
/**
|
|
496
|
-
* @deprecated use import { debounce } from \@firestitch/common/util; instead
|
|
497
|
-
* @param {?} func
|
|
498
|
-
* @param {?} wait
|
|
499
|
-
* @param {?} immediate
|
|
500
|
-
* @return {?}
|
|
501
|
-
*/
|
|
502
|
-
FsUtil.prototype.debounce = /**
|
|
503
|
-
* @deprecated use import { debounce } from \@firestitch/common/util; instead
|
|
504
|
-
* @param {?} func
|
|
505
|
-
* @param {?} wait
|
|
506
|
-
* @param {?} immediate
|
|
507
|
-
* @return {?}
|
|
508
|
-
*/
|
|
509
|
-
function (func, wait, immediate) {
|
|
510
|
-
console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
|
|
511
|
-
/** @type {?} */
|
|
512
|
-
var timeout;
|
|
513
|
-
return (/**
|
|
514
|
-
* @return {?}
|
|
515
|
-
*/
|
|
516
|
-
function () {
|
|
517
|
-
/** @type {?} */
|
|
518
|
-
var context = this;
|
|
519
|
-
/** @type {?} */
|
|
520
|
-
var args = arguments;
|
|
521
|
-
/** @type {?} */
|
|
522
|
-
var later = (/**
|
|
523
|
-
* @return {?}
|
|
524
|
-
*/
|
|
525
|
-
function () {
|
|
526
|
-
timeout = null;
|
|
527
|
-
if (!immediate)
|
|
528
|
-
func.apply(context, args);
|
|
529
|
-
});
|
|
530
|
-
/** @type {?} */
|
|
531
|
-
var callNow = immediate && !timeout;
|
|
532
|
-
clearTimeout(timeout);
|
|
533
|
-
timeout = setTimeout(later, wait);
|
|
534
|
-
if (callNow)
|
|
535
|
-
func.apply(context, args);
|
|
536
|
-
});
|
|
537
|
-
};
|
|
538
|
-
/**
|
|
539
|
-
* @deprecated use import { length } from @firestitch/common/util; instead
|
|
540
|
-
*/
|
|
541
|
-
/**
|
|
542
|
-
* @deprecated use import { length } from \@firestitch/common/util; instead
|
|
543
|
-
* @param {?} object
|
|
544
|
-
* @return {?}
|
|
545
|
-
*/
|
|
546
|
-
FsUtil.prototype.length = /**
|
|
547
|
-
* @deprecated use import { length } from \@firestitch/common/util; instead
|
|
548
|
-
* @param {?} object
|
|
549
|
-
* @return {?}
|
|
550
|
-
*/
|
|
551
|
-
function (object) {
|
|
552
|
-
console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
|
|
553
|
-
if (this.isObject(object)) {
|
|
554
|
-
return Object.keys(object).length;
|
|
555
|
-
}
|
|
556
|
-
if (this.isArray(object)) {
|
|
557
|
-
return object.length;
|
|
558
|
-
}
|
|
559
|
-
return 0;
|
|
560
|
-
};
|
|
561
|
-
/**
|
|
562
|
-
* @deprecated use import { boolean } from @firestitch/common/util; instead
|
|
563
|
-
*/
|
|
564
|
-
/**
|
|
565
|
-
* @deprecated use import { boolean } from \@firestitch/common/util; instead
|
|
566
|
-
* @param {?} value
|
|
567
|
-
* @return {?}
|
|
568
|
-
*/
|
|
569
|
-
FsUtil.prototype.boolean = /**
|
|
570
|
-
* @deprecated use import { boolean } from \@firestitch/common/util; instead
|
|
571
|
-
* @param {?} value
|
|
572
|
-
* @return {?}
|
|
573
|
-
*/
|
|
574
|
-
function (value) {
|
|
575
|
-
console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
|
|
576
|
-
return this.string(value).toLowerCase() !== 'false' && !!value;
|
|
577
|
-
};
|
|
578
|
-
/**
|
|
579
|
-
* @deprecated use import { stringify } from @firestitch/common/util; instead
|
|
580
|
-
*/
|
|
581
|
-
/**
|
|
582
|
-
* @deprecated use import { stringify } from \@firestitch/common/util; instead
|
|
583
|
-
* @param {?} value
|
|
584
|
-
* @return {?}
|
|
585
|
-
*/
|
|
586
|
-
FsUtil.prototype.stringify = /**
|
|
587
|
-
* @deprecated use import { stringify } from \@firestitch/common/util; instead
|
|
588
|
-
* @param {?} value
|
|
589
|
-
* @return {?}
|
|
590
|
-
*/
|
|
591
|
-
function (value) {
|
|
592
|
-
console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
|
|
593
|
-
return JSON.stringify(value);
|
|
594
|
-
};
|
|
595
|
-
FsUtil.decorators = [
|
|
596
|
-
{ type: Injectable }
|
|
597
|
-
];
|
|
598
|
-
return FsUtil;
|
|
599
|
-
}());
|
|
600
|
-
export { FsUtil };
|
|
601
|
-
if (false) {
|
|
602
|
-
/**
|
|
603
|
-
* @type {?}
|
|
604
|
-
* @private
|
|
605
|
-
*/
|
|
606
|
-
FsUtil.prototype.intervals;
|
|
607
|
-
}
|
|
608
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvY29tbW9uLyIsInNvdXJjZXMiOlsiYXBwL3NlcnZpY2VzL3V0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLE1BQU0sS0FBTyxVQUFVLEdBQUcsQ0FBQzs7QUFBM0IsTUFBTSxLQUNGLFFBQVEsR0FBRyxDQUFDOztBQURoQixNQUFNLEtBRUYsYUFBYSxHQUFHLENBQUM7O0FBRnJCLE1BQU0sS0FHRixPQUFPLEdBQUcsQ0FBQzs7QUFIZixNQUFNLEtBSUYsU0FBUyxHQUFHLEVBQUU7O0FBSmxCLE1BQU0sS0FLRixVQUFVLEdBQUcsRUFBRTs7QUFMbkIsTUFBTSxLQU1GLFNBQVMsR0FBRyxFQUFFOztBQU5sQixNQUFNLEtBT0YsU0FBUyxHQUFHLEVBQUU7O0FBUGxCLE1BQU0sS0FRRixXQUFXLEdBQUcsRUFBRTs7QUFScEIsTUFBTSxLQVNGLE9BQU8sR0FBRyxFQUFFOztBQVRoQixNQUFNLEtBVUYsU0FBUyxHQUFHLEVBQUU7O0FBVmxCLE1BQU0sS0FXRixhQUFhLEdBQUcsRUFBRTs7QUFYdEIsTUFBTSxLQVlGLFVBQVUsR0FBRyxFQUFFOztBQVpuQixNQUFNLEtBYUYsU0FBUyxHQUFHLEVBQUU7O0FBYmxCLE1BQU0sS0FjRixXQUFXLEdBQUcsRUFBRTs7QUFkcEIsTUFBTSxLQWVGLGFBQWEsR0FBRyxFQUFFOztBQWZ0QixNQUFNLEtBZ0JGLE9BQU8sR0FBRyxFQUFFOztBQWhCaEIsTUFBTSxLQWlCRixRQUFRLEdBQUcsRUFBRTs7QUFqQmpCLE1BQU0sS0FrQkYsUUFBUSxHQUFHLEVBQUU7O0FBbEJqQixNQUFNLEtBbUJGLE1BQU0sR0FBRyxFQUFFOztBQW5CZixNQUFNLEtBb0JGLFNBQVMsR0FBRyxFQUFFOztBQXBCbEIsTUFBTSxLQXFCRixRQUFRLEdBQUcsRUFBRTs7QUFyQmpCLE1BQU0sS0FzQkYsZUFBZSxHQUFHLEVBQUU7O0FBdEJ4QixNQUFNLEtBdUJGLFVBQVUsR0FBRyxFQUFFOztBQXZCbkIsTUFBTSxLQXdCRixVQUFVLEdBQUcsRUFBRTs7QUF4Qm5CLE1BQU0sS0F5QkYsS0FBSyxHQUFHLEVBQUU7O0FBekJkLE1BQU0sS0EwQkYsS0FBSyxHQUFHLEVBQUU7O0FBMUJkLE1BQU0sS0EyQkYsS0FBSyxHQUFHLEVBQUU7O0FBM0JkLE1BQU0sS0E0QkYsS0FBSyxHQUFHLEVBQUU7O0FBNUJkLE1BQU0sS0E2QkYsS0FBSyxHQUFHLEVBQUU7O0FBN0JkLE1BQU0sS0E4QkYsS0FBSyxHQUFHLEVBQUU7O0FBOUJkLE1BQU0sS0ErQkYsS0FBSyxHQUFHLEVBQUU7O0FBL0JkLE1BQU0sS0FnQ0YsS0FBSyxHQUFHLEVBQUU7O0FBaENkLE1BQU0sS0FpQ0YsS0FBSyxHQUFHLEVBQUU7O0FBakNkLE1BQU0sS0FrQ0YsS0FBSyxHQUFHLEVBQUU7O0FBbENkLE1BQU0sS0FtQ0YsYUFBYSxHQUFHLEVBQUU7O0FBbkN0QixNQUFNLEtBb0NGLFVBQVUsR0FBRyxFQUFFOzs7OztBQVFuQjtJQUFBO1FBR1ksY0FBUyxHQUFHLEVBQUUsQ0FBQztJQTRRM0IsQ0FBQztJQTFRRzs7TUFFRTs7Ozs7O0lBQ0sscUJBQUk7Ozs7O0lBQVgsVUFBWSxPQUFnQjtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDckUsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLENBQUM7UUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7UUFBRSxVQUFTLENBQUM7O2dCQUNwQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7TUFFRTs7Ozs7SUFDSyxxQkFBSTs7OztJQUFYO1FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7TUFFRTs7Ozs7OztJQUNLLHdCQUFPOzs7Ozs7SUFBZCxVQUFlLE9BQXdCLEVBQUUsUUFBYTtRQUFiLHlCQUFBLEVBQUEsYUFBYTtRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7O1lBQ2xFLE1BQU0sR0FBRyxRQUFRO1FBQ3ZCLE9BQU8sSUFBSSxPQUFPOzs7O1FBQUMsVUFBQSxPQUFPO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJOzs7O1lBQUMsVUFBVSxJQUFJO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87Ozs7Z0JBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUF2QixDQUF1QixFQUFDLENBQUE7Z0JBQ3pELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNuQixDQUFDLEVBQUMsQ0FBQztRQUNSLENBQUMsRUFBQyxDQUFBO0lBQ0wsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyxvQkFBRzs7Ozs7SUFBVixVQUFXLEtBQVU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RELEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLHNCQUFLOzs7OztJQUFaLFVBQWEsS0FBSztRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDckQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx1QkFBTTs7Ozs7SUFBYixVQUFjLE1BQU07UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyx3QkFBTzs7Ozs7O0lBQWQsVUFBZSxLQUFLLEVBQUUsT0FBUTtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLEtBQUssU0FBUztZQUN0QixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxLQUFLO1lBQ2YsS0FBSyxLQUFLLEVBQUU7WUFDWixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtZQUMxQixDQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNwQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FDbkQsQ0FBQztJQUNWLENBQUM7SUFFRDs7TUFFRTs7Ozs7OztJQUNLLHNCQUFLOzs7Ozs7SUFBWixVQUFhLEtBQUssRUFBRSxJQUFLO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQzs7WUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFL0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyxxQkFBSTs7Ozs7O0lBQVgsVUFBWSxNQUFNLEVBQUUsSUFBSTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25ELE9BQU87U0FDUjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTzs7OztRQUFDLFVBQVMsR0FBRztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7TUFHRTs7Ozs7OztJQUNLLHlCQUFROzs7Ozs7SUFBZixVQUFnQixLQUFLO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0tBQXdLLENBQUMsQ0FBQztRQUN2TCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLHlCQUFROzs7OztJQUFmLFVBQWdCLEtBQUs7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxzRkFBc0YsQ0FBQyxDQUFDO1FBQ3JHLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx3QkFBTzs7Ozs7SUFBZCxVQUFlLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sS0FBSyxZQUFZLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLDBCQUFTOzs7OztJQUFoQixVQUFpQixLQUFLO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyx3QkFBTzs7Ozs7O0lBQWQsVUFBZSxLQUFLLEVBQUUsR0FBRztRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBRXRCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFFcEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO29CQUNuQixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDaEMsT0FBTyxJQUFJLENBQUM7cUJBQ2Y7aUJBQ0o7YUFFSjtpQkFBTTtnQkFFSCxJQUFJLEtBQUssWUFBWSxHQUFHLEVBQUU7b0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7TUFFRTs7Ozs7O0lBQ0ssMEJBQVM7Ozs7O0lBQWhCLFVBQWlCLEtBQUs7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7TUFFRTs7Ozs7Ozs7SUFDSyxzQkFBSzs7Ozs7OztJQUFaLFVBQWEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUUvQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0o7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVNLHlCQUFROzs7OztJQUFmLFVBQWdCLElBQUksRUFBRSxJQUFJO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQzs7WUFDdEYsT0FBTyxHQUFHLEtBQUs7UUFDakI7OztRQUFPO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFxQix1QkFBdUI7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUsseUJBQXlCO2dCQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQWdCLDZCQUE2QjtnQkFDNUQsVUFBVTs7O2dCQUFDO29CQUNQLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBVywrQkFBK0I7Z0JBQzlELENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1FBQ0wsQ0FBQyxFQUFBO0lBQ0wsQ0FBQztJQUVEOztNQUVFOzs7Ozs7OztJQUNLLHlCQUFROzs7Ozs7O0lBQWYsVUFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQzs7WUFDdEYsT0FBTztRQUNUOzs7UUFBTzs7Z0JBQ0MsT0FBTyxHQUFHLElBQUk7O2dCQUFFLElBQUksR0FBRyxTQUFTOztnQkFDaEMsS0FBSzs7O1lBQUc7Z0JBQ1IsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUE7O2dCQUNHLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQyxPQUFPO1lBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFDO0lBQ04sQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx1QkFBTTs7Ozs7SUFBYixVQUFjLE1BQU07UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN4QjtRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx3QkFBTzs7Ozs7SUFBZCxVQUFlLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLDBCQUFTOzs7OztJQUFoQixVQUFpQixLQUFLO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7Z0JBOVFKLFVBQVU7O0lBK1FYLGFBQUM7Q0FBQSxBQS9RRCxJQStRQztTQTlRWSxNQUFNOzs7Ozs7SUFFZiwyQkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBLRVlfQ0FOQ0VMID0gMyxcbiAgICBLRVlfSEVMUCA9IDYsXG4gICAgS0VZX0JBQ0tTUEFDRSA9IDgsXG4gICAgS0VZX1RBQiA9IDksXG4gICAgS0VZX0NMRUFSID0gMTIsXG4gICAgS0VZX1JFVFVSTiA9IDEzLFxuICAgIEtFWV9FTlRFUiA9IDE0LFxuICAgIEtFWV9TSElGVCA9IDE2LFxuICAgIEtFWV9DT05UUk9MID0gMTcsXG4gICAgS0VZX0FMVCA9IDE4LFxuICAgIEtFWV9QQVVTRSA9IDE5LFxuICAgIEtFWV9DQVBTX0xPQ0sgPSAyMCxcbiAgICBLRVlfRVNDQVBFID0gMjcsXG4gICAgS0VZX1NQQUNFID0gMzIsXG4gICAgS0VZX1BBR0VfVVAgPSAzMyxcbiAgICBLRVlfUEFHRV9ET1dOID0gMzQsXG4gICAgS0VZX0VORCA9IDM1LFxuICAgIEtFWV9IT01FID0gMzYsXG4gICAgS0VZX0xFRlQgPSAzNyxcbiAgICBLRVlfVVAgPSAzOCxcbiAgICBLRVlfUklHSFQgPSAzOSxcbiAgICBLRVlfRE9XTiA9IDQwLFxuICAgIEtFWV9QUklOVFNDUkVFTiA9IDQ0LFxuICAgIEtFWV9JTlNFUlQgPSA0NSxcbiAgICBLRVlfREVMRVRFID0gNDYsXG4gICAgS0VZXzAgPSA0OCxcbiAgICBLRVlfMSA9IDQ5LFxuICAgIEtFWV8yID0gNTAsXG4gICAgS0VZXzMgPSA1MSxcbiAgICBLRVlfNCA9IDUyLFxuICAgIEtFWV81ID0gNTMsXG4gICAgS0VZXzYgPSA1NCxcbiAgICBLRVlfNyA9IDU1LFxuICAgIEtFWV84ID0gNTYsXG4gICAgS0VZXzkgPSA1NyxcbiAgICBLRVlfU0VNSUNPTE9OID0gNTksXG4gICAgS0VZX0VRVUFMUyA9IDYxO1xuXG4vKlxuICAgIEJhc2ljYWxseSwganVzdCBjb3B5LXBhc3RlZCBmdW5jdGlvbmFsaXR5IGZyb20gZnMtYm9pbGVycGxhdGUgdjEueCwgd2l0aCBzb21lIHNtYWxsIGNoYW5nZXMgKGxpa2Ugd2UgZG9udCBoYXZlIGFuZ3VsYXIuYmluZCBhbnltb3JlLCBoYWQgdG8gZ28gd2l0aCBhIHdvcmthcm91bmQpXG4gICAgVGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IHRvIG9yZ2FuaXNlIGNvbnN0YXRucyBidXQgSSBuZWVkIHRvIGtub3cgdXNlLWNhc2VzXG4qL1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGc1V0aWwge1xuXG4gICAgcHJpdmF0ZSBpbnRlcnZhbHMgPSB7fTtcblxuICAgIC8qKlxuICAgICogQGRlcHJlY2F0ZWQgdXNlIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsL2d1aWQgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGd1aWQocGF0dGVybj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9ndWlkIGluc3RlYWQnKTtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuIHx8ICd4eHh4eHgnO1xuICAgICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHV1aWQgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdXVpZCgpOiBzdHJpbmcge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWwvdXVpZCBpbnN0ZWFkJyk7XG4gICAgICByZXR1cm4gdGhpcy5ndWlkKCd4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKHByb21pc2U6IFByb21pc2U8b2JqZWN0PiwgZGVmYXVsdHMgPSBbXSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9yZXNvbHZlIGluc3RlYWQnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4gcmVzdWx0W2tleV0gPSBkYXRhW2tleV0pXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLnRvSW50ZWdlcigpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpbnQodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8udG9JbnRlZ2VyKCkgaW5zdGVhZCcpO1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy50b0Zpbml0ZSgpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBmbG9hdCh2YWx1ZSk6IG51bWJlciB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvRmluaXRlKCkgaW5zdGVhZCcpO1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8udG9TdHJpbmcoKSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgc3RyaW5nKHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvU3RyaW5nKCkgaW5zdGVhZCcpO1xuICAgICAgICBpZiAoc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc3RyaW5nKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzRW1wdHkodmFsdWUsIG9wdGlvbnM/KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICAhdGhpcy5zdHJpbmcodmFsdWUpLmxlbmd0aCB8fFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSkgfHxcbiAgICAgICAgICAgICAgICAoIW9wdGlvbnMuemVybyAmJiAodmFsdWUgPT09IDAgfHwgdmFsdWUgPT09ICcwJylcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNJbnRlZ2VyKCkgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzSW50KHZhbHVlLCB0eXBlPykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzSW50ZWdlcigpIGluc3RlYWQnKTtcbiAgICAgICAgY29uc3QgaW50ID0gISF0aGlzLnN0cmluZyh2YWx1ZSkubWF0Y2goL15cXGQrJC8pO1xuXG4gICAgICAgIGlmICghaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uZWFjaCgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNmb3JFYWNofVxuICAgICovXG4gICAgcHVibGljIGVhY2gob2JqZWN0LCBmdW5jKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmVhY2goKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjZm9yRWFjaH0nKTtcbiAgICAgIGlmICghdGhpcy5pc0FycmF5KG9iamVjdCkgJiYgIXRoaXMuaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgZnVuYyhvYmplY3Rba2V5XSxrZXkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fVxuICAgICAqIG9yIF8uaXNPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzT2JqZWN0fSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNPYmplY3QodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fSBvciBfLmlzT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc09iamVjdH0gaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfVxuICAgICovXG4gICAgcHVibGljIGlzU3RyaW5nKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfScpO1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fVxuICAgICovXG4gICAgcHVibGljIGlzQXJyYXkodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fScpO1xuICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpc051bWVyaWModmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZyh2YWx1ZSkubGVuZ3RoICYmICEhdGhpcy5zdHJpbmcodmFsdWUpLm1hdGNoKC9eLT9cXGQqXFwuP1xcZCokLyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNDbGFzcyh2YWx1ZSwgY2xzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KHZhbHVlKSkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0cmluZyhjbHMpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09IGNscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBjbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufVxuICAgICovXG4gICAgcHVibGljIGlzQm9vbGVhbih2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufScpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgdmFsdWUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdmFsdWUob2JqZWN0LCBrZXksIGRlZik6IGFueSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB2YWx1ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3Qob2JqZWN0KSB8fCB0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuXG4gICAgICAgICAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aHJvdHRsZShmdW5jLCB3YWl0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGxldCB3YWl0aW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgXHQvLyBJbml0aWFsbHksIHdlJ3JlIG5vdCB3YWl0aW5nXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgICAgXHRcdC8vIFdlIHJldHVybiBhIHRocm90dGxlZCBmdW5jdGlvblxuICAgICAgICAgICAgaWYgKCF3YWl0aW5nKSB7ICAgICAgICAgICAgICAgICAgIFx0Ly8gSWYgd2UncmUgbm90IHdhaXRpbmdcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7ICAgICAvLyBFeGVjdXRlIHVzZXJzIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7ICAgICAgICAgICAgICAgXHQvLyBQcmV2ZW50IGZ1dHVyZSBpbnZvY2F0aW9uc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAgIFx0XHQvLyBBZnRlciBhIHBlcmlvZCBvZiB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSBmYWxzZTsgICAgICAgICAgXHQvLyBBbmQgYWxsb3cgZnV0dXJlIGludm9jYXRpb25zXG4gICAgICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgob2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgYm9vbGVhbiB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBib29sZWFuKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBib29sZWFuIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnICYmICEhdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBzdHJpbmdpZnkodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuIl19
|