@sbb-esta/lyne-elements-experimental-dev 5.0.0-next-dev.1776928798 → 5.0.0-next-dev.1776934579
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/custom-elements.json +84 -84
- package/development/date-helper-DGz-ztQM.js +1 -1
- package/development/format-DFx4997p.js +1 -1
- package/development/pearl-chain.component-Dl2RvtJo.js +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1 -1
- package/development/seat-reservation-place-control.component-QF_px_in.js +1 -1
- package/development/seat-reservation.component-wkvc3Frp.js +1 -1
- package/development/svgs-kDpBCto5.js +1 -1
- package/development/timetable-row.component-Binmks-o.js +1 -1
- package/development/toDate-DOFAOjP-.js +1 -1
- package/package.json +2 -2
package/custom-elements.json
CHANGED
|
@@ -7076,90 +7076,6 @@
|
|
|
7076
7076
|
}
|
|
7077
7077
|
]
|
|
7078
7078
|
},
|
|
7079
|
-
{
|
|
7080
|
-
"kind": "javascript-module",
|
|
7081
|
-
"path": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js",
|
|
7082
|
-
"declarations": [
|
|
7083
|
-
{
|
|
7084
|
-
"kind": "class",
|
|
7085
|
-
"description": "Visualize an area with a special meaning within a wagon.",
|
|
7086
|
-
"name": "SbbSeatReservationAreaElement",
|
|
7087
|
-
"members": [
|
|
7088
|
-
{
|
|
7089
|
-
"kind": "field",
|
|
7090
|
-
"name": "elementName",
|
|
7091
|
-
"type": {
|
|
7092
|
-
"text": "string"
|
|
7093
|
-
},
|
|
7094
|
-
"privacy": "public",
|
|
7095
|
-
"static": true,
|
|
7096
|
-
"readonly": true,
|
|
7097
|
-
"default": "'sbb-seat-reservation-area'"
|
|
7098
|
-
},
|
|
7099
|
-
{
|
|
7100
|
-
"kind": "field",
|
|
7101
|
-
"name": "mounting",
|
|
7102
|
-
"type": {
|
|
7103
|
-
"text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
|
|
7104
|
-
},
|
|
7105
|
-
"privacy": "public",
|
|
7106
|
-
"default": "'free'",
|
|
7107
|
-
"description": "Mounting Prop",
|
|
7108
|
-
"attribute": "mounting",
|
|
7109
|
-
"reflects": true
|
|
7110
|
-
},
|
|
7111
|
-
{
|
|
7112
|
-
"kind": "field",
|
|
7113
|
-
"name": "background",
|
|
7114
|
-
"type": {
|
|
7115
|
-
"text": "'light' | 'dark'"
|
|
7116
|
-
},
|
|
7117
|
-
"privacy": "public",
|
|
7118
|
-
"default": "'light'",
|
|
7119
|
-
"description": "the background of the area",
|
|
7120
|
-
"attribute": "background",
|
|
7121
|
-
"reflects": true
|
|
7122
|
-
}
|
|
7123
|
-
],
|
|
7124
|
-
"attributes": [
|
|
7125
|
-
{
|
|
7126
|
-
"name": "mounting",
|
|
7127
|
-
"type": {
|
|
7128
|
-
"text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
|
|
7129
|
-
},
|
|
7130
|
-
"default": "'free'",
|
|
7131
|
-
"description": "Mounting Prop",
|
|
7132
|
-
"fieldName": "mounting"
|
|
7133
|
-
},
|
|
7134
|
-
{
|
|
7135
|
-
"name": "background",
|
|
7136
|
-
"type": {
|
|
7137
|
-
"text": "'light' | 'dark'"
|
|
7138
|
-
},
|
|
7139
|
-
"default": "'light'",
|
|
7140
|
-
"description": "the background of the area",
|
|
7141
|
-
"fieldName": "background"
|
|
7142
|
-
}
|
|
7143
|
-
],
|
|
7144
|
-
"superclass": {
|
|
7145
|
-
"name": "SbbElement",
|
|
7146
|
-
"package": "@sbb-esta/lyne-elements/core.js"
|
|
7147
|
-
},
|
|
7148
|
-
"tagName": "sbb-seat-reservation-area",
|
|
7149
|
-
"customElement": true
|
|
7150
|
-
}
|
|
7151
|
-
],
|
|
7152
|
-
"exports": [
|
|
7153
|
-
{
|
|
7154
|
-
"kind": "js",
|
|
7155
|
-
"name": "SbbSeatReservationAreaElement",
|
|
7156
|
-
"declaration": {
|
|
7157
|
-
"name": "SbbSeatReservationAreaElement",
|
|
7158
|
-
"module": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js"
|
|
7159
|
-
}
|
|
7160
|
-
}
|
|
7161
|
-
]
|
|
7162
|
-
},
|
|
7163
7079
|
{
|
|
7164
7080
|
"kind": "javascript-module",
|
|
7165
7081
|
"path": "seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js",
|
|
@@ -7276,6 +7192,90 @@
|
|
|
7276
7192
|
}
|
|
7277
7193
|
]
|
|
7278
7194
|
},
|
|
7195
|
+
{
|
|
7196
|
+
"kind": "javascript-module",
|
|
7197
|
+
"path": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js",
|
|
7198
|
+
"declarations": [
|
|
7199
|
+
{
|
|
7200
|
+
"kind": "class",
|
|
7201
|
+
"description": "Visualize an area with a special meaning within a wagon.",
|
|
7202
|
+
"name": "SbbSeatReservationAreaElement",
|
|
7203
|
+
"members": [
|
|
7204
|
+
{
|
|
7205
|
+
"kind": "field",
|
|
7206
|
+
"name": "elementName",
|
|
7207
|
+
"type": {
|
|
7208
|
+
"text": "string"
|
|
7209
|
+
},
|
|
7210
|
+
"privacy": "public",
|
|
7211
|
+
"static": true,
|
|
7212
|
+
"readonly": true,
|
|
7213
|
+
"default": "'sbb-seat-reservation-area'"
|
|
7214
|
+
},
|
|
7215
|
+
{
|
|
7216
|
+
"kind": "field",
|
|
7217
|
+
"name": "mounting",
|
|
7218
|
+
"type": {
|
|
7219
|
+
"text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
|
|
7220
|
+
},
|
|
7221
|
+
"privacy": "public",
|
|
7222
|
+
"default": "'free'",
|
|
7223
|
+
"description": "Mounting Prop",
|
|
7224
|
+
"attribute": "mounting",
|
|
7225
|
+
"reflects": true
|
|
7226
|
+
},
|
|
7227
|
+
{
|
|
7228
|
+
"kind": "field",
|
|
7229
|
+
"name": "background",
|
|
7230
|
+
"type": {
|
|
7231
|
+
"text": "'light' | 'dark'"
|
|
7232
|
+
},
|
|
7233
|
+
"privacy": "public",
|
|
7234
|
+
"default": "'light'",
|
|
7235
|
+
"description": "the background of the area",
|
|
7236
|
+
"attribute": "background",
|
|
7237
|
+
"reflects": true
|
|
7238
|
+
}
|
|
7239
|
+
],
|
|
7240
|
+
"attributes": [
|
|
7241
|
+
{
|
|
7242
|
+
"name": "mounting",
|
|
7243
|
+
"type": {
|
|
7244
|
+
"text": "'free' | 'upper-border' | 'lower-border' | 'upper-to-lower-border'"
|
|
7245
|
+
},
|
|
7246
|
+
"default": "'free'",
|
|
7247
|
+
"description": "Mounting Prop",
|
|
7248
|
+
"fieldName": "mounting"
|
|
7249
|
+
},
|
|
7250
|
+
{
|
|
7251
|
+
"name": "background",
|
|
7252
|
+
"type": {
|
|
7253
|
+
"text": "'light' | 'dark'"
|
|
7254
|
+
},
|
|
7255
|
+
"default": "'light'",
|
|
7256
|
+
"description": "the background of the area",
|
|
7257
|
+
"fieldName": "background"
|
|
7258
|
+
}
|
|
7259
|
+
],
|
|
7260
|
+
"superclass": {
|
|
7261
|
+
"name": "SbbElement",
|
|
7262
|
+
"package": "@sbb-esta/lyne-elements/core.js"
|
|
7263
|
+
},
|
|
7264
|
+
"tagName": "sbb-seat-reservation-area",
|
|
7265
|
+
"customElement": true
|
|
7266
|
+
}
|
|
7267
|
+
],
|
|
7268
|
+
"exports": [
|
|
7269
|
+
{
|
|
7270
|
+
"kind": "js",
|
|
7271
|
+
"name": "SbbSeatReservationAreaElement",
|
|
7272
|
+
"declaration": {
|
|
7273
|
+
"name": "SbbSeatReservationAreaElement",
|
|
7274
|
+
"module": "seat-reservation/seat-reservation-area/seat-reservation-area.component.js"
|
|
7275
|
+
}
|
|
7276
|
+
}
|
|
7277
|
+
]
|
|
7278
|
+
},
|
|
7279
7279
|
{
|
|
7280
7280
|
"kind": "javascript-module",
|
|
7281
7281
|
"path": "seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js",
|
|
@@ -517,4 +517,4 @@ var durationToTime = (duration, currentLanguage) => {
|
|
|
517
517
|
//#endregion
|
|
518
518
|
export { removeTimezoneFromISOTimeString as n, durationToTime as t };
|
|
519
519
|
|
|
520
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1oZWxwZXItREd6LXp0UU0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZERheXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvY29yZS9kYXRldGltZS9kYXRlLWhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGREYXlzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgYWRkRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMTAgZGF5cyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IFRodSBTZXAgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTtcblxuICAvLyBJZiAwIGRheXMsIG5vLW9wIHRvIGF2b2lkIGNoYW5naW5nIHRpbWVzIGluIHRoZSBob3VyIGJlZm9yZSBlbmQgb2YgRFNUXG4gIGlmICghYW1vdW50KSByZXR1cm4gX2RhdGU7XG5cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBhbW91bnQpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkRGF5cztcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZE1pbGxpc2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICt0b0RhdGUoZGF0ZSkgKyBhbW91bnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZE1pbGxpc2Vjb25kcztcbiIsImltcG9ydCB7IGFkZE1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2FkZE1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGRIb3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgaG91cnMgdG8gYmUgYWRkZWRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMiBob3VycyB0byAxMCBKdWx5IDIwMTQgMjM6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMjMsIDApLCAyKVxuICogLy89PiBGcmkgSnVsIDExIDIwMTQgMDE6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luSG91ciwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkSG91cnM7XG4iLCJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgZnVsbCBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbCBkYXkgcGVyaW9kcyBiZXR3ZWVuIHR3byBkYXRlcy4gRnJhY3Rpb25hbCBkYXlzIGFyZVxuICogdHJ1bmNhdGVkIHRvd2FyZHMgemVyby5cbiAqXG4gKiBPbmUgXCJmdWxsIGRheVwiIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgbG9jYWwgdGltZSBpbiBvbmUgZGF5IHRvIHRoZSBzYW1lXG4gKiBsb2NhbCB0aW1lIG9uIHRoZSBuZXh0IG9yIHByZXZpb3VzIGRheS4gQSBmdWxsIGRheSBjYW4gc29tZXRpbWVzIGJlIGxlc3MgdGhhblxuICogb3IgbW9yZSB0aGFuIDI0IGhvdXJzIGlmIGEgZGF5bGlnaHQgc2F2aW5ncyBjaGFuZ2UgaGFwcGVucyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAqXG4gKiBUbyBpZ25vcmUgRFNUIGFuZCBvbmx5IG1lYXN1cmUgZXhhY3QgMjQtaG91ciBwZXJpb2RzLCB1c2UgdGhpcyBpbnN0ZWFkOlxuICogYE1hdGgudHJ1bmMoZGlmZmVyZW5jZUluSG91cnMoZGF0ZUxlZnQsIGRhdGVSaWdodCkvMjQpfDBgLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIGRheXMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCB0aW1lem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6NTk6MDAgYW5kIDMgSnVseSAyMDExIDAwOjAxOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDEgTWFyY2ggMjAyMCAwOjAwIGFuZCAxIEp1bmUgMjAyMCAwOjAwID9cbiAqIC8vIE5vdGU6IGJlY2F1c2UgbG9jYWwgdGltZSBpcyB1c2VkLCB0aGVcbiAqIC8vIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSA5MiBkYXlzLCBldmVuIGluXG4gKiAvLyB0aW1lIHpvbmVzIHdoZXJlIERTVCBzdGFydHMgYW5kIHRoZVxuICogLy8gcGVyaW9kIGhhcyBvbmx5IDkyKjI0LTEgaG91cnMuXG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDIwLCA1LCAxKSxcbiAqICAgbmV3IERhdGUoMjAyMCwgMiwgMSlcbiAqIClcbiAqIC8vPT4gOTJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkRheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBzaWduID0gY29tcGFyZUxvY2FsQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhcbiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSxcbiAgKTtcblxuICBsYXRlckRhdGVfLnNldERhdGUobGF0ZXJEYXRlXy5nZXREYXRlKCkgLSBzaWduICogZGlmZmVyZW5jZSk7XG5cbiAgLy8gTWF0aC5hYnMoZGlmZiBpbiBmdWxsIGRheXMgLSBkaWZmIGluIGNhbGVuZGFyIGRheXMpID09PSAxIGlmIGxhc3QgY2FsZW5kYXIgZGF5IGlzIG5vdCBmdWxsXG4gIC8vIElmIHNvLCByZXN1bHQgbXVzdCBiZSBkZWNyZWFzZWQgYnkgMSBpbiBhYnNvbHV0ZSB2YWx1ZVxuICBjb25zdCBpc0xhc3REYXlOb3RGdWxsID0gTnVtYmVyKFxuICAgIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbixcbiAgKTtcblxuICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmZlcmVuY2UgLSBpc0xhc3REYXlOb3RGdWxsKTtcbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBMaWtlIGBjb21wYXJlQXNjYCBidXQgdXNlcyBsb2NhbCB0aW1lIG5vdCBVVEMsIHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFjY3VyYXRlIGVxdWFsaXR5IGNvbXBhcmlzb25zIG9mIFVUQyB0aW1lc3RhbXBzIHRoYXQgZW5kIHVwXG4vLyBoYXZpbmcgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gaW4gbG9jYWwgdGltZSwgZS5nLiBvbmUgaG91ciBiZWZvcmVcbi8vIERTVCBlbmRzIHZzLiB0aGUgaW5zdGFudCB0aGF0IERTVCBlbmRzLlxuZnVuY3Rpb24gY29tcGFyZUxvY2FsQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHtcbiAgY29uc3QgZGlmZiA9XG4gICAgbGF0ZXJEYXRlLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZS5nZXRGdWxsWWVhcigpIHx8XG4gICAgbGF0ZXJEYXRlLmdldE1vbnRoKCkgLSBlYXJsaWVyRGF0ZS5nZXRNb250aCgpIHx8XG4gICAgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRIb3VycygpIC0gZWFybGllckRhdGUuZ2V0SG91cnMoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNaW51dGVzKCkgLSBlYXJsaWVyRGF0ZS5nZXRNaW51dGVzKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8XG4gICAgbGF0ZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG5cbiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7XG4gIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZGlmZiBpcyAwOyByZXR1cm4gTmFOIGlmIGRpZmYgaXMgTmFOXG4gIHJldHVybiBkaWZmO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkRheXM7XG4iLCJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5Ib3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaG91cnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgaG91cnMgYXJlIGJldHdlZW4gMiBKdWx5IDIwMTQgMDY6NTA6MDAgYW5kIDIgSnVseSAyMDE0IDE5OjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluSG91cnMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE5LCAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgNiwgNTApXG4gKiApXG4gKiAvLz0+IDEyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7XG4gIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluSG91cnM7XG4iLCJpbXBvcnQgeyBhZGREYXlzIH0gZnJvbSBcIi4vYWRkRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3ViRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMTAgZGF5cyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJEYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gRnJpIEF1ZyAyMiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkRGF5cyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJEYXlzO1xuIiwiaW1wb3J0IHtcbiAgbWlsbGlzZWNvbmRzSW5Ib3VyLFxuICBtaWxsaXNlY29uZHNJbk1pbnV0ZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwYXJzZUlTT30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHBhcnNlSVNPXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIElTTyBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzbid0IGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3JcbiAqIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gYXJndW1lbnQgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcrMDIwMTQxMDEnLCB7IGFkZGl0aW9uYWxEaWdpdHM6IDEgfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTTyhhcmd1bWVudCwgb3B0aW9ucykge1xuICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIE5hTik7XG5cbiAgY29uc3QgYWRkaXRpb25hbERpZ2l0cyA9IG9wdGlvbnM/LmFkZGl0aW9uYWxEaWdpdHMgPz8gMjtcbiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpO1xuXG4gIGxldCBkYXRlO1xuICBpZiAoZGF0ZVN0cmluZ3MuZGF0ZSkge1xuICAgIGNvbnN0IHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpO1xuICB9XG5cbiAgaWYgKCFkYXRlIHx8IGlzTmFOKCtkYXRlKSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG5cbiAgY29uc3QgdGltZXN0YW1wID0gK2RhdGU7XG4gIGxldCB0aW1lID0gMDtcbiAgbGV0IG9mZnNldDtcblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7XG4gICAgaWYgKGlzTmFOKHRpbWUpKSByZXR1cm4gaW52YWxpZERhdGUoKTtcbiAgfVxuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSkge1xuICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpO1xuICAgIGlmIChpc05hTihvZmZzZXQpKSByZXR1cm4gaW52YWxpZERhdGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoXG4gICAgICB0bXBEYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ0RhdGUoKSxcbiAgICApO1xuICAgIHJlc3VsdC5zZXRIb3VycyhcbiAgICAgIHRtcERhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiB0b0RhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldCwgb3B0aW9ucz8uaW4pO1xufVxuXG5jb25zdCBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG59O1xuXG5jb25zdCBkYXRlUmVnZXggPVxuICAvXi0/KD86KFxcZHszfSl8KFxcZHsyfSkoPzotPyhcXGR7Mn0pKT98VyhcXGR7Mn0pKD86LT8oXFxkezF9KSk/fCkkLztcbmNvbnN0IHRpbWVSZWdleCA9XG4gIC9eKFxcZHsyfSg/OlsuLF1cXGQqKT8pKD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8kLztcbmNvbnN0IHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0ge307XG4gIGNvbnN0IGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltaXRlcik7XG4gIGxldCB0aW1lU3RyaW5nO1xuXG4gIC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG4gIGlmIChhcnJheS5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGRhdGVTdHJpbmdzO1xuICB9XG5cbiAgaWYgKC86Ly50ZXN0KGFycmF5WzBdKSkge1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF07XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdO1xuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlcilbMF07XG4gICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoXG4gICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLFxuICAgICAgICBkYXRlU3RyaW5nLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCBcIlwiKTtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5ncztcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OihcXFxcZHs0fXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDQgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pfChcXFxcZHsyfXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pJClcIixcbiAgKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2gocmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiBcIlwiIH07XG5cbiAgY29uc3QgeWVhciA9IGNhcHR1cmVzWzFdID8gcGFyc2VJbnQoY2FwdHVyZXNbMV0pIDogbnVsbDtcbiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDtcblxuICAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG4gIHJldHVybiB7XG4gICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLFxuICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKChjYXB0dXJlc1sxXSB8fCBjYXB0dXJlc1syXSkubGVuZ3RoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdO1xuICBjb25zdCBkYXlPZlllYXIgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzFdKTtcbiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pO1xuICBjb25zdCB3ZWVrID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1s0XSk7XG4gIGNvbnN0IGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgaWYgKFxuICAgICAgIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fFxuICAgICAgIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IHBhcnNlSW50KHZhbHVlKSA6IDE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7XG4gIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gTmFOOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzJdKTtcbiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDEwMDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZShcIixcIiwgXCIuXCIpKSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykge1xuICBpZiAodGltZXpvbmVTdHJpbmcgPT09IFwiWlwiKSByZXR1cm4gMDtcblxuICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gMDtcblxuICBjb25zdCBzaWduID0gY2FwdHVyZXNbMV0gPT09IFwiK1wiID8gLTEgOiAxO1xuICBjb25zdCBob3VycyA9IHBhcnNlSW50KGNhcHR1cmVzWzJdKTtcbiAgY29uc3QgbWludXRlcyA9IChjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkpIHx8IDA7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7XG4gIGNvbnN0IGRpZmYgPSAod2VlayAtIDEpICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5jb25zdCBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBtb250aCA+PSAwICYmXG4gICAgbW9udGggPD0gMTEgJiZcbiAgICBkYXRlID49IDEgJiZcbiAgICBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAyOSA6IDI4KSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHNlY29uZHMgPj0gMCAmJlxuICAgIHNlY29uZHMgPCA2MCAmJlxuICAgIG1pbnV0ZXMgPj0gMCAmJlxuICAgIG1pbnV0ZXMgPCA2MCAmJlxuICAgIGhvdXJzID49IDAgJiZcbiAgICBob3VycyA8IDI1XG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoX2hvdXJzLCBtaW51dGVzKSB7XG4gIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwYXJzZUlTTztcbiIsImltcG9ydCB7IGFkZEhvdXJzIH0gZnJvbSBcIi4vYWRkSG91cnMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YkhvdXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3ViSG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGhvdXJzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGhvdXJzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMiBob3VycyBmcm9tIDExIEp1bHkgMjAxNCAwMTowMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YkhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDExLCAxLCAwKSwgMilcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDIzOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJIb3VycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YkhvdXJzO1xuIiwiaW1wb3J0IHtcbiAgaTE4bkR1cmF0aW9uRGF5LFxuICBpMThuRHVyYXRpb25Ib3VyLFxuICBpMThuRHVyYXRpb25NaW51dGUsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUuanMnO1xuaW1wb3J0IHtcbiAgYWRkTWludXRlcyxcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZGlmZmVyZW5jZUluSG91cnMsXG4gIGRpZmZlcmVuY2VJbk1pbnV0ZXMsXG4gIGlzVmFsaWQsXG4gIHBhcnNlSVNPLFxuICBzdWJEYXlzLFxuICBzdWJIb3Vycyxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgb2Zmc2V0IG9mIGEgSVNPIGRhdGUgc3RyaW5nLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldCBpcyBpZ25vcmVkLlxuICogSWYgaXQgaXMgbm90IHJlbW92ZWQgdGhlIHRpbWUgd291bGQgYmUgY29udmVydGVkIHRvIHRoZSBicm93c2VycyBsb2NhbCB0aW1lLlxuICogRXhhbXBsZTogXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAzOjAwXCIgd291bGQgYmUgY2hhbmdlZCB0byBcIjIwMjItMDgtMjlUMDg6MzA6MDArMDI6MDBcIiAtLT4gbm90IHRoZSBkZXNpcmVkIG91dGNvbWUsIGFzIHdlIHdhbnQgdG8gdXNlIHRoZSB0aW1lIGluIHRoZSB0aW1lem9uZSBhbmQgbm90IHRoZSBsb2NhbCB0aW1lLlxuICpcbiAqIEFmdGVyIHRoZSBvZmZzZXQgaXMgcmVtb3ZlZCBhIG5ldyBkYXRlIGlzIGNyZWF0ZWQgaW4gdGhlIGJyb3dzZXJzIGxvY2FsIHRpbWUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB0aW1lIG9mIHRoZSBJU08gZGF0ZSBzdHJpbmcgaXMgZGlzcGxheWVkIGFuZCBub3QgYSBjb252ZXJ0ZWQgdGltZS5cbiAqIEV4YW1wbGU6IFwiMjAyMi0wOC0yOVQwOTozMDowMCswMzowMFwiIHdvdWxkIGJlIGNoYW5nZWQgdG8gXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAyOjAwXCIgLS0+IGRlc2lyZWQgb3V0Y29tZVxuICogQXR0ZW50aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhlIGNvcnJlY3QgdGltZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuIEl0IGlzIGEgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUsIHRoYXQgdGhlIGdpdmVuIHRpbWUgaXMgZGlzcGxheWVkIHdpdGhvdXQgYmVpbmcgY29udmVydGVkLlxuICpcbiAqIE9mZnNldDogRGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lem9uZSBhbmQgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUuXG4gKlxuICogQHBhcmFtIGlzb1RpbWUgLSB0aGUgaXNvIHRpbWUgd2l0aCB0aGUgdGltZXpvbmUgb2Zmc2V0XG4gKiBAcmV0dXJucyBhIG5ldyBkYXRlIHdpdGggdGhlIGxvY2FsIHRpbWV6b25lIHdpdGggdGhlIGxvY2FsIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhpc29UaW1lPzogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNvVGltZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlSVNPKGlzb1RpbWUpO1xuXG4gIGlmICghaXNWYWxpZChwYXJzZWREYXRlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnWicpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGlzb1RpbWUucmVwbGFjZSgnWicsICcnKSk7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnVCcpKSB7XG4gICAgY29uc3QgZGF0ZVRpbWUgPSBpc29UaW1lLnNwbGl0KCdUJyk7XG5cbiAgICBpZiAoZGF0ZVRpbWVbMV0gJiYgKGRhdGVUaW1lWzFdLmluY2x1ZGVzKCcrJykgfHwgZGF0ZVRpbWVbMV0uaW5jbHVkZXMoJy0nKSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShgJHtkYXRlVGltZVswXX1UJHtkYXRlVGltZVsxXS5zcGxpdCgvWystXS8pWzBdfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IERhdGUoaXNvVGltZSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIGR1cmF0aW9uIG51bWJlciB0byBkYXRlIHN0cmluZyB3aXRoIHNwZWNpZmljIGZvcm1hdFxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIGR1cmF0aW9uIGluIG1pbnV0ZXNcbiAqIEBwYXJhbSBjdXJyZW50TGFuZ3VhZ2UgLSBjdXJyZW50TGFuZ3VhZ2VcbiAqIEByZXR1cm5zIGFuIE9iamVjdCB3aXRoIHR3byBzdHJpbmdzIGluIHRoZSBmb3JtYXQgXCJkZCBoaCBtbVwiIChzaG9ydCkgYW4gXCJ4IERheShzKSB4IEhvdXIocykgeCBNaW51dGUocykgKGxvbmcpXCJcbiAqICovXG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblRvVGltZSA9IChcbiAgZHVyYXRpb246IG51bWJlcixcbiAgY3VycmVudExhbmd1YWdlPzogc3RyaW5nLFxuKTogeyBzaG9ydDogc3RyaW5nOyBsb25nOiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHNob3J0ID0gW107XG4gIGNvbnN0IGxvbmcgPSBbXTtcblxuICBjb25zdCBub3cgPSAwO1xuICBsZXQgZnV0dXJlID0gYWRkTWludXRlcyhub3csIGR1cmF0aW9uKTtcblxuICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhmdXR1cmUsIG5vdyk7XG4gIGlmIChkYXlzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7ZGF5c30gZGApO1xuICAgIGlmIChjdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIGxvbmcucHVzaChcbiAgICAgICAgYCR7ZGF5c30gJHtcbiAgICAgICAgICBkYXlzID4gMVxuICAgICAgICAgICAgPyBpMThuRHVyYXRpb25EYXkubXVsdGlwbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IGkxOG5EdXJhdGlvbkRheS5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViRGF5cyhmdXR1cmUsIGRheXMpO1xuICB9XG5cbiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhmdXR1cmUsIG5vdyk7XG4gIGlmIChob3VycyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke2hvdXJzfSBoYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHtob3Vyc30gJHtcbiAgICAgICAgICBob3VycyA+IDFcbiAgICAgICAgICAgID8gaTE4bkR1cmF0aW9uSG91ci5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uSG91ci5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViSG91cnMoZnV0dXJlLCBob3Vycyk7XG4gIH1cblxuICBjb25zdCBtaW51dGVzID0gZGlmZmVyZW5jZUluTWludXRlcyhmdXR1cmUsIG5vdyk7XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7bWludXRlc30gbWluYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHttaW51dGVzfSAke1xuICAgICAgICAgIG1pbnV0ZXMgPiAxXG4gICAgICAgICAgICA/IGkxOG5EdXJhdGlvbk1pbnV0ZS5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uTWludXRlLnNpbmdsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2hvcnQ6IHNob3J0LmpvaW4oJyAnKSxcbiAgICBsb25nOiBsb25nLmpvaW4oJyAnKSxcbiAgfTtcbn07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsN10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsU0FBZ0IsUUFBUSxNQUFNLFFBQVEsU0FBUztDQUM3QyxNQUFNLFFBQVEsT0FBTyxNQUFNLFNBQVMsR0FBRztBQUN2QyxLQUFJLE1BQU0sT0FBTyxDQUFFLFFBQU8sY0FBYyxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBR2pFLEtBQUksQ0FBQyxPQUFRLFFBQU87QUFFcEIsT0FBTSxRQUFRLE1BQU0sU0FBUyxHQUFHLE9BQU87QUFDdkMsUUFBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSVCxTQUFnQixnQkFBZ0IsTUFBTSxRQUFRLFNBQVM7QUFDckQsUUFBTyxjQUFjLFNBQVMsTUFBTSxNQUFNLENBQUMsT0FBTyxLQUFLLEdBQUcsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbkUsU0FBZ0IsU0FBUyxNQUFNLFFBQVEsU0FBUztBQUM5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
|
|
520
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1oZWxwZXItREd6LXp0UU0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZERheXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvY29yZS9kYXRldGltZS9kYXRlLWhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGREYXlzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgYWRkRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMTAgZGF5cyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IFRodSBTZXAgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTtcblxuICAvLyBJZiAwIGRheXMsIG5vLW9wIHRvIGF2b2lkIGNoYW5naW5nIHRpbWVzIGluIHRoZSBob3VyIGJlZm9yZSBlbmQgb2YgRFNUXG4gIGlmICghYW1vdW50KSByZXR1cm4gX2RhdGU7XG5cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBhbW91bnQpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkRGF5cztcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGFkZE1pbGxpc2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICt0b0RhdGUoZGF0ZSkgKyBhbW91bnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZE1pbGxpc2Vjb25kcztcbiIsImltcG9ydCB7IGFkZE1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2FkZE1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGRIb3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgaG91cnMgdG8gYmUgYWRkZWRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMiBob3VycyB0byAxMCBKdWx5IDIwMTQgMjM6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMjMsIDApLCAyKVxuICogLy89PiBGcmkgSnVsIDExIDIwMTQgMDE6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luSG91ciwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkSG91cnM7XG4iLCJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgZnVsbCBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbCBkYXkgcGVyaW9kcyBiZXR3ZWVuIHR3byBkYXRlcy4gRnJhY3Rpb25hbCBkYXlzIGFyZVxuICogdHJ1bmNhdGVkIHRvd2FyZHMgemVyby5cbiAqXG4gKiBPbmUgXCJmdWxsIGRheVwiIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgbG9jYWwgdGltZSBpbiBvbmUgZGF5IHRvIHRoZSBzYW1lXG4gKiBsb2NhbCB0aW1lIG9uIHRoZSBuZXh0IG9yIHByZXZpb3VzIGRheS4gQSBmdWxsIGRheSBjYW4gc29tZXRpbWVzIGJlIGxlc3MgdGhhblxuICogb3IgbW9yZSB0aGFuIDI0IGhvdXJzIGlmIGEgZGF5bGlnaHQgc2F2aW5ncyBjaGFuZ2UgaGFwcGVucyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAqXG4gKiBUbyBpZ25vcmUgRFNUIGFuZCBvbmx5IG1lYXN1cmUgZXhhY3QgMjQtaG91ciBwZXJpb2RzLCB1c2UgdGhpcyBpbnN0ZWFkOlxuICogYE1hdGgudHJ1bmMoZGlmZmVyZW5jZUluSG91cnMoZGF0ZUxlZnQsIGRhdGVSaWdodCkvMjQpfDBgLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIGRheXMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCB0aW1lem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6NTk6MDAgYW5kIDMgSnVseSAyMDExIDAwOjAxOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDEgTWFyY2ggMjAyMCAwOjAwIGFuZCAxIEp1bmUgMjAyMCAwOjAwID9cbiAqIC8vIE5vdGU6IGJlY2F1c2UgbG9jYWwgdGltZSBpcyB1c2VkLCB0aGVcbiAqIC8vIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSA5MiBkYXlzLCBldmVuIGluXG4gKiAvLyB0aW1lIHpvbmVzIHdoZXJlIERTVCBzdGFydHMgYW5kIHRoZVxuICogLy8gcGVyaW9kIGhhcyBvbmx5IDkyKjI0LTEgaG91cnMuXG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDIwLCA1LCAxKSxcbiAqICAgbmV3IERhdGUoMjAyMCwgMiwgMSlcbiAqIClcbiAqIC8vPT4gOTJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkRheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBzaWduID0gY29tcGFyZUxvY2FsQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhcbiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSxcbiAgKTtcblxuICBsYXRlckRhdGVfLnNldERhdGUobGF0ZXJEYXRlXy5nZXREYXRlKCkgLSBzaWduICogZGlmZmVyZW5jZSk7XG5cbiAgLy8gTWF0aC5hYnMoZGlmZiBpbiBmdWxsIGRheXMgLSBkaWZmIGluIGNhbGVuZGFyIGRheXMpID09PSAxIGlmIGxhc3QgY2FsZW5kYXIgZGF5IGlzIG5vdCBmdWxsXG4gIC8vIElmIHNvLCByZXN1bHQgbXVzdCBiZSBkZWNyZWFzZWQgYnkgMSBpbiBhYnNvbHV0ZSB2YWx1ZVxuICBjb25zdCBpc0xhc3REYXlOb3RGdWxsID0gTnVtYmVyKFxuICAgIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbixcbiAgKTtcblxuICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmZlcmVuY2UgLSBpc0xhc3REYXlOb3RGdWxsKTtcbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBMaWtlIGBjb21wYXJlQXNjYCBidXQgdXNlcyBsb2NhbCB0aW1lIG5vdCBVVEMsIHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFjY3VyYXRlIGVxdWFsaXR5IGNvbXBhcmlzb25zIG9mIFVUQyB0aW1lc3RhbXBzIHRoYXQgZW5kIHVwXG4vLyBoYXZpbmcgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gaW4gbG9jYWwgdGltZSwgZS5nLiBvbmUgaG91ciBiZWZvcmVcbi8vIERTVCBlbmRzIHZzLiB0aGUgaW5zdGFudCB0aGF0IERTVCBlbmRzLlxuZnVuY3Rpb24gY29tcGFyZUxvY2FsQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHtcbiAgY29uc3QgZGlmZiA9XG4gICAgbGF0ZXJEYXRlLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZS5nZXRGdWxsWWVhcigpIHx8XG4gICAgbGF0ZXJEYXRlLmdldE1vbnRoKCkgLSBlYXJsaWVyRGF0ZS5nZXRNb250aCgpIHx8XG4gICAgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRIb3VycygpIC0gZWFybGllckRhdGUuZ2V0SG91cnMoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNaW51dGVzKCkgLSBlYXJsaWVyRGF0ZS5nZXRNaW51dGVzKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8XG4gICAgbGF0ZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG5cbiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7XG4gIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZGlmZiBpcyAwOyByZXR1cm4gTmFOIGlmIGRpZmYgaXMgTmFOXG4gIHJldHVybiBkaWZmO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkRheXM7XG4iLCJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5Ib3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaG91cnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgaG91cnMgYXJlIGJldHdlZW4gMiBKdWx5IDIwMTQgMDY6NTA6MDAgYW5kIDIgSnVseSAyMDE0IDE5OjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluSG91cnMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE5LCAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgNiwgNTApXG4gKiApXG4gKiAvLz0+IDEyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7XG4gIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluSG91cnM7XG4iLCJpbXBvcnQgeyBhZGREYXlzIH0gZnJvbSBcIi4vYWRkRGF5cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3ViRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgc3VidHJhY3RlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMTAgZGF5cyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJEYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gRnJpIEF1ZyAyMiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gYWRkRGF5cyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJEYXlzO1xuIiwiaW1wb3J0IHtcbiAgbWlsbGlzZWNvbmRzSW5Ib3VyLFxuICBtaWxsaXNlY29uZHNJbk1pbnV0ZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwYXJzZUlTT30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHBhcnNlSVNPXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIElTTyBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzbid0IGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3JcbiAqIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gYXJndW1lbnQgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcrMDIwMTQxMDEnLCB7IGFkZGl0aW9uYWxEaWdpdHM6IDEgfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTTyhhcmd1bWVudCwgb3B0aW9ucykge1xuICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIE5hTik7XG5cbiAgY29uc3QgYWRkaXRpb25hbERpZ2l0cyA9IG9wdGlvbnM/LmFkZGl0aW9uYWxEaWdpdHMgPz8gMjtcbiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpO1xuXG4gIGxldCBkYXRlO1xuICBpZiAoZGF0ZVN0cmluZ3MuZGF0ZSkge1xuICAgIGNvbnN0IHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpO1xuICB9XG5cbiAgaWYgKCFkYXRlIHx8IGlzTmFOKCtkYXRlKSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG5cbiAgY29uc3QgdGltZXN0YW1wID0gK2RhdGU7XG4gIGxldCB0aW1lID0gMDtcbiAgbGV0IG9mZnNldDtcblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7XG4gICAgaWYgKGlzTmFOKHRpbWUpKSByZXR1cm4gaW52YWxpZERhdGUoKTtcbiAgfVxuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSkge1xuICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpO1xuICAgIGlmIChpc05hTihvZmZzZXQpKSByZXR1cm4gaW52YWxpZERhdGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoXG4gICAgICB0bXBEYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ0RhdGUoKSxcbiAgICApO1xuICAgIHJlc3VsdC5zZXRIb3VycyhcbiAgICAgIHRtcERhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiB0b0RhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldCwgb3B0aW9ucz8uaW4pO1xufVxuXG5jb25zdCBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG59O1xuXG5jb25zdCBkYXRlUmVnZXggPVxuICAvXi0/KD86KFxcZHszfSl8KFxcZHsyfSkoPzotPyhcXGR7Mn0pKT98VyhcXGR7Mn0pKD86LT8oXFxkezF9KSk/fCkkLztcbmNvbnN0IHRpbWVSZWdleCA9XG4gIC9eKFxcZHsyfSg/OlsuLF1cXGQqKT8pKD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8kLztcbmNvbnN0IHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0ge307XG4gIGNvbnN0IGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltaXRlcik7XG4gIGxldCB0aW1lU3RyaW5nO1xuXG4gIC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG4gIGlmIChhcnJheS5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGRhdGVTdHJpbmdzO1xuICB9XG5cbiAgaWYgKC86Ly50ZXN0KGFycmF5WzBdKSkge1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF07XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdO1xuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlcilbMF07XG4gICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoXG4gICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLFxuICAgICAgICBkYXRlU3RyaW5nLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCBcIlwiKTtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5ncztcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OihcXFxcZHs0fXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDQgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pfChcXFxcZHsyfXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pJClcIixcbiAgKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2gocmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiBcIlwiIH07XG5cbiAgY29uc3QgeWVhciA9IGNhcHR1cmVzWzFdID8gcGFyc2VJbnQoY2FwdHVyZXNbMV0pIDogbnVsbDtcbiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDtcblxuICAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG4gIHJldHVybiB7XG4gICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLFxuICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKChjYXB0dXJlc1sxXSB8fCBjYXB0dXJlc1syXSkubGVuZ3RoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdO1xuICBjb25zdCBkYXlPZlllYXIgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzFdKTtcbiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pO1xuICBjb25zdCB3ZWVrID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1s0XSk7XG4gIGNvbnN0IGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgaWYgKFxuICAgICAgIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fFxuICAgICAgIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IHBhcnNlSW50KHZhbHVlKSA6IDE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7XG4gIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gTmFOOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzJdKTtcbiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDEwMDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZShcIixcIiwgXCIuXCIpKSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykge1xuICBpZiAodGltZXpvbmVTdHJpbmcgPT09IFwiWlwiKSByZXR1cm4gMDtcblxuICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gMDtcblxuICBjb25zdCBzaWduID0gY2FwdHVyZXNbMV0gPT09IFwiK1wiID8gLTEgOiAxO1xuICBjb25zdCBob3VycyA9IHBhcnNlSW50KGNhcHR1cmVzWzJdKTtcbiAgY29uc3QgbWludXRlcyA9IChjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkpIHx8IDA7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7XG4gIGNvbnN0IGRpZmYgPSAod2VlayAtIDEpICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5jb25zdCBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBtb250aCA+PSAwICYmXG4gICAgbW9udGggPD0gMTEgJiZcbiAgICBkYXRlID49IDEgJiZcbiAgICBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAyOSA6IDI4KSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHNlY29uZHMgPj0gMCAmJlxuICAgIHNlY29uZHMgPCA2MCAmJlxuICAgIG1pbnV0ZXMgPj0gMCAmJlxuICAgIG1pbnV0ZXMgPCA2MCAmJlxuICAgIGhvdXJzID49IDAgJiZcbiAgICBob3VycyA8IDI1XG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoX2hvdXJzLCBtaW51dGVzKSB7XG4gIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwYXJzZUlTTztcbiIsImltcG9ydCB7IGFkZEhvdXJzIH0gZnJvbSBcIi4vYWRkSG91cnMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YkhvdXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3ViSG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGhvdXJzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGhvdXJzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMiBob3VycyBmcm9tIDExIEp1bHkgMjAxNCAwMTowMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YkhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDExLCAxLCAwKSwgMilcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDIzOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJIb3VycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YkhvdXJzO1xuIiwiaW1wb3J0IHtcbiAgaTE4bkR1cmF0aW9uRGF5LFxuICBpMThuRHVyYXRpb25Ib3VyLFxuICBpMThuRHVyYXRpb25NaW51dGUsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUuanMnO1xuaW1wb3J0IHtcbiAgYWRkTWludXRlcyxcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZGlmZmVyZW5jZUluSG91cnMsXG4gIGRpZmZlcmVuY2VJbk1pbnV0ZXMsXG4gIGlzVmFsaWQsXG4gIHBhcnNlSVNPLFxuICBzdWJEYXlzLFxuICBzdWJIb3Vycyxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgb2Zmc2V0IG9mIGEgSVNPIGRhdGUgc3RyaW5nLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldCBpcyBpZ25vcmVkLlxuICogSWYgaXQgaXMgbm90IHJlbW92ZWQgdGhlIHRpbWUgd291bGQgYmUgY29udmVydGVkIHRvIHRoZSBicm93c2VycyBsb2NhbCB0aW1lLlxuICogRXhhbXBsZTogXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAzOjAwXCIgd291bGQgYmUgY2hhbmdlZCB0byBcIjIwMjItMDgtMjlUMDg6MzA6MDArMDI6MDBcIiAtLT4gbm90IHRoZSBkZXNpcmVkIG91dGNvbWUsIGFzIHdlIHdhbnQgdG8gdXNlIHRoZSB0aW1lIGluIHRoZSB0aW1lem9uZSBhbmQgbm90IHRoZSBsb2NhbCB0aW1lLlxuICpcbiAqIEFmdGVyIHRoZSBvZmZzZXQgaXMgcmVtb3ZlZCBhIG5ldyBkYXRlIGlzIGNyZWF0ZWQgaW4gdGhlIGJyb3dzZXJzIGxvY2FsIHRpbWUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB0aW1lIG9mIHRoZSBJU08gZGF0ZSBzdHJpbmcgaXMgZGlzcGxheWVkIGFuZCBub3QgYSBjb252ZXJ0ZWQgdGltZS5cbiAqIEV4YW1wbGU6IFwiMjAyMi0wOC0yOVQwOTozMDowMCswMzowMFwiIHdvdWxkIGJlIGNoYW5nZWQgdG8gXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAyOjAwXCIgLS0+IGRlc2lyZWQgb3V0Y29tZVxuICogQXR0ZW50aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhlIGNvcnJlY3QgdGltZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuIEl0IGlzIGEgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUsIHRoYXQgdGhlIGdpdmVuIHRpbWUgaXMgZGlzcGxheWVkIHdpdGhvdXQgYmVpbmcgY29udmVydGVkLlxuICpcbiAqIE9mZnNldDogRGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lem9uZSBhbmQgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUuXG4gKlxuICogQHBhcmFtIGlzb1RpbWUgLSB0aGUgaXNvIHRpbWUgd2l0aCB0aGUgdGltZXpvbmUgb2Zmc2V0XG4gKiBAcmV0dXJucyBhIG5ldyBkYXRlIHdpdGggdGhlIGxvY2FsIHRpbWV6b25lIHdpdGggdGhlIGxvY2FsIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhpc29UaW1lPzogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNvVGltZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlSVNPKGlzb1RpbWUpO1xuXG4gIGlmICghaXNWYWxpZChwYXJzZWREYXRlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnWicpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGlzb1RpbWUucmVwbGFjZSgnWicsICcnKSk7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnVCcpKSB7XG4gICAgY29uc3QgZGF0ZVRpbWUgPSBpc29UaW1lLnNwbGl0KCdUJyk7XG5cbiAgICBpZiAoZGF0ZVRpbWVbMV0gJiYgKGRhdGVUaW1lWzFdLmluY2x1ZGVzKCcrJykgfHwgZGF0ZVRpbWVbMV0uaW5jbHVkZXMoJy0nKSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShgJHtkYXRlVGltZVswXX1UJHtkYXRlVGltZVsxXS5zcGxpdCgvWystXS8pWzBdfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IERhdGUoaXNvVGltZSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIGR1cmF0aW9uIG51bWJlciB0byBkYXRlIHN0cmluZyB3aXRoIHNwZWNpZmljIGZvcm1hdFxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIGR1cmF0aW9uIGluIG1pbnV0ZXNcbiAqIEBwYXJhbSBjdXJyZW50TGFuZ3VhZ2UgLSBjdXJyZW50TGFuZ3VhZ2VcbiAqIEByZXR1cm5zIGFuIE9iamVjdCB3aXRoIHR3byBzdHJpbmdzIGluIHRoZSBmb3JtYXQgXCJkZCBoaCBtbVwiIChzaG9ydCkgYW4gXCJ4IERheShzKSB4IEhvdXIocykgeCBNaW51dGUocykgKGxvbmcpXCJcbiAqICovXG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblRvVGltZSA9IChcbiAgZHVyYXRpb246IG51bWJlcixcbiAgY3VycmVudExhbmd1YWdlPzogc3RyaW5nLFxuKTogeyBzaG9ydDogc3RyaW5nOyBsb25nOiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHNob3J0ID0gW107XG4gIGNvbnN0IGxvbmcgPSBbXTtcblxuICBjb25zdCBub3cgPSAwO1xuICBsZXQgZnV0dXJlID0gYWRkTWludXRlcyhub3csIGR1cmF0aW9uKTtcblxuICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhmdXR1cmUsIG5vdyk7XG4gIGlmIChkYXlzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7ZGF5c30gZGApO1xuICAgIGlmIChjdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIGxvbmcucHVzaChcbiAgICAgICAgYCR7ZGF5c30gJHtcbiAgICAgICAgICBkYXlzID4gMVxuICAgICAgICAgICAgPyBpMThuRHVyYXRpb25EYXkubXVsdGlwbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IGkxOG5EdXJhdGlvbkRheS5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViRGF5cyhmdXR1cmUsIGRheXMpO1xuICB9XG5cbiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhmdXR1cmUsIG5vdyk7XG4gIGlmIChob3VycyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke2hvdXJzfSBoYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHtob3Vyc30gJHtcbiAgICAgICAgICBob3VycyA+IDFcbiAgICAgICAgICAgID8gaTE4bkR1cmF0aW9uSG91ci5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uSG91ci5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViSG91cnMoZnV0dXJlLCBob3Vycyk7XG4gIH1cblxuICBjb25zdCBtaW51dGVzID0gZGlmZmVyZW5jZUluTWludXRlcyhmdXR1cmUsIG5vdyk7XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7bWludXRlc30gbWluYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHttaW51dGVzfSAke1xuICAgICAgICAgIG1pbnV0ZXMgPiAxXG4gICAgICAgICAgICA/IGkxOG5EdXJhdGlvbk1pbnV0ZS5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uTWludXRlLnNpbmdsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2hvcnQ6IHNob3J0LmpvaW4oJyAnKSxcbiAgICBsb25nOiBsb25nLmpvaW4oJyAnKSxcbiAgfTtcbn07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsN10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsU0FBZ0IsUUFBUSxNQUFNLFFBQVEsU0FBUztDQUM3QyxNQUFNLFFBQVEsT0FBTyxNQUFNLFNBQVMsR0FBRztBQUN2QyxLQUFJLE1BQU0sT0FBTyxDQUFFLFFBQU8sY0FBYyxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBR2pFLEtBQUksQ0FBQyxPQUFRLFFBQU87QUFFcEIsT0FBTSxRQUFRLE1BQU0sU0FBUyxHQUFHLE9BQU87QUFDdkMsUUFBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSVCxTQUFnQixnQkFBZ0IsTUFBTSxRQUFRLFNBQVM7QUFDckQsUUFBTyxjQUFjLFNBQVMsTUFBTSxNQUFNLENBQUMsT0FBTyxLQUFLLEdBQUcsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEbkUsU0FBZ0IsU0FBUyxNQUFNLFFBQVEsU0FBUztBQUM5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
|