@esotericsoftware/spine-core 4.3.4 → 4.3.6

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/dist/Animation.js CHANGED
@@ -100,17 +100,14 @@ export class Animation {
100
100
  * @param loop True if `time` beyond the {@link duration} repeats the animation, else the last frame is used.
101
101
  * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire
102
102
  * events.
103
- * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and
104
- * intermediate values interpolate between them. Adjusting `alpha` over time can mix an animation in or
105
- * out.
106
- * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before the
107
- * first frame (current values are not used). If false, `alpha` transitions between current and timeline
108
- * values, no change is made before the first frame.
103
+ * @param alpha 0 applies setup or current values (depending on `from`), 1 uses timeline values, and intermediate
104
+ * values interpolate between them. Adjusting `alpha` over time can mix an animation in or out.
105
+ * @param from Controls how `alpha` and `add` mix from current or setup pose values to timeline values.
109
106
  * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on
110
- * `fromSetup`).
107
+ * `from`).
111
108
  * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions.
112
109
  * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */
113
- apply(skeleton, lastTime, time, loop, events, alpha, fromSetup, add, out, appliedPose) {
110
+ apply(skeleton, lastTime, time, loop, events, alpha, from, add, out, appliedPose) {
114
111
  if (!skeleton)
115
112
  throw new Error("skeleton cannot be null.");
116
113
  if (loop && this.duration !== 0) {
@@ -120,9 +117,22 @@ export class Animation {
120
117
  }
121
118
  const timelines = this.timelines;
122
119
  for (let i = 0, n = timelines.length; i < n; i++)
123
- timelines[i].apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose);
120
+ timelines[i].apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose);
124
121
  }
125
122
  }
123
+ /** Controls whether `alpha` and `add` mix from current or setup pose values and what happens before the
124
+ * first key.
125
+ *
126
+ * See {@link Timeline.apply}. */
127
+ export var MixFrom;
128
+ (function (MixFrom) {
129
+ /** Alpha mixes from the current pose. Before the first key, no change is made. */
130
+ MixFrom[MixFrom["current"] = 0] = "current";
131
+ /** Alpha mixes from the setup pose. Before the first key, the setup pose is used. */
132
+ MixFrom[MixFrom["setup"] = 1] = "setup";
133
+ /** Alpha mixes from the current pose. Before the first key, alpha mixes from the current pose to the setup pose. */
134
+ MixFrom[MixFrom["first"] = 2] = "first";
135
+ })(MixFrom || (MixFrom = {}));
126
136
  export var Property;
127
137
  (function (Property) {
128
138
  Property[Property["rotate"] = 0] = "rotate";
@@ -140,22 +150,23 @@ export var Property;
140
150
  Property[Property["deform"] = 12] = "deform";
141
151
  Property[Property["event"] = 13] = "event";
142
152
  Property[Property["drawOrder"] = 14] = "drawOrder";
143
- Property[Property["ikConstraint"] = 15] = "ikConstraint";
144
- Property[Property["transformConstraint"] = 16] = "transformConstraint";
145
- Property[Property["pathConstraintPosition"] = 17] = "pathConstraintPosition";
146
- Property[Property["pathConstraintSpacing"] = 18] = "pathConstraintSpacing";
147
- Property[Property["pathConstraintMix"] = 19] = "pathConstraintMix";
148
- Property[Property["physicsConstraintInertia"] = 20] = "physicsConstraintInertia";
149
- Property[Property["physicsConstraintStrength"] = 21] = "physicsConstraintStrength";
150
- Property[Property["physicsConstraintDamping"] = 22] = "physicsConstraintDamping";
151
- Property[Property["physicsConstraintMass"] = 23] = "physicsConstraintMass";
152
- Property[Property["physicsConstraintWind"] = 24] = "physicsConstraintWind";
153
- Property[Property["physicsConstraintGravity"] = 25] = "physicsConstraintGravity";
154
- Property[Property["physicsConstraintMix"] = 26] = "physicsConstraintMix";
155
- Property[Property["physicsConstraintReset"] = 27] = "physicsConstraintReset";
156
- Property[Property["sequence"] = 28] = "sequence";
157
- Property[Property["sliderTime"] = 29] = "sliderTime";
158
- Property[Property["sliderMix"] = 30] = "sliderMix";
153
+ Property[Property["drawOrderFolder"] = 15] = "drawOrderFolder";
154
+ Property[Property["ikConstraint"] = 16] = "ikConstraint";
155
+ Property[Property["transformConstraint"] = 17] = "transformConstraint";
156
+ Property[Property["pathConstraintPosition"] = 18] = "pathConstraintPosition";
157
+ Property[Property["pathConstraintSpacing"] = 19] = "pathConstraintSpacing";
158
+ Property[Property["pathConstraintMix"] = 20] = "pathConstraintMix";
159
+ Property[Property["physicsConstraintInertia"] = 21] = "physicsConstraintInertia";
160
+ Property[Property["physicsConstraintStrength"] = 22] = "physicsConstraintStrength";
161
+ Property[Property["physicsConstraintDamping"] = 23] = "physicsConstraintDamping";
162
+ Property[Property["physicsConstraintMass"] = 24] = "physicsConstraintMass";
163
+ Property[Property["physicsConstraintWind"] = 25] = "physicsConstraintWind";
164
+ Property[Property["physicsConstraintGravity"] = 26] = "physicsConstraintGravity";
165
+ Property[Property["physicsConstraintMix"] = 27] = "physicsConstraintMix";
166
+ Property[Property["physicsConstraintReset"] = 28] = "physicsConstraintReset";
167
+ Property[Property["sequence"] = 29] = "sequence";
168
+ Property[Property["sliderTime"] = 30] = "sliderTime";
169
+ Property[Property["sliderMix"] = 31] = "sliderMix";
159
170
  })(Property || (Property = {}));
160
171
  /** The base class for all timelines.
161
172
  *
@@ -164,7 +175,9 @@ export var Property;
164
175
  export class Timeline {
165
176
  propertyIds;
166
177
  frames;
167
- /** True if this timeline supports additive blending. */
178
+ /** True if this timeline supports being applied additively.
179
+ *
180
+ * See the `add` parameter in {@link Timeline.apply}. */
168
181
  additive = false;
169
182
  /** True if this timeline sets values instantaneously and does not support interpolation between frames. */
170
183
  instant = false;
@@ -327,41 +340,43 @@ export class CurveTimeline1 extends CurveTimeline {
327
340
  * See {@link Timeline.apply}.
328
341
  * @param current The current value for the property.
329
342
  * @param setup The setup value for the property. */
330
- getRelativeValue(time, alpha, fromSetup, add, current, setup) {
343
+ getRelativeValue(time, alpha, from, add, current, setup) {
331
344
  if (time < this.frames[0])
332
- return fromSetup ? setup : current;
345
+ return CurveTimeline1.beforeFirstKey(from, alpha, current, setup);
333
346
  const value = this.getCurveValue(time);
334
- return fromSetup ? setup + value * alpha : current + (add ? value : value + setup - current) * alpha;
347
+ return from === MixFrom.setup ? setup + value * alpha : current + (add ? value : value + setup - current) * alpha;
335
348
  }
336
- getAbsoluteValue(time, alpha, fromSetup, add, current, setup, value) {
349
+ getAbsoluteValue(time, alpha, from, add, current, setup, value) {
337
350
  if (value === undefined)
338
- return this.getAbsoluteValue1(time, alpha, fromSetup, add, current, setup);
351
+ return this.getAbsoluteValue1(time, alpha, from, add, current, setup);
339
352
  else
340
- return this.getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value);
353
+ return this.getAbsoluteValue2(time, alpha, from, add, current, setup, value);
341
354
  }
342
- getAbsoluteValue1(time, alpha, fromSetup, add, current, setup) {
355
+ getAbsoluteValue1(time, alpha, from, add, current, setup) {
343
356
  if (time < this.frames[0])
344
- return fromSetup ? setup : current;
357
+ return CurveTimeline1.beforeFirstKey(from, alpha, current, setup);
345
358
  const value = this.getCurveValue(time);
346
- return fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;
359
+ return from === MixFrom.setup ? setup + (add ? value : value - setup) * alpha
360
+ : current + (add ? value : value - current) * alpha;
347
361
  }
348
- getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value) {
362
+ getAbsoluteValue2(time, alpha, from, add, current, setup, value) {
349
363
  if (time < this.frames[0])
350
- return fromSetup ? setup : current;
351
- return fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;
364
+ return CurveTimeline1.beforeFirstKey(from, alpha, current, setup);
365
+ return from === MixFrom.setup ? setup + (add ? value : value - setup) * alpha
366
+ : current + (add ? value : value - current) * alpha;
352
367
  }
353
368
  /** Returns the interpolated value for scale properties. The timeline and setup values are multiplied and sign adjusted.
354
369
  *
355
370
  * See {@link Timeline.apply}.
356
371
  * @param current The current value for the property.
357
372
  * @param setup The setup value for the property. */
358
- getScaleValue(time, alpha, fromSetup, add, out, current, setup) {
373
+ getScaleValue(time, alpha, from, add, out, current, setup) {
359
374
  if (time < this.frames[0])
360
- return fromSetup ? setup : current;
375
+ return CurveTimeline1.beforeFirstKey(from, alpha, current, setup);
361
376
  const value = this.getCurveValue(time) * setup;
362
377
  if (alpha === 1 && !add)
363
378
  return value;
364
- let base = fromSetup ? setup : current;
379
+ let base = from === MixFrom.setup ? setup : current;
365
380
  if (add)
366
381
  return base + (value - setup) * alpha;
367
382
  if (out)
@@ -369,6 +384,13 @@ export class CurveTimeline1 extends CurveTimeline {
369
384
  base = Math.abs(base) * Math.sign(value);
370
385
  return base + (value - base) * alpha;
371
386
  }
387
+ static beforeFirstKey(from, alpha, current, setup) {
388
+ switch (from) {
389
+ case MixFrom.setup: return setup;
390
+ case MixFrom.first: return current + (setup - current) * alpha;
391
+ case MixFrom.current: return current;
392
+ }
393
+ }
372
394
  }
373
395
  export function isBoneTimeline(obj) {
374
396
  return typeof obj === 'object' && obj !== null && typeof obj.boneIndex === 'number';
@@ -381,10 +403,10 @@ export class BoneTimeline1 extends CurveTimeline1 {
381
403
  this.boneIndex = boneIndex;
382
404
  this.additive = true;
383
405
  }
384
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
406
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
385
407
  const bone = skeleton.bones[this.boneIndex];
386
408
  if (bone.active)
387
- this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);
409
+ this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, from, add, out);
388
410
  }
389
411
  }
390
412
  /** The base class for timelines that change two bone properties with a curve. */
@@ -409,10 +431,10 @@ export class BoneTimeline2 extends CurveTimeline {
409
431
  this.frames[frame + 1 /*VALUE1*/] = value1;
410
432
  this.frames[frame + 2 /*VALUE2*/] = value2;
411
433
  }
412
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
434
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
413
435
  const bone = skeleton.bones[this.boneIndex];
414
436
  if (bone.active)
415
- this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);
437
+ this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, from, add, out);
416
438
  }
417
439
  }
418
440
  /** Changes {@link BonePose.rotation}. */
@@ -420,8 +442,8 @@ export class RotateTimeline extends BoneTimeline1 {
420
442
  constructor(frameCount, bezierCount, boneIndex) {
421
443
  super(frameCount, bezierCount, boneIndex, Property.rotate);
422
444
  }
423
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
424
- pose.rotation = this.getRelativeValue(time, alpha, fromSetup, add, pose.rotation, setup.rotation);
445
+ apply1(pose, setup, time, alpha, from, add, out) {
446
+ pose.rotation = this.getRelativeValue(time, alpha, from, add, pose.rotation, setup.rotation);
425
447
  }
426
448
  }
427
449
  /** Changes {@link BonePose.x} and {@link BonePose.y}. */
@@ -429,12 +451,18 @@ export class TranslateTimeline extends BoneTimeline2 {
429
451
  constructor(frameCount, bezierCount, boneIndex) {
430
452
  super(frameCount, bezierCount, boneIndex, Property.x, Property.y);
431
453
  }
432
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
454
+ apply1(pose, setup, time, alpha, from, add, out) {
433
455
  const frames = this.frames;
434
456
  if (time < frames[0]) {
435
- if (fromSetup) {
436
- pose.x = setup.x;
437
- pose.y = setup.y;
457
+ switch (from) {
458
+ case MixFrom.setup:
459
+ pose.x = setup.x;
460
+ pose.y = setup.y;
461
+ break;
462
+ case MixFrom.first:
463
+ pose.x += (setup.x - pose.x) * alpha;
464
+ pose.y += (setup.y - pose.y) * alpha;
465
+ break;
438
466
  }
439
467
  return;
440
468
  }
@@ -459,7 +487,7 @@ export class TranslateTimeline extends BoneTimeline2 {
459
487
  x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);
460
488
  y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
461
489
  }
462
- if (fromSetup) {
490
+ if (from === MixFrom.setup) {
463
491
  pose.x = setup.x + x * alpha;
464
492
  pose.y = setup.y + y * alpha;
465
493
  }
@@ -478,8 +506,8 @@ export class TranslateXTimeline extends BoneTimeline1 {
478
506
  constructor(frameCount, bezierCount, boneIndex) {
479
507
  super(frameCount, bezierCount, boneIndex, Property.x);
480
508
  }
481
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
482
- pose.x = this.getRelativeValue(time, alpha, fromSetup, add, pose.x, setup.x);
509
+ apply1(pose, setup, time, alpha, from, add, out) {
510
+ pose.x = this.getRelativeValue(time, alpha, from, add, pose.x, setup.x);
483
511
  }
484
512
  }
485
513
  /** Changes {@link BonePose.y}. */
@@ -487,8 +515,8 @@ export class TranslateYTimeline extends BoneTimeline1 {
487
515
  constructor(frameCount, bezierCount, boneIndex) {
488
516
  super(frameCount, bezierCount, boneIndex, Property.y);
489
517
  }
490
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
491
- pose.y = this.getRelativeValue(time, alpha, fromSetup, add, pose.y, setup.y);
518
+ apply1(pose, setup, time, alpha, from, add, out) {
519
+ pose.y = this.getRelativeValue(time, alpha, from, add, pose.y, setup.y);
492
520
  }
493
521
  }
494
522
  /** Changes {@link BonePose.scaleX} and {@link BonePose.scaleY}. */
@@ -496,12 +524,18 @@ export class ScaleTimeline extends BoneTimeline2 {
496
524
  constructor(frameCount, bezierCount, boneIndex) {
497
525
  super(frameCount, bezierCount, boneIndex, Property.scaleX, Property.scaleY);
498
526
  }
499
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
527
+ apply1(pose, setup, time, alpha, from, add, out) {
500
528
  const frames = this.frames;
501
529
  if (time < frames[0]) {
502
- if (fromSetup) {
503
- pose.scaleX = setup.scaleX;
504
- pose.scaleY = setup.scaleY;
530
+ switch (from) {
531
+ case MixFrom.setup:
532
+ pose.scaleX = setup.scaleX;
533
+ pose.scaleY = setup.scaleY;
534
+ break;
535
+ case MixFrom.first:
536
+ pose.scaleX += (setup.scaleX - pose.scaleX) * alpha;
537
+ pose.scaleY += (setup.scaleY - pose.scaleY) * alpha;
538
+ break;
505
539
  }
506
540
  return;
507
541
  }
@@ -534,7 +568,7 @@ export class ScaleTimeline extends BoneTimeline2 {
534
568
  }
535
569
  else {
536
570
  let bx = 0, by = 0;
537
- if (fromSetup) {
571
+ if (from === MixFrom.setup) {
538
572
  bx = setup.scaleX;
539
573
  by = setup.scaleY;
540
574
  }
@@ -564,8 +598,8 @@ export class ScaleXTimeline extends BoneTimeline1 {
564
598
  constructor(frameCount, bezierCount, boneIndex) {
565
599
  super(frameCount, bezierCount, boneIndex, Property.scaleX);
566
600
  }
567
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
568
- pose.scaleX = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleX, setup.scaleX);
601
+ apply1(pose, setup, time, alpha, from, add, out) {
602
+ pose.scaleX = this.getScaleValue(time, alpha, from, add, out, pose.scaleX, setup.scaleX);
569
603
  }
570
604
  }
571
605
  /** Changes a {@link BonePose.scaleY}. */
@@ -573,8 +607,8 @@ export class ScaleYTimeline extends BoneTimeline1 {
573
607
  constructor(frameCount, bezierCount, boneIndex) {
574
608
  super(frameCount, bezierCount, boneIndex, Property.scaleY);
575
609
  }
576
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
577
- pose.scaleY = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleY, setup.scaleY);
610
+ apply1(pose, setup, time, alpha, from, add, out) {
611
+ pose.scaleY = this.getScaleValue(time, alpha, from, add, out, pose.scaleY, setup.scaleY);
578
612
  }
579
613
  }
580
614
  /** Changes {@link Bone.shearX} and {@link Bone.shearY}. */
@@ -582,12 +616,18 @@ export class ShearTimeline extends BoneTimeline2 {
582
616
  constructor(frameCount, bezierCount, boneIndex) {
583
617
  super(frameCount, bezierCount, boneIndex, Property.shearX, Property.shearY);
584
618
  }
585
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
619
+ apply1(pose, setup, time, alpha, from, add, out) {
586
620
  const frames = this.frames;
587
621
  if (time < frames[0]) {
588
- if (fromSetup) {
589
- pose.shearX = setup.shearX;
590
- pose.shearY = setup.shearY;
622
+ switch (from) {
623
+ case MixFrom.setup:
624
+ pose.shearX = setup.shearX;
625
+ pose.shearY = setup.shearY;
626
+ break;
627
+ case MixFrom.first:
628
+ pose.shearX += (setup.shearX - pose.shearX) * alpha;
629
+ pose.shearY += (setup.shearY - pose.shearY) * alpha;
630
+ break;
591
631
  }
592
632
  return;
593
633
  }
@@ -612,7 +652,7 @@ export class ShearTimeline extends BoneTimeline2 {
612
652
  x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);
613
653
  y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
614
654
  }
615
- if (fromSetup) {
655
+ if (from === MixFrom.setup) {
616
656
  pose.shearX = setup.shearX + x * alpha;
617
657
  pose.shearY = setup.shearY + y * alpha;
618
658
  }
@@ -631,8 +671,8 @@ export class ShearXTimeline extends BoneTimeline1 {
631
671
  constructor(frameCount, bezierCount, boneIndex) {
632
672
  super(frameCount, bezierCount, boneIndex, Property.shearX);
633
673
  }
634
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
635
- pose.shearX = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearX, setup.shearX);
674
+ apply1(pose, setup, time, alpha, from, add, out) {
675
+ pose.shearX = this.getRelativeValue(time, alpha, from, add, pose.shearX, setup.shearX);
636
676
  }
637
677
  }
638
678
  /** Changes {@link Bone.shearX} and {@link Bone.shearY}. */
@@ -640,8 +680,8 @@ export class ShearYTimeline extends BoneTimeline1 {
640
680
  constructor(frameCount, bezierCount, boneIndex) {
641
681
  super(frameCount, bezierCount, boneIndex, Property.shearY);
642
682
  }
643
- apply1(pose, setup, time, alpha, fromSetup, add, out) {
644
- pose.shearY = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearY, setup.shearY);
683
+ apply1(pose, setup, time, alpha, from, add, out) {
684
+ pose.shearY = this.getRelativeValue(time, alpha, from, add, pose.shearY, setup.shearY);
645
685
  }
646
686
  }
647
687
  /** Changes {@link BonePose.inherit}. */
@@ -663,19 +703,19 @@ export class InheritTimeline extends Timeline {
663
703
  this.frames[frame] = time;
664
704
  this.frames[frame + 1 /*INHERIT*/] = inherit;
665
705
  }
666
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
706
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
667
707
  const bone = skeleton.bones[this.boneIndex];
668
708
  if (!bone.active)
669
709
  return;
670
710
  const pose = appliedPose ? bone.appliedPose : bone.pose;
671
711
  if (out) {
672
- if (fromSetup)
712
+ if (from !== MixFrom.current)
673
713
  pose.inherit = bone.data.setupPose.inherit;
674
714
  }
675
715
  else {
676
716
  const frames = this.frames;
677
717
  if (time < frames[0]) {
678
- if (fromSetup)
718
+ if (from !== MixFrom.current)
679
719
  pose.inherit = bone.data.setupPose.inherit;
680
720
  }
681
721
  else
@@ -690,10 +730,10 @@ export class SlotCurveTimeline extends CurveTimeline {
690
730
  super(frameCount, bezierCount, ...propertyIds);
691
731
  this.slotIndex = slotIndex;
692
732
  }
693
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
733
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
694
734
  const slot = skeleton.slots[this.slotIndex];
695
735
  if (slot.bone.active)
696
- this.apply1(slot, appliedPose ? slot.appliedPose : slot.pose, time, alpha, fromSetup, add);
736
+ this.apply1(slot, appliedPose ? slot.appliedPose : slot.pose, time, alpha, from, add);
697
737
  }
698
738
  }
699
739
  /** Changes {@link SlotPose.color}. */
@@ -715,12 +755,19 @@ export class RGBATimeline extends SlotCurveTimeline {
715
755
  this.frames[frame + 3 /*B*/] = b;
716
756
  this.frames[frame + 4 /*A*/] = a;
717
757
  }
718
- apply1(slot, pose, time, alpha, fromSetup, add) {
758
+ apply1(slot, pose, time, alpha, from, add) {
719
759
  const color = pose.color;
720
760
  const frames = this.frames;
721
761
  if (time < frames[0]) {
722
- if (fromSetup)
723
- color.setFromColor(slot.data.setupPose.color);
762
+ const setup = slot.data.setupPose.color;
763
+ switch (from) {
764
+ case MixFrom.setup:
765
+ color.setFromColor(setup);
766
+ break;
767
+ case MixFrom.first:
768
+ color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);
769
+ break;
770
+ }
724
771
  return;
725
772
  }
726
773
  let r = 0, g = 0, b = 0, a = 0;
@@ -755,7 +802,7 @@ export class RGBATimeline extends SlotCurveTimeline {
755
802
  if (alpha === 1)
756
803
  color.set(r, g, b, a);
757
804
  else {
758
- if (fromSetup) {
805
+ if (from === MixFrom.setup) {
759
806
  const setup = slot.data.setupPose.color;
760
807
  color.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha, setup.a + (a - setup.a) * alpha);
761
808
  }
@@ -780,16 +827,25 @@ export class RGBTimeline extends SlotCurveTimeline {
780
827
  this.frames[frame + 2 /*G*/] = g;
781
828
  this.frames[frame + 3 /*B*/] = b;
782
829
  }
783
- apply1(slot, pose, time, alpha, fromSetup, add) {
830
+ apply1(slot, pose, time, alpha, from, add) {
784
831
  const color = pose.color;
785
832
  let r = 0, g = 0, b = 0;
786
833
  const frames = this.frames;
787
834
  if (time < frames[0]) {
788
- if (fromSetup) {
789
- const setup = slot.data.setupPose.color;
790
- color.r = setup.r;
791
- color.g = setup.g;
792
- color.b = setup.b;
835
+ const setup = slot.data.setupPose.color;
836
+ switch (from) {
837
+ case MixFrom.setup: {
838
+ color.r = setup.r;
839
+ color.g = setup.g;
840
+ color.b = setup.b;
841
+ break;
842
+ }
843
+ case MixFrom.first: {
844
+ color.r += (setup.r - color.r) * alpha;
845
+ color.g += (setup.g - color.g) * alpha;
846
+ color.b += (setup.b - color.b) * alpha;
847
+ break;
848
+ }
793
849
  }
794
850
  return;
795
851
  }
@@ -818,7 +874,7 @@ export class RGBTimeline extends SlotCurveTimeline {
818
874
  b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
819
875
  }
820
876
  if (alpha !== 1) {
821
- if (fromSetup) {
877
+ if (from === MixFrom.setup) {
822
878
  const setup = slot.data.setupPose.color;
823
879
  r = setup.r + (r - setup.r) * alpha;
824
880
  g = setup.g + (g - setup.g) * alpha;
@@ -842,7 +898,7 @@ export class AlphaTimeline extends CurveTimeline1 {
842
898
  super(frameCount, bezierCount, `${Property.alpha}|${slotIndex}`);
843
899
  this.slotIndex = slotIndex;
844
900
  }
845
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
901
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
846
902
  const slot = skeleton.slots[this.slotIndex];
847
903
  if (!slot.bone.active)
848
904
  return;
@@ -850,13 +906,20 @@ export class AlphaTimeline extends CurveTimeline1 {
850
906
  let a = 0;
851
907
  const frames = this.frames;
852
908
  if (time < frames[0]) {
853
- if (fromSetup)
854
- color.a = slot.data.setupPose.color.a;
909
+ const setup = slot.data.setupPose.color.a;
910
+ switch (from) {
911
+ case MixFrom.setup:
912
+ color.a = setup;
913
+ break;
914
+ case MixFrom.first:
915
+ color.a += (setup - color.a) * alpha;
916
+ break;
917
+ }
855
918
  return;
856
919
  }
857
920
  a = this.getCurveValue(time);
858
921
  if (alpha !== 1) {
859
- if (fromSetup) {
922
+ if (from === MixFrom.setup) {
860
923
  const setup = slot.data.setupPose.color;
861
924
  a = setup.a + (a - setup.a) * alpha;
862
925
  }
@@ -889,20 +952,30 @@ export class RGBA2Timeline extends SlotCurveTimeline {
889
952
  this.frames[frame + 6 /*G2*/] = g2;
890
953
  this.frames[frame + 7 /*B2*/] = b2;
891
954
  }
892
- apply1(slot, pose, time, alpha, fromSetup, add) {
955
+ apply1(slot, pose, time, alpha, from, add) {
893
956
  // biome-ignore lint/style/noNonNullAssertion: reference runtime
894
957
  const light = pose.color, dark = pose.darkColor;
895
958
  let r2 = 0, g2 = 0, b2 = 0;
896
959
  const frames = this.frames;
897
960
  if (time < frames[0]) {
898
- if (fromSetup) {
899
- const setup = slot.data.setupPose;
900
- light.setFromColor(setup.color);
901
- // biome-ignore lint/style/noNonNullAssertion: reference runtime
902
- const setupDark = setup.darkColor;
903
- dark.r = setupDark.r;
904
- dark.g = setupDark.g;
905
- dark.b = setupDark.b;
961
+ const setup = slot.data.setupPose;
962
+ // biome-ignore lint/style/noNonNullAssertion: reference runtime
963
+ const setupLight = setup.color, setupDark = setup.darkColor;
964
+ switch (from) {
965
+ case MixFrom.setup: {
966
+ light.setFromColor(setupLight);
967
+ dark.r = setupDark.r;
968
+ dark.g = setupDark.g;
969
+ dark.b = setupDark.b;
970
+ break;
971
+ }
972
+ case MixFrom.first: {
973
+ light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);
974
+ dark.r += (setupDark.r - dark.r) * alpha;
975
+ dark.g += (setupDark.g - dark.g) * alpha;
976
+ dark.b += (setupDark.b - dark.b) * alpha;
977
+ break;
978
+ }
906
979
  }
907
980
  return;
908
981
  }
@@ -949,7 +1022,7 @@ export class RGBA2Timeline extends SlotCurveTimeline {
949
1022
  }
950
1023
  if (alpha === 1)
951
1024
  light.set(r, g, b, a);
952
- else if (fromSetup) {
1025
+ else if (from === MixFrom.setup) {
953
1026
  const setupPose = slot.data.setupPose;
954
1027
  let setup = setupPose.color;
955
1028
  light.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha, setup.a + (a - setup.a) * alpha);
@@ -991,22 +1064,32 @@ export class RGB2Timeline extends SlotCurveTimeline {
991
1064
  this.frames[frame + 5 /*G2*/] = g2;
992
1065
  this.frames[frame + 6 /*B2*/] = b2;
993
1066
  }
994
- apply1(slot, pose, time, alpha, fromSetup, add) {
1067
+ apply1(slot, pose, time, alpha, from, add) {
995
1068
  // biome-ignore lint/style/noNonNullAssertion: reference runtime
996
1069
  const light = pose.color, dark = pose.darkColor;
997
1070
  let r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0;
998
1071
  const frames = this.frames;
999
1072
  if (time < frames[0]) {
1000
- if (fromSetup) {
1001
- const setup = slot.data.setupPose;
1002
- // biome-ignore lint/style/noNonNullAssertion: reference runtime
1003
- const setupLight = setup.color, setupDark = setup.darkColor;
1004
- light.r = setupLight.r;
1005
- light.g = setupLight.g;
1006
- light.b = setupLight.b;
1007
- dark.r = setupDark.r;
1008
- dark.g = setupDark.g;
1009
- dark.b = setupDark.b;
1073
+ const setup = slot.data.setupPose;
1074
+ // biome-ignore lint/style/noNonNullAssertion: reference runtime
1075
+ const setupLight = setup.color, setupDark = setup.darkColor;
1076
+ switch (from) {
1077
+ case MixFrom.setup:
1078
+ light.r = setupLight.r;
1079
+ light.g = setupLight.g;
1080
+ light.b = setupLight.b;
1081
+ dark.r = setupDark.r;
1082
+ dark.g = setupDark.g;
1083
+ dark.b = setupDark.b;
1084
+ break;
1085
+ case MixFrom.first:
1086
+ light.r += (setupLight.r - light.r) * alpha;
1087
+ light.g += (setupLight.g - light.g) * alpha;
1088
+ light.b += (setupLight.b - light.b) * alpha;
1089
+ dark.r += (setupDark.r - dark.r) * alpha;
1090
+ dark.g += (setupDark.g - dark.g) * alpha;
1091
+ dark.b += (setupDark.b - dark.b) * alpha;
1092
+ break;
1010
1093
  }
1011
1094
  return;
1012
1095
  }
@@ -1047,7 +1130,7 @@ export class RGB2Timeline extends SlotCurveTimeline {
1047
1130
  b2 = this.getBezierValue(time, i, 6 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);
1048
1131
  }
1049
1132
  if (alpha !== 1) {
1050
- if (fromSetup) {
1133
+ if (from === MixFrom.setup) {
1051
1134
  const setupPose = slot.data.setupPose;
1052
1135
  let setup = setupPose.color;
1053
1136
  r = setup.r + (r - setup.r) * alpha;
@@ -1095,13 +1178,13 @@ export class AttachmentTimeline extends Timeline {
1095
1178
  this.frames[frame] = time;
1096
1179
  this.attachmentNames[frame] = attachmentName;
1097
1180
  }
1098
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
1181
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
1099
1182
  const slot = skeleton.slots[this.slotIndex];
1100
1183
  if (!slot.bone.active)
1101
1184
  return;
1102
1185
  const pose = appliedPose ? slot.appliedPose : slot.pose;
1103
1186
  if (out || time < this.frames[0]) {
1104
- if (fromSetup)
1187
+ if (from !== MixFrom.current)
1105
1188
  this.setAttachment(skeleton, pose, slot.data.attachmentName);
1106
1189
  }
1107
1190
  else
@@ -1187,16 +1270,16 @@ export class DeformTimeline extends CurveTimeline {
1187
1270
  const x = curves[n - 2], y = curves[n - 1];
1188
1271
  return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);
1189
1272
  }
1190
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
1273
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
1191
1274
  const slots = skeleton.slots;
1192
1275
  if (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose))
1193
1276
  return;
1194
1277
  const timelineSlots = this.attachment.timelineSlots;
1195
1278
  const frames = this.frames;
1196
1279
  if (time < frames[0]) {
1197
- this.applyBeforeFirst(slots[this.slotIndex], appliedPose, fromSetup);
1280
+ this.applyBeforeFirst(slots[this.slotIndex], appliedPose, alpha, from);
1198
1281
  for (const slotIndex of timelineSlots)
1199
- this.applyBeforeFirst(slots[slotIndex], appliedPose, fromSetup);
1282
+ this.applyBeforeFirst(slots[slotIndex], appliedPose, alpha, from);
1200
1283
  return;
1201
1284
  }
1202
1285
  let v1, v2;
@@ -1213,11 +1296,46 @@ export class DeformTimeline extends CurveTimeline {
1213
1296
  v2 = this.vertices[frame + 1];
1214
1297
  }
1215
1298
  const vertexCount = this.vertices[0].length;
1216
- this.applyToSlot(slots[this.slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);
1299
+ this.applyToSlot(slots[this.slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, from, add);
1217
1300
  for (const slotIndex of timelineSlots)
1218
- this.applyToSlot(slots[slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);
1301
+ this.applyToSlot(slots[slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, from, add);
1302
+ }
1303
+ applyBeforeFirst(slot, appliedPose, alpha, from) {
1304
+ if (!slot.bone.active)
1305
+ return;
1306
+ const pose = appliedPose ? slot.appliedPose : slot.pose;
1307
+ if (pose.attachment == null || pose.attachment.timelineAttachment !== this.attachment)
1308
+ return;
1309
+ const deformArray = pose.deform;
1310
+ if (deformArray.length === 0)
1311
+ from = MixFrom.setup;
1312
+ switch (from) {
1313
+ case MixFrom.setup:
1314
+ deformArray.length = 0;
1315
+ break;
1316
+ case MixFrom.first: {
1317
+ if (alpha === 1) {
1318
+ deformArray.length = 0;
1319
+ return;
1320
+ }
1321
+ const vertexCount = this.vertices[0].length;
1322
+ deformArray.length = vertexCount;
1323
+ const deform = deformArray;
1324
+ const vertexAttachment = pose.attachment;
1325
+ if (vertexAttachment.bones === null) {
1326
+ const setupVertices = vertexAttachment.vertices;
1327
+ for (let i = 0; i < vertexCount; i++)
1328
+ deform[i] += (setupVertices[i] - deform[i]) * alpha;
1329
+ }
1330
+ else {
1331
+ alpha = 1 - alpha;
1332
+ for (let i = 0; i < vertexCount; i++)
1333
+ deform[i] *= alpha;
1334
+ }
1335
+ }
1336
+ }
1219
1337
  }
1220
- applyToSlot(slot, appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add) {
1338
+ applyToSlot(slot, appliedPose, v1, v2, percent, vertexCount, alpha, from, add) {
1221
1339
  if (!slot.bone.active)
1222
1340
  return;
1223
1341
  const pose = appliedPose ? slot.appliedPose : slot.pose;
@@ -1226,7 +1344,8 @@ export class DeformTimeline extends CurveTimeline {
1226
1344
  const vertexAttachment = pose.attachment;
1227
1345
  const deform = pose.deform;
1228
1346
  if (deform.length === 0)
1229
- fromSetup = true;
1347
+ from = MixFrom.setup;
1348
+ const fromSetup = from === MixFrom.setup;
1230
1349
  deform.length = vertexCount;
1231
1350
  if (v2 === null) { // Time is after last frame.
1232
1351
  if (alpha === 1) {
@@ -1337,17 +1456,6 @@ export class DeformTimeline extends CurveTimeline {
1337
1456
  }
1338
1457
  }
1339
1458
  }
1340
- applyBeforeFirst(slot, appliedPose, fromSetup) {
1341
- if (!slot.bone.active)
1342
- return;
1343
- const pose = appliedPose ? slot.appliedPose : slot.pose;
1344
- if (pose.attachment == null || pose.attachment.timelineAttachment !== this.attachment)
1345
- return;
1346
- if (pose.deform.length === 0)
1347
- fromSetup = true;
1348
- if (fromSetup)
1349
- pose.deform.length = 0;
1350
- }
1351
1459
  }
1352
1460
  /** Changes {@link Slot.getSequenceIndex} for an attachment's {@link Sequence}. */
1353
1461
  export class SequenceTimeline extends Timeline {
@@ -1384,14 +1492,14 @@ export class SequenceTimeline extends Timeline {
1384
1492
  frames[frame + SequenceTimeline.MODE] = mode | (index << 4);
1385
1493
  frames[frame + SequenceTimeline.DELAY] = delay;
1386
1494
  }
1387
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
1495
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
1388
1496
  const slots = skeleton.slots;
1389
1497
  if (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose))
1390
1498
  return;
1391
1499
  const timelineSlots = this.attachment.timelineSlots;
1392
1500
  const frames = this.frames;
1393
1501
  if (out || time < frames[0]) {
1394
- if (fromSetup) {
1502
+ if (from !== MixFrom.current) {
1395
1503
  this.setupPose(slots[this.slotIndex], appliedPose);
1396
1504
  for (const slotIndex of timelineSlots)
1397
1505
  this.setupPose(slots[slotIndex], appliedPose);
@@ -1474,13 +1582,14 @@ export class EventTimeline extends Timeline {
1474
1582
  this.events[frame] = event;
1475
1583
  }
1476
1584
  /** Fires events for frames > `lastTime` and <= `time`. */
1477
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1585
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1478
1586
  if (!firedEvents)
1479
1587
  return;
1480
1588
  const frames = this.frames;
1481
1589
  const frameCount = this.frames.length;
1482
1590
  if (lastTime > time) { // Apply after lastTime for looped animations.
1483
- this.apply(null, lastTime, Number.MAX_VALUE, firedEvents, 0, false, false, false, false);
1591
+ // Reference runtime passes null for MixFrom here. This timeline doesn't use it, but TS keeps the type non-null.
1592
+ this.apply(null, lastTime, Number.MAX_VALUE, firedEvents, 0, from, false, false, false);
1484
1593
  lastTime = -1;
1485
1594
  }
1486
1595
  else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.
@@ -1524,11 +1633,11 @@ export class DrawOrderTimeline extends Timeline {
1524
1633
  this.frames[frame] = time;
1525
1634
  this.drawOrders[frame] = drawOrder;
1526
1635
  }
1527
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1636
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1528
1637
  const pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);
1529
1638
  const setup = skeleton.slots;
1530
1639
  if (out || time < this.frames[0]) {
1531
- if (fromSetup)
1640
+ if (from !== MixFrom.current)
1532
1641
  Utils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length);
1533
1642
  return;
1534
1643
  }
@@ -1543,6 +1652,7 @@ export class DrawOrderTimeline extends Timeline {
1543
1652
  }
1544
1653
  /** Changes a subset of the {@link Skeleton.getDrawOrder | draw order}. */
1545
1654
  export class DrawOrderFolderTimeline extends Timeline {
1655
+ static propertyID = `${Property.drawOrderFolder}`;
1546
1656
  slots;
1547
1657
  inFolder;
1548
1658
  drawOrders;
@@ -1561,7 +1671,7 @@ export class DrawOrderFolderTimeline extends Timeline {
1561
1671
  const n = slots.length;
1562
1672
  const ids = new Array(n);
1563
1673
  for (let i = 0; i < n; i++)
1564
- ids[i] = `d${slots[i]}`;
1674
+ ids[i] = `${DrawOrderFolderTimeline.propertyID}|${slots[i]}`;
1565
1675
  return ids;
1566
1676
  }
1567
1677
  getFrameCount() {
@@ -1583,11 +1693,11 @@ export class DrawOrderFolderTimeline extends Timeline {
1583
1693
  this.frames[frame] = time;
1584
1694
  this.drawOrders[frame] = drawOrder;
1585
1695
  }
1586
- apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) {
1696
+ apply(skeleton, lastTime, time, events, alpha, from, add, out, appliedPose) {
1587
1697
  const pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);
1588
1698
  const setup = skeleton.slots;
1589
1699
  if (out || time < this.frames[0]) {
1590
- if (fromSetup)
1700
+ if (from !== MixFrom.current)
1591
1701
  this.setup(pose, setup);
1592
1702
  }
1593
1703
  else {
@@ -1646,20 +1756,31 @@ export class IkConstraintTimeline extends CurveTimeline {
1646
1756
  this.frames[frame + 4 /*COMPRESS*/] = compress ? 1 : 0;
1647
1757
  this.frames[frame + 5 /*STRETCH*/] = stretch ? 1 : 0;
1648
1758
  }
1649
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1759
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1650
1760
  const constraint = skeleton.constraints[this.constraintIndex];
1651
1761
  if (!constraint.active)
1652
1762
  return;
1653
1763
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1654
1764
  const frames = this.frames;
1655
1765
  if (time < frames[0]) {
1656
- if (fromSetup) {
1657
- const setup = constraint.data.setupPose;
1658
- pose.mix = setup.mix;
1659
- pose.softness = setup.softness;
1660
- pose.bendDirection = setup.bendDirection;
1661
- pose.compress = setup.compress;
1662
- pose.stretch = setup.stretch;
1766
+ const setup = constraint.data.setupPose;
1767
+ switch (from) {
1768
+ case MixFrom.setup: {
1769
+ pose.mix = setup.mix;
1770
+ pose.softness = setup.softness;
1771
+ pose.bendDirection = setup.bendDirection;
1772
+ pose.compress = setup.compress;
1773
+ pose.stretch = setup.stretch;
1774
+ break;
1775
+ }
1776
+ case MixFrom.first: {
1777
+ pose.mix += (setup.mix - pose.mix) * alpha;
1778
+ pose.softness += (setup.softness - pose.softness) * alpha;
1779
+ pose.bendDirection = setup.bendDirection;
1780
+ pose.compress = setup.compress;
1781
+ pose.stretch = setup.stretch;
1782
+ break;
1783
+ }
1663
1784
  }
1664
1785
  return;
1665
1786
  }
@@ -1684,11 +1805,11 @@ export class IkConstraintTimeline extends CurveTimeline {
1684
1805
  mix = this.getBezierValue(time, i, 1 /*MIX*/, curveType - 2 /*BEZIER*/);
1685
1806
  softness = this.getBezierValue(time, i, 2 /*SOFTNESS*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
1686
1807
  }
1687
- const base = fromSetup ? constraint.data.setupPose : pose;
1808
+ const base = from === MixFrom.setup ? constraint.data.setupPose : pose;
1688
1809
  pose.mix = base.mix + (mix - base.mix) * alpha;
1689
1810
  pose.softness = base.softness + (softness - base.softness) * alpha;
1690
1811
  if (out) {
1691
- if (fromSetup) {
1812
+ if (from === MixFrom.setup) {
1692
1813
  pose.bendDirection = base.bendDirection;
1693
1814
  pose.compress = base.compress;
1694
1815
  pose.stretch = base.stretch;
@@ -1729,21 +1850,33 @@ export class TransformConstraintTimeline extends CurveTimeline {
1729
1850
  frames[frame + 5 /*SCALEY*/] = mixScaleY;
1730
1851
  frames[frame + 6 /*SHEARY*/] = mixShearY;
1731
1852
  }
1732
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1853
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1733
1854
  const constraint = skeleton.constraints[this.constraintIndex];
1734
1855
  if (!constraint.active)
1735
1856
  return;
1736
1857
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1737
1858
  const frames = this.frames;
1738
1859
  if (time < frames[0]) {
1739
- if (fromSetup) {
1740
- const setup = constraint.data.setupPose;
1741
- pose.mixRotate = setup.mixRotate;
1742
- pose.mixX = setup.mixX;
1743
- pose.mixY = setup.mixY;
1744
- pose.mixScaleX = setup.mixScaleX;
1745
- pose.mixScaleY = setup.mixScaleY;
1746
- pose.mixShearY = setup.mixShearY;
1860
+ const setup = constraint.data.setupPose;
1861
+ switch (from) {
1862
+ case MixFrom.setup: {
1863
+ pose.mixRotate = setup.mixRotate;
1864
+ pose.mixX = setup.mixX;
1865
+ pose.mixY = setup.mixY;
1866
+ pose.mixScaleX = setup.mixScaleX;
1867
+ pose.mixScaleY = setup.mixScaleY;
1868
+ pose.mixShearY = setup.mixShearY;
1869
+ break;
1870
+ }
1871
+ case MixFrom.first: {
1872
+ pose.mixRotate += (setup.mixRotate - pose.mixRotate) * alpha;
1873
+ pose.mixX += (setup.mixX - pose.mixX) * alpha;
1874
+ pose.mixY += (setup.mixY - pose.mixY) * alpha;
1875
+ pose.mixScaleX += (setup.mixScaleX - pose.mixScaleX) * alpha;
1876
+ pose.mixScaleY += (setup.mixScaleY - pose.mixScaleY) * alpha;
1877
+ pose.mixShearY += (setup.mixShearY - pose.mixShearY) * alpha;
1878
+ break;
1879
+ }
1747
1880
  }
1748
1881
  return;
1749
1882
  }
@@ -1784,7 +1917,7 @@ export class TransformConstraintTimeline extends CurveTimeline {
1784
1917
  scaleY = this.getBezierValue(time, i, 5 /*SCALEY*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);
1785
1918
  shearY = this.getBezierValue(time, i, 6 /*SHEARY*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);
1786
1919
  }
1787
- const base = fromSetup ? constraint.data.setupPose : pose;
1920
+ const base = from === MixFrom.setup ? constraint.data.setupPose : pose;
1788
1921
  if (add) {
1789
1922
  pose.mixRotate = base.mixRotate + rotate * alpha;
1790
1923
  pose.mixX = base.mixX + x * alpha;
@@ -1817,11 +1950,11 @@ export class PathConstraintPositionTimeline extends ConstraintTimeline1 {
1817
1950
  super(frameCount, bezierCount, constraintIndex, Property.pathConstraintPosition);
1818
1951
  this.additive = true;
1819
1952
  }
1820
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1953
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1821
1954
  const constraint = skeleton.constraints[this.constraintIndex];
1822
1955
  if (constraint.active) {
1823
1956
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1824
- pose.position = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.position, constraint.data.setupPose.position);
1957
+ pose.position = this.getAbsoluteValue(time, alpha, from, add, pose.position, constraint.data.setupPose.position);
1825
1958
  }
1826
1959
  }
1827
1960
  }
@@ -1830,11 +1963,11 @@ export class PathConstraintSpacingTimeline extends ConstraintTimeline1 {
1830
1963
  constructor(frameCount, bezierCount, constraintIndex) {
1831
1964
  super(frameCount, bezierCount, constraintIndex, Property.pathConstraintSpacing);
1832
1965
  }
1833
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1966
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1834
1967
  const constraint = skeleton.constraints[this.constraintIndex];
1835
1968
  if (constraint.active) {
1836
1969
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1837
- pose.spacing = this.getAbsoluteValue(time, alpha, fromSetup, false, pose.spacing, constraint.data.setupPose.spacing);
1970
+ pose.spacing = this.getAbsoluteValue(time, alpha, from, false, pose.spacing, constraint.data.setupPose.spacing);
1838
1971
  }
1839
1972
  }
1840
1973
  }
@@ -1860,18 +1993,27 @@ export class PathConstraintMixTimeline extends CurveTimeline {
1860
1993
  frames[frame + 2 /*X*/] = mixX;
1861
1994
  frames[frame + 3 /*Y*/] = mixY;
1862
1995
  }
1863
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
1996
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1864
1997
  const constraint = skeleton.constraints[this.constraintIndex];
1865
1998
  if (!constraint.active)
1866
1999
  return;
1867
2000
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1868
2001
  const frames = this.frames;
1869
2002
  if (time < frames[0]) {
1870
- if (fromSetup) {
1871
- const setup = constraint.data.setupPose;
1872
- pose.mixRotate = setup.mixRotate;
1873
- pose.mixX = setup.mixX;
1874
- pose.mixY = setup.mixY;
2003
+ const setup = constraint.data.setupPose;
2004
+ switch (from) {
2005
+ case MixFrom.setup: {
2006
+ pose.mixRotate = setup.mixRotate;
2007
+ pose.mixX = setup.mixX;
2008
+ pose.mixY = setup.mixY;
2009
+ break;
2010
+ }
2011
+ case MixFrom.first: {
2012
+ pose.mixRotate += (setup.mixRotate - pose.mixRotate) * alpha;
2013
+ pose.mixX += (setup.mixX - pose.mixX) * alpha;
2014
+ pose.mixY += (setup.mixY - pose.mixY) * alpha;
2015
+ break;
2016
+ }
1875
2017
  }
1876
2018
  return;
1877
2019
  }
@@ -1900,7 +2042,7 @@ export class PathConstraintMixTimeline extends CurveTimeline {
1900
2042
  x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
1901
2043
  y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
1902
2044
  }
1903
- const base = fromSetup ? constraint.data.setupPose : pose;
2045
+ const base = from === MixFrom.setup ? constraint.data.setupPose : pose;
1904
2046
  if (add) {
1905
2047
  pose.mixRotate = base.mixRotate + rotate * alpha;
1906
2048
  pose.mixX = base.mixX + x * alpha;
@@ -1919,7 +2061,7 @@ export class PhysicsConstraintTimeline extends ConstraintTimeline1 {
1919
2061
  constructor(frameCount, bezierCount, constraintIndex, property) {
1920
2062
  super(frameCount, bezierCount, constraintIndex, property);
1921
2063
  }
1922
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
2064
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
1923
2065
  if (add && !this.additive)
1924
2066
  add = false;
1925
2067
  if (this.constraintIndex === -1) {
@@ -1928,7 +2070,7 @@ export class PhysicsConstraintTimeline extends ConstraintTimeline1 {
1928
2070
  for (const constraint of constraints) {
1929
2071
  if (constraint.active && this.global(constraint.data)) {
1930
2072
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1931
- this.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose), value));
2073
+ this.set(pose, this.getAbsoluteValue(time, alpha, from, add, this.get(pose), this.get(constraint.data.setupPose), value));
1932
2074
  }
1933
2075
  }
1934
2076
  }
@@ -1936,7 +2078,7 @@ export class PhysicsConstraintTimeline extends ConstraintTimeline1 {
1936
2078
  const constraint = skeleton.constraints[this.constraintIndex];
1937
2079
  if (constraint.active) {
1938
2080
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
1939
- this.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose)));
2081
+ this.set(pose, this.getAbsoluteValue(time, alpha, from, add, this.get(pose), this.get(constraint.data.setupPose)));
1940
2082
  }
1941
2083
  }
1942
2084
  }
@@ -2069,7 +2211,7 @@ export class PhysicsConstraintResetTimeline extends Timeline {
2069
2211
  this.frames[frame] = time;
2070
2212
  }
2071
2213
  /** Resets the physics constraint when frames > `lastTime` and <= `time`. */
2072
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
2214
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
2073
2215
  let constraint;
2074
2216
  if (this.constraintIndex !== -1) {
2075
2217
  constraint = skeleton.constraints[this.constraintIndex];
@@ -2078,7 +2220,8 @@ export class PhysicsConstraintResetTimeline extends Timeline {
2078
2220
  }
2079
2221
  const frames = this.frames;
2080
2222
  if (lastTime > time) { // Apply after lastTime for looped animations.
2081
- this.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, false, false, false, false);
2223
+ // Reference runtime passes null for MixFrom here. This timeline doesn't use it, but TS keeps the type non-null.
2224
+ this.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, from, false, false, false);
2082
2225
  lastTime = -1;
2083
2226
  }
2084
2227
  else if (lastTime >= frames[frames.length - 1]) // Last time is after last frame.
@@ -2102,11 +2245,11 @@ export class SliderTimeline extends ConstraintTimeline1 {
2102
2245
  constructor(frameCount, bezierCount, constraintIndex) {
2103
2246
  super(frameCount, bezierCount, constraintIndex, Property.sliderTime);
2104
2247
  }
2105
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
2248
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
2106
2249
  const constraint = skeleton.constraints[this.constraintIndex];
2107
2250
  if (constraint.active) {
2108
2251
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
2109
- pose.time = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.time, constraint.data.setupPose.time);
2252
+ pose.time = this.getAbsoluteValue(time, alpha, from, add, pose.time, constraint.data.setupPose.time);
2110
2253
  }
2111
2254
  }
2112
2255
  }
@@ -2116,12 +2259,12 @@ export class SliderMixTimeline extends ConstraintTimeline1 {
2116
2259
  super(frameCount, bezierCount, constraintIndex, Property.sliderMix);
2117
2260
  this.additive = true;
2118
2261
  }
2119
- apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) {
2262
+ apply(skeleton, lastTime, time, firedEvents, alpha, from, add, out, appliedPose) {
2120
2263
  const constraint = skeleton.constraints[this.constraintIndex];
2121
2264
  if (constraint.active) {
2122
2265
  const pose = appliedPose ? constraint.appliedPose : constraint.pose;
2123
- pose.mix = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.mix, constraint.data.setupPose.mix);
2266
+ pose.mix = this.getAbsoluteValue(time, alpha, from, add, pose.mix, constraint.data.setupPose.mix);
2124
2267
  }
2125
2268
  }
2126
2269
  }
2127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuaW1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFJL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBcUI3RSxPQUFPLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNFOzs7WUFHWTtBQUNaLE1BQU0sT0FBTyxTQUFTO0lBQ3JCOztpREFFNkM7SUFDcEMsSUFBSSxDQUFTO0lBRXRCOytIQUMySDtJQUMzSCxTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUV2QixXQUFXLENBQVk7SUFFaEM7O3lDQUVxQztJQUM1QixLQUFLLENBQWdCO0lBRTlCLGdCQUFnQjtJQUNoQiwrR0FBK0c7SUFDdEcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZDO3VGQUNtRjtJQUNuRixRQUFRLENBQVM7SUFFakIsWUFBYSxJQUFZLEVBQUUsU0FBMEIsRUFBRSxRQUFnQjtRQUN0RSxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFjLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWSxDQUFFLFNBQTBCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTO1lBQUUs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QUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDM0csSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQzlHLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsRUFBRSxJQUFJLEdBQUcsQ0FBQztZQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7WUFDVixHQUFHLElBQUksSUFBSSxDQUFD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Q0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDO1FBQ0YsQ0FBQztRQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRDtBQUVELHlE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LEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ3RGLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUMxRixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDMUYsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQzVGLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUM1RixFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN0QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQzFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLGdFQUFnRTtZQUNoRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVUsQ0FBQztZQUM3QixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNQLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUss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SUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsZ0VBQWdFO2dCQUNoRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVUsQ0FBQztnQkFDN0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN2QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDO1FBQ0YsQ0FBQztRQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRDtBQUVELDBDQUEwQztBQUMxQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsUUFBUTtJQUMvQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWQsK0ZBQStGO0lBQy9GLGVBQWUsQ0FBdUI7SUFFdEMsWUFBYSxVQUFrQixFQUFFLFNBQWlCO1FBQ2pELEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssQ0FBUyxVQUFVLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixRQUFRLENBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxjQUE2QjtRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFFLFFBQWtCLEVBQUUsUUFBZ0IsRUFBRSxJQUFZLEVBQUUsTUFBb0IsRUFBRSxLQUFhLEVBQUUsU0FBa0IsRUFDakgsR0FBWSxFQUFFLEdBQVksRUFBRSxXQUFvQjtRQUVoRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM5QixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFeEQsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLFNBQVM7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0UsQ0FBQzs7WUFDQSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxhQUFhLENBQUUsUUFBa0IsRUFBRSxJQUFjLEVBQUUsY0FBNkI7UUFDL0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDO0NBQ0Q7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBQ3ZDLFNBQVMsQ0FBUztJQUUzQjs7NkRBRXlEO0lBQ2hELFVBQVUsQ0FBbUI7SUFFdEMsdUNBQXVDO0lBQ3ZDLFFBQVEsQ0FBeUI7SUFFakMsWUFBYSxVQUFrQixFQUFFLFdBQW1CLEVBQUUsU0FBaUIsRUFBRSxVQUE0QjtRQUNwRyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQWtCLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7OzttSEFHK0c7SUFDL0csUUFBUSxDQUFFLEtBQWEsRUFBRSxJQUFZLEVBQUUsUUFBeUI7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVEO2tFQUM4RDtJQUM5RCxTQUFTLENBQUUsTUFBYyxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFDNUgsR0FBVyxFQUFFLEtBQWEsRUFBRSxNQUFjO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUEsZUFBZSxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLENBQUM7WUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUM1RSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLENBQUM7UUFDbkcsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsSUFBSSxHQUFHLENBQUM7WUFDVixFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1YsR0FBRyxJQUFJLElBQUksQ0FBQztZQUNaLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDWixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsQ0FBQyxJQUFJLEVBQUUs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QUFNO1lBQ1A7Z0JBQ0MsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsVUFBVSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQzVFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ3RGLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUMxRixNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxVQUFVLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDcEcsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsVUFBVSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ3BHLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLFVBQVUsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsTUFB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Q0FDRDtBQUVELHNDQUFzQztBQUN0QyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQW1CO0lBQ3pELFlBQWEsVUFBa0IsRUFBRSxXQUFtQixFQUFFLGVBQXVCO1FBQzVFLEtBQUssQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBRSxRQUFrQixFQUFFLFFBQWdCLEVBQUUsSUFBWSxFQUFFLFdBQXlCLEVBQUUsS0FBYSxFQUFFLFNBQWtCLEVBQ3RILEdBQVksRUFBRSxHQUFZLEVBQUUsV0FBb0I7UUFFaEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFXLENBQUM7UUFDeEUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudCwgVmVydGV4QXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgSGFzU2VxdWVuY2UgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9IYXNTZXF1ZW5jZS5qc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2VNb2RlLCBTZXF1ZW5jZU1vZGVWYWx1ZXMgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9TZXF1ZW5jZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lIH0gZnJvbSBcIi4vQm9uZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgQm9uZVBvc2UgfSBmcm9tIFwiLi9Cb25lUG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudCB9IGZyb20gXCIuL0V2ZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IElrQ29uc3RyYWludCB9IGZyb20gXCIuL0lrQ29uc3RyYWludC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJa0NvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vSWtDb25zdHJhaW50UG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQYXRoQ29uc3RyYWludCB9IGZyb20gXCIuL1BhdGhDb25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhDb25zdHJhaW50UG9zZSB9IGZyb20gXCIuL1BhdGhDb25zdHJhaW50UG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaHlzaWNzQ29uc3RyYWludCB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3NDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaHlzaWNzQ29uc3RyYWludFBvc2UgfSBmcm9tIFwiLi9QaHlzaWNzQ29uc3RyYWludFBvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZWQgfSBmcm9tIFwiLi9Qb3NlZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uRGF0YSB9IGZyb20gXCIuL1NrZWxldG9uRGF0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbGlkZXIgfSBmcm9tIFwiLi9TbGlkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgU2xpZGVyUG9zZSB9IGZyb20gXCIuL1NsaWRlclBvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2xvdCB9IGZyb20gXCIuL1Nsb3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2xvdFBvc2UgfSBmcm9tIFwiLi9TbG90UG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1Db25zdHJhaW50IH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1Db25zdHJhaW50UG9zZSB9IGZyb20gXCIuL1RyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgeyBDb2xvciwgdHlwZSBOdW1iZXJBcnJheUxpa2UsIFN0cmluZ1NldCwgVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG4vKiogU3RvcmVzIGEgbGlzdCBvZiB0aW1lbGluZXMgdG8gYW5pbWF0ZSBhIHNrZWxldG9uJ3MgcG9zZSBvdmVyIHRpbWUuXG4gKlxuICogU2VlIDxhIGhyZWY9J2h0dHBzOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBwbHlpbmctYW5pbWF0aW9ucyNUaW1lbGluZS1BUEknPkFwcGx5aW5nIEFuaW1hdGlvbnM8L2E+IGluIHRoZSBTcGluZSBSdW50aW1lc1xuICogR3VpZGUuICovXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uIHtcblx0LyoqIFRoZSBhbmltYXRpb24ncyBuYW1lLCB1bmlxdWUgYWNyb3NzIGFsbCBhbmltYXRpb25zIGluIHRoZSBza2VsZXRvbi5cblx0ICpcblx0ICogU2VlIHtAbGluayBTa2VsZXRvbkRhdGEuZmluZEFuaW1hdGlvbn0uICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuXHQvKiogVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gaW4gc2Vjb25kcywgd2hpY2ggaXMgdXN1YWxseSB0aGUgaGlnaGVzdCB0aW1lIG9mIGFsbCBmcmFtZXMgaW4gdGhlIHRpbWVsaW5lcy4gVGhlIGR1cmF0aW9uIGlzXG5cdCAqIHVzZWQgdG8ga25vdyB3aGVuIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZCBhbmQsIGZvciBhbmltYXRpb25zIHRoYXQgcmVwZWF0LCB3aGVuIGl0IHNob3VsZCBsb29wIGJhY2sgdG8gdGhlIHN0YXJ0LiAqL1xuXHR0aW1lbGluZXM6IEFycmF5PFRpbWVsaW5lPiA9IFtdO1xuXG5cdHJlYWRvbmx5IHRpbWVsaW5lSWRzOiBTdHJpbmdTZXQ7XG5cblx0LyoqIHtAbGluayBTa2VsZXRvbi5nZXRCb25lc30gaW5kaWNlcyB0aGF0IHRoaXMgYW5pbWF0aW9uJ3MgdGltZWxpbmVzIG1vZGlmeS5cblx0ICpcblx0ICogU2VlIHtAbGluayBCb25lVGltZWxpbmUuYm9uZXN9LiAqL1xuXHRyZWFkb25seSBib25lczogQXJyYXk8bnVtYmVyPjtcblxuXHQvLyBOb25lc3NlbnRpYWwuXG5cdC8qKiBUaGUgY29sb3Igb2YgdGhlIGFuaW1hdGlvbiBhcyBpdCB3YXMgaW4gU3BpbmUsIG9yIGEgZGVmYXVsdCBjb2xvciBpZiBub25lc3NlbnRpYWwgZGF0YSB3YXMgbm90IGV4cG9ydGVkLiAqL1xuXHRyZWFkb25seSBjb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcblxuXHQvKiogVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gaW4gc2Vjb25kcywgd2hpY2ggaXMgdXN1YWxseSB0aGUgaGlnaGVzdCB0aW1lIG9mIGFsbCBmcmFtZXMgaW4gdGhlIHRpbWVsaW5lLiBUaGUgZHVyYXRpb24gaXNcblx0ICogdXNlZCB0byBrbm93IHdoZW4gaXQgaGFzIGNvbXBsZXRlZCBhbmQgd2hlbiBpdCBzaG91bGQgbG9vcCBiYWNrIHRvIHRoZSBzdGFydC4gKi9cblx0ZHVyYXRpb246IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nLCB0aW1lbGluZXM6IEFycmF5PFRpbWVsaW5lPiwgZHVyYXRpb246IG51bWJlcikge1xuXHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwibmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdFx0dGhpcy50aW1lbGluZUlkcyA9IG5ldyBTdHJpbmdTZXQoKTtcblx0XHR0aGlzLmJvbmVzID0gW10gYXMgbnVtYmVyW107XG5cdFx0dGhpcy5zZXRUaW1lbGluZXModGltZWxpbmVzKTtcblx0fVxuXG5cdHNldFRpbWVsaW5lcyAodGltZWxpbmVzOiBBcnJheTxUaW1lbGluZT4pIHtcblx0XHRpZiAoIXRpbWVsaW5lcykgdGhyb3cgbmV3IEVycm9yKFwidGltZWxpbmVzIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnRpbWVsaW5lcyA9IHRpbWVsaW5lcztcblxuXHRcdGNvbnN0IG4gPSB0aW1lbGluZXMubGVuZ3RoO1xuXHRcdHRoaXMudGltZWxpbmVJZHMuY2xlYXIoKTtcblx0XHR0aGlzLmJvbmVzLmxlbmd0aCA9IDA7XG5cdFx0Y29uc3QgYm9uZVNldCA9IG5ldyBTZXQoKTtcblx0XHRjb25zdCBpdGVtcyA9IHRpbWVsaW5lcztcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgdGltZWxpbmUgPSBpdGVtc1tpXTtcblx0XHRcdHRoaXMudGltZWxpbmVJZHMuYWRkQWxsKHRpbWVsaW5lLnByb3BlcnR5SWRzKTtcblx0XHRcdGlmIChpc0JvbmVUaW1lbGluZSh0aW1lbGluZSkgJiYgYm9uZVNldC5hZGQodGltZWxpbmUuYm9uZUluZGV4KSlcblx0XHRcdFx0dGhpcy5ib25lcy5wdXNoKHRpbWVsaW5lLmJvbmVJbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGFuaW1hdGlvbiBjb250YWlucyBhIHRpbWVsaW5lIHdpdGggYW55IG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgSURzLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFRpbWVsaW5lLnByb3BlcnR5SWRzfS4gKi9cblx0aGFzVGltZWxpbmUgKGlkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKylcblx0XHRcdGlmICh0aGlzLnRpbWVsaW5lSWRzLmNvbnRhaW5zKGlkc1tpXSkpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKiBBcHBsaWVzIHRoZSBhbmltYXRpb24ncyB0aW1lbGluZXMgdG8gdGhlIHNwZWNpZmllZCBza2VsZXRvbi5cblx0ICpcblx0ICogU2VlIHtAbGluayBUaW1lbGluZS5hcHBseX0gYW5kXG5cdCAqIDxhIGhyZWY9J2h0dHBzOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBwbHlpbmctYW5pbWF0aW9ucyNUaW1lbGluZS1BUEknPkFwcGx5aW5nIEFuaW1hdGlvbnM8L2E+IGluIHRoZSBTcGluZSBSdW50aW1lc1xuXHQgKiBHdWlkZS5cblx0ICogQHBhcmFtIHNrZWxldG9uIFRoZSBza2VsZXRvbiB0aGUgYW5pbWF0aW9uIGlzIGFwcGxpZWQgdG8uIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBib25lcywgc2xvdHMsIGFuZCBvdGhlciBza2VsZXRvblxuXHQgKiAgICAgICAgICAgY29tcG9uZW50cyB0aGUgdGltZWxpbmVzIG1heSBjaGFuZ2UuXG5cdCAqIEBwYXJhbSBsYXN0VGltZSBUaGUgbGFzdCB0aW1lIGluIHNlY29uZHMgdGhpcyBhbmltYXRpb24gd2FzIGFwcGxpZWQuIFNvbWUgdGltZWxpbmVzIHRyaWdnZXIgb25seSBhdCBkaXNjcmV0ZSB0aW1lcywgaW4gd2hpY2hcblx0ICogICAgICAgICAgIGNhc2UgYWxsIGtleXMgYXJlIHRyaWdnZXJlZCBiZXR3ZWVuIGBsYXN0VGltZWAgKGV4Y2x1c2l2ZSkgYW5kIGB0aW1lYCAoaW5jbHVzaXZlKS4gUGFzcyAtMVxuXHQgKiAgICAgICAgICAgdGhlIGZpcnN0IHRpbWUgYW4gYW5pbWF0aW9uIGlzIGFwcGxpZWQgdG8gZW5zdXJlIGZyYW1lIDAgaXMgdHJpZ2dlcmVkLlxuXHQgKiBAcGFyYW0gdGltZSBUaGUgdGltZSBpbiBzZWNvbmRzIHRoZSBza2VsZXRvbiBpcyBiZWluZyBwb3NlZCBmb3IuIFRpbWVsaW5lcyBmaW5kIHRoZSBmcmFtZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgdGltZSBhbmRcblx0ICogICAgICAgICAgIGludGVycG9sYXRlIGJldHdlZW4gdGhlIGZyYW1lIHZhbHVlcy5cblx0ICogQHBhcmFtIGxvb3AgVHJ1ZSBpZiBgdGltZWAgYmV5b25kIHRoZSB7QGxpbmsgZHVyYXRpb259IHJlcGVhdHMgdGhlIGFuaW1hdGlvbiwgZWxzZSB0aGUgbGFzdCBmcmFtZSBpcyB1c2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRzIElmIGFueSBldmVudHMgYXJlIGZpcmVkLCB0aGV5IGFyZSBhZGRlZCB0byB0aGlzIGxpc3QuIFBhc3MgbnVsbCB0byBpZ25vcmUgZmlyZWQgZXZlbnRzIG9yIGlmIG5vIHRpbWVsaW5lcyBmaXJlXG5cdCAqICAgICAgICAgICBldmVudHMuXG5cdCAqIEBwYXJhbSBhbHBoYSAwIGFwcGxpZXMgc2V0dXAgb3IgY3VycmVudCB2YWx1ZXMgKGRlcGVuZGluZyBvbiBgZnJvbVNldHVwYCksIDEgdXNlcyB0aW1lbGluZSB2YWx1ZXMsIGFuZFxuXHQgKiAgICAgICAgICAgaW50ZXJtZWRpYXRlIHZhbHVlcyBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uIEFkanVzdGluZyBgYWxwaGFgIG92ZXIgdGltZSBjYW4gbWl4IGFuIGFuaW1hdGlvbiBpbiBvclxuXHQgKiAgICAgICAgICAgb3V0LlxuXHQgKiBAcGFyYW0gZnJvbVNldHVwIElmIHRydWUsIGBhbHBoYWAgdHJhbnNpdGlvbnMgYmV0d2VlbiBzZXR1cCBhbmQgdGltZWxpbmUgdmFsdWVzLCBzZXR1cCB2YWx1ZXMgYXJlIHVzZWQgYmVmb3JlIHRoZVxuXHQgKiAgICAgICAgICAgZmlyc3QgZnJhbWUgKGN1cnJlbnQgdmFsdWVzIGFyZSBub3QgdXNlZCkuIElmIGZhbHNlLCBgYWxwaGFgIHRyYW5zaXRpb25zIGJldHdlZW4gY3VycmVudCBhbmQgdGltZWxpbmVcblx0ICogICAgICAgICAgIHZhbHVlcywgbm8gY2hhbmdlIGlzIG1hZGUgYmVmb3JlIHRoZSBmaXJzdCBmcmFtZS5cblx0ICogQHBhcmFtIGFkZCBJZiB0cnVlLCBmb3IgdGltZWxpbmVzIHRoYXQgc3VwcG9ydCBpdCwgdGhlaXIgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgc2V0dXAgb3IgY3VycmVudCB2YWx1ZXMgKGRlcGVuZGluZyBvblxuXHQgKiAgICAgICAgICAgYGZyb21TZXR1cGApLlxuXHQgKiBAcGFyYW0gb3V0IFRydWUgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIG1peGluZyBvdXQsIGVsc2UgaXQgaXMgbWl4aW5nIGluLiBVc2VkIGJ5IHRpbWVsaW5lcyB0aGF0IHBlcmZvcm0gaW5zdGFudCB0cmFuc2l0aW9ucy5cblx0ICogQHBhcmFtIGFwcGxpZWRQb3NlIFRydWUgdG8gbW9kaWZ5IHtAbGluayBQb3NlZC5hcHBsaWVkUG9zZX0sIGVsc2Uge0BsaW5rIFBvc2VkLnBvc2V9IGlzIG1vZGlmaWVkLiAqL1xuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGxvb3A6IGJvb2xlYW4sIGV2ZW50czogQXJyYXk8RXZlbnQ+IHwgbnVsbCwgYWxwaGE6IG51bWJlcixcblx0XHRmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXHRcdGlmICghc2tlbGV0b24pIHRocm93IG5ldyBFcnJvcihcInNrZWxldG9uIGNhbm5vdCBiZSBudWxsLlwiKTtcblxuXHRcdGlmIChsb29wICYmIHRoaXMuZHVyYXRpb24gIT09IDApIHtcblx0XHRcdHRpbWUgJT0gdGhpcy5kdXJhdGlvbjtcblx0XHRcdGlmIChsYXN0VGltZSA+IDApIGxhc3RUaW1lICU9IHRoaXMuZHVyYXRpb247XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGltZWxpbmVzID0gdGhpcy50aW1lbGluZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aW1lbGluZXMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0dGltZWxpbmVzW2ldLmFwcGx5KHNrZWxldG9uLCBsYXN0VGltZSwgdGltZSwgZXZlbnRzLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIG91dCwgYXBwbGllZFBvc2UpO1xuXHR9XG59XG5cblxuZXhwb3J0IGVudW0gUHJvcGVydHkge1xuXHRyb3RhdGUsXG5cdHgsXG5cdHksXG5cdHNjYWxlWCxcblx0c2NhbGVZLFxuXHRzaGVhclgsXG5cdHNoZWFyWSxcblx0aW5oZXJpdCxcblx0cmdiLFxuXHRhbHBoYSxcblx0cmdiMixcblx0YXR0YWNobWVudCxcblx0ZGVmb3JtLFxuXHRldmVudCxcblx0ZHJhd09yZGVyLFxuXHRpa0NvbnN0cmFpbnQsXG5cdHRyYW5zZm9ybUNvbnN0cmFpbnQsXG5cdHBhdGhDb25zdHJhaW50UG9zaXRpb24sXG5cdHBhdGhDb25zdHJhaW50U3BhY2luZyxcblx0cGF0aENvbnN0cmFpbnRNaXgsXG5cdHBoeXNpY3NDb25zdHJhaW50SW5lcnRpYSxcblx0cGh5c2ljc0NvbnN0cmFpbnRTdHJlbmd0aCxcblx0cGh5c2ljc0NvbnN0cmFpbnREYW1waW5nLFxuXHRwaHlzaWNzQ29uc3RyYWludE1hc3MsXG5cdHBoeXNpY3NDb25zdHJhaW50V2luZCxcblx0cGh5c2ljc0NvbnN0cmFpbnRHcmF2aXR5LFxuXHRwaHlzaWNzQ29uc3RyYWludE1peCxcblx0cGh5c2ljc0NvbnN0cmFpbnRSZXNldCxcblx0c2VxdWVuY2UsXG5cdHNsaWRlclRpbWUsXG5cdHNsaWRlck1peCxcbn1cblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGltZWxpbmVzLlxuICpcbiAqIFNlZSA8YSBocmVmPSdodHRwczovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWFwcGx5aW5nLWFuaW1hdGlvbnMjVGltZWxpbmUtQVBJJz5BcHBseWluZyBBbmltYXRpb25zPC9hPiBpbiB0aGUgU3BpbmVcbiAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRpbWVsaW5lIHtcblx0cmVhZG9ubHkgcHJvcGVydHlJZHM6IHN0cmluZ1tdO1xuXHRyZWFkb25seSBmcmFtZXM6IE51bWJlckFycmF5TGlrZTtcblxuXHQvKiogVHJ1ZSBpZiB0aGlzIHRpbWVsaW5lIHN1cHBvcnRzIGFkZGl0aXZlIGJsZW5kaW5nLiAqL1xuXHRhZGRpdGl2ZSA9IGZhbHNlO1xuXG5cdC8qKiBUcnVlIGlmIHRoaXMgdGltZWxpbmUgc2V0cyB2YWx1ZXMgaW5zdGFudGFuZW91c2x5IGFuZCBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gYmV0d2VlbiBmcmFtZXMuICovXG5cdGluc3RhbnQgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCAuLi5wcm9wZXJ0eUlkczogc3RyaW5nW10pIHtcblx0XHR0aGlzLnByb3BlcnR5SWRzID0gcHJvcGVydHlJZHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBVdGlscy5uZXdGbG9hdEFycmF5KGZyYW1lQ291bnQgKiB0aGlzLmdldEZyYW1lRW50cmllcygpKTtcblx0fVxuXG5cdGdldFByb3BlcnR5SWRzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9wZXJ0eUlkcztcblx0fVxuXG5cdC8qKiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBzdG9yZWQgcGVyIGZyYW1lLiAqL1xuXHRnZXRGcmFtZUVudHJpZXMgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHQvKiogVGhlIG51bWJlciBvZiBmcmFtZXMgaW4gdGhpcyB0aW1lbGluZS4gKi9cblx0Z2V0RnJhbWVDb3VudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJhbWVzLmxlbmd0aCAvIHRoaXMuZ2V0RnJhbWVFbnRyaWVzKCk7XG5cdH1cblxuXHQvKiogVGhlIGR1cmF0aW9uIG9mIHRoZSB0aW1lbGluZSBpbiBzZWNvbmRzLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBoaWdoZXN0IHRpbWUgb2YgYWxsIGZyYW1lcyBpbiB0aGUgdGltZWxpbmUuICovXG5cdGdldER1cmF0aW9uICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5sZW5ndGggLSB0aGlzLmdldEZyYW1lRW50cmllcygpXTtcblx0fVxuXG5cdC8qKiBBcHBsaWVzIHRoaXMgdGltZWxpbmUgdG8gdGhlIHNrZWxldG9uLlxuXHQgKlxuXHQgKiBTZWUgPGEgaHJlZj0naHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1hcHBseWluZy1hbmltYXRpb25zI1RpbWVsaW5lLUFQSSc+QXBwbHlpbmcgQW5pbWF0aW9uczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLlxuXHQgKiBAcGFyYW0gc2tlbGV0b24gVGhlIHNrZWxldG9uIHRoZSB0aW1lbGluZSBpcyBhcHBsaWVkIHRvLiBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYm9uZXMsIHNsb3RzLCBhbmQgb3RoZXIgc2tlbGV0b25cblx0ICogICAgICAgICAgIGNvbXBvbmVudHMgdGhlIHRpbWVsaW5lcyBtYXkgY2hhbmdlLlxuXHQgKiBAcGFyYW0gbGFzdFRpbWUgVGhlIGxhc3QgdGltZSBpbiBzZWNvbmRzIHRoaXMgdGltZWxpbmUgd2FzIGFwcGxpZWQuIFNvbWUgdGltZWxpbmVzIHRyaWdnZXIgb25seSBhdCBkaXNjcmV0ZSB0aW1lcywgaW5cblx0ICogICAgICAgICAgIHdoaWNoIGNhc2UgYWxsIGtleXMgYXJlIHRyaWdnZXJlZCBiZXR3ZWVuIGBsYXN0VGltZWAgKGV4Y2x1c2l2ZSkgYW5kIGB0aW1lYCAoaW5jbHVzaXZlKS5cblx0ICogICAgICAgICAgIFBhc3MgLTEgdGhlIGZpcnN0IHRpbWUgYSB0aW1lbGluZSBpcyBhcHBsaWVkIHRvIGVuc3VyZSBmcmFtZSAwIGlzIHRyaWdnZXJlZC5cblx0ICogQHBhcmFtIHRpbWUgVGhlIHRpbWUgaW4gc2Vjb25kcyB0aGUgc2tlbGV0b24gaXMgYmVpbmcgcG9zZWQgZm9yLiBUaW1lbGluZXMgZmluZCB0aGUgZnJhbWUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHRpbWUgYW5kXG5cdCAqICAgICAgICAgICBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZSBmcmFtZSB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBldmVudHMgSWYgYW55IGV2ZW50cyBhcmUgZmlyZWQsIHRoZXkgYXJlIGFkZGVkIHRvIHRoaXMgbGlzdC4gUGFzcyBudWxsIHRvIGlnbm9yZSBmaXJlZCBldmVudHMgb3IgaWYgbm8gdGltZWxpbmVzXG5cdCAqICAgICAgICAgICBmaXJlIGV2ZW50cy5cblx0ICogQHBhcmFtIGFscGhhIDAgYXBwbGllcyBzZXR1cCBvciBjdXJyZW50IHZhbHVlcyAoZGVwZW5kaW5nIG9uIGBmcm9tU2V0dXBgKSwgMSB1c2VzIHRpbWVsaW5lIHZhbHVlcywgYW5kXG5cdCAqICAgICAgICAgICBpbnRlcm1lZGlhdGUgdmFsdWVzIGludGVycG9sYXRlIGJldHdlZW4gdGhlbS4gQWRqdXN0aW5nIGBhbHBoYWAgb3ZlciB0aW1lIGNhbiBtaXggYSB0aW1lbGluZSBpbiBvclxuXHQgKiAgICAgICAgICAgb3V0LlxuXHQgKiBAcGFyYW0gZnJvbVNldHVwIElmIHRydWUsIGBhbHBoYWAgdHJhbnNpdGlvbnMgYmV0d2VlbiBzZXR1cCBhbmQgdGltZWxpbmUgdmFsdWVzLCBzZXR1cCB2YWx1ZXMgYXJlIHVzZWQgYmVmb3JlXG5cdCAqICAgICAgICAgICB0aGUgZmlyc3QgZnJhbWUgKGN1cnJlbnQgdmFsdWVzIGFyZSBub3QgdXNlZCkuIElmIGZhbHNlLCBgYWxwaGFgIHRyYW5zaXRpb25zIGJldHdlZW4gY3VycmVudCBhbmRcblx0ICogICAgICAgICAgIHRpbWVsaW5lIHZhbHVlcywgbm8gY2hhbmdlIGlzIG1hZGUgYmVmb3JlIHRoZSBmaXJzdCBmcmFtZS5cblx0ICogQHBhcmFtIGFkZCBJZiB0cnVlLCBmb3IgdGltZWxpbmVzIHRoYXQgc3VwcG9ydCBpdCwgdGhlaXIgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgc2V0dXAgb3IgY3VycmVudCB2YWx1ZXMgKGRlcGVuZGluZyBvblxuXHQgKiAgICAgICAgICAgYGZyb21TZXR1cGApLlxuXHQgKiBAcGFyYW0gb3V0IFRydWUgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIG1peGluZyBvdXQsIGVsc2UgaXQgaXMgbWl4aW5nIGluLiBVc2VkIGJ5IHRpbWVsaW5lcyB0aGF0IHBlcmZvcm0gaW5zdGFudFxuXHQgKiAgICAgICAgICAgdHJhbnNpdGlvbnMuXG5cdCAqIEBwYXJhbSBhcHBsaWVkUG9zZSBUcnVlIHRvIG1vZGlmeSB7QGxpbmsgUG9zZWQuYXBwbGllZFBvc2V9LCBlbHNlIHtAbGluayBQb3NlZC5wb3NlfSBpcyBtb2RpZmllZC4gKi9cblx0YWJzdHJhY3QgYXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdC8qKiBMaW5lYXIgc2VhcmNoIHVzaW5nIHRoZSBzcGVjaWZpZWQgc3RyaWRlIChkZWZhdWx0IDEpLlxuXHQgKiBAcGFyYW0gdGltZSBNdXN0IGJlID49IHRoZSBmaXJzdCB2YWx1ZSBpbiBgZnJhbWVzYC5cblx0ICogQHJldHVybiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHZhbHVlIDw9IGB0aW1lYC4gKi9cblx0c3RhdGljIHNlYXJjaCAoZnJhbWVzOiBOdW1iZXJBcnJheUxpa2UsIHRpbWU6IG51bWJlciwgc3RlcCA9IDEpIHtcblx0XHRjb25zdCBuID0gZnJhbWVzLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gc3RlcDsgaSA8IG47IGkgKz0gc3RlcClcblx0XHRcdGlmIChmcmFtZXNbaV0gPiB0aW1lKSByZXR1cm4gaSAtIHN0ZXA7XG5cdFx0cmV0dXJuIG4gLSBzdGVwO1xuXHR9XG59XG5cbi8qKiBBbiBpbnRlcmZhY2UgZm9yIHRpbWVsaW5lcyB0aGF0IGNoYW5nZSBhIHNsb3QncyBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbG90VGltZWxpbmUge1xuXHQvKiogVGhlIGluZGV4IG9mIHRoZSBzbG90IGluIHtAbGluayBTa2VsZXRvbi5zbG90c30gdGhhdCB3aWxsIGJlIGNoYW5nZWQgd2hlbiB0aGlzIHRpbWVsaW5lIGlzIGFwcGxpZWQuICovXG5cdHNsb3RJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTbG90VGltZWxpbmUgKG9iajogVGltZWxpbmUgJiBQYXJ0aWFsPFNsb3RUaW1lbGluZT4pOiBvYmogaXMgVGltZWxpbmUgJiBTbG90VGltZWxpbmUge1xuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmouc2xvdEluZGV4ID09PSAnbnVtYmVyJztcbn1cblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciB0aW1lbGluZXMgdGhhdCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGZyYW1lIHZhbHVlcyB1c2luZyBzdGVwcGVkLCBsaW5lYXIsIG9yIGEgQmV6aWVyIGN1cnZlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1cnZlVGltZWxpbmUgZXh0ZW5kcyBUaW1lbGluZSB7XG5cdHByb3RlY3RlZCBjdXJ2ZXM6IE51bWJlckFycmF5TGlrZTsgLy8gdHlwZSwgeCwgeSwgLi4uXG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgLi4ucHJvcGVydHlJZHM6IHN0cmluZ1tdKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgLi4ucHJvcGVydHlJZHMpO1xuXHRcdHRoaXMuY3VydmVzID0gVXRpbHMubmV3RmxvYXRBcnJheShmcmFtZUNvdW50ICsgYmV6aWVyQ291bnQgKiAxOC8qQkVaSUVSX1NJWkUqLyk7XG5cdFx0dGhpcy5jdXJ2ZXNbZnJhbWVDb3VudCAtIDFdID0gMS8qU1RFUFBFRCovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHNwZWNpZmllZCBrZXkgZnJhbWUgdG8gbGluZWFyIGludGVycG9sYXRpb24uICovXG5cdHNldExpbmVhciAoZnJhbWU6IG51bWJlcikge1xuXHRcdHRoaXMuY3VydmVzW2ZyYW1lXSA9IDAvKkxJTkVBUiovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHNwZWNpZmllZCBrZXkgZnJhbWUgdG8gc3RlcHBlZCBpbnRlcnBvbGF0aW9uLiAqL1xuXHRzZXRTdGVwcGVkIChmcmFtZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5jdXJ2ZXNbZnJhbWVdID0gMS8qU1RFUFBFRCovO1xuXHR9XG5cblx0LyoqIFNocmlua3MgdGhlIHN0b3JhZ2UgZm9yIEJlemllciBjdXJ2ZXMsIGZvciB1c2Ugd2hlbiBgYmV6aWVyQ291bnRgIChzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yKSB3YXMgbGFyZ2VyXG5cdCAqIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgQmV6aWVyIGN1cnZlcy4gKi9cblx0c2hyaW5rIChiZXppZXJDb3VudDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuZ2V0RnJhbWVDb3VudCgpICsgYmV6aWVyQ291bnQgKiAxOC8qQkVaSUVSX1NJWkUqLztcblx0XHRpZiAodGhpcy5jdXJ2ZXMubGVuZ3RoID4gc2l6ZSkge1xuXHRcdFx0Y29uc3QgbmV3Q3VydmVzID0gVXRpbHMubmV3RmxvYXRBcnJheShzaXplKTtcblx0XHRcdFV0aWxzLmFycmF5Q29weSh0aGlzLmN1cnZlcywgMCwgbmV3Q3VydmVzLCAwLCBzaXplKTtcblx0XHRcdHRoaXMuY3VydmVzID0gbmV3Q3VydmVzO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBTdG9yZXMgdGhlIHNlZ21lbnRzIGZvciB0aGUgc3BlY2lmaWVkIEJlemllciBjdXJ2ZS4gRm9yIHRpbWVsaW5lcyB0aGF0IG1vZGlmeSBtdWx0aXBsZSB2YWx1ZXMsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW5cblx0ICogb25lIGN1cnZlIHBlciBmcmFtZS5cblx0ICogQHBhcmFtIGJlemllciBUaGUgb3JkaW5hbCBvZiB0aGlzIEJlemllciBjdXJ2ZSBmb3IgdGhpcyB0aW1lbGluZSwgYmV0d2VlbiAwIGFuZCBgYmV6aWVyQ291bnQgLSAxYCAoc3BlY2lmaWVkXG5cdCAqICAgICAgICAgICBpbiB0aGUgY29uc3RydWN0b3IpLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSBmcmFtZSBCZXR3ZWVuIDAgYW5kIGBmcmFtZUNvdW50IC0gMWAsIGluY2x1c2l2ZS5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSBpbmRleCBvZiB0aGUgdmFsdWUgZm9yIHRoaXMgZnJhbWUgdGhhdCB0aGlzIGN1cnZlIGlzIHVzZWQgZm9yLlxuXHQgKiBAcGFyYW0gdGltZTEgVGhlIHRpbWUgZm9yIHRoZSBmaXJzdCBrZXkuXG5cdCAqIEBwYXJhbSB2YWx1ZTEgVGhlIHZhbHVlIGZvciB0aGUgZmlyc3Qga2V5LlxuXHQgKiBAcGFyYW0gY3gxIFRoZSB0aW1lIGZvciB0aGUgZmlyc3QgQmV6aWVyIGhhbmRsZS5cblx0ICogQHBhcmFtIGN5MSBUaGUgdmFsdWUgZm9yIHRoZSBmaXJzdCBCZXppZXIgaGFuZGxlLlxuXHQgKiBAcGFyYW0gY3gyIFRoZSB0aW1lIG9mIHRoZSBzZWNvbmQgQmV6aWVyIGhhbmRsZS5cblx0ICogQHBhcmFtIGN5MiBUaGUgdmFsdWUgZm9yIHRoZSBzZWNvbmQgQmV6aWVyIGhhbmRsZS5cblx0ICogQHBhcmFtIHRpbWUyIFRoZSB0aW1lIGZvciB0aGUgc2Vjb25kIGtleS5cblx0ICogQHBhcmFtIHZhbHVlMiBUaGUgdmFsdWUgZm9yIHRoZSBzZWNvbmQga2V5LiAqL1xuXHRzZXRCZXppZXIgKGJlemllcjogbnVtYmVyLCBmcmFtZTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyLCB0aW1lMTogbnVtYmVyLCB2YWx1ZTE6IG51bWJlciwgY3gxOiBudW1iZXIsIGN5MTogbnVtYmVyLCBjeDI6IG51bWJlcixcblx0XHRjeTI6IG51bWJlciwgdGltZTI6IG51bWJlciwgdmFsdWUyOiBudW1iZXIpIHtcblx0XHRjb25zdCBjdXJ2ZXMgPSB0aGlzLmN1cnZlcztcblx0XHRsZXQgaSA9IHRoaXMuZ2V0RnJhbWVDb3VudCgpICsgYmV6aWVyICogMTgvKkJFWklFUl9TSVpFKi87XG5cdFx0aWYgKHZhbHVlID09PSAwKSBjdXJ2ZXNbZnJhbWVdID0gMi8qQkVaSUVSKi8gKyBpO1xuXHRcdGNvbnN0IHRtcHggPSAodGltZTEgLSBjeDEgKiAyICsgY3gyKSAqIDAuMDMsIHRtcHkgPSAodmFsdWUxIC0gY3kxICogMiArIGN5MikgKiAwLjAzO1xuXHRcdGNvbnN0IGRkZHggPSAoKGN4MSAtIGN4MikgKiAzIC0gdGltZTEgKyB0aW1lMikgKiAwLjAwNiwgZGRkeSA9ICgoY3kxIC0gY3kyKSAqIDMgLSB2YWx1ZTEgKyB2YWx1ZTIpICogMC4wMDY7XG5cdFx0bGV0IGRkeCA9IHRtcHggKiAyICsgZGRkeCwgZGR5ID0gdG1weSAqIDIgKyBkZGR5O1xuXHRcdGxldCBkeCA9IChjeDEgLSB0aW1lMSkgKiAwLjMgKyB0bXB4ICsgZGRkeCAqIDAuMTY2NjY2NjcsIGR5ID0gKGN5MSAtIHZhbHVlMSkgKiAwLjMgKyB0bXB5ICsgZGRkeSAqIDAuMTY2NjY2Njc7XG5cdFx0bGV0IHggPSB0aW1lMSArIGR4LCB5ID0gdmFsdWUxICsgZHk7XG5cdFx0Zm9yIChsZXQgbiA9IGkgKyAxOC8qQkVaSUVSX1NJWkUqLzsgaSA8IG47IGkgKz0gMikge1xuXHRcdFx0Y3VydmVzW2ldID0geDtcblx0XHRcdGN1cnZlc1tpICsgMV0gPSB5O1xuXHRcdFx0ZHggKz0gZGR4O1xuXHRcdFx0ZHkgKz0gZGR5O1xuXHRcdFx0ZGR4ICs9IGRkZHg7XG5cdFx0XHRkZHkgKz0gZGRkeTtcblx0XHRcdHggKz0gZHg7XG5cdFx0XHR5ICs9IGR5O1xuXHRcdH1cblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBCZXppZXIgaW50ZXJwb2xhdGVkIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHRpbWUuXG5cdCAqIEBwYXJhbSBmcmFtZUluZGV4IFRoZSBpbmRleCBpbnRvIHtAbGluayBmcmFtZXN9IGZvciB0aGUgdmFsdWVzIG9mIHRoZSBmcmFtZSBiZWZvcmUgYHRpbWVgLlxuXHQgKiBAcGFyYW0gdmFsdWVPZmZzZXQgVGhlIG9mZnNldCBmcm9tIGBmcmFtZUluZGV4YCB0byB0aGUgdmFsdWUgdGhpcyBjdXJ2ZSBpcyB1c2VkIGZvci5cblx0ICogQHBhcmFtIGkgVGhlIGluZGV4IG9mIHRoZSBCZXppZXIgc2VnbWVudHMuIFNlZSB7QGxpbmsgZ2V0Q3VydmVUeXBlfS4gKi9cblx0Z2V0QmV6aWVyVmFsdWUgKHRpbWU6IG51bWJlciwgZnJhbWVJbmRleDogbnVtYmVyLCB2YWx1ZU9mZnNldDogbnVtYmVyLCBpOiBudW1iZXIpIHtcblx0XHRjb25zdCBjdXJ2ZXMgPSB0aGlzLmN1cnZlcztcblx0XHRpZiAoY3VydmVzW2ldID4gdGltZSkge1xuXHRcdFx0Y29uc3QgeCA9IHRoaXMuZnJhbWVzW2ZyYW1lSW5kZXhdLCB5ID0gdGhpcy5mcmFtZXNbZnJhbWVJbmRleCArIHZhbHVlT2Zmc2V0XTtcblx0XHRcdHJldHVybiB5ICsgKHRpbWUgLSB4KSAvIChjdXJ2ZXNbaV0gLSB4KSAqIChjdXJ2ZXNbaSArIDFdIC0geSk7XG5cdFx0fVxuXHRcdGNvbnN0IG4gPSBpICsgMTgvKkJFWklFUl9TSVpFKi87XG5cdFx0Zm9yIChpICs9IDI7IGkgPCBuOyBpICs9IDIpIHtcblx0XHRcdGlmIChjdXJ2ZXNbaV0gPj0gdGltZSkge1xuXHRcdFx0XHRjb25zdCB4ID0gY3VydmVzW2kgLSAyXSwgeSA9IGN1cnZlc1tpIC0gMV07XG5cdFx0XHRcdHJldHVybiB5ICsgKHRpbWUgLSB4KSAvIChjdXJ2ZXNbaV0gLSB4KSAqIChjdXJ2ZXNbaSArIDFdIC0geSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZyYW1lSW5kZXggKz0gdGhpcy5nZXRGcmFtZUVudHJpZXMoKTtcblx0XHRjb25zdCB4ID0gY3VydmVzW24gLSAyXSwgeSA9IGN1cnZlc1tuIC0gMV07XG5cdFx0cmV0dXJuIHkgKyAodGltZSAtIHgpIC8gKHRoaXMuZnJhbWVzW2ZyYW1lSW5kZXhdIC0geCkgKiAodGhpcy5mcmFtZXNbZnJhbWVJbmRleCArIHZhbHVlT2Zmc2V0XSAtIHkpO1xuXHR9XG59XG5cbi8qKiBUaGUgYmFzZSBjbGFzcyBmb3IgYSB7QGxpbmsgQ3VydmVUaW1lbGluZX0gdGhhdCBzZXRzIG9uZSBwcm9wZXJ0eSB3aXRoIGEgY3VydmUuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3VydmVUaW1lbGluZTEgZXh0ZW5kcyBDdXJ2ZVRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgcHJvcGVydHlJZDogc3RyaW5nKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHByb3BlcnR5SWQpO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gMi8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgYW5kIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudGAsIGluY2x1c2l2ZS5cblx0ICogQHBhcmFtIHRpbWUgVGhlIGZyYW1lIHRpbWUgaW4gc2Vjb25kcy4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdGZyYW1lIDw8PSAxO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypWQUxVRSovXSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGludGVycG9sYXRlZCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lLiAqL1xuXHRnZXRDdXJ2ZVZhbHVlICh0aW1lOiBudW1iZXIpIHtcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRsZXQgaSA9IGZyYW1lcy5sZW5ndGggLSAyO1xuXHRcdGZvciAobGV0IGlpID0gMjsgaWkgPD0gaTsgaWkgKz0gMikge1xuXHRcdFx0aWYgKGZyYW1lc1tpaV0gPiB0aW1lKSB7XG5cdFx0XHRcdGkgPSBpaSAtIDI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgPj4gMV07XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldLCB2YWx1ZSA9IGZyYW1lc1tpICsgMS8qVkFMVUUqL107XG5cdFx0XHRcdHJldHVybiB2YWx1ZSArICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDIvKkVOVFJJRVMqL10gLSBiZWZvcmUpICogKGZyYW1lc1tpICsgMi8qRU5UUklFUyovICsgMS8qVkFMVUUqL10gLSB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0cmV0dXJuIGZyYW1lc1tpICsgMS8qVkFMVUUqL107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlZBTFVFKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgZm9yIHByb3BlcnRpZXMgcmVsYXRpdmUgdG8gdGhlIHNldHVwIHZhbHVlLiBUaGUgdGltZWxpbmUgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIHNldHVwXG5cdCAqIHZhbHVlLCByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVGltZWxpbmUuYXBwbHl9LlxuXHQgKiBAcGFyYW0gY3VycmVudCBUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gc2V0dXAgVGhlIHNldHVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuICovXG5cdGdldFJlbGF0aXZlVmFsdWUgKHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlcikge1xuXHRcdGlmICh0aW1lIDwgdGhpcy5mcmFtZXNbMF0pIHJldHVybiBmcm9tU2V0dXAgPyBzZXR1cCA6IGN1cnJlbnQ7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEN1cnZlVmFsdWUodGltZSk7XG5cdFx0cmV0dXJuIGZyb21TZXR1cCA/IHNldHVwICsgdmFsdWUgKiBhbHBoYSA6IGN1cnJlbnQgKyAoYWRkID8gdmFsdWUgOiB2YWx1ZSArIHNldHVwIC0gY3VycmVudCkgKiBhbHBoYTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgZm9yIHByb3BlcnRpZXMgc2V0IGFzIGFic29sdXRlIHZhbHVlcy4gVGhlIHRpbWVsaW5lIHZhbHVlIHJlcGxhY2VzIHRoZSBzZXR1cCB2YWx1ZSxcblx0ICogcmF0aGVyIHRoYW4gYmVpbmcgcmVsYXRpdmUgdG8gaXQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVGltZWxpbmUuYXBwbHl9LlxuXHQgKiBAcGFyYW0gY3VycmVudCBUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gc2V0dXAgVGhlIHNldHVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuICovXG5cdGdldEFic29sdXRlVmFsdWUgKHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlcik6IG51bWJlcjtcblxuXHQvKiogUmV0dXJucyB0aGUgaW50ZXJwb2xhdGVkIHZhbHVlIGZvciBwcm9wZXJ0aWVzIHNldCBhcyBhYnNvbHV0ZSB2YWx1ZXMsIHVzaW5nIHRoZSBzcGVjaWZpZWQgdGltZWxpbmUgdmFsdWUgcmF0aGVyIHRoYW5cblx0ICogY2FsbGluZyB7QGxpbmsgZ2V0Q3VydmVWYWx1ZX0uXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVGltZWxpbmUuYXBwbHl9LlxuXHQgKiBAcGFyYW0gY3VycmVudCBUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gc2V0dXAgVGhlIHNldHVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdGltZWxpbmUgdmFsdWUgdG8gYXBwbHkuICovXG5cdGdldEFic29sdXRlVmFsdWUgKHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IG51bWJlcjtcblxuXHRnZXRBYnNvbHV0ZVZhbHVlICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLCBjdXJyZW50OiBudW1iZXIsIHNldHVwOiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlMSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIGN1cnJlbnQsIHNldHVwKTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlMih0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIGN1cnJlbnQsIHNldHVwLCB2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFic29sdXRlVmFsdWUxICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLCBjdXJyZW50OiBudW1iZXIsIHNldHVwOiBudW1iZXIpIHtcblx0XHRpZiAodGltZSA8IHRoaXMuZnJhbWVzWzBdKSByZXR1cm4gZnJvbVNldHVwID8gc2V0dXAgOiBjdXJyZW50O1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDdXJ2ZVZhbHVlKHRpbWUpO1xuXHRcdHJldHVybiBmcm9tU2V0dXAgPyBzZXR1cCArIChhZGQgPyB2YWx1ZSA6IHZhbHVlIC0gc2V0dXApICogYWxwaGEgOiBjdXJyZW50ICsgKGFkZCA/IHZhbHVlIDogdmFsdWUgLSBjdXJyZW50KSAqIGFscGhhO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRBYnNvbHV0ZVZhbHVlMiAodGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbiwgY3VycmVudDogbnVtYmVyLCBzZXR1cDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG5cdFx0aWYgKHRpbWUgPCB0aGlzLmZyYW1lc1swXSkgcmV0dXJuIGZyb21TZXR1cCA/IHNldHVwIDogY3VycmVudDtcblx0XHRyZXR1cm4gZnJvbVNldHVwID8gc2V0dXAgKyAoYWRkID8gdmFsdWUgOiB2YWx1ZSAtIHNldHVwKSAqIGFscGhhIDogY3VycmVudCArIChhZGQgPyB2YWx1ZSA6IHZhbHVlIC0gY3VycmVudCkgKiBhbHBoYTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgZm9yIHNjYWxlIHByb3BlcnRpZXMuIFRoZSB0aW1lbGluZSBhbmQgc2V0dXAgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGFuZCBzaWduIGFkanVzdGVkLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFRpbWVsaW5lLmFwcGx5fS5cblx0ICogQHBhcmFtIGN1cnJlbnQgVGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHNldHVwIFRoZSBzZXR1cCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LiAqL1xuXHRnZXRTY2FsZVZhbHVlICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlcikge1xuXHRcdGlmICh0aW1lIDwgdGhpcy5mcmFtZXNbMF0pIHJldHVybiBmcm9tU2V0dXAgPyBzZXR1cCA6IGN1cnJlbnQ7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEN1cnZlVmFsdWUodGltZSkgKiBzZXR1cDtcblx0XHRpZiAoYWxwaGEgPT09IDEgJiYgIWFkZCkgcmV0dXJuIHZhbHVlO1xuXHRcdGxldCBiYXNlID0gZnJvbVNldHVwID8gc2V0dXAgOiBjdXJyZW50O1xuXHRcdGlmIChhZGQpIHJldHVybiBiYXNlICsgKHZhbHVlIC0gc2V0dXApICogYWxwaGE7XG5cdFx0aWYgKG91dCkgcmV0dXJuIGJhc2UgKyAoTWF0aC5hYnModmFsdWUpICogTWF0aC5zaWduKGJhc2UpIC0gYmFzZSkgKiBhbHBoYTtcblx0XHRiYXNlID0gTWF0aC5hYnMoYmFzZSkgKiBNYXRoLnNpZ24odmFsdWUpO1xuXHRcdHJldHVybiBiYXNlICsgKHZhbHVlIC0gYmFzZSkgKiBhbHBoYTtcblx0fVxufVxuXG4vKiogQW4gaW50ZXJmYWNlIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgYSBib25lJ3MgcHJvcGVydGllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZVRpbWVsaW5lIHtcblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgYm9uZSBpbiB7QGxpbmsgU2tlbGV0b24uYm9uZXN9IHRoYXQgaXMgY2hhbmdlZCBieSB0aGlzIHRpbWVsaW5lLiAqL1xuXHRib25lSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9uZVRpbWVsaW5lIChvYmo6IFRpbWVsaW5lICYgUGFydGlhbDxCb25lVGltZWxpbmU+KTogb2JqIGlzIFRpbWVsaW5lICYgQm9uZVRpbWVsaW5lIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLmJvbmVJbmRleCA9PT0gJ251bWJlcic7XG59XG5cbi8qKiBUaGUgYmFzZSBjbGFzcyBmb3IgdGltZWxpbmVzIHRoYXQgY2hhbmdlIDEgYm9uZSBwcm9wZXJ0eSB3aXRoIGEgY3VydmUuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQm9uZVRpbWVsaW5lMSBleHRlbmRzIEN1cnZlVGltZWxpbmUxIGltcGxlbWVudHMgQm9uZVRpbWVsaW5lIHtcblx0cmVhZG9ubHkgYm9uZUluZGV4OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIsIHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtwcm9wZXJ0eX18JHtib25lSW5kZXh9YCk7XG5cdFx0dGhpcy5ib25lSW5kZXggPSBib25lSW5kZXg7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgYXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBib25lID0gc2tlbGV0b24uYm9uZXNbdGhpcy5ib25lSW5kZXhdO1xuXHRcdGlmIChib25lLmFjdGl2ZSlcblx0XHRcdHRoaXMuYXBwbHkxKGFwcGxpZWRQb3NlID8gYm9uZS5hcHBsaWVkUG9zZSA6IGJvbmUucG9zZSwgYm9uZS5kYXRhLnNldHVwUG9zZSwgdGltZSwgYWxwaGEsIGZyb21TZXR1cCwgYWRkLCBvdXQpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFic3RyYWN0IGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIHRpbWVsaW5lcyB0aGF0IGNoYW5nZSB0d28gYm9uZSBwcm9wZXJ0aWVzIHdpdGggYSBjdXJ2ZS4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCb25lVGltZWxpbmUyIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIEJvbmVUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGJvbmVJbmRleDtcblxuXHQvKiogQHBhcmFtIGJlemllckNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBCZXppZXIgY3VydmVzLiBTZWUge0BsaW5rIHNocmlua30uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUlkcyBVbmlxdWUgaWRlbnRpZmllcnMgZm9yIHRoZSBwcm9wZXJ0aWVzIHRoZSB0aW1lbGluZSBtb2RpZmllcy4gKi9cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIsIHByb3BlcnR5MTogUHJvcGVydHksIHByb3BlcnR5MjogUHJvcGVydHkpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYCR7cHJvcGVydHkxfXwke2JvbmVJbmRleH1gLCBgJHtwcm9wZXJ0eTJ9fCR7Ym9uZUluZGV4fWApO1xuXHRcdHRoaXMuYm9uZUluZGV4ID0gYm9uZUluZGV4O1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gMy8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgYW5kIHZhbHVlcyBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHZhbHVlMTogbnVtYmVyLCB2YWx1ZTI6IG51bWJlcikge1xuXHRcdGZyYW1lICo9IDMvKkVOVFJJRVMqLztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qVkFMVUUxKi9dID0gdmFsdWUxO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMi8qVkFMVUUyKi9dID0gdmFsdWUyO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBib25lID0gc2tlbGV0b24uYm9uZXNbdGhpcy5ib25lSW5kZXhdO1xuXHRcdGlmIChib25lLmFjdGl2ZSlcblx0XHRcdHRoaXMuYXBwbHkxKGFwcGxpZWRQb3NlID8gYm9uZS5hcHBsaWVkUG9zZSA6IGJvbmUucG9zZSwgYm9uZS5kYXRhLnNldHVwUG9zZSwgdGltZSwgYWxwaGEsIGZyb21TZXR1cCwgYWRkLCBvdXQpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFic3RyYWN0IGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4sKTogdm9pZDtcbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmVQb3NlLnJvdGF0aW9ufS4gKi9cbmV4cG9ydCBjbGFzcyBSb3RhdGVUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnJvdGF0ZSk7XG5cdH1cblxuXHRhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sXG5cdFx0b3V0OiBib29sZWFuKSB7XG5cdFx0cG9zZS5yb3RhdGlvbiA9IHRoaXMuZ2V0UmVsYXRpdmVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIHBvc2Uucm90YXRpb24sIHNldHVwLnJvdGF0aW9uKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2UueH0gYW5kIHtAbGluayBCb25lUG9zZS55fS4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTIge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LngsIFByb3BlcnR5LnkpO1xuXHR9XG5cblx0YXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdHBvc2UueCA9IHNldHVwLng7XG5cdFx0XHRcdHBvc2UueSA9IHNldHVwLnk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHggPSAwLCB5ID0gMDtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgMy8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpIC8gMy8qRU5UUklFUyovXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDEvKlZBTFVFMSovXTtcblx0XHRcdFx0eSA9IGZyYW1lc1tpICsgMi8qVkFMVUUyKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHggKz0gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovICsgMS8qVkFMVUUxKi9dIC0geCkgKiB0O1xuXHRcdFx0XHR5ICs9IChmcmFtZXNbaSArIDMvKkVOVFJJRVMqLyArIDIvKlZBTFVFMiovXSAtIHkpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0eCA9IGZyYW1lc1tpICsgMS8qVkFMVUUxKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAyLypWQUxVRTIqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0eCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qVkFMVUUxKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qVkFMVUUyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdH1cblxuXHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdHBvc2UueCA9IHNldHVwLnggKyB4ICogYWxwaGE7XG5cdFx0XHRwb3NlLnkgPSBzZXR1cC55ICsgeSAqIGFscGhhO1xuXHRcdH0gZWxzZSBpZiAoYWRkKSB7XG5cdFx0XHRwb3NlLnggKz0geCAqIGFscGhhO1xuXHRcdFx0cG9zZS55ICs9IHkgKiBhbHBoYTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zZS54ICs9IChzZXR1cC54ICsgeCAtIHBvc2UueCkgKiBhbHBoYTtcblx0XHRcdHBvc2UueSArPSAoc2V0dXAueSArIHkgLSBwb3NlLnkpICogYWxwaGE7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBCb25lUG9zZS54fS4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVYVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS54KTtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sXG5cdFx0b3V0OiBib29sZWFuKSB7XG5cdFx0cG9zZS54ID0gdGhpcy5nZXRSZWxhdGl2ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tU2V0dXAsIGFkZCwgcG9zZS54LCBzZXR1cC54KTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2UueX0uICovXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlWVRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkueSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdHBvc2UueSA9IHRoaXMuZ2V0UmVsYXRpdmVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIHBvc2UueSwgc2V0dXAueSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmVQb3NlLnNjYWxlWH0gYW5kIHtAbGluayBCb25lUG9zZS5zY2FsZVl9LiAqL1xuZXhwb3J0IGNsYXNzIFNjYWxlVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUyIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS5zY2FsZVgsIFByb3BlcnR5LnNjYWxlWSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdHBvc2Uuc2NhbGVYID0gc2V0dXAuc2NhbGVYO1xuXHRcdFx0XHRwb3NlLnNjYWxlWSA9IHNldHVwLnNjYWxlWTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgeDogbnVtYmVyLCB5OiBudW1iZXI7XG5cdFx0Y29uc3QgaSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDMvKkVOVFJJRVMqLyk7XG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSAvIDMvKkVOVFJJRVMqL107XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAxLypWQUxVRTEqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDIvKlZBTFVFMiovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDMvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHR4ICs9IChmcmFtZXNbaSArIDMvKkVOVFJJRVMqLyArIDEvKlZBTFVFMSovXSAtIHgpICogdDtcblx0XHRcdFx0eSArPSAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi8gKyAyLypWQUxVRTIqL10gLSB5KSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDEvKlZBTFVFMSovXTtcblx0XHRcdFx0eSA9IGZyYW1lc1tpICsgMi8qVkFMVUUyKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHggPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlZBTFVFMSovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHkgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKlZBTFVFMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cdFx0eCAqPSBzZXR1cC5zY2FsZVg7XG5cdFx0eSAqPSBzZXR1cC5zY2FsZVk7XG5cblx0XHRpZiAoYWxwaGEgPT09IDEgJiYgIWFkZCkge1xuXHRcdFx0cG9zZS5zY2FsZVggPSB4O1xuXHRcdFx0cG9zZS5zY2FsZVkgPSB5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgYnggPSAwLCBieSA9IDA7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdGJ4ID0gc2V0dXAuc2NhbGVYO1xuXHRcdFx0XHRieSA9IHNldHVwLnNjYWxlWTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ4ID0gcG9zZS5zY2FsZVg7XG5cdFx0XHRcdGJ5ID0gcG9zZS5zY2FsZVk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYWRkKSB7XG5cdFx0XHRcdHBvc2Uuc2NhbGVYID0gYnggKyAoeCAtIHNldHVwLnNjYWxlWCkgKiBhbHBoYTtcblx0XHRcdFx0cG9zZS5zY2FsZVkgPSBieSArICh5IC0gc2V0dXAuc2NhbGVZKSAqIGFscGhhO1xuXHRcdFx0fSBlbHNlIGlmIChvdXQpIHtcblx0XHRcdFx0cG9zZS5zY2FsZVggPSBieCArIChNYXRoLmFicyh4KSAqIE1hdGguc2lnbihieCkgLSBieCkgKiBhbHBoYTtcblx0XHRcdFx0cG9zZS5zY2FsZVkgPSBieSArIChNYXRoLmFicyh5KSAqIE1hdGguc2lnbihieSkgLSBieSkgKiBhbHBoYTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ4ID0gTWF0aC5hYnMoYngpICogTWF0aC5zaWduKHgpO1xuXHRcdFx0XHRieSA9IE1hdGguYWJzKGJ5KSAqIE1hdGguc2lnbih5KTtcblx0XHRcdFx0cG9zZS5zY2FsZVggPSBieCArICh4IC0gYngpICogYWxwaGE7XG5cdFx0XHRcdHBvc2Uuc2NhbGVZID0gYnkgKyAoeSAtIGJ5KSAqIGFscGhhO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyBhIHtAbGluayBCb25lUG9zZS5zY2FsZVh9LiAqL1xuZXhwb3J0IGNsYXNzIFNjYWxlWFRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkuc2NhbGVYKTtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sXG5cdFx0b3V0OiBib29sZWFuKSB7XG5cdFx0cG9zZS5zY2FsZVggPSB0aGlzLmdldFNjYWxlVmFsdWUodGltZSwgYWxwaGEsIGZyb21TZXR1cCwgYWRkLCBvdXQsIHBvc2Uuc2NhbGVYLCBzZXR1cC5zY2FsZVgpO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIGEge0BsaW5rIEJvbmVQb3NlLnNjYWxlWX0uICovXG5leHBvcnQgY2xhc3MgU2NhbGVZVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS5zY2FsZVkpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pIHtcblx0XHRwb3NlLnNjYWxlWSA9IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIG91dCwgcG9zZS5zY2FsZVksIHNldHVwLnNjYWxlWSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmUuc2hlYXJYfSBhbmQge0BsaW5rIEJvbmUuc2hlYXJZfS4gKi9cbmV4cG9ydCBjbGFzcyBTaGVhclRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMiB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkuc2hlYXJYLCBQcm9wZXJ0eS5zaGVhclkpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCkge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdHBvc2Uuc2hlYXJYID0gc2V0dXAuc2hlYXJYO1xuXHRcdFx0XHRwb3NlLnNoZWFyWSA9IHNldHVwLnNoZWFyWTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgeCA9IDAsIHkgPSAwO1xuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCAzLypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyAzLypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0eCA9IGZyYW1lc1tpICsgMS8qVkFMVUUxKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAyLypWQUxVRTIqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0eCArPSAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi8gKyAxLypWQUxVRTEqL10gLSB4KSAqIHQ7XG5cdFx0XHRcdHkgKz0gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovICsgMi8qVkFMVUUyKi9dIC0geSkgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAxLypWQUxVRTEqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDIvKlZBTFVFMiovXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR4ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypWQUxVRTEqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR5ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypWQUxVRTIqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0cG9zZS5zaGVhclggPSBzZXR1cC5zaGVhclggKyB4ICogYWxwaGE7XG5cdFx0XHRwb3NlLnNoZWFyWSA9IHNldHVwLnNoZWFyWSArIHkgKiBhbHBoYTtcblx0XHR9IGVsc2UgaWYgKGFkZCkge1xuXHRcdFx0cG9zZS5zaGVhclggKz0geCAqIGFscGhhO1xuXHRcdFx0cG9zZS5zaGVhclkgKz0geSAqIGFscGhhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb3NlLnNoZWFyWCArPSAoc2V0dXAuc2hlYXJYICsgeCAtIHBvc2Uuc2hlYXJYKSAqIGFscGhhO1xuXHRcdFx0cG9zZS5zaGVhclkgKz0gKHNldHVwLnNoZWFyWSArIHkgLSBwb3NlLnNoZWFyWSkgKiBhbHBoYTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmUuc2hlYXJYfSBhbmQge0BsaW5rIEJvbmUuc2hlYXJZfS4gKi9cbmV4cG9ydCBjbGFzcyBTaGVhclhUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnNoZWFyWCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdHBvc2Uuc2hlYXJYID0gdGhpcy5nZXRSZWxhdGl2ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tU2V0dXAsIGFkZCwgcG9zZS5zaGVhclgsIHNldHVwLnNoZWFyWCk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmUuc2hlYXJYfSBhbmQge0BsaW5rIEJvbmUuc2hlYXJZfS4gKi9cbmV4cG9ydCBjbGFzcyBTaGVhcllUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnNoZWFyWSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdHBvc2Uuc2hlYXJZID0gdGhpcy5nZXRSZWxhdGl2ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tU2V0dXAsIGFkZCwgcG9zZS5zaGVhclksIHNldHVwLnNoZWFyWSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmVQb3NlLmluaGVyaXR9LiAqL1xuZXhwb3J0IGNsYXNzIEluaGVyaXRUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIGltcGxlbWVudHMgQm9uZVRpbWVsaW5lIHtcblx0cmVhZG9ubHkgYm9uZUluZGV4OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBgJHtQcm9wZXJ0eS5pbmhlcml0fXwke2JvbmVJbmRleH1gKTtcblx0XHR0aGlzLmJvbmVJbmRleCA9IGJvbmVJbmRleDtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0cHVibGljIGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDIvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBpbmhlcml0IHRyYW5zZm9ybSBtb2RlIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudGAsIGluY2x1c2l2ZS5cblx0ICogQHBhcmFtIHRpbWUgVGhlIGZyYW1lIHRpbWUgaW4gc2Vjb25kcy4gKi9cblx0cHVibGljIHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGluaGVyaXQ6IEluaGVyaXQpIHtcblx0XHRmcmFtZSAqPSAyLypFTlRSSUVTKi87XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWVdID0gdGltZTtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDEvKklOSEVSSVQqL10gPSBpbmhlcml0O1xuXHR9XG5cblx0cHVibGljIGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGJvbmUgPSBza2VsZXRvbi5ib25lc1t0aGlzLmJvbmVJbmRleF07XG5cdFx0aWYgKCFib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGJvbmUuYXBwbGllZFBvc2UgOiBib25lLnBvc2U7XG5cblx0XHRpZiAob3V0KSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSBwb3NlLmluaGVyaXQgPSBib25lLmRhdGEuc2V0dXBQb3NlLmluaGVyaXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdFx0aWYgKGZyb21TZXR1cCkgcG9zZS5pbmhlcml0ID0gYm9uZS5kYXRhLnNldHVwUG9zZS5pbmhlcml0O1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHBvc2UuaW5oZXJpdCA9IHRoaXMuZnJhbWVzW1RpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDIvKkVOVFJJRVMqLykgKyAxLypJTkhFUklUKi9dO1xuXHRcdH1cblx0fVxufVxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgYW55IG51bWJlciBvZiBzbG90IHByb3BlcnRpZXMgd2l0aCBhIGN1cnZlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNsb3RDdXJ2ZVRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHJlYWRvbmx5IHNsb3RJbmRleDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyLCAuLi5wcm9wZXJ0eUlkczogc3RyaW5nW10pIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgLi4ucHJvcGVydHlJZHMpO1xuXHRcdHRoaXMuc2xvdEluZGV4ID0gc2xvdEluZGV4O1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3Qgc2xvdCA9IHNrZWxldG9uLnNsb3RzW3RoaXMuc2xvdEluZGV4XTtcblx0XHRpZiAoc2xvdC5ib25lLmFjdGl2ZSkgdGhpcy5hcHBseTEoc2xvdCwgYXBwbGllZFBvc2UgPyBzbG90LmFwcGxpZWRQb3NlIDogc2xvdC5wb3NlLCB0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFic3RyYWN0IGFwcGx5MSAoc2xvdDogU2xvdCwgcG9zZTogU2xvdFBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UuY29sb3J9LiAqL1xuZXhwb3J0IGNsYXNzIFJHQkFUaW1lbGluZSBleHRlbmRzIFNsb3RDdXJ2ZVRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgc2xvdEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgc2xvdEluZGV4LCAvL1xuXHRcdFx0YCR7UHJvcGVydHkucmdifXwke3Nsb3RJbmRleH1gLCAvL1xuXHRcdFx0YCR7UHJvcGVydHkuYWxwaGF9fCR7c2xvdEluZGV4fWApO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gNS8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgaW4gc2Vjb25kcywgcmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGZvciB0aGUgc3BlY2lmaWVkIGtleSBmcmFtZS4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XG5cdFx0ZnJhbWUgKj0gNS8qRU5UUklFUyovO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypSKi9dID0gcjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDIvKkcqL10gPSBnO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQiovXSA9IGI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA0LypBKi9dID0gYTtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHNsb3Q6IFNsb3QsIHBvc2U6IFNsb3RQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuKSB7XG5cdFx0Y29uc3QgY29sb3IgPSBwb3NlLmNvbG9yO1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSBjb2xvci5zZXRGcm9tQ29sb3Ioc2xvdC5kYXRhLnNldHVwUG9zZS5jb2xvcik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHIgPSAwLCBnID0gMCwgYiA9IDAsIGEgPSAwO1xuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCA1LypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyA1LypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0YSA9IGZyYW1lc1tpICsgNC8qQSovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDUvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHRyICs9IChmcmFtZXNbaSArIDUvKkVOVFJJRVMqLyArIDEvKlIqL10gLSByKSAqIHQ7XG5cdFx0XHRcdGcgKz0gKGZyYW1lc1tpICsgNS8qRU5UUklFUyovICsgMi8qRyovXSAtIGcpICogdDtcblx0XHRcdFx0YiArPSAoZnJhbWVzW2kgKyA1LypFTlRSSUVTKi8gKyAzLypCKi9dIC0gYikgKiB0O1xuXHRcdFx0XHRhICs9IChmcmFtZXNbaSArIDUvKkVOVFJJRVMqLyArIDQvKkEqL10gLSBhKSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHIgPSBmcmFtZXNbaSArIDEvKlIqL107XG5cdFx0XHRcdGcgPSBmcmFtZXNbaSArIDIvKkcqL107XG5cdFx0XHRcdGIgPSBmcmFtZXNbaSArIDMvKkIqL107XG5cdFx0XHRcdGEgPSBmcmFtZXNbaSArIDQvKkEqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ciA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qUiovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGcgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKkcqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDMvKkIqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiAyIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRhID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA0LypBKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMyAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cdFx0aWYgKGFscGhhID09PSAxKVxuXHRcdFx0Y29sb3Iuc2V0KHIsIGcsIGIsIGEpO1xuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRcdGNvbG9yLnNldChzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhLCBzZXR1cC5nICsgKGcgLSBzZXR1cC5nKSAqIGFscGhhLCBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhLFxuXHRcdFx0XHRcdHNldHVwLmEgKyAoYSAtIHNldHVwLmEpICogYWxwaGEpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbG9yLmFkZCgociAtIGNvbG9yLnIpICogYWxwaGEsIChnIC0gY29sb3IuZykgKiBhbHBoYSwgKGIgLSBjb2xvci5iKSAqIGFscGhhLCAoYSAtIGNvbG9yLmEpICogYWxwaGEpO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyBSR0IgZm9yIGEgc2xvdCdzIHtAbGluayBTbG90UG9zZS5jb2xvcn0uICovXG5leHBvcnQgY2xhc3MgUkdCVGltZWxpbmUgZXh0ZW5kcyBTbG90Q3VydmVUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCwgYCR7UHJvcGVydHkucmdifXwke3Nsb3RJbmRleH1gKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDQvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMsIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgZnJhbWUuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpIHtcblx0XHRmcmFtZSA8PD0gMjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qUiovXSA9IHI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAyLypHKi9dID0gZztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDMvKkIqL10gPSBiO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAoc2xvdDogU2xvdCwgcG9zZTogU2xvdFBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBjb2xvciA9IHBvc2UuY29sb3I7XG5cdFx0bGV0IHIgPSAwLCBnID0gMCwgYiA9IDA7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0Y29uc3Qgc2V0dXAgPSBzbG90LmRhdGEuc2V0dXBQb3NlLmNvbG9yO1xuXHRcdFx0XHRjb2xvci5yID0gc2V0dXAucjtcblx0XHRcdFx0Y29sb3IuZyA9IHNldHVwLmc7XG5cdFx0XHRcdGNvbG9yLmIgPSBzZXR1cC5iO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCA0LypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgPj4gMl07XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldO1xuXHRcdFx0XHRyID0gZnJhbWVzW2kgKyAxLypSKi9dO1xuXHRcdFx0XHRnID0gZnJhbWVzW2kgKyAyLypHKi9dO1xuXHRcdFx0XHRiID0gZnJhbWVzW2kgKyAzLypCKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgNC8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHIgKz0gKGZyYW1lc1tpICsgNC8qRU5UUklFUyovICsgMS8qUiovXSAtIHIpICogdDtcblx0XHRcdFx0ZyArPSAoZnJhbWVzW2kgKyA0LypFTlRSSUVTKi8gKyAyLypHKi9dIC0gZykgKiB0O1xuXHRcdFx0XHRiICs9IChmcmFtZXNbaSArIDQvKkVOVFJJRVMqLyArIDMvKkIqL10gLSBiKSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHIgPSBmcmFtZXNbaSArIDEvKlIqL107XG5cdFx0XHRcdGcgPSBmcmFtZXNbaSArIDIvKkcqL107XG5cdFx0XHRcdGIgPSBmcmFtZXNbaSArIDMvKkIqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ciA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qUiovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGcgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKkcqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDMvKkIqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiAyIC0gMi8qQkVaSUVSKi8pO1xuXHRcdH1cblx0XHRpZiAoYWxwaGEgIT09IDEpIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0Y29uc3Qgc2V0dXAgPSBzbG90LmRhdGEuc2V0dXBQb3NlLmNvbG9yO1xuXHRcdFx0XHRyID0gc2V0dXAuciArIChyIC0gc2V0dXAucikgKiBhbHBoYTtcblx0XHRcdFx0ZyA9IHNldHVwLmcgKyAoZyAtIHNldHVwLmcpICogYWxwaGE7XG5cdFx0XHRcdGIgPSBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ciA9IGNvbG9yLnIgKyAociAtIGNvbG9yLnIpICogYWxwaGE7XG5cdFx0XHRcdGcgPSBjb2xvci5nICsgKGcgLSBjb2xvci5nKSAqIGFscGhhO1xuXHRcdFx0XHRiID0gY29sb3IuYiArIChiIC0gY29sb3IuYikgKiBhbHBoYTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29sb3IuciA9IHIgPCAwID8gMCA6IChyID4gMSA/IDEgOiByKTtcblx0XHRjb2xvci5nID0gZyA8IDAgPyAwIDogKGcgPiAxID8gMSA6IGcpO1xuXHRcdGNvbG9yLmIgPSBiIDwgMCA/IDAgOiAoYiA+IDEgPyAxIDogYik7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMgYWxwaGEgZm9yIGEgc2xvdCdzIHtAbGluayBTbG90UG9zZS5jb2xvcn0uICovXG5leHBvcnQgY2xhc3MgQWxwaGFUaW1lbGluZSBleHRlbmRzIEN1cnZlVGltZWxpbmUxIGltcGxlbWVudHMgU2xvdFRpbWVsaW5lIHtcblx0c2xvdEluZGV4ID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtQcm9wZXJ0eS5hbHBoYX18JHtzbG90SW5kZXh9YCk7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cblx0XHRjb25zdCBzbG90ID0gc2tlbGV0b24uc2xvdHNbdGhpcy5zbG90SW5kZXhdO1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sb3IgPSAoYXBwbGllZFBvc2UgPyBzbG90LmFwcGxpZWRQb3NlIDogc2xvdC5wb3NlKS5jb2xvcjtcblx0XHRsZXQgYSA9IDA7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIGNvbG9yLmEgPSBzbG90LmRhdGEuc2V0dXBQb3NlLmNvbG9yLmE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YSA9IHRoaXMuZ2V0Q3VydmVWYWx1ZSh0aW1lKTtcblx0XHRpZiAoYWxwaGEgIT09IDEpIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0Y29uc3Qgc2V0dXAgPSBzbG90LmRhdGEuc2V0dXBQb3NlLmNvbG9yO1xuXHRcdFx0XHRhID0gc2V0dXAuYSArIChhIC0gc2V0dXAuYSkgKiBhbHBoYTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRhID0gY29sb3IuYSArIChhIC0gY29sb3IuYSkgKiBhbHBoYTtcblx0XHR9XG5cdFx0Y29sb3IuYSA9IGEgPCAwID8gMCA6IChhID4gMSA/IDEgOiBhKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UuY29sb3J9IGFuZCB7QGxpbmsgU2xvdFBvc2UuZGFya0NvbG9yfSBmb3IgdHdvIGNvbG9yIHRpbnRpbmcuICovXG5leHBvcnQgY2xhc3MgUkdCQTJUaW1lbGluZSBleHRlbmRzIFNsb3RDdXJ2ZVRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgc2xvdEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgc2xvdEluZGV4LCAvL1xuXHRcdFx0YCR7UHJvcGVydHkucmdifXwke3Nsb3RJbmRleH1gLCAvL1xuXHRcdFx0YCR7UHJvcGVydHkuYWxwaGF9fCR7c2xvdEluZGV4fWAsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2IyfXwke3Nsb3RJbmRleH1gKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDgvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMsIGxpZ2h0LCBhbmQgZGFyayBjb2xvcnMgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIsIHIyOiBudW1iZXIsIGcyOiBudW1iZXIsIGIyOiBudW1iZXIpIHtcblx0XHRmcmFtZSA8PD0gMztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qUiovXSA9IHI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAyLypHKi9dID0gZztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDMvKkIqL10gPSBiO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNC8qQSovXSA9IGE7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA1LypSMiovXSA9IHIyO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNi8qRzIqL10gPSBnMjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDcvKkIyKi9dID0gYjI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChzbG90OiBTbG90LCBwb3NlOiBTbG90UG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbikge1xuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRjb25zdCBsaWdodCA9IHBvc2UuY29sb3IsIGRhcmsgPSBwb3NlLmRhcmtDb2xvciE7XG5cdFx0bGV0IHIyID0gMCwgZzIgPSAwLCBiMiA9IDBcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRcdGxpZ2h0LnNldEZyb21Db2xvcihzZXR1cC5jb2xvcik7XG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdFx0Y29uc3Qgc2V0dXBEYXJrID0gc2V0dXAuZGFya0NvbG9yITtcblx0XHRcdFx0ZGFyay5yID0gc2V0dXBEYXJrLnI7XG5cdFx0XHRcdGRhcmsuZyA9IHNldHVwRGFyay5nO1xuXHRcdFx0XHRkYXJrLmIgPSBzZXR1cERhcmsuYjtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgciA9IDAsIGcgPSAwLCBiID0gMCwgYSA9IDA7XG5cdFx0Y29uc3QgaSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDgvKkVOVFJJRVMqLyk7XG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSA+PiAzXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHIgPSBmcmFtZXNbaSArIDEvKlIqL107XG5cdFx0XHRcdGcgPSBmcmFtZXNbaSArIDIvKkcqL107XG5cdFx0XHRcdGIgPSBmcmFtZXNbaSArIDMvKkIqL107XG5cdFx0XHRcdGEgPSBmcmFtZXNbaSArIDQvKkEqL107XG5cdFx0XHRcdHIyID0gZnJhbWVzW2kgKyA1LypSMiovXTtcblx0XHRcdFx0ZzIgPSBmcmFtZXNbaSArIDYvKkcyKi9dO1xuXHRcdFx0XHRiMiA9IGZyYW1lc1tpICsgNy8qQjIqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0ciArPSAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi8gKyAxLypSKi9dIC0gcikgKiB0O1xuXHRcdFx0XHRnICs9IChmcmFtZXNbaSArIDgvKkVOVFJJRVMqLyArIDIvKkcqL10gLSBnKSAqIHQ7XG5cdFx0XHRcdGIgKz0gKGZyYW1lc1tpICsgOC8qRU5UUklFUyovICsgMy8qQiovXSAtIGIpICogdDtcblx0XHRcdFx0YSArPSAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi8gKyA0LypBKi9dIC0gYSkgKiB0O1xuXHRcdFx0XHRyMiArPSAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi8gKyA1LypSMiovXSAtIHIyKSAqIHQ7XG5cdFx0XHRcdGcyICs9IChmcmFtZXNbaSArIDgvKkVOVFJJRVMqLyArIDYvKkcyKi9dIC0gZzIpICogdDtcblx0XHRcdFx0YjIgKz0gKGZyYW1lc1tpICsgOC8qRU5UUklFUyovICsgNy8qQjIqL10gLSBiMikgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHRyID0gZnJhbWVzW2kgKyAxLypSKi9dO1xuXHRcdFx0XHRnID0gZnJhbWVzW2kgKyAyLypHKi9dO1xuXHRcdFx0XHRiID0gZnJhbWVzW2kgKyAzLypCKi9dO1xuXHRcdFx0XHRhID0gZnJhbWVzW2kgKyA0LypBKi9dO1xuXHRcdFx0XHRyMiA9IGZyYW1lc1tpICsgNS8qUjIqL107XG5cdFx0XHRcdGcyID0gZnJhbWVzW2kgKyA2LypHMiovXTtcblx0XHRcdFx0YjIgPSBmcmFtZXNbaSArIDcvKkIyKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlIqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRnID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypHKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRiID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAzLypCKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMiAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0YSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgNC8qQSovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDMgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHIyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA1LypSMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDQgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGcyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA2LypHMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGIyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA3LypCMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDYgLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFscGhhID09PSAxKVxuXHRcdFx0bGlnaHQuc2V0KHIsIGcsIGIsIGEpO1xuXHRcdGVsc2UgaWYgKGZyb21TZXR1cCkge1xuXHRcdFx0Y29uc3Qgc2V0dXBQb3NlID0gc2xvdC5kYXRhLnNldHVwUG9zZTtcblx0XHRcdGxldCBzZXR1cCA9IHNldHVwUG9zZS5jb2xvcjtcblx0XHRcdGxpZ2h0LnNldChzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhLCBzZXR1cC5nICsgKGcgLSBzZXR1cC5nKSAqIGFscGhhLCBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhLFxuXHRcdFx0XHRzZXR1cC5hICsgKGEgLSBzZXR1cC5hKSAqIGFscGhhKTtcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdHNldHVwID0gc2V0dXBQb3NlLmRhcmtDb2xvciE7XG5cdFx0XHRyMiA9IHNldHVwLnIgKyAocjIgLSBzZXR1cC5yKSAqIGFscGhhO1xuXHRcdFx0ZzIgPSBzZXR1cC5nICsgKGcyIC0gc2V0dXAuZykgKiBhbHBoYTtcblx0XHRcdGIyID0gc2V0dXAuYiArIChiMiAtIHNldHVwLmIpICogYWxwaGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpZ2h0LmFkZCgociAtIGxpZ2h0LnIpICogYWxwaGEsIChnIC0gbGlnaHQuZykgKiBhbHBoYSwgKGIgLSBsaWdodC5iKSAqIGFscGhhLCAoYSAtIGxpZ2h0LmEpICogYWxwaGEpO1xuXHRcdFx0cjIgPSBkYXJrLnIgKyAocjIgLSBkYXJrLnIpICogYWxwaGE7XG5cdFx0XHRnMiA9IGRhcmsuZyArIChnMiAtIGRhcmsuZykgKiBhbHBoYTtcblx0XHRcdGIyID0gZGFyay5iICsgKGIyIC0gZGFyay5iKSAqIGFscGhhO1xuXHRcdH1cblx0XHRkYXJrLnIgPSByMiA8IDAgPyAwIDogKHIyID4gMSA/IDEgOiByMik7XG5cdFx0ZGFyay5nID0gZzIgPCAwID8gMCA6IChnMiA+IDEgPyAxIDogZzIpO1xuXHRcdGRhcmsuYiA9IGIyIDwgMCA/IDAgOiAoYjIgPiAxID8gMSA6IGIyKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UuY29sb3J9IGFuZCB7QGxpbmsgU2xvdFBvc2UuZGFya0NvbG9yfSBmb3IgdHdvIGNvbG9yIHRpbnRpbmcuICovXG5leHBvcnQgY2xhc3MgUkdCMlRpbWVsaW5lIGV4dGVuZHMgU2xvdEN1cnZlVGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBzbG90SW5kZXgsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2J9fCR7c2xvdEluZGV4fWAsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2IyfXwke3Nsb3RJbmRleH1gKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDcvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMsIGxpZ2h0LCBhbmQgZGFyayBjb2xvcnMgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCByMjogbnVtYmVyLCBnMjogbnVtYmVyLCBiMjogbnVtYmVyKSB7XG5cdFx0ZnJhbWUgKj0gNy8qRU5UUklFUyovO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypSKi9dID0gcjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDIvKkcqL10gPSBnO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQiovXSA9IGI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA0LypSMiovXSA9IHIyO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNS8qRzIqL10gPSBnMjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDYvKkIyKi9dID0gYjI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChzbG90OiBTbG90LCBwb3NlOiBTbG90UG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbikge1xuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRjb25zdCBsaWdodCA9IHBvc2UuY29sb3IsIGRhcmsgPSBwb3NlLmRhcmtDb2xvciE7XG5cdFx0bGV0IHIgPSAwLCBnID0gMCwgYiA9IDAsIHIyID0gMCwgZzIgPSAwLCBiMiA9IDBcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdFx0Y29uc3Qgc2V0dXBMaWdodCA9IHNldHVwLmNvbG9yLCBzZXR1cERhcmsgPSBzZXR1cC5kYXJrQ29sb3IhO1xuXHRcdFx0XHRsaWdodC5yID0gc2V0dXBMaWdodC5yO1xuXHRcdFx0XHRsaWdodC5nID0gc2V0dXBMaWdodC5nO1xuXHRcdFx0XHRsaWdodC5iID0gc2V0dXBMaWdodC5iO1xuXHRcdFx0XHRkYXJrLnIgPSBzZXR1cERhcmsucjtcblx0XHRcdFx0ZGFyay5nID0gc2V0dXBEYXJrLmc7XG5cdFx0XHRcdGRhcmsuYiA9IHNldHVwRGFyay5iO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCA3LypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyA3LypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0cjIgPSBmcmFtZXNbaSArIDQvKlIyKi9dO1xuXHRcdFx0XHRnMiA9IGZyYW1lc1tpICsgNS8qRzIqL107XG5cdFx0XHRcdGIyID0gZnJhbWVzW2kgKyA2LypCMiovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDcvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHRyICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDEvKlIqL10gLSByKSAqIHQ7XG5cdFx0XHRcdGcgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgMi8qRyovXSAtIGcpICogdDtcblx0XHRcdFx0YiArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyAzLypCKi9dIC0gYikgKiB0O1xuXHRcdFx0XHRyMiArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyA0LypSMiovXSAtIHIyKSAqIHQ7XG5cdFx0XHRcdGcyICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDUvKkcyKi9dIC0gZzIpICogdDtcblx0XHRcdFx0YjIgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgNi8qQjIqL10gLSBiMikgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHRyID0gZnJhbWVzW2kgKyAxLypSKi9dO1xuXHRcdFx0XHRnID0gZnJhbWVzW2kgKyAyLypHKi9dO1xuXHRcdFx0XHRiID0gZnJhbWVzW2kgKyAzLypCKi9dO1xuXHRcdFx0XHRyMiA9IGZyYW1lc1tpICsgNC8qUjIqL107XG5cdFx0XHRcdGcyID0gZnJhbWVzW2kgKyA1LypHMiovXTtcblx0XHRcdFx0YjIgPSBmcmFtZXNbaSArIDYvKkIyKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlIqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRnID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypHKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRiID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAzLypCKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMiAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0cjIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDQvKlIyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0ZzIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDUvKkcyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNCAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0YjIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDYvKkIyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNSAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cblx0XHRpZiAoYWxwaGEgIT09IDEpIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0Y29uc3Qgc2V0dXBQb3NlID0gc2xvdC5kYXRhLnNldHVwUG9zZTtcblx0XHRcdFx0bGV0IHNldHVwID0gc2V0dXBQb3NlLmNvbG9yO1xuXHRcdFx0XHRyID0gc2V0dXAuciArIChyIC0gc2V0dXAucikgKiBhbHBoYTtcblx0XHRcdFx0ZyA9IHNldHVwLmcgKyAoZyAtIHNldHVwLmcpICogYWxwaGE7XG5cdFx0XHRcdGIgPSBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhO1xuXHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05vbk51bGxBc3NlcnRpb246IHJlZmVyZW5jZSBydW50aW1lXG5cdFx0XHRcdHNldHVwID0gc2V0dXBQb3NlLmRhcmtDb2xvciE7XG5cdFx0XHRcdHIyID0gc2V0dXAuciArIChyMiAtIHNldHVwLnIpICogYWxwaGE7XG5cdFx0XHRcdGcyID0gc2V0dXAuZyArIChnMiAtIHNldHVwLmcpICogYWxwaGE7XG5cdFx0XHRcdGIyID0gc2V0dXAuYiArIChiMiAtIHNldHVwLmIpICogYWxwaGE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyID0gbGlnaHQuciArIChyIC0gbGlnaHQucikgKiBhbHBoYTtcblx0XHRcdFx0ZyA9IGxpZ2h0LmcgKyAoZyAtIGxpZ2h0LmcpICogYWxwaGE7XG5cdFx0XHRcdGIgPSBsaWdodC5iICsgKGIgLSBsaWdodC5iKSAqIGFscGhhO1xuXHRcdFx0XHRyMiA9IGRhcmsuciArIChyMiAtIGRhcmsucikgKiBhbHBoYTtcblx0XHRcdFx0ZzIgPSBkYXJrLmcgKyAoZzIgLSBkYXJrLmcpICogYWxwaGE7XG5cdFx0XHRcdGIyID0gZGFyay5iICsgKGIyIC0gZGFyay5iKSAqIGFscGhhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsaWdodC5yID0gciA8IDAgPyAwIDogKHIgPiAxID8gMSA6IHIpO1xuXHRcdGxpZ2h0LmcgPSBnIDwgMCA/IDAgOiAoZyA+IDEgPyAxIDogZyk7XG5cdFx0bGlnaHQuYiA9IGIgPCAwID8gMCA6IChiID4gMSA/IDEgOiBiKTtcblx0XHRkYXJrLnIgPSByMiA8IDAgPyAwIDogKHIyID4gMSA/IDEgOiByMik7XG5cdFx0ZGFyay5nID0gZzIgPCAwID8gMCA6IChnMiA+IDEgPyAxIDogZzIpO1xuXHRcdGRhcmsuYiA9IGIyIDwgMCA/IDAgOiAoYjIgPiAxID8gMSA6IGIyKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UudHRhY2htZW50fS4gKi9cbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50VGltZWxpbmUgZXh0ZW5kcyBUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHNsb3RJbmRleCA9IDA7XG5cblx0LyoqIFRoZSBhdHRhY2htZW50IG5hbWUgZm9yIGVhY2gga2V5IGZyYW1lLiBNYXkgY29udGFpbiBudWxsIHZhbHVlcyB0byBjbGVhciB0aGUgYXR0YWNobWVudC4gKi9cblx0YXR0YWNobWVudE5hbWVzOiBBcnJheTxzdHJpbmcgfCBudWxsPjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGAke1Byb3BlcnR5LmF0dGFjaG1lbnR9fCR7c2xvdEluZGV4fWApO1xuXHRcdHRoaXMuc2xvdEluZGV4ID0gc2xvdEluZGV4O1xuXHRcdHRoaXMuYXR0YWNobWVudE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oZnJhbWVDb3VudCk7XG5cdFx0dGhpcy5pbnN0YW50ID0gdHJ1ZTtcblx0fVxuXG5cdGdldEZyYW1lQ291bnQgKCkge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSBpbiBzZWNvbmRzIGFuZCB0aGUgYXR0YWNobWVudCBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIGtleSBmcmFtZS4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgYXR0YWNobWVudE5hbWU6IHN0cmluZyB8IG51bGwpIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuYXR0YWNobWVudE5hbWVzW2ZyYW1lXSA9IGF0dGFjaG1lbnROYW1lO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3Qgc2xvdCA9IHNrZWxldG9uLnNsb3RzW3RoaXMuc2xvdEluZGV4XTtcblx0XHRpZiAoIXNsb3QuYm9uZS5hY3RpdmUpIHJldHVybjtcblx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBzbG90LmFwcGxpZWRQb3NlIDogc2xvdC5wb3NlO1xuXG5cdFx0aWYgKG91dCB8fCB0aW1lIDwgdGhpcy5mcmFtZXNbMF0pIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHRoaXMuc2V0QXR0YWNobWVudChza2VsZXRvbiwgcG9zZSwgc2xvdC5kYXRhLmF0dGFjaG1lbnROYW1lKTtcblx0XHR9IGVsc2Vcblx0XHRcdHRoaXMuc2V0QXR0YWNobWVudChza2VsZXRvbiwgcG9zZSwgdGhpcy5hdHRhY2htZW50TmFtZXNbVGltZWxpbmUuc2VhcmNoKHRoaXMuZnJhbWVzLCB0aW1lKV0pO1xuXHR9XG5cblx0c2V0QXR0YWNobWVudCAoc2tlbGV0b246IFNrZWxldG9uLCBwb3NlOiBTbG90UG9zZSwgYXR0YWNobWVudE5hbWU6IHN0cmluZyB8IG51bGwpIHtcblx0XHRwb3NlLnNldEF0dGFjaG1lbnQoIWF0dGFjaG1lbnROYW1lID8gbnVsbCA6IHNrZWxldG9uLmdldEF0dGFjaG1lbnQodGhpcy5zbG90SW5kZXgsIGF0dGFjaG1lbnROYW1lKSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFNsb3RQb3NlLmRlZm9ybX0gdG8gZGVmb3JtIGEge0BsaW5rIFZlcnRleEF0dGFjaG1lbnR9LiAqL1xuZXhwb3J0IGNsYXNzIERlZm9ybVRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHJlYWRvbmx5IHNsb3RJbmRleDogbnVtYmVyO1xuXG5cdC8qKiBUaGUgYXR0YWNobWVudCB0aGF0IHdpbGwgYmUgZGVmb3JtZWQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVmVydGV4QXR0YWNobWVudC5nZXRUaW1lbGluZUF0dGFjaG1lbnR9LiAqL1xuXHRyZWFkb25seSBhdHRhY2htZW50OiBWZXJ0ZXhBdHRhY2htZW50O1xuXG5cdC8qKiBUaGUgdmVydGljZXMgZm9yIGVhY2gga2V5IGZyYW1lLiAqL1xuXHR2ZXJ0aWNlczogQXJyYXk8TnVtYmVyQXJyYXlMaWtlPjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlciwgYXR0YWNobWVudDogVmVydGV4QXR0YWNobWVudCkge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtQcm9wZXJ0eS5kZWZvcm19fCR7c2xvdEluZGV4fXwke2F0dGFjaG1lbnQuaWR9YCk7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gYXR0YWNobWVudDtcblx0XHR0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5PE51bWJlckFycmF5TGlrZT4oZnJhbWVDb3VudCk7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcmFtZXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgYW5kIHZlcnRpY2VzIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudGAsIGluY2x1c2l2ZS5cblx0ICogQHBhcmFtIHRpbWUgVGhlIGZyYW1lIHRpbWUgaW4gc2Vjb25kcy5cblx0ICogQHBhcmFtIHZlcnRpY2VzIFZlcnRleCBwb3NpdGlvbnMgZm9yIGFuIHVud2VpZ2h0ZWQgVmVydGV4QXR0YWNobWVudCwgb3IgZGVmb3JtIG9mZnNldHMgaWYgaXQgaGFzIHdlaWdodHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHZlcnRpY2VzOiBOdW1iZXJBcnJheUxpa2UpIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMudmVydGljZXNbZnJhbWVdID0gdmVydGljZXM7XG5cdH1cblxuXHQvKiogQHBhcmFtIHZhbHVlMSBJZ25vcmVkICgwIGlzIHVzZWQgZm9yIGEgZGVmb3JtIHRpbWVsaW5lKS5cblx0ICogQHBhcmFtIHZhbHVlMiBJZ25vcmVkICgxIGlzIHVzZWQgZm9yIGEgZGVmb3JtIHRpbWVsaW5lKS4gKi9cblx0c2V0QmV6aWVyIChiZXppZXI6IG51bWJlciwgZnJhbWU6IG51bWJlciwgdmFsdWU6IG51bWJlciwgdGltZTE6IG51bWJlciwgdmFsdWUxOiBudW1iZXIsIGN4MTogbnVtYmVyLCBjeTE6IG51bWJlciwgY3gyOiBudW1iZXIsXG5cdFx0Y3kyOiBudW1iZXIsIHRpbWUyOiBudW1iZXIsIHZhbHVlMjogbnVtYmVyKSB7XG5cdFx0Y29uc3QgY3VydmVzID0gdGhpcy5jdXJ2ZXM7XG5cdFx0bGV0IGkgPSB0aGlzLmdldEZyYW1lQ291bnQoKSArIGJlemllciAqIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGlmICh2YWx1ZSA9PT0gMCkgY3VydmVzW2ZyYW1lXSA9IDIvKkJFWklFUiovICsgaTtcblx0XHRjb25zdCB0bXB4ID0gKHRpbWUxIC0gY3gxICogMiArIGN4MikgKiAwLjAzLCB0bXB5ID0gY3kyICogMC4wMyAtIGN5MSAqIDAuMDY7XG5cdFx0Y29uc3QgZGRkeCA9ICgoY3gxIC0gY3gyKSAqIDMgLSB0aW1lMSArIHRpbWUyKSAqIDAuMDA2LCBkZGR5ID0gKGN5MSAtIGN5MiArIDAuMzMzMzMzMzMpICogMC4wMTg7XG5cdFx0bGV0IGRkeCA9IHRtcHggKiAyICsgZGRkeCwgZGR5ID0gdG1weSAqIDIgKyBkZGR5O1xuXHRcdGxldCBkeCA9IChjeDEgLSB0aW1lMSkgKiAwLjMgKyB0bXB4ICsgZGRkeCAqIDAuMTY2NjY2NjcsIGR5ID0gY3kxICogMC4zICsgdG1weSArIGRkZHkgKiAwLjE2NjY2NjY3O1xuXHRcdGxldCB4ID0gdGltZTEgKyBkeCwgeSA9IGR5O1xuXHRcdGZvciAobGV0IG4gPSBpICsgMTgvKkJFWklFUl9TSVpFKi87IGkgPCBuOyBpICs9IDIpIHtcblx0XHRcdGN1cnZlc1tpXSA9IHg7XG5cdFx0XHRjdXJ2ZXNbaSArIDFdID0geTtcblx0XHRcdGR4ICs9IGRkeDtcblx0XHRcdGR5ICs9IGRkeTtcblx0XHRcdGRkeCArPSBkZGR4O1xuXHRcdFx0ZGR5ICs9IGRkZHk7XG5cdFx0XHR4ICs9IGR4O1xuXHRcdFx0eSArPSBkeTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJ2ZVBlcmNlbnQgKHRpbWU6IG51bWJlciwgZnJhbWU6IG51bWJlcikge1xuXHRcdGNvbnN0IGN1cnZlcyA9IHRoaXMuY3VydmVzO1xuXHRcdGxldCBpID0gY3VydmVzW2ZyYW1lXTtcblx0XHRzd2l0Y2ggKGkpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgeCA9IHRoaXMuZnJhbWVzW2ZyYW1lXTtcblx0XHRcdFx0cmV0dXJuICh0aW1lIC0geCkgLyAodGhpcy5mcmFtZXNbZnJhbWUgKyB0aGlzLmdldEZyYW1lRW50cmllcygpXSAtIHgpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpIC09IDIvKkJFWklFUiovO1xuXHRcdGlmIChjdXJ2ZXNbaV0gPiB0aW1lKSB7XG5cdFx0XHRjb25zdCB4ID0gdGhpcy5mcmFtZXNbZnJhbWVdO1xuXHRcdFx0cmV0dXJuIGN1cnZlc1tpICsgMV0gKiAodGltZSAtIHgpIC8gKGN1cnZlc1tpXSAtIHgpO1xuXHRcdH1cblx0XHRjb25zdCBuID0gaSArIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGZvciAoaSArPSAyOyBpIDwgbjsgaSArPSAyKSB7XG5cdFx0XHRpZiAoY3VydmVzW2ldID49IHRpbWUpIHtcblx0XHRcdFx0Y29uc3QgeCA9IGN1cnZlc1tpIC0gMl0sIHkgPSBjdXJ2ZXNbaSAtIDFdO1xuXHRcdFx0XHRyZXR1cm4geSArICh0aW1lIC0geCkgLyAoY3VydmVzW2ldIC0geCkgKiAoY3VydmVzW2kgKyAxXSAtIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB4ID0gY3VydmVzW24gLSAyXSwgeSA9IGN1cnZlc1tuIC0gMV07XG5cdFx0cmV0dXJuIHkgKyAoMSAtIHkpICogKHRpbWUgLSB4KSAvICh0aGlzLmZyYW1lc1tmcmFtZSArIHRoaXMuZ2V0RnJhbWVFbnRyaWVzKCldIC0geCk7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogRXZlbnRbXSB8IG51bGwsIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBzbG90cyA9IHNrZWxldG9uLnNsb3RzO1xuXHRcdGlmICghdGhpcy5hdHRhY2htZW50LmlzVGltZWxpbmVBY3RpdmUoc2xvdHMsIHRoaXMuc2xvdEluZGV4LCBhcHBsaWVkUG9zZSkpIHJldHVybjtcblx0XHRjb25zdCB0aW1lbGluZVNsb3RzID0gdGhpcy5hdHRhY2htZW50LnRpbWVsaW5lU2xvdHM7XG5cblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0dGhpcy5hcHBseUJlZm9yZUZpcnN0KHNsb3RzW3RoaXMuc2xvdEluZGV4XSwgYXBwbGllZFBvc2UsIGZyb21TZXR1cCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0XHR0aGlzLmFwcGx5QmVmb3JlRmlyc3Qoc2xvdHNbc2xvdEluZGV4XSwgYXBwbGllZFBvc2UsIGZyb21TZXR1cCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHYxOiBOdW1iZXJBcnJheUxpa2UsIHYyOiBOdW1iZXJBcnJheUxpa2UgfCBudWxsO1xuXHRcdGxldCBwZXJjZW50OiBudW1iZXI7XG5cdFx0aWYgKHRpbWUgPj0gZnJhbWVzW2ZyYW1lcy5sZW5ndGggLSAxXSkge1xuXHRcdFx0cGVyY2VudCA9IDA7XG5cdFx0XHR2MSA9IHRoaXMudmVydGljZXNbZnJhbWVzLmxlbmd0aCAtIDFdO1xuXHRcdFx0djIgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBmcmFtZSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUpO1xuXHRcdFx0cGVyY2VudCA9IHRoaXMuZ2V0Q3VydmVQZXJjZW50KHRpbWUsIGZyYW1lKTtcblx0XHRcdHYxID0gdGhpcy52ZXJ0aWNlc1tmcmFtZV07XG5cdFx0XHR2MiA9IHRoaXMudmVydGljZXNbZnJhbWUgKyAxXTtcblx0XHR9XG5cblx0XHRjb25zdCB2ZXJ0ZXhDb3VudCA9IHRoaXMudmVydGljZXNbMF0ubGVuZ3RoO1xuXHRcdHRoaXMuYXBwbHlUb1Nsb3Qoc2xvdHNbdGhpcy5zbG90SW5kZXhdLCBhcHBsaWVkUG9zZSwgdjEsIHYyLCBwZXJjZW50LCB2ZXJ0ZXhDb3VudCwgYWxwaGEsIGZyb21TZXR1cCwgYWRkKTtcblx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0dGhpcy5hcHBseVRvU2xvdChzbG90c1tzbG90SW5kZXhdLCBhcHBsaWVkUG9zZSwgdjEsIHYyLCBwZXJjZW50LCB2ZXJ0ZXhDb3VudCwgYWxwaGEsIGZyb21TZXR1cCwgYWRkKTtcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlUb1Nsb3QgKHNsb3Q6IFNsb3QsIGFwcGxpZWRQb3NlOiBib29sZWFuLCB2MTogTnVtYmVyQXJyYXlMaWtlLCB2MjogTnVtYmVyQXJyYXlMaWtlIHwgbnVsbCwgcGVyY2VudDogbnVtYmVyLCB2ZXJ0ZXhDb3VudDogbnVtYmVyLFxuXHRcdGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbiwgYWRkOiBib29sZWFuKSB7XG5cdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gc2xvdC5hcHBsaWVkUG9zZSA6IHNsb3QucG9zZTtcblx0XHRpZiAocG9zZS5hdHRhY2htZW50ID09PSBudWxsIHx8IHBvc2UuYXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgIT09IHRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdmVydGV4QXR0YWNobWVudCA9IHBvc2UuYXR0YWNobWVudCBhcyBWZXJ0ZXhBdHRhY2htZW50O1xuXHRcdGNvbnN0IGRlZm9ybSA9IHBvc2UuZGVmb3JtO1xuXHRcdGlmIChkZWZvcm0ubGVuZ3RoID09PSAwKSBmcm9tU2V0dXAgPSB0cnVlO1xuXHRcdGRlZm9ybS5sZW5ndGggPSB2ZXJ0ZXhDb3VudDtcblxuXHRcdGlmICh2MiA9PT0gbnVsbCkgeyAvLyBUaW1lIGlzIGFmdGVyIGxhc3QgZnJhbWUuXG5cdFx0XHRpZiAoYWxwaGEgPT09IDEpIHtcblx0XHRcdFx0aWYgKGFkZCAmJiAhZnJvbVNldHVwKSB7XG5cdFx0XHRcdFx0aWYgKCF2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzKSB7IC8vIFVud2VpZ2h0ZWQgdmVydGV4IHBvc2l0aW9ucywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0XHRjb25zdCBzZXR1cFZlcnRpY2VzID0gdmVydGV4QXR0YWNobWVudC52ZXJ0aWNlcztcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKylcblx0XHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9IHYxW2ldIC0gc2V0dXBWZXJ0aWNlc1tpXTtcblx0XHRcdFx0XHR9IGVsc2UgeyAvLyBXZWlnaHRlZCBkZWZvcm0gb2Zmc2V0cywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSB2MVtpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSAvLyBWZXJ0ZXggcG9zaXRpb25zIG9yIGRlZm9ybSBvZmZzZXRzLCBubyBhbHBoYS5cblx0XHRcdFx0XHRVdGlscy5hcnJheUNvcHkodjEsIDAsIGRlZm9ybSwgMCwgdmVydGV4Q291bnQpO1xuXHRcdFx0fSBlbHNlIGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0aWYgKCF2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzKSB7IC8vIFVud2VpZ2h0ZWQgdmVydGV4IHBvc2l0aW9ucywgd2l0aCBhbHBoYS5cblx0XHRcdFx0XHRjb25zdCBzZXR1cFZlcnRpY2VzID0gdmVydGV4QXR0YWNobWVudC52ZXJ0aWNlcztcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNldHVwID0gc2V0dXBWZXJ0aWNlc1tpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSA9IHNldHVwICsgKHYxW2ldIC0gc2V0dXApICogYWxwaGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgeyAvLyBXZWlnaHRlZCBkZWZvcm0gb2Zmc2V0cywgd2l0aCBhbHBoYS5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0XHRkZWZvcm1baV0gPSB2MVtpXSAqIGFscGhhO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFkZCkge1xuXHRcdFx0XHRpZiAoIXZlcnRleEF0dGFjaG1lbnQuYm9uZXMpIHsgLy8gVW53ZWlnaHRlZCB2ZXJ0ZXggcG9zaXRpb25zLCBubyBhbHBoYS5cblx0XHRcdFx0XHRjb25zdCBzZXR1cFZlcnRpY2VzID0gdmVydGV4QXR0YWNobWVudC52ZXJ0aWNlcztcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0XHRkZWZvcm1baV0gKz0gKHYxW2ldIC0gc2V0dXBWZXJ0aWNlc1tpXSkgKiBhbHBoYTtcblx0XHRcdFx0fSBlbHNlIHsgLy8gV2VpZ2h0ZWQgZGVmb3JtIG9mZnNldHMsIGFscGhhLlxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKylcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSB2MVtpXSAqIGFscGhhO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgeyAvLyBWZXJ0ZXggcG9zaXRpb25zIG9yIGRlZm9ybSBvZmZzZXRzLCB3aXRoIGFscGhhLlxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0ZGVmb3JtW2ldICs9ICh2MVtpXSAtIGRlZm9ybVtpXSkgKiBhbHBoYTtcblx0XHRcdH1cblx0XHR9IGVsc2UgeyAvLyBCZXR3ZWVuIGZyYW1lcy5cblx0XHRcdGlmIChhbHBoYSA9PT0gMSkge1xuXHRcdFx0XHRpZiAoYWRkICYmICFmcm9tU2V0dXApIHtcblx0XHRcdFx0XHRpZiAoIXZlcnRleEF0dGFjaG1lbnQuYm9uZXMpIHsgLy8gVW53ZWlnaHRlZCB2ZXJ0ZXggcG9zaXRpb25zLCBubyBhbHBoYS5cblx0XHRcdFx0XHRcdGNvbnN0IHNldHVwVmVydGljZXMgPSB2ZXJ0ZXhBdHRhY2htZW50LnZlcnRpY2VzO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9IHByZXYgKyAodjJbaV0gLSBwcmV2KSAqIHBlcmNlbnQgLSBzZXR1cFZlcnRpY2VzW2ldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7IC8vIFdlaWdodGVkIGRlZm9ybSBvZmZzZXRzLCBubyBhbHBoYS5cblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmV2ID0gdjFbaV07XG5cdFx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSBwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChwZXJjZW50ID09PSAwKVxuXHRcdFx0XHRcdFV0aWxzLmFycmF5Q29weSh2MSwgMCwgZGVmb3JtLCAwLCB2ZXJ0ZXhDb3VudClcblx0XHRcdFx0ZWxzZSB7IC8vIFZlcnRleCBwb3NpdGlvbnMgb3IgZGVmb3JtIG9mZnNldHMsIG5vIGFscGhhLlxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldID0gcHJldiArICh2MltpXSAtIHByZXYpICogcGVyY2VudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdGlmICghdmVydGV4QXR0YWNobWVudC5ib25lcykgeyAvLyBVbndlaWdodGVkIHZlcnRleCBwb3NpdGlvbnMsIHdpdGggYWxwaGEuXG5cdFx0XHRcdFx0Y29uc3Qgc2V0dXBWZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwcmV2ID0gdjFbaV0sIHNldHVwID0gc2V0dXBWZXJ0aWNlc1tpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSA9IHNldHVwICsgKHByZXYgKyAodjJbaV0gLSBwcmV2KSAqIHBlcmNlbnQgLSBzZXR1cCkgKiBhbHBoYTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7IC8vIFdlaWdodGVkIGRlZm9ybSBvZmZzZXRzLCB3aXRoIGFscGhhLlxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldID0gKHByZXYgKyAodjJbaV0gLSBwcmV2KSAqIHBlcmNlbnQpICogYWxwaGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFkZCkge1xuXHRcdFx0XHRpZiAoIXZlcnRleEF0dGFjaG1lbnQuYm9uZXMpIHsgLy8gVW53ZWlnaHRlZCB2ZXJ0ZXggcG9zaXRpb25zLCB3aXRoIGFscGhhLlxuXHRcdFx0XHRcdGNvbnN0IHNldHVwVmVydGljZXMgPSB2ZXJ0ZXhBdHRhY2htZW50LnZlcnRpY2VzO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9IChwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50IC0gc2V0dXBWZXJ0aWNlc1tpXSkgKiBhbHBoYTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7IC8vIFdlaWdodGVkIGRlZm9ybSBvZmZzZXRzLCB3aXRoIGFscGhhLlxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9IChwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50KSAqIGFscGhhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdGRlZm9ybVtpXSArPSAocHJldiArICh2MltpXSAtIHByZXYpICogcGVyY2VudCAtIGRlZm9ybVtpXSkgKiBhbHBoYTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXBwbHlCZWZvcmVGaXJzdCAoc2xvdDogU2xvdCwgYXBwbGllZFBvc2U6IGJvb2xlYW4sIGZyb21TZXR1cDogYm9vbGVhbikge1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IHNsb3QuYXBwbGllZFBvc2UgOiBzbG90LnBvc2U7XG5cdFx0aWYgKHBvc2UuYXR0YWNobWVudCA9PSBudWxsIHx8IHBvc2UuYXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgIT09IHRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xuXHRcdGlmIChwb3NlLmRlZm9ybS5sZW5ndGggPT09IDApIGZyb21TZXR1cCA9IHRydWU7XG5cdFx0aWYgKGZyb21TZXR1cCkgcG9zZS5kZWZvcm0ubGVuZ3RoID0gMDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdC5nZXRTZXF1ZW5jZUluZGV4fSBmb3IgYW4gYXR0YWNobWVudCdzIHtAbGluayBTZXF1ZW5jZX0uICovXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIGltcGxlbWVudHMgU2xvdFRpbWVsaW5lIHtcblx0c3RhdGljIEVOVFJJRVMgPSAzO1xuXHRzdGF0aWMgTU9ERSA9IDE7XG5cdHN0YXRpYyBERUxBWSA9IDI7XG5cblx0cmVhZG9ubHkgc2xvdEluZGV4OiBudW1iZXI7XG5cdHJlYWRvbmx5IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ7XG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgc2xvdEluZGV4OiBudW1iZXIsIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBgJHtQcm9wZXJ0eS5zZXF1ZW5jZX18JHtzbG90SW5kZXh9fCR7KGF0dGFjaG1lbnQgYXMgdW5rbm93biBhcyBIYXNTZXF1ZW5jZSkuc2VxdWVuY2UuaWR9YCk7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gYXR0YWNobWVudDtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gU2VxdWVuY2VUaW1lbGluZS5FTlRSSUVTO1xuXHR9XG5cblx0Z2V0U2xvdEluZGV4ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5zbG90SW5kZXg7XG5cdH1cblxuXHQvKiogVGhlIGF0dGFjaG1lbnQgZm9yIHdoaWNoIHRoZSB7QGxpbmsgU2xvdFBvc2Uuc2VxdWVuY2VJbmRleH0gd2lsbCBiZSBzZXQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVmVydGV4QXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnR9LiAqL1xuXHRnZXRBdHRhY2htZW50ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRhY2htZW50O1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUsIG1vZGUsIGluZGV4LCBhbmQgZnJhbWUgdGltZSBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFNlY29uZHMgYmV0d2VlbiBmcmFtZXMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1vZGU6IFNlcXVlbmNlTW9kZSwgaW5kZXg6IG51bWJlciwgZGVsYXk6IG51bWJlcikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGZyYW1lICo9IFNlcXVlbmNlVGltZWxpbmUuRU5UUklFUztcblx0XHRmcmFtZXNbZnJhbWVdID0gdGltZTtcblx0XHRmcmFtZXNbZnJhbWUgKyBTZXF1ZW5jZVRpbWVsaW5lLk1PREVdID0gbW9kZSB8IChpbmRleCA8PCA0KTtcblx0XHRmcmFtZXNbZnJhbWUgKyBTZXF1ZW5jZVRpbWVsaW5lLkRFTEFZXSA9IGRlbGF5O1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXHRcdGNvbnN0IHNsb3RzID0gc2tlbGV0b24uc2xvdHM7XG5cdFx0aWYgKCF0aGlzLmF0dGFjaG1lbnQuaXNUaW1lbGluZUFjdGl2ZShzbG90cywgdGhpcy5zbG90SW5kZXgsIGFwcGxpZWRQb3NlKSkgcmV0dXJuO1xuXHRcdGNvbnN0IHRpbWVsaW5lU2xvdHMgPSB0aGlzLmF0dGFjaG1lbnQudGltZWxpbmVTbG90cztcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmIChvdXQgfHwgdGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHR0aGlzLnNldHVwUG9zZShzbG90c1t0aGlzLnNsb3RJbmRleF0sIGFwcGxpZWRQb3NlKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzbG90SW5kZXggb2YgdGltZWxpbmVTbG90cylcblx0XHRcdFx0XHR0aGlzLnNldHVwUG9zZShzbG90c1tzbG90SW5kZXhdLCBhcHBsaWVkUG9zZSlcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgU2VxdWVuY2VUaW1lbGluZS5FTlRSSUVTKTtcblx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0Y29uc3QgbW9kZUFuZEluZGV4ID0gZnJhbWVzW2kgKyBTZXF1ZW5jZVRpbWVsaW5lLk1PREVdO1xuXHRcdGNvbnN0IGRlbGF5ID0gZnJhbWVzW2kgKyBTZXF1ZW5jZVRpbWVsaW5lLkRFTEFZXTtcblxuXHRcdHRoaXMuYXBwbHlUb1Nsb3Qoc2xvdHNbdGhpcy5zbG90SW5kZXhdLCBhcHBsaWVkUG9zZSwgdGltZSwgYmVmb3JlLCBtb2RlQW5kSW5kZXgsIGRlbGF5KTtcblx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0dGhpcy5hcHBseVRvU2xvdChzbG90c1tzbG90SW5kZXhdLCBhcHBsaWVkUG9zZSwgdGltZSwgYmVmb3JlLCBtb2RlQW5kSW5kZXgsIGRlbGF5KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBQb3NlIChzbG90OiBTbG90LCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IHNsb3QuYXBwbGllZFBvc2UgOiBzbG90LnBvc2U7XG5cdFx0aWYgKHBvc2UuYXR0YWNobWVudCA9PT0gbnVsbCB8fCBwb3NlLmF0dGFjaG1lbnQudGltZWxpbmVBdHRhY2htZW50ICE9PSB0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcblx0XHRwb3NlLnNlcXVlbmNlSW5kZXggPSAtMTtcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlUb1Nsb3QgKHNsb3Q6IFNsb3QsIGFwcGxpZWRQb3NlOiBib29sZWFuLCB0aW1lOiBudW1iZXIsIGJlZm9yZTogbnVtYmVyLCBtb2RlQW5kSW5kZXg6IG51bWJlciwgZGVsYXk6IG51bWJlcikge1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IHNsb3QuYXBwbGllZFBvc2UgOiBzbG90LnBvc2U7XG5cdFx0aWYgKHBvc2UuYXR0YWNobWVudCA9PT0gbnVsbCB8fCBwb3NlLmF0dGFjaG1lbnQudGltZWxpbmVBdHRhY2htZW50ICE9PSB0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcblxuXHRcdGxldCBpbmRleCA9IG1vZGVBbmRJbmRleCA+PiA0LCBjb3VudCA9IChwb3NlLmF0dGFjaG1lbnQgYXMgdW5rbm93biBhcyBIYXNTZXF1ZW5jZSkuc2VxdWVuY2UucmVnaW9ucy5sZW5ndGg7XG5cdFx0Y29uc3QgbW9kZSA9IFNlcXVlbmNlTW9kZVZhbHVlc1ttb2RlQW5kSW5kZXggJiAweGZdO1xuXHRcdGlmIChtb2RlICE9PSBTZXF1ZW5jZU1vZGUuaG9sZCkge1xuXHRcdFx0aW5kZXggKz0gKCgodGltZSAtIGJlZm9yZSkgLyBkZWxheSArIDAuMDAwMDEpIHwgMCk7XG5cdFx0XHRzd2l0Y2ggKG1vZGUpIHtcblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUub25jZTogaW5kZXggPSBNYXRoLm1pbihjb3VudCAtIDEsIGluZGV4KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgU2VxdWVuY2VNb2RlLmxvb3A6IGluZGV4ICU9IGNvdW50OyBicmVhaztcblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUucGluZ3Bvbmc6IHtcblx0XHRcdFx0XHRjb25zdCBuID0gKGNvdW50IDw8IDEpIC0gMjtcblx0XHRcdFx0XHRpbmRleCA9IG4gPT09IDAgPyAwIDogaW5kZXggJSBuO1xuXHRcdFx0XHRcdGlmIChpbmRleCA+PSBjb3VudCkgaW5kZXggPSBuIC0gaW5kZXg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUub25jZVJldmVyc2U6IGluZGV4ID0gTWF0aC5tYXgoY291bnQgLSAxIC0gaW5kZXgsIDApOyBicmVhaztcblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUubG9vcFJldmVyc2U6IGluZGV4ID0gY291bnQgLSAxIC0gKGluZGV4ICUgY291bnQpOyBicmVhaztcblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUucGluZ3BvbmdSZXZlcnNlOiB7XG5cdFx0XHRcdFx0Y29uc3QgbiA9IChjb3VudCA8PCAxKSAtIDI7XG5cdFx0XHRcdFx0aW5kZXggPSBuID09PSAwID8gMCA6IChpbmRleCArIGNvdW50IC0gMSkgJSBuO1xuXHRcdFx0XHRcdGlmIChpbmRleCA+PSBjb3VudCkgaW5kZXggPSBuIC0gaW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cG9zZS5zZXF1ZW5jZUluZGV4ID0gaW5kZXg7XG5cdH1cbn1cblxuLyoqIEZpcmVzIGFuIHtAbGluayBFdmVudH0gd2hlbiBzcGVjaWZpYyBhbmltYXRpb24gdGltZXMgYXJlIHJlYWNoZWQuICovXG5leHBvcnQgY2xhc3MgRXZlbnRUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIHtcblx0c3RhdGljIHByb3BlcnR5SWRzID0gW2Ake1Byb3BlcnR5LmV2ZW50fWBdO1xuXG5cdC8qKiBUaGUgZXZlbnQgZm9yIGVhY2gga2V5IGZyYW1lLiAqL1xuXHRldmVudHM6IEFycmF5PEV2ZW50PjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgLi4uRXZlbnRUaW1lbGluZS5wcm9wZXJ0eUlkcyk7XG5cdFx0dGhpcy5ldmVudHMgPSBuZXcgQXJyYXk8RXZlbnQ+KGZyYW1lQ291bnQpO1xuXHRcdHRoaXMuaW5zdGFudCA9IHRydWU7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcmFtZXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbmQgdGhlIGV2ZW50IGZvciB0aGUgc3BlY2lmaWVkIGtleSBmcmFtZS4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIGV2ZW50OiBFdmVudCkge1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IGV2ZW50LnRpbWU7XG5cdFx0dGhpcy5ldmVudHNbZnJhbWVdID0gZXZlbnQ7XG5cdH1cblxuXHQvKiogRmlyZXMgZXZlbnRzIGZvciBmcmFtZXMgPiBgbGFzdFRpbWVgIGFuZCA8PSBgdGltZWAuICovXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24gfCBudWxsLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbVNldHVwOiBib29sZWFuLCBhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGlmICghZmlyZWRFdmVudHMpIHJldHVybjtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGNvbnN0IGZyYW1lQ291bnQgPSB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cblx0XHRpZiAobGFzdFRpbWUgPiB0aW1lKSB7IC8vIEFwcGx5IGFmdGVyIGxhc3RUaW1lIGZvciBsb29wZWQgYW5pbWF0aW9ucy5cblx0XHRcdHRoaXMuYXBwbHkobnVsbCwgbGFzdFRpbWUsIE51bWJlci5NQVhfVkFMVUUsIGZpcmVkRXZlbnRzLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRsYXN0VGltZSA9IC0xO1xuXHRcdH0gZWxzZSBpZiAobGFzdFRpbWUgPj0gZnJhbWVzW2ZyYW1lQ291bnQgLSAxXSkgLy8gTGFzdCB0aW1lIGlzIGFmdGVyIGxhc3QgZnJhbWUuXG5cdFx0XHRyZXR1cm47XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHJldHVybjtcblxuXHRcdGxldCBpID0gMDtcblx0XHRpZiAobGFzdFRpbWUgPCBmcmFtZXNbMF0pXG5cdFx0XHRpID0gMDtcblx0XHRlbHNlIHtcblx0XHRcdGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCBsYXN0VGltZSkgKyAxO1xuXHRcdFx0Y29uc3QgZnJhbWVUaW1lID0gZnJhbWVzW2ldO1xuXHRcdFx0d2hpbGUgKGkgPiAwKSB7IC8vIEZpcmUgbXVsdGlwbGUgZXZlbnRzIHdpdGggdGhlIHNhbWUgZnJhbWUuXG5cdFx0XHRcdGlmIChmcmFtZXNbaSAtIDFdICE9PSBmcmFtZVRpbWUpIGJyZWFrO1xuXHRcdFx0XHRpLS07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoOyBpIDwgZnJhbWVDb3VudCAmJiB0aW1lID49IGZyYW1lc1tpXTsgaSsrKVxuXHRcdFx0ZmlyZWRFdmVudHMucHVzaCh0aGlzLmV2ZW50c1tpXSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMgdGhlIHtAbGluayBTa2VsZXRvbi5nZXREcmF3T3JkZXJ9LiAqL1xuZXhwb3J0IGNsYXNzIERyYXdPcmRlclRpbWVsaW5lIGV4dGVuZHMgVGltZWxpbmUge1xuXHRzdGF0aWMgcmVhZG9ubHkgcHJvcGVydHlJRCA9IGAke1Byb3BlcnR5LmRyYXdPcmRlcn1gO1xuXHRzdGF0aWMgcHJvcGVydHlJZHMgPSBbRHJhd09yZGVyVGltZWxpbmUucHJvcGVydHlJRF07XG5cblx0LyoqIFRoZSBkcmF3IG9yZGVyIGZvciBlYWNoIGtleSBmcmFtZS4gU2VlIHtAbGluayBzZXRGcmFtZX0uICovXG5cdHByaXZhdGUgcmVhZG9ubHkgZHJhd09yZGVyczogQXJyYXk8QXJyYXk8bnVtYmVyPiB8IG51bGw+O1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCAuLi5EcmF3T3JkZXJUaW1lbGluZS5wcm9wZXJ0eUlkcyk7XG5cdFx0dGhpcy5kcmF3T3JkZXJzID0gbmV3IEFycmF5PEFycmF5PG51bWJlcj4gfCBudWxsPihmcmFtZUNvdW50KTtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVDb3VudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJhbWVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMgYW5kIHRoZSBkcmF3IG9yZGVyIGZvciB0aGUgc3BlY2lmaWVkIGtleSBmcmFtZS5cblx0ICogQHBhcmFtIGRyYXdPcmRlciBPcmRlcmVkIHtAbGluayBTa2VsZXRvbi5zbG90c30gaW5kaWNlcywgb3IgbnVsbCB0byB1c2Ugc2V0dXAgcG9zZVxuXHQgKiAgICAgICAgICAgZHJhdyBvcmRlci4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZHJhd09yZGVyOiBBcnJheTxudW1iZXI+IHwgbnVsbCkge1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5kcmF3T3JkZXJzW2ZyYW1lXSA9IGRyYXdPcmRlcjtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlcixcblx0XHRmcm9tU2V0dXA6IGJvb2xlYW4sIGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXHRcdGNvbnN0IHBvc2UgPSAoYXBwbGllZFBvc2UgPyBza2VsZXRvbi5kcmF3T3JkZXIuYXBwbGllZFBvc2UgOiBza2VsZXRvbi5kcmF3T3JkZXIucG9zZSk7XG5cdFx0Y29uc3Qgc2V0dXAgPSBza2VsZXRvbi5zbG90cztcblx0XHRpZiAob3V0IHx8IHRpbWUgPCB0aGlzLmZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkgVXRpbHMuYXJyYXlDb3B5KHNldHVwLCAwLCBwb3NlLCAwLCBza2VsZXRvbi5zbG90cy5sZW5ndGgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9yZGVyID0gdGhpcy5kcmF3T3JkZXJzW1RpbWVsaW5lLnNlYXJjaCh0aGlzLmZyYW1lcywgdGltZSldO1xuXHRcdGlmICghb3JkZXIpXG5cdFx0XHRVdGlscy5hcnJheUNvcHkoc2V0dXAsIDAsIHBvc2UsIDAsIHNrZWxldG9uLnNsb3RzLmxlbmd0aCk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IG9yZGVyLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdFx0cG9zZVtpXSA9IHNldHVwW29yZGVyW2ldXTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMgYSBzdWJzZXQgb2YgdGhlIHtAbGluayBTa2VsZXRvbi5nZXREcmF3T3JkZXIgfCBkcmF3IG9yZGVyfS4gKi9cbmV4cG9ydCBjbGFzcyBEcmF3T3JkZXJGb2xkZXJUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIHtcblx0cHJpdmF0ZSByZWFkb25seSBzbG90czogbnVtYmVyW107XG5cdHByaXZhdGUgcmVhZG9ubHkgaW5Gb2xkZXI6IGJvb2xlYW5bXTtcblx0cHJpdmF0ZSByZWFkb25seSBkcmF3T3JkZXJzOiBBcnJheTxBcnJheTxudW1iZXI+IHwgbnVsbD47XG5cblx0LyoqIEBwYXJhbSBzbG90cyB7QGxpbmsgU2tlbGV0b24uc2xvdHN9IGluZGljZXMgY29udHJvbGxlZCBieSB0aGlzIHRpbWVsaW5lLCBpbiBzZXR1cCBvcmRlci5cblx0ICogQHBhcmFtIHNsb3RDb3VudCBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIHNrZWxldG9uLiAqL1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBzbG90czogbnVtYmVyW10sIHNsb3RDb3VudDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgLi4uRHJhd09yZGVyRm9sZGVyVGltZWxpbmUucHJvcGVydHlJZHMoc2xvdHMpKTtcblx0XHR0aGlzLnNsb3RzID0gc2xvdHM7XG5cdFx0dGhpcy5kcmF3T3JkZXJzID0gbmV3IEFycmF5KGZyYW1lQ291bnQpO1xuXHRcdHRoaXMuaW5Gb2xkZXIgPSBuZXcgQXJyYXkoc2xvdENvdW50KTtcblx0XHRmb3IgKGNvbnN0IGkgb2Ygc2xvdHMpXG5cdFx0XHR0aGlzLmluRm9sZGVyW2ldID0gdHJ1ZTtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGF0aWMgcHJvcGVydHlJZHMgKHNsb3RzOiBudW1iZXJbXSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBuID0gc2xvdHMubGVuZ3RoO1xuXHRcdGNvbnN0IGlkcyA9IG5ldyBBcnJheShuKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdGlkc1tpXSA9IGBkJHtzbG90c1tpXX1gO1xuXHRcdHJldHVybiBpZHM7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cdH1cblxuXHQvKiogVGhlIHtAbGluayBTa2VsZXRvbi5nZXRTbG90c30gaW5kaWNlcyB0aGF0IHRoaXMgdGltZWxpbmUgYWZmZWN0cywgaW4gc2V0dXAgb3JkZXIuICovXG5cdGdldFNsb3RzICgpOiBudW1iZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuc2xvdHM7XG5cdH1cblxuXHQvKiogVGhlIGRyYXcgb3JkZXIgZm9yIGVhY2ggZnJhbWUuIFNlZSB7QGxpbmsgc2V0RnJhbWV9LiAqL1xuXHRnZXREcmF3T3JkZXJzICgpOiBBcnJheTxBcnJheTxudW1iZXI+IHwgbnVsbD4ge1xuXHRcdHJldHVybiB0aGlzLmRyYXdPcmRlcnM7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSBhbmQgZHJhdyBvcmRlciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuXG5cdCAqIEBwYXJhbSBkcmF3T3JkZXIgT3JkZXJlZCB7QGxpbmsgZ2V0U2xvdHN9IGluZGljZXMsIG9yIG51bGwgdG8gdXNlIHNldHVwIHBvc2Ugb3JkZXIuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGRyYXdPcmRlcjogQXJyYXk8bnVtYmVyPiB8IG51bGwpOiB2b2lkIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZHJhd09yZGVyc1tmcmFtZV0gPSBkcmF3T3JkZXI7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgcG9zZSA9IChhcHBsaWVkUG9zZSA/IHNrZWxldG9uLmRyYXdPcmRlci5hcHBsaWVkUG9zZSA6IHNrZWxldG9uLmRyYXdPcmRlci5wb3NlKTtcblx0XHRjb25zdCBzZXR1cCA9IHNrZWxldG9uLnNsb3RzO1xuXHRcdGlmIChvdXQgfHwgdGltZSA8IHRoaXMuZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB0aGlzLnNldHVwKHBvc2UsIHNldHVwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb3JkZXIgPSB0aGlzLmRyYXdPcmRlcnNbVGltZWxpbmUuc2VhcmNoKHRoaXMuZnJhbWVzLCB0aW1lKV07XG5cdFx0XHRpZiAoIW9yZGVyKVxuXHRcdFx0XHR0aGlzLnNldHVwKHBvc2UsIHNldHVwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBpbkZvbGRlciA9IHRoaXMuaW5Gb2xkZXI7XG5cdFx0XHRcdGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cztcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDAsIGZvdW5kID0gMCwgZG9uZSA9IHNsb3RzLmxlbmd0aDsgOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoaW5Gb2xkZXJbcG9zZVtpXS5kYXRhLmluZGV4XSkge1xuXHRcdFx0XHRcdFx0cG9zZVtpXSA9IHNldHVwW3Nsb3RzW29yZGVyW2ZvdW5kXV1dO1xuXHRcdFx0XHRcdFx0aWYgKCsrZm91bmQgPT09IGRvbmUpIGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0dXAgKHBvc2U6IFNsb3RbXSwgc2V0dXA6IFNsb3RbXSk6IHZvaWQge1xuXHRcdGNvbnN0IHsgaW5Gb2xkZXIsIHNsb3RzIH0gPSB0aGlzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBmb3VuZCA9IDAsIGRvbmUgPSBzbG90cy5sZW5ndGg7IDsgaSsrKSB7XG5cdFx0XHRpZiAoaW5Gb2xkZXJbcG9zZVtpXS5kYXRhLmluZGV4XSkge1xuXHRcdFx0XHRwb3NlW2ldID0gc2V0dXBbc2xvdHNbZm91bmRdXTtcblx0XHRcdFx0aWYgKCsrZm91bmQgPT09IGRvbmUpIGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdC8qKiBUaGUgaW5kZXggb2YgdGhlIGNvbnN0cmFpbnQgaW4ge0BsaW5rIFNrZWxldG9uLmNvbnN0cmFpbnRzfSB0aGF0IHdpbGwgYmUgY2hhbmdlZCB3aGVuIHRoaXMgdGltZWxpbmUgaXMgYXBwbGllZCwgb3IgLTEgaWZcblx0ICogYSBzcGVjaWZpYyBjb25zdHJhaW50IHdpbGwgbm90IGJlIGNoYW5nZWQuICovXG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdHJhaW50VGltZWxpbmUgKG9iajogVGltZWxpbmUgJiBQYXJ0aWFsPENvbnN0cmFpbnRUaW1lbGluZT4pOiBvYmogaXMgVGltZWxpbmUgJiBDb25zdHJhaW50VGltZWxpbmUge1xuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmouY29uc3RyYWludEluZGV4ID09PSAnbnVtYmVyJztcbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIElrQ29uc3RyYWludFBvc2UubWl4KX0sIHtAbGluayBJa0NvbnN0cmFpbnRQb3NlLnNvZnRuZXNzfSxcbiAqIHtAbGluayBJa0NvbnN0cmFpbnRQb3NlLmJlbmREaXJlY3Rpb259LCB7QGxpbmsgSWtDb25zdHJhaW50UG9zZS5zdHJldGNofSwgYW5kXG4gKiB7QGxpbmsgSWtDb25zdHJhaW50UG9zZS5jb21wcmVzc30uICovXG5leHBvcnQgY2xhc3MgSWtDb25zdHJhaW50VGltZWxpbmUgZXh0ZW5kcyBDdXJ2ZVRpbWVsaW5lIGltcGxlbWVudHMgQ29uc3RyYWludFRpbWVsaW5lIHtcblx0cmVhZG9ubHkgY29uc3RyYWludEluZGV4OiBudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LmlrQ29uc3RyYWludH18JHtjb25zdHJhaW50SW5kZXh9YCk7XG5cdFx0dGhpcy5jb25zdHJhaW50SW5kZXggPSBjb25zdHJhaW50SW5kZXg7XG5cdH1cblxuXHRnZXRGcmFtZUVudHJpZXMgKCkge1xuXHRcdHJldHVybiA2LypFTlRSSUVTKi87XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSwgbWl4LCBzb2Z0bmVzcywgYmVuZCBkaXJlY3Rpb24sIGNvbXByZXNzLCBhbmQgc3RyZXRjaCBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuXG5cdCAqIEBwYXJhbSBiZW5kRGlyZWN0aW9uIDEgb3IgLTEuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1peDogbnVtYmVyLCBzb2Z0bmVzczogbnVtYmVyLCBiZW5kRGlyZWN0aW9uOiBudW1iZXIsIGNvbXByZXNzOiBib29sZWFuLCBzdHJldGNoOiBib29sZWFuKSB7XG5cdFx0ZnJhbWUgKj0gNi8qRU5UUklFUyovO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypNSVgqL10gPSBtaXg7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAyLypTT0ZUTkVTUyovXSA9IHNvZnRuZXNzO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQkVORF9ESVJFQ1RJT04qL10gPSBiZW5kRGlyZWN0aW9uO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNC8qQ09NUFJFU1MqL10gPSBjb21wcmVzcyA/IDEgOiAwO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNS8qU1RSRVRDSCovXSA9IHN0cmV0Y2ggPyAxIDogMDtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBJa0NvbnN0cmFpbnQ7XG5cdFx0aWYgKCFjb25zdHJhaW50LmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGNvbnN0cmFpbnQuYXBwbGllZFBvc2UgOiBjb25zdHJhaW50LnBvc2U7XG5cblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRcdHBvc2UubWl4ID0gc2V0dXAubWl4O1xuXHRcdFx0XHRwb3NlLnNvZnRuZXNzID0gc2V0dXAuc29mdG5lc3M7XG5cdFx0XHRcdHBvc2UuYmVuZERpcmVjdGlvbiA9IHNldHVwLmJlbmREaXJlY3Rpb247XG5cdFx0XHRcdHBvc2UuY29tcHJlc3MgPSBzZXR1cC5jb21wcmVzcztcblx0XHRcdFx0cG9zZS5zdHJldGNoID0gc2V0dXAuc3RyZXRjaDtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgbWl4ID0gMCwgc29mdG5lc3MgPSAwO1xuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCA2LypFTlRSSUVTKi8pXG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSAvIDYvKkVOVFJJRVMqL107XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldO1xuXHRcdFx0XHRtaXggPSBmcmFtZXNbaSArIDEvKk1JWCovXTtcblx0XHRcdFx0c29mdG5lc3MgPSBmcmFtZXNbaSArIDIvKlNPRlRORVNTKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgNi8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdG1peCArPSAoZnJhbWVzW2kgKyA2LypFTlRSSUVTKi8gKyAxLypNSVgqL10gLSBtaXgpICogdDtcblx0XHRcdFx0c29mdG5lc3MgKz0gKGZyYW1lc1tpICsgNi8qRU5UUklFUyovICsgMi8qU09GVE5FU1MqL10gLSBzb2Z0bmVzcykgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHRtaXggPSBmcmFtZXNbaSArIDEvKk1JWCovXTtcblx0XHRcdFx0c29mdG5lc3MgPSBmcmFtZXNbaSArIDIvKlNPRlRORVNTKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG1peCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qTUlYKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0c29mdG5lc3MgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKlNPRlRORVNTKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJhc2UgPSBmcm9tU2V0dXAgPyBjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlIDogcG9zZTtcblx0XHRwb3NlLm1peCA9IGJhc2UubWl4ICsgKG1peCAtIGJhc2UubWl4KSAqIGFscGhhO1xuXHRcdHBvc2Uuc29mdG5lc3MgPSBiYXNlLnNvZnRuZXNzICsgKHNvZnRuZXNzIC0gYmFzZS5zb2Z0bmVzcykgKiBhbHBoYTtcblx0XHRpZiAob3V0KSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdHBvc2UuYmVuZERpcmVjdGlvbiA9IGJhc2UuYmVuZERpcmVjdGlvbjtcblx0XHRcdFx0cG9zZS5jb21wcmVzcyA9IGJhc2UuY29tcHJlc3M7XG5cdFx0XHRcdHBvc2Uuc3RyZXRjaCA9IGJhc2Uuc3RyZXRjaDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zZS5iZW5kRGlyZWN0aW9uID0gZnJhbWVzW2kgKyAzLypCRU5EX0RJUkVDVElPTiovXTtcblx0XHRcdHBvc2UuY29tcHJlc3MgPSBmcmFtZXNbaSArIDQvKkNPTVBSRVNTKi9dICE9PSAwO1xuXHRcdFx0cG9zZS5zdHJldGNoID0gZnJhbWVzW2kgKyA1LypTVFJFVENIKi9dICE9PSAwO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgVHJhbnNmb3JtQ29uc3RyYWludFBvc2UubWl4Um90YXRlfSwge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFh9LFxuICoge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFl9LCB7QGxpbmsgVHJhbnNmb3JtQ29uc3RyYWludFBvc2UubWl4U2NhbGVYfSxcbiAqIHtAbGluayBUcmFuc2Zvcm1Db25zdHJhaW50UG9zZS5taXhTY2FsZVl9LCBhbmQge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFNoZWFyWX0uICovXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtQ29uc3RyYWludFRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdC8qKiBUaGUgaW5kZXggb2YgdGhlIHRyYW5zZm9ybSBjb25zdHJhaW50IHNsb3QgaW4ge0BsaW5rIFNrZWxldG9uLnRyYW5zZm9ybUNvbnN0cmFpbnRzfSB0aGF0IHdpbGwgYmUgY2hhbmdlZC4gKi9cblx0Y29uc3RyYWludEluZGV4OiBudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LnRyYW5zZm9ybUNvbnN0cmFpbnR9fCR7Y29uc3RyYWludEluZGV4fWApO1xuXHRcdHRoaXMuY29uc3RyYWludEluZGV4ID0gY29uc3RyYWludEluZGV4O1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gNy8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUsIHJvdGF0ZSBtaXgsIHRyYW5zbGF0ZSBtaXgsIHNjYWxlIG1peCwgYW5kIHNoZWFyIG1peCBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1peFJvdGF0ZTogbnVtYmVyLCBtaXhYOiBudW1iZXIsIG1peFk6IG51bWJlciwgbWl4U2NhbGVYOiBudW1iZXIsIG1peFNjYWxlWTogbnVtYmVyLFxuXHRcdG1peFNoZWFyWTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0ZnJhbWUgKj0gNy8qRU5UUklFUyovO1xuXHRcdGZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdGZyYW1lc1tmcmFtZSArIDEvKlJPVEFURSovXSA9IG1peFJvdGF0ZTtcblx0XHRmcmFtZXNbZnJhbWUgKyAyLypYKi9dID0gbWl4WDtcblx0XHRmcmFtZXNbZnJhbWUgKyAzLypZKi9dID0gbWl4WTtcblx0XHRmcmFtZXNbZnJhbWUgKyA0LypTQ0FMRVgqL10gPSBtaXhTY2FsZVg7XG5cdFx0ZnJhbWVzW2ZyYW1lICsgNS8qU0NBTEVZKi9dID0gbWl4U2NhbGVZO1xuXHRcdGZyYW1lc1tmcmFtZSArIDYvKlNIRUFSWSovXSA9IG1peFNoZWFyWTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBUcmFuc2Zvcm1Db25zdHJhaW50O1xuXHRcdGlmICghY29uc3RyYWludC5hY3RpdmUpIHJldHVybjtcblx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdGlmIChmcm9tU2V0dXApIHtcblx0XHRcdFx0Y29uc3Qgc2V0dXAgPSBjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0XHRwb3NlLm1peFJvdGF0ZSA9IHNldHVwLm1peFJvdGF0ZTtcblx0XHRcdFx0cG9zZS5taXhYID0gc2V0dXAubWl4WDtcblx0XHRcdFx0cG9zZS5taXhZID0gc2V0dXAubWl4WTtcblx0XHRcdFx0cG9zZS5taXhTY2FsZVggPSBzZXR1cC5taXhTY2FsZVg7XG5cdFx0XHRcdHBvc2UubWl4U2NhbGVZID0gc2V0dXAubWl4U2NhbGVZO1xuXHRcdFx0XHRwb3NlLm1peFNoZWFyWSA9IHNldHVwLm1peFNoZWFyWTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcm90YXRlOiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBzY2FsZVg6IG51bWJlciwgc2NhbGVZOiBudW1iZXIsIHNoZWFyWTogbnVtYmVyO1xuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCA3LypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyA3LypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0cm90YXRlID0gZnJhbWVzW2kgKyAxLypST1RBVEUqL107XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDIvKlgqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDMvKlkqL107XG5cdFx0XHRcdHNjYWxlWCA9IGZyYW1lc1tpICsgNC8qU0NBTEVYKi9dO1xuXHRcdFx0XHRzY2FsZVkgPSBmcmFtZXNbaSArIDUvKlNDQUxFWSovXTtcblx0XHRcdFx0c2hlYXJZID0gZnJhbWVzW2kgKyA2LypTSEVBUlkqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0cm90YXRlICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDEvKlJPVEFURSovXSAtIHJvdGF0ZSkgKiB0O1xuXHRcdFx0XHR4ICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDIvKlgqL10gLSB4KSAqIHQ7XG5cdFx0XHRcdHkgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgMy8qWSovXSAtIHkpICogdDtcblx0XHRcdFx0c2NhbGVYICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDQvKlNDQUxFWCovXSAtIHNjYWxlWCkgKiB0O1xuXHRcdFx0XHRzY2FsZVkgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgNS8qU0NBTEVZKi9dIC0gc2NhbGVZKSAqIHQ7XG5cdFx0XHRcdHNoZWFyWSArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyA2LypTSEVBUlkqL10gLSBzaGVhclkpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0cm90YXRlID0gZnJhbWVzW2kgKyAxLypST1RBVEUqL107XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDIvKlgqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDMvKlkqL107XG5cdFx0XHRcdHNjYWxlWCA9IGZyYW1lc1tpICsgNC8qU0NBTEVYKi9dO1xuXHRcdFx0XHRzY2FsZVkgPSBmcmFtZXNbaSArIDUvKlNDQUxFWSovXTtcblx0XHRcdFx0c2hlYXJZID0gZnJhbWVzW2kgKyA2LypTSEVBUlkqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cm90YXRlID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypST1RBVEUqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR4ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypYKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR5ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAzLypZKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMiAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0c2NhbGVYID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA0LypTQ0FMRVgqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiAzIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRzY2FsZVkgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDUvKlNDQUxFWSovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDQgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHNoZWFyWSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgNi8qU0hFQVJZKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNSAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cblx0XHRjb25zdCBiYXNlID0gZnJvbVNldHVwID8gY29uc3RyYWludC5kYXRhLnNldHVwUG9zZSA6IHBvc2U7XG5cdFx0aWYgKGFkZCkge1xuXHRcdFx0cG9zZS5taXhSb3RhdGUgPSBiYXNlLm1peFJvdGF0ZSArIHJvdGF0ZSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhYID0gYmFzZS5taXhYICsgeCAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhZID0gYmFzZS5taXhZICsgeSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhTY2FsZVggPSBiYXNlLm1peFNjYWxlWCArIHNjYWxlWCAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhTY2FsZVkgPSBiYXNlLm1peFNjYWxlWSArIHNjYWxlWSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhTaGVhclkgPSBiYXNlLm1peFNoZWFyWSArIHNoZWFyWSAqIGFscGhhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb3NlLm1peFJvdGF0ZSA9IGJhc2UubWl4Um90YXRlICsgKHJvdGF0ZSAtIGJhc2UubWl4Um90YXRlKSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhYID0gYmFzZS5taXhYICsgKHggLSBiYXNlLm1peFgpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFkgPSBiYXNlLm1peFkgKyAoeSAtIGJhc2UubWl4WSkgKiBhbHBoYTtcblx0XHRcdHBvc2UubWl4U2NhbGVYID0gYmFzZS5taXhTY2FsZVggKyAoc2NhbGVYIC0gYmFzZS5taXhTY2FsZVgpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFNjYWxlWSA9IGJhc2UubWl4U2NhbGVZICsgKHNjYWxlWSAtIGJhc2UubWl4U2NhbGVZKSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhTaGVhclkgPSBiYXNlLm1peFNoZWFyWSArIChzaGVhclkgLSBiYXNlLm1peFNoZWFyWSkgKiBhbHBoYTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgMSBjb25zdHJhaW50IHByb3BlcnR5IHdpdGggYSBjdXJ2ZS4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb25zdHJhaW50VGltZWxpbmUxIGV4dGVuZHMgQ3VydmVUaW1lbGluZTEgaW1wbGVtZW50cyBDb25zdHJhaW50VGltZWxpbmUge1xuXHRyZWFkb25seSBjb25zdHJhaW50SW5kZXg6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke3Byb3BlcnR5fXwke2NvbnN0cmFpbnRJbmRleH1gKTtcblx0XHR0aGlzLmNvbnN0cmFpbnRJbmRleCA9IGNvbnN0cmFpbnRJbmRleDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGF0aENvbnN0cmFpbnRQb3NlLnBvc2l0aW9ufS4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoQ29uc3RyYWludFBvc2l0aW9uVGltZWxpbmUgZXh0ZW5kcyBDb25zdHJhaW50VGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5wYXRoQ29uc3RyYWludFBvc2l0aW9uKTtcblx0XHR0aGlzLmFkZGl0aXZlID0gdHJ1ZTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBQYXRoQ29uc3RyYWludDtcblx0XHRpZiAoY29uc3RyYWludC5hY3RpdmUpIHtcblx0XHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGNvbnN0cmFpbnQuYXBwbGllZFBvc2UgOiBjb25zdHJhaW50LnBvc2U7XG5cdFx0XHRwb3NlLnBvc2l0aW9uID0gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tU2V0dXAsIGFkZCwgcG9zZS5wb3NpdGlvbiwgY29uc3RyYWludC5kYXRhLnNldHVwUG9zZS5wb3NpdGlvbik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQYXRoQ29uc3RyYWludFBvc2Uuc3BhY2luZ30uICovXG5leHBvcnQgY2xhc3MgUGF0aENvbnN0cmFpbnRTcGFjaW5nVGltZWxpbmUgZXh0ZW5kcyBDb25zdHJhaW50VGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5wYXRoQ29uc3RyYWludFNwYWNpbmcpO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBmaXJlZEV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tU2V0dXA6IGJvb2xlYW4sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cblx0XHRjb25zdCBjb25zdHJhaW50ID0gc2tlbGV0b24uY29uc3RyYWludHNbdGhpcy5jb25zdHJhaW50SW5kZXhdIGFzIFBhdGhDb25zdHJhaW50O1xuXHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkge1xuXHRcdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblx0XHRcdHBvc2Uuc3BhY2luZyA9IHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBmYWxzZSwgcG9zZS5zcGFjaW5nLFxuXHRcdFx0XHRjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlLnNwYWNpbmcpO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGF0aENvbnN0cmFpbnQubWl4Um90YXRlfSwge0BsaW5rIFBhdGhDb25zdHJhaW50Lm1peFh9LCBhbmRcbiAqIHtAbGluayBQYXRoQ29uc3RyYWludC5taXhZfS4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoQ29uc3RyYWludE1peFRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LnBhdGhDb25zdHJhaW50TWl4fXwke2NvbnN0cmFpbnRJbmRleH1gKTtcblx0XHR0aGlzLmNvbnN0cmFpbnRJbmRleCA9IGNvbnN0cmFpbnRJbmRleDtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDQvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGFuZCBjb2xvciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1peFJvdGF0ZTogbnVtYmVyLCBtaXhYOiBudW1iZXIsIG1peFk6IG51bWJlcikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGZyYW1lIDw8PSAyO1xuXHRcdGZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdGZyYW1lc1tmcmFtZSArIDEvKlJPVEFURSovXSA9IG1peFJvdGF0ZTtcblx0XHRmcmFtZXNbZnJhbWUgKyAyLypYKi9dID0gbWl4WDtcblx0XHRmcmFtZXNbZnJhbWUgKyAzLypZKi9dID0gbWl4WTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbVNldHVwOiBib29sZWFuLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBQYXRoQ29uc3RyYWludDtcblx0XHRpZiAoIWNvbnN0cmFpbnQuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdGNvbnN0IHNldHVwID0gY29uc3RyYWludC5kYXRhLnNldHVwUG9zZTtcblx0XHRcdFx0cG9zZS5taXhSb3RhdGUgPSBzZXR1cC5taXhSb3RhdGU7XG5cdFx0XHRcdHBvc2UubWl4WCA9IHNldHVwLm1peFg7XG5cdFx0XHRcdHBvc2UubWl4WSA9IHNldHVwLm1peFk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHJvdGF0ZTogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcjtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgNC8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpID4+IDJdO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0cm90YXRlID0gZnJhbWVzW2kgKyAxLypST1RBVEUqL107XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDIvKlgqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDMvKlkqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyA0LypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0cm90YXRlICs9IChmcmFtZXNbaSArIDQvKkVOVFJJRVMqLyArIDEvKlJPVEFURSovXSAtIHJvdGF0ZSkgKiB0O1xuXHRcdFx0XHR4ICs9IChmcmFtZXNbaSArIDQvKkVOVFJJRVMqLyArIDIvKlgqL10gLSB4KSAqIHQ7XG5cdFx0XHRcdHkgKz0gKGZyYW1lc1tpICsgNC8qRU5UUklFUyovICsgMy8qWSovXSAtIHkpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0cm90YXRlID0gZnJhbWVzW2kgKyAxLypST1RBVEUqL107XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDIvKlgqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDMvKlkqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cm90YXRlID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypST1RBVEUqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR4ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypYKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR5ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAzLypZKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMiAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cblx0XHRjb25zdCBiYXNlID0gZnJvbVNldHVwID8gY29uc3RyYWludC5kYXRhLnNldHVwUG9zZSA6IHBvc2U7XG5cdFx0aWYgKGFkZCkge1xuXHRcdFx0cG9zZS5taXhSb3RhdGUgPSBiYXNlLm1peFJvdGF0ZSArIHJvdGF0ZSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhYID0gYmFzZS5taXhYICsgeCAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhZID0gYmFzZS5taXhZICsgeSAqIGFscGhhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb3NlLm1peFJvdGF0ZSA9IGJhc2UubWl4Um90YXRlICsgKHJvdGF0ZSAtIGJhc2UubWl4Um90YXRlKSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhYID0gYmFzZS5taXhYICsgKHggLSBiYXNlLm1peFgpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFkgPSBiYXNlLm1peFkgKyAoeSAtIGJhc2UubWl4WSkgKiBhbHBoYTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBtb3N0IHtAbGluayBQaHlzaWNzQ29uc3RyYWludH0gdGltZWxpbmVzLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUgZXh0ZW5kcyBDb25zdHJhaW50VGltZWxpbmUxIHtcblx0LyoqIEBwYXJhbSBjb25zdHJhaW50SW5kZXggLTEgZm9yIGFsbCBwaHlzaWNzIGNvbnN0cmFpbnRzIGluIHRoZSBza2VsZXRvbi4gKi9cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIsIHByb3BlcnR5OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBwcm9wZXJ0eSk7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGlmIChhZGQgJiYgIXRoaXMuYWRkaXRpdmUpIGFkZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbnN0cmFpbnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGltZSA+PSB0aGlzLmZyYW1lc1swXSA/IHRoaXMuZ2V0Q3VydmVWYWx1ZSh0aW1lKSA6IDA7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50cyA9IHNrZWxldG9uLnBoeXNpY3M7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnN0cmFpbnQgb2YgY29uc3RyYWludHMpIHtcblx0XHRcdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlICYmIHRoaXMuZ2xvYmFsKGNvbnN0cmFpbnQuZGF0YSkpIHtcblx0XHRcdFx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXHRcdFx0XHRcdHRoaXMuc2V0KHBvc2UsIHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIHRoaXMuZ2V0KHBvc2UpLCB0aGlzLmdldChjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlKSwgdmFsdWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gc2tlbGV0b24uY29uc3RyYWludHNbdGhpcy5jb25zdHJhaW50SW5kZXhdIGFzIFBoeXNpY3NDb25zdHJhaW50O1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlKSB7XG5cdFx0XHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGNvbnN0cmFpbnQuYXBwbGllZFBvc2UgOiBjb25zdHJhaW50LnBvc2U7XG5cdFx0XHRcdHRoaXMuc2V0KHBvc2UsIHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIHRoaXMuZ2V0KHBvc2UpLCB0aGlzLmdldChjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlKSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFic3RyYWN0IGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyO1xuXG5cdGFic3RyYWN0IHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZDtcblxuXHRhYnN0cmFjdCBnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW47XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2UuaW5lcnRpYX0uICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnRJbmVydGlhVGltZWxpbmUgZXh0ZW5kcyBQaHlzaWNzQ29uc3RyYWludFRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5waHlzaWNzQ29uc3RyYWludEluZXJ0aWEpO1xuXHR9XG5cblx0Z2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UpOiBudW1iZXIge1xuXHRcdHJldHVybiBwb3NlLmluZXJ0aWE7XG5cdH1cblxuXHRzZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHBvc2UuaW5lcnRpYSA9IHZhbHVlO1xuXHR9XG5cblx0Z2xvYmFsIChjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludERhdGEpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29uc3RyYWludC5pbmVydGlhR2xvYmFsO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2Uuc3RyZW5ndGh9LiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50U3RyZW5ndGhUaW1lbGluZSBleHRlbmRzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50U3RyZW5ndGgpO1xuXHR9XG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcG9zZS5zdHJlbmd0aDtcblx0fVxuXG5cdHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0cG9zZS5zdHJlbmd0aCA9IHZhbHVlO1xuXHR9XG5cblx0Z2xvYmFsIChjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludERhdGEpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29uc3RyYWludC5zdHJlbmd0aEdsb2JhbDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmRhbXBpbmd9LiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50RGFtcGluZ1RpbWVsaW5lIGV4dGVuZHMgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGh5c2ljc0NvbnN0cmFpbnREYW1waW5nKTtcblx0fVxuXG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcG9zZS5kYW1waW5nO1xuXHR9XG5cblx0c2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRwb3NlLmRhbXBpbmcgPSB2YWx1ZTtcblx0fVxuXG5cdGdsb2JhbCAoY29uc3RyYWludDogUGh5c2ljc0NvbnN0cmFpbnREYXRhKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbnN0cmFpbnQuZGFtcGluZ0dsb2JhbDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLm1hc3NJbnZlcnNlfS4gVGhlIHRpbWVsaW5lIHZhbHVlcyBhcmUgbm90IGludmVydGVkLiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50TWFzc1RpbWVsaW5lIGV4dGVuZHMgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGh5c2ljc0NvbnN0cmFpbnRNYXNzKTtcblx0fVxuXG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gMSAvIHBvc2UubWFzc0ludmVyc2U7XG5cdH1cblxuXHRzZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHBvc2UubWFzc0ludmVyc2UgPSAxIC8gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50Lm1hc3NHbG9iYWw7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS53aW5kfS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludFdpbmRUaW1lbGluZSBleHRlbmRzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50V2luZCk7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRnZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBvc2Uud2luZDtcblx0fVxuXG5cdHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0cG9zZS53aW5kID0gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50LndpbmRHbG9iYWw7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS5ncmF2aXR5fS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludEdyYXZpdHlUaW1lbGluZSBleHRlbmRzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50R3Jhdml0eSk7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRnZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBvc2UuZ3Jhdml0eTtcblx0fVxuXG5cdHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0cG9zZS5ncmF2aXR5ID0gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50LmdyYXZpdHlHbG9iYWw7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS5taXh9LiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50TWl4VGltZWxpbmUgZXh0ZW5kcyBQaHlzaWNzQ29uc3RyYWludFRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5waHlzaWNzQ29uc3RyYWludE1peCk7XG5cdH1cblxuXHRnZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBvc2UubWl4O1xuXHR9XG5cblx0c2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRwb3NlLm1peCA9IHZhbHVlO1xuXHR9XG5cblx0Z2xvYmFsIChjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludERhdGEpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29uc3RyYWludC5taXhHbG9iYWw7XG5cdH1cbn1cblxuLyoqIFJlc2V0cyBhIHBoeXNpY3MgY29uc3RyYWludCB3aGVuIHNwZWNpZmljIGFuaW1hdGlvbiB0aW1lcyBhcmUgcmVhY2hlZC4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludFJlc2V0VGltZWxpbmUgZXh0ZW5kcyBUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdHByaXZhdGUgc3RhdGljIHByb3BlcnR5SWRzOiBzdHJpbmdbXSA9IFtQcm9wZXJ0eS5waHlzaWNzQ29uc3RyYWludFJlc2V0LnRvU3RyaW5nKCldO1xuXG5cdC8qKiBUaGUgaW5kZXggb2YgdGhlIHBoeXNpY3MgY29uc3RyYWludCBpbiB7QGxpbmsgU2tlbGV0b24uY29udHJhaW50c30gdGhhdCB3aWxsIGJlIHJlc2V0IHdoZW4gdGhpcyB0aW1lbGluZSBpc1xuXHQqIGFwcGxpZWQsIG9yIC0xIGlmIGFsbCBwaHlzaWNzIGNvbnN0cmFpbnRzIGluIHRoZSBza2VsZXRvbiB3aWxsIGJlIHJlc2V0LiAqL1xuXHRyZWFkb25seSBjb25zdHJhaW50SW5kZXg6IG51bWJlcjtcblxuXHQvKiogQHBhcmFtIGNvbnN0cmFpbnRJbmRleCAtMSBmb3IgYWxsIHBoeXNpY3MgY29uc3RyYWludHMgaW4gdGhlIHNrZWxldG9uLiAqL1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIC4uLlBoeXNpY3NDb25zdHJhaW50UmVzZXRUaW1lbGluZS5wcm9wZXJ0eUlkcyk7XG5cdFx0dGhpcy5jb25zdHJhaW50SW5kZXggPSBjb25zdHJhaW50SW5kZXg7XG5cdFx0dGhpcy5pbnN0YW50ID0gdHJ1ZTtcblx0fVxuXG5cdGdldEZyYW1lQ291bnQgKCkge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIpIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHR9XG5cblx0LyoqIFJlc2V0cyB0aGUgcGh5c2ljcyBjb25zdHJhaW50IHdoZW4gZnJhbWVzID4gYGxhc3RUaW1lYCBhbmQgPD0gYHRpbWVgLiAqL1xuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGxldCBjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludCB8IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5jb25zdHJhaW50SW5kZXggIT09IC0xKSB7XG5cdFx0XHRjb25zdHJhaW50ID0gc2tlbGV0b24uY29uc3RyYWludHNbdGhpcy5jb25zdHJhaW50SW5kZXhdIGFzIFBoeXNpY3NDb25zdHJhaW50O1xuXHRcdFx0aWYgKCFjb25zdHJhaW50LmFjdGl2ZSkgcmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXG5cdFx0aWYgKGxhc3RUaW1lID4gdGltZSkgeyAvLyBBcHBseSBhZnRlciBsYXN0VGltZSBmb3IgbG9vcGVkIGFuaW1hdGlvbnMuXG5cdFx0XHR0aGlzLmFwcGx5KHNrZWxldG9uLCBsYXN0VGltZSwgTnVtYmVyLk1BWF9WQUxVRSwgW10sIGFscGhhLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRsYXN0VGltZSA9IC0xO1xuXHRcdH0gZWxzZSBpZiAobGFzdFRpbWUgPj0gZnJhbWVzW2ZyYW1lcy5sZW5ndGggLSAxXSkgLy8gTGFzdCB0aW1lIGlzIGFmdGVyIGxhc3QgZnJhbWUuXG5cdFx0XHRyZXR1cm47XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHJldHVybjtcblxuXHRcdGlmIChsYXN0VGltZSA8IGZyYW1lc1swXSB8fCB0aW1lID49IGZyYW1lc1tUaW1lbGluZS5zZWFyY2goZnJhbWVzLCBsYXN0VGltZSkgKyAxXSkge1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQgIT0gbnVsbClcblx0XHRcdFx0Y29uc3RyYWludC5yZXNldChza2VsZXRvbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjb25zdHJhaW50IG9mIHNrZWxldG9uLnBoeXNpY3MpIHtcblx0XHRcdFx0XHRpZiAoY29uc3RyYWludC5hY3RpdmUpIGNvbnN0cmFpbnQucmVzZXQoc2tlbGV0b24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBTbGlkZXJQb3NlLnRpbWV9LiAqL1xuZXhwb3J0IGNsYXNzIFNsaWRlclRpbWVsaW5lIGV4dGVuZHMgQ29uc3RyYWludFRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkuc2xpZGVyVGltZSk7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgU2xpZGVyO1xuXHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkge1xuXHRcdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblx0XHRcdHBvc2UudGltZSA9IHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbVNldHVwLCBhZGQsIHBvc2UudGltZSwgY29uc3RyYWludC5kYXRhLnNldHVwUG9zZS50aW1lKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFNsaWRlclBvc2UubWl4fS4gKi9cbmV4cG9ydCBjbGFzcyBTbGlkZXJNaXhUaW1lbGluZSBleHRlbmRzIENvbnN0cmFpbnRUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnNsaWRlck1peCk7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb21TZXR1cDogYm9vbGVhbixcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgU2xpZGVyO1xuXHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkge1xuXHRcdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblx0XHRcdHBvc2UubWl4ID0gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tU2V0dXAsIGFkZCwgcG9zZS5taXgsIGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UubWl4KTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==
2270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuaW1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFJL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBcUI3RSxPQUFPLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNFOzs7WUFHWTtBQUNaLE1BQU0sT0FBTyxTQUFTO0lBQ3JCOztpREFFNkM7SUFDcEMsSUFBSSxDQUFTO0lBRXRCOytIQUMySDtJQUMzSCxTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUV2QixXQUFXLENBQVk7SUFFaEM7O3lDQUVxQztJQUM1QixLQUFLLENBQWdCO0lBRTlCLGdCQUFnQjtJQUNoQiwrR0FBK0c7SUFDdEcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZDO3VGQUNtRjtJQUNuRixRQUFRLENBQVM7SUFFakIsWUFBYSxJQUFZLEVBQUUsU0FBMEIsRUFBRSxRQUFnQjtRQUN0RSxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFjLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWSxDQUFFLFNBQTBCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTO1lBQUUs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QUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUEsZUFBZSxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLENBQUM7WUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDM0csSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQzlHLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFF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QUMsQ0FBQSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3hDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FB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S0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLGdFQUFnRTtZQUNoRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVUsQ0FBQztZQUM3QixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNQLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3RHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FB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QSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDdEMsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsZ0VBQWdFO2dCQUNoRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVUsQ0FBQztnQkFDN0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN2QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDO1FBQ0YsQ0FBQztRQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxLQUFLLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsV0FBVyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFdBQVcsR0FBRyxDQUFDLENBQUEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxXQUFXLEdBQUcsQ0FBQyxDQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsV0FBVyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMs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ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRhY2htZW50LCBWZXJ0ZXhBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBIYXNTZXF1ZW5jZSB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0hhc1NlcXVlbmNlLmpzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU1vZGUsIFNlcXVlbmNlTW9kZVZhbHVlcyB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL1NlcXVlbmNlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEluaGVyaXQgfSBmcm9tIFwiLi9Cb25lRGF0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSBcIi4vRXZlbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgSWtDb25zdHJhaW50IH0gZnJvbSBcIi4vSWtDb25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IElrQ29uc3RyYWludFBvc2UgfSBmcm9tIFwiLi9Ja0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhDb25zdHJhaW50IH0gZnJvbSBcIi4vUGF0aENvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGF0aENvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vUGF0aENvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3NDb25zdHJhaW50IH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljc0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3NDb25zdHJhaW50UG9zZSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50UG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3NlZCB9IGZyb20gXCIuL1Bvc2VkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b25EYXRhIH0gZnJvbSBcIi4vU2tlbGV0b25EYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNsaWRlciB9IGZyb20gXCIuL1NsaWRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbGlkZXJQb3NlIH0gZnJvbSBcIi4vU2xpZGVyUG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbG90IH0gZnJvbSBcIi4vU2xvdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbG90UG9zZSB9IGZyb20gXCIuL1Nsb3RQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybUNvbnN0cmFpbnQgfSBmcm9tIFwiLi9UcmFuc2Zvcm1Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludFBvc2UuanNcIjtcbmltcG9ydCB7IENvbG9yLCB0eXBlIE51bWJlckFycmF5TGlrZSwgU3RyaW5nU2V0LCBVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgYSBsaXN0IG9mIHRpbWVsaW5lcyB0byBhbmltYXRlIGEgc2tlbGV0b24ncyBwb3NlIG92ZXIgdGltZS5cbiAqXG4gKiBTZWUgPGEgaHJlZj0naHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1hcHBseWluZy1hbmltYXRpb25zI1RpbWVsaW5lLUFQSSc+QXBwbHlpbmcgQW5pbWF0aW9uczwvYT4gaW4gdGhlIFNwaW5lIFJ1bnRpbWVzXG4gKiBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBBbmltYXRpb24ge1xuXHQvKiogVGhlIGFuaW1hdGlvbidzIG5hbWUsIHVuaXF1ZSBhY3Jvc3MgYWxsIGFuaW1hdGlvbnMgaW4gdGhlIHNrZWxldG9uLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFNrZWxldG9uRGF0YS5maW5kQW5pbWF0aW9ufS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG5cdC8qKiBUaGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBzZWNvbmRzLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBoaWdoZXN0IHRpbWUgb2YgYWxsIGZyYW1lcyBpbiB0aGUgdGltZWxpbmVzLiBUaGUgZHVyYXRpb24gaXNcblx0ICogdXNlZCB0byBrbm93IHdoZW4gdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkIGFuZCwgZm9yIGFuaW1hdGlvbnMgdGhhdCByZXBlYXQsIHdoZW4gaXQgc2hvdWxkIGxvb3AgYmFjayB0byB0aGUgc3RhcnQuICovXG5cdHRpbWVsaW5lczogQXJyYXk8VGltZWxpbmU+ID0gW107XG5cblx0cmVhZG9ubHkgdGltZWxpbmVJZHM6IFN0cmluZ1NldDtcblxuXHQvKioge0BsaW5rIFNrZWxldG9uLmdldEJvbmVzfSBpbmRpY2VzIHRoYXQgdGhpcyBhbmltYXRpb24ncyB0aW1lbGluZXMgbW9kaWZ5LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIEJvbmVUaW1lbGluZS5ib25lc30uICovXG5cdHJlYWRvbmx5IGJvbmVzOiBBcnJheTxudW1iZXI+O1xuXG5cdC8vIE5vbmVzc2VudGlhbC5cblx0LyoqIFRoZSBjb2xvciBvZiB0aGUgYW5pbWF0aW9uIGFzIGl0IHdhcyBpbiBTcGluZSwgb3IgYSBkZWZhdWx0IGNvbG9yIGlmIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBub3QgZXhwb3J0ZWQuICovXG5cdHJlYWRvbmx5IGNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuXG5cdC8qKiBUaGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBzZWNvbmRzLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBoaWdoZXN0IHRpbWUgb2YgYWxsIGZyYW1lcyBpbiB0aGUgdGltZWxpbmUuIFRoZSBkdXJhdGlvbiBpc1xuXHQgKiB1c2VkIHRvIGtub3cgd2hlbiBpdCBoYXMgY29tcGxldGVkIGFuZCB3aGVuIGl0IHNob3VsZCBsb29wIGJhY2sgdG8gdGhlIHN0YXJ0LiAqL1xuXHRkdXJhdGlvbjogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcsIHRpbWVsaW5lczogQXJyYXk8VGltZWxpbmU+LCBkdXJhdGlvbjogbnVtYmVyKSB7XG5cdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0XHR0aGlzLnRpbWVsaW5lSWRzID0gbmV3IFN0cmluZ1NldCgpO1xuXHRcdHRoaXMuYm9uZXMgPSBbXSBhcyBudW1iZXJbXTtcblx0XHR0aGlzLnNldFRpbWVsaW5lcyh0aW1lbGluZXMpO1xuXHR9XG5cblx0c2V0VGltZWxpbmVzICh0aW1lbGluZXM6IEFycmF5PFRpbWVsaW5lPikge1xuXHRcdGlmICghdGltZWxpbmVzKSB0aHJvdyBuZXcgRXJyb3IoXCJ0aW1lbGluZXMgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMudGltZWxpbmVzID0gdGltZWxpbmVzO1xuXG5cdFx0Y29uc3QgbiA9IHRpbWVsaW5lcy5sZW5ndGg7XG5cdFx0dGhpcy50aW1lbGluZUlkcy5jbGVhcigpO1xuXHRcdHRoaXMuYm9uZXMubGVuZ3RoID0gMDtcblx0XHRjb25zdCBib25lU2V0ID0gbmV3IFNldCgpO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGltZWxpbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCB0aW1lbGluZSA9IGl0ZW1zW2ldO1xuXHRcdFx0dGhpcy50aW1lbGluZUlkcy5hZGRBbGwodGltZWxpbmUucHJvcGVydHlJZHMpO1xuXHRcdFx0aWYgKGlzQm9uZVRpbWVsaW5lKHRpbWVsaW5lKSAmJiBib25lU2V0LmFkZCh0aW1lbGluZS5ib25lSW5kZXgpKVxuXHRcdFx0XHR0aGlzLmJvbmVzLnB1c2godGltZWxpbmUuYm9uZUluZGV4KTtcblx0XHR9XG5cdH1cblxuXHQvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGNvbnRhaW5zIGEgdGltZWxpbmUgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBJRHMuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVGltZWxpbmUucHJvcGVydHlJZHN9LiAqL1xuXHRoYXNUaW1lbGluZSAoaWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKVxuXHRcdFx0aWYgKHRoaXMudGltZWxpbmVJZHMuY29udGFpbnMoaWRzW2ldKSkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqIEFwcGxpZXMgdGhlIGFuaW1hdGlvbidzIHRpbWVsaW5lcyB0byB0aGUgc3BlY2lmaWVkIHNrZWxldG9uLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFRpbWVsaW5lLmFwcGx5fSBhbmRcblx0ICogPGEgaHJlZj0naHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1hcHBseWluZy1hbmltYXRpb25zI1RpbWVsaW5lLUFQSSc+QXBwbHlpbmcgQW5pbWF0aW9uczwvYT4gaW4gdGhlIFNwaW5lIFJ1bnRpbWVzXG5cdCAqIEd1aWRlLlxuXHQgKiBAcGFyYW0gc2tlbGV0b24gVGhlIHNrZWxldG9uIHRoZSBhbmltYXRpb24gaXMgYXBwbGllZCB0by4gVGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGJvbmVzLCBzbG90cywgYW5kIG90aGVyIHNrZWxldG9uXG5cdCAqICAgICAgICAgICBjb21wb25lbnRzIHRoZSB0aW1lbGluZXMgbWF5IGNoYW5nZS5cblx0ICogQHBhcmFtIGxhc3RUaW1lIFRoZSBsYXN0IHRpbWUgaW4gc2Vjb25kcyB0aGlzIGFuaW1hdGlvbiB3YXMgYXBwbGllZC4gU29tZSB0aW1lbGluZXMgdHJpZ2dlciBvbmx5IGF0IGRpc2NyZXRlIHRpbWVzLCBpbiB3aGljaFxuXHQgKiAgICAgICAgICAgY2FzZSBhbGwga2V5cyBhcmUgdHJpZ2dlcmVkIGJldHdlZW4gYGxhc3RUaW1lYCAoZXhjbHVzaXZlKSBhbmQgYHRpbWVgIChpbmNsdXNpdmUpLiBQYXNzIC0xXG5cdCAqICAgICAgICAgICB0aGUgZmlyc3QgdGltZSBhbiBhbmltYXRpb24gaXMgYXBwbGllZCB0byBlbnN1cmUgZnJhbWUgMCBpcyB0cmlnZ2VyZWQuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSB0aW1lIGluIHNlY29uZHMgdGhlIHNrZWxldG9uIGlzIGJlaW5nIHBvc2VkIGZvci4gVGltZWxpbmVzIGZpbmQgdGhlIGZyYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyB0aW1lIGFuZFxuXHQgKiAgICAgICAgICAgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGUgZnJhbWUgdmFsdWVzLlxuXHQgKiBAcGFyYW0gbG9vcCBUcnVlIGlmIGB0aW1lYCBiZXlvbmQgdGhlIHtAbGluayBkdXJhdGlvbn0gcmVwZWF0cyB0aGUgYW5pbWF0aW9uLCBlbHNlIHRoZSBsYXN0IGZyYW1lIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSBldmVudHMgSWYgYW55IGV2ZW50cyBhcmUgZmlyZWQsIHRoZXkgYXJlIGFkZGVkIHRvIHRoaXMgbGlzdC4gUGFzcyBudWxsIHRvIGlnbm9yZSBmaXJlZCBldmVudHMgb3IgaWYgbm8gdGltZWxpbmVzIGZpcmVcblx0ICogICAgICAgICAgIGV2ZW50cy5cblx0ICogQHBhcmFtIGFscGhhIDAgYXBwbGllcyBzZXR1cCBvciBjdXJyZW50IHZhbHVlcyAoZGVwZW5kaW5nIG9uIGBmcm9tYCksIDEgdXNlcyB0aW1lbGluZSB2YWx1ZXMsIGFuZCBpbnRlcm1lZGlhdGVcblx0ICogICAgICAgICAgIHZhbHVlcyBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uIEFkanVzdGluZyBgYWxwaGFgIG92ZXIgdGltZSBjYW4gbWl4IGFuIGFuaW1hdGlvbiBpbiBvciBvdXQuXG5cdCAqIEBwYXJhbSBmcm9tIENvbnRyb2xzIGhvdyBgYWxwaGFgIGFuZCBgYWRkYCBtaXggZnJvbSBjdXJyZW50IG9yIHNldHVwIHBvc2UgdmFsdWVzIHRvIHRpbWVsaW5lIHZhbHVlcy5cblx0ICogQHBhcmFtIGFkZCBJZiB0cnVlLCBmb3IgdGltZWxpbmVzIHRoYXQgc3VwcG9ydCBpdCwgdGhlaXIgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgc2V0dXAgb3IgY3VycmVudCB2YWx1ZXMgKGRlcGVuZGluZyBvblxuXHQgKiAgICAgICAgICAgYGZyb21gKS5cblx0ICogQHBhcmFtIG91dCBUcnVlIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyBtaXhpbmcgb3V0LCBlbHNlIGl0IGlzIG1peGluZyBpbi4gVXNlZCBieSB0aW1lbGluZXMgdGhhdCBwZXJmb3JtIGluc3RhbnQgdHJhbnNpdGlvbnMuXG5cdCAqIEBwYXJhbSBhcHBsaWVkUG9zZSBUcnVlIHRvIG1vZGlmeSB7QGxpbmsgUG9zZWQuYXBwbGllZFBvc2V9LCBlbHNlIHtAbGluayBQb3NlZC5wb3NlfSBpcyBtb2RpZmllZC4gKi9cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBsb29wOiBib29sZWFuLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cdFx0aWYgKCFza2VsZXRvbikgdGhyb3cgbmV3IEVycm9yKFwic2tlbGV0b24gY2Fubm90IGJlIG51bGwuXCIpO1xuXG5cdFx0aWYgKGxvb3AgJiYgdGhpcy5kdXJhdGlvbiAhPT0gMCkge1xuXHRcdFx0dGltZSAlPSB0aGlzLmR1cmF0aW9uO1xuXHRcdFx0aWYgKGxhc3RUaW1lID4gMCkgbGFzdFRpbWUgJT0gdGhpcy5kdXJhdGlvbjtcblx0XHR9XG5cblx0XHRjb25zdCB0aW1lbGluZXMgPSB0aGlzLnRpbWVsaW5lcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHRpbWVsaW5lcy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHR0aW1lbGluZXNbaV0uYXBwbHkoc2tlbGV0b24sIGxhc3RUaW1lLCB0aW1lLCBldmVudHMsIGFscGhhLCBmcm9tLCBhZGQsIG91dCwgYXBwbGllZFBvc2UpO1xuXHR9XG59XG5cbi8qKiBDb250cm9scyB3aGV0aGVyIGBhbHBoYWAgYW5kIGBhZGRgIG1peCBmcm9tIGN1cnJlbnQgb3Igc2V0dXAgcG9zZSB2YWx1ZXMgYW5kIHdoYXQgaGFwcGVucyBiZWZvcmUgdGhlXG4gKiBmaXJzdCBrZXkuXG4gKlxuICogU2VlIHtAbGluayBUaW1lbGluZS5hcHBseX0uICovXG5leHBvcnQgZW51bSBNaXhGcm9tIHtcblx0LyoqIEFscGhhIG1peGVzIGZyb20gdGhlIGN1cnJlbnQgcG9zZS4gQmVmb3JlIHRoZSBmaXJzdCBrZXksIG5vIGNoYW5nZSBpcyBtYWRlLiAqL1xuXHRjdXJyZW50LFxuXHQvKiogQWxwaGEgbWl4ZXMgZnJvbSB0aGUgc2V0dXAgcG9zZS4gQmVmb3JlIHRoZSBmaXJzdCBrZXksIHRoZSBzZXR1cCBwb3NlIGlzIHVzZWQuICovXG5cdHNldHVwLFxuXHQvKiogQWxwaGEgbWl4ZXMgZnJvbSB0aGUgY3VycmVudCBwb3NlLiBCZWZvcmUgdGhlIGZpcnN0IGtleSwgYWxwaGEgbWl4ZXMgZnJvbSB0aGUgY3VycmVudCBwb3NlIHRvIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHRmaXJzdCxcbn1cblxuZXhwb3J0IGVudW0gUHJvcGVydHkge1xuXHRyb3RhdGUsXG5cdHgsXG5cdHksXG5cdHNjYWxlWCxcblx0c2NhbGVZLFxuXHRzaGVhclgsXG5cdHNoZWFyWSxcblx0aW5oZXJpdCxcblx0cmdiLFxuXHRhbHBoYSxcblx0cmdiMixcblx0YXR0YWNobWVudCxcblx0ZGVmb3JtLFxuXHRldmVudCxcblx0ZHJhd09yZGVyLFxuXHRkcmF3T3JkZXJGb2xkZXIsXG5cdGlrQ29uc3RyYWludCxcblx0dHJhbnNmb3JtQ29uc3RyYWludCxcblx0cGF0aENvbnN0cmFpbnRQb3NpdGlvbixcblx0cGF0aENvbnN0cmFpbnRTcGFjaW5nLFxuXHRwYXRoQ29uc3RyYWludE1peCxcblx0cGh5c2ljc0NvbnN0cmFpbnRJbmVydGlhLFxuXHRwaHlzaWNzQ29uc3RyYWludFN0cmVuZ3RoLFxuXHRwaHlzaWNzQ29uc3RyYWludERhbXBpbmcsXG5cdHBoeXNpY3NDb25zdHJhaW50TWFzcyxcblx0cGh5c2ljc0NvbnN0cmFpbnRXaW5kLFxuXHRwaHlzaWNzQ29uc3RyYWludEdyYXZpdHksXG5cdHBoeXNpY3NDb25zdHJhaW50TWl4LFxuXHRwaHlzaWNzQ29uc3RyYWludFJlc2V0LFxuXHRzZXF1ZW5jZSxcblx0c2xpZGVyVGltZSxcblx0c2xpZGVyTWl4LFxufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCB0aW1lbGluZXMuXG4gKlxuICogU2VlIDxhIGhyZWY9J2h0dHBzOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtYXBwbHlpbmctYW5pbWF0aW9ucyNUaW1lbGluZS1BUEknPkFwcGx5aW5nIEFuaW1hdGlvbnM8L2E+IGluIHRoZSBTcGluZVxuICogUnVudGltZXMgR3VpZGUuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGltZWxpbmUge1xuXHRyZWFkb25seSBwcm9wZXJ0eUlkczogc3RyaW5nW107XG5cdHJlYWRvbmx5IGZyYW1lczogTnVtYmVyQXJyYXlMaWtlO1xuXG5cdC8qKiBUcnVlIGlmIHRoaXMgdGltZWxpbmUgc3VwcG9ydHMgYmVpbmcgYXBwbGllZCBhZGRpdGl2ZWx5LlxuXHQgKlxuXHQgKiBTZWUgdGhlIGBhZGRgIHBhcmFtZXRlciBpbiB7QGxpbmsgVGltZWxpbmUuYXBwbHl9LiAqL1xuXHRhZGRpdGl2ZSA9IGZhbHNlO1xuXG5cdC8qKiBUcnVlIGlmIHRoaXMgdGltZWxpbmUgc2V0cyB2YWx1ZXMgaW5zdGFudGFuZW91c2x5IGFuZCBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gYmV0d2VlbiBmcmFtZXMuICovXG5cdGluc3RhbnQgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCAuLi5wcm9wZXJ0eUlkczogc3RyaW5nW10pIHtcblx0XHR0aGlzLnByb3BlcnR5SWRzID0gcHJvcGVydHlJZHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBVdGlscy5uZXdGbG9hdEFycmF5KGZyYW1lQ291bnQgKiB0aGlzLmdldEZyYW1lRW50cmllcygpKTtcblx0fVxuXG5cdGdldFByb3BlcnR5SWRzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9wZXJ0eUlkcztcblx0fVxuXG5cdC8qKiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBzdG9yZWQgcGVyIGZyYW1lLiAqL1xuXHRnZXRGcmFtZUVudHJpZXMgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHQvKiogVGhlIG51bWJlciBvZiBmcmFtZXMgaW4gdGhpcyB0aW1lbGluZS4gKi9cblx0Z2V0RnJhbWVDb3VudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJhbWVzLmxlbmd0aCAvIHRoaXMuZ2V0RnJhbWVFbnRyaWVzKCk7XG5cdH1cblxuXHQvKiogVGhlIGR1cmF0aW9uIG9mIHRoZSB0aW1lbGluZSBpbiBzZWNvbmRzLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBoaWdoZXN0IHRpbWUgb2YgYWxsIGZyYW1lcyBpbiB0aGUgdGltZWxpbmUuICovXG5cdGdldER1cmF0aW9uICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5sZW5ndGggLSB0aGlzLmdldEZyYW1lRW50cmllcygpXTtcblx0fVxuXG5cdC8qKiBBcHBsaWVzIHRoaXMgdGltZWxpbmUgdG8gdGhlIHNrZWxldG9uLlxuXHQgKlxuXHQgKiBTZWUgPGEgaHJlZj0naHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1hcHBseWluZy1hbmltYXRpb25zI1RpbWVsaW5lLUFQSSc+QXBwbHlpbmcgQW5pbWF0aW9uczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLlxuXHQgKiBAcGFyYW0gc2tlbGV0b24gVGhlIHNrZWxldG9uIHRoZSB0aW1lbGluZSBpcyBhcHBsaWVkIHRvLiBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYm9uZXMsIHNsb3RzLCBhbmQgb3RoZXIgc2tlbGV0b25cblx0ICogICAgICAgICAgIGNvbXBvbmVudHMgdGhlIHRpbWVsaW5lcyBtYXkgY2hhbmdlLlxuXHQgKiBAcGFyYW0gbGFzdFRpbWUgVGhlIGxhc3QgdGltZSBpbiBzZWNvbmRzIHRoaXMgdGltZWxpbmUgd2FzIGFwcGxpZWQuIFNvbWUgdGltZWxpbmVzIHRyaWdnZXIgb25seSBhdCBkaXNjcmV0ZSB0aW1lcywgaW5cblx0ICogICAgICAgICAgIHdoaWNoIGNhc2UgYWxsIGtleXMgYXJlIHRyaWdnZXJlZCBiZXR3ZWVuIGBsYXN0VGltZWAgKGV4Y2x1c2l2ZSkgYW5kIGB0aW1lYCAoaW5jbHVzaXZlKS5cblx0ICogICAgICAgICAgIFBhc3MgLTEgdGhlIGZpcnN0IHRpbWUgYSB0aW1lbGluZSBpcyBhcHBsaWVkIHRvIGVuc3VyZSBmcmFtZSAwIGlzIHRyaWdnZXJlZC5cblx0ICogQHBhcmFtIHRpbWUgVGhlIHRpbWUgaW4gc2Vjb25kcyB0aGUgc2tlbGV0b24gaXMgYmVpbmcgcG9zZWQgZm9yLiBUaW1lbGluZXMgZmluZCB0aGUgZnJhbWUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHRpbWUgYW5kXG5cdCAqICAgICAgICAgICBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZSBmcmFtZSB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBldmVudHMgSWYgYW55IGV2ZW50cyBhcmUgZmlyZWQsIHRoZXkgYXJlIGFkZGVkIHRvIHRoaXMgbGlzdC4gUGFzcyBudWxsIHRvIGlnbm9yZSBmaXJlZCBldmVudHMgb3IgaWYgbm8gdGltZWxpbmVzXG5cdCAqICAgICAgICAgICBmaXJlIGV2ZW50cy5cblx0ICogQHBhcmFtIGFscGhhIDAgYXBwbGllcyBzZXR1cCBvciBjdXJyZW50IHZhbHVlcyAoZGVwZW5kaW5nIG9uIGBmcm9tYCksIDEgdXNlcyB0aW1lbGluZSB2YWx1ZXMsIGFuZCBpbnRlcm1lZGlhdGVcblx0ICogICAgICAgICAgIHZhbHVlcyBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uIEFkanVzdGluZyBgYWxwaGFgIG92ZXIgdGltZSBjYW4gbWl4IGEgdGltZWxpbmUgaW4gb3Igb3V0LlxuXHQgKiBAcGFyYW0gZnJvbSBDb250cm9scyBob3cgYGFscGhhYCBhbmQgYGFkZGAgbWl4IGZyb20gY3VycmVudCBvciBzZXR1cCBwb3NlIHZhbHVlcyB0byB0aW1lbGluZVxuXHQgKiAgICAgICAgICAgdmFsdWVzLlxuXHQgKiBAcGFyYW0gYWRkIElmIHRydWUsIGZvciB0aW1lbGluZXMgdGhhdCBzdXBwb3J0IGl0LCB0aGVpciB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBzZXR1cCBvciBjdXJyZW50IHZhbHVlcyAoZGVwZW5kaW5nIG9uXG5cdCAqICAgICAgICAgICBgZnJvbWApLlxuXHQgKiBAcGFyYW0gb3V0IFRydWUgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIG1peGluZyBvdXQsIGVsc2UgaXQgaXMgbWl4aW5nIGluLiBVc2VkIGJ5IHRpbWVsaW5lcyB0aGF0IHBlcmZvcm0gaW5zdGFudFxuXHQgKiAgICAgICAgICAgdHJhbnNpdGlvbnMuXG5cdCAqIEBwYXJhbSBhcHBsaWVkUG9zZSBUcnVlIHRvIG1vZGlmeSB7QGxpbmsgUG9zZWQuYXBwbGllZFBvc2V9LCBlbHNlIHtAbGluayBQb3NlZC5wb3NlfSBpcyBtb2RpZmllZC4gKi9cblx0YWJzdHJhY3QgYXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKTogdm9pZDtcblxuXHQvKiogTGluZWFyIHNlYXJjaCB1c2luZyB0aGUgc3BlY2lmaWVkIHN0cmlkZSAoZGVmYXVsdCAxKS5cblx0ICogQHBhcmFtIHRpbWUgTXVzdCBiZSA+PSB0aGUgZmlyc3QgdmFsdWUgaW4gYGZyYW1lc2AuXG5cdCAqIEByZXR1cm4gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2YWx1ZSA8PSBgdGltZWAuICovXG5cdHN0YXRpYyBzZWFyY2ggKGZyYW1lczogTnVtYmVyQXJyYXlMaWtlLCB0aW1lOiBudW1iZXIsIHN0ZXAgPSAxKSB7XG5cdFx0Y29uc3QgbiA9IGZyYW1lcy5sZW5ndGg7XG5cdFx0Zm9yIChsZXQgaSA9IHN0ZXA7IGkgPCBuOyBpICs9IHN0ZXApXG5cdFx0XHRpZiAoZnJhbWVzW2ldID4gdGltZSkgcmV0dXJuIGkgLSBzdGVwO1xuXHRcdHJldHVybiBuIC0gc3RlcDtcblx0fVxufVxuXG4vKiogQW4gaW50ZXJmYWNlIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgYSBzbG90J3MgcHJvcGVydGllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xvdFRpbWVsaW5lIHtcblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgc2xvdCBpbiB7QGxpbmsgU2tlbGV0b24uc2xvdHN9IHRoYXQgd2lsbCBiZSBjaGFuZ2VkIHdoZW4gdGhpcyB0aW1lbGluZSBpcyBhcHBsaWVkLiAqL1xuXHRzbG90SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2xvdFRpbWVsaW5lIChvYmo6IFRpbWVsaW5lICYgUGFydGlhbDxTbG90VGltZWxpbmU+KTogb2JqIGlzIFRpbWVsaW5lICYgU2xvdFRpbWVsaW5lIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLnNsb3RJbmRleCA9PT0gJ251bWJlcic7XG59XG5cbi8qKiBUaGUgYmFzZSBjbGFzcyBmb3IgdGltZWxpbmVzIHRoYXQgaW50ZXJwb2xhdGUgYmV0d2VlbiBmcmFtZSB2YWx1ZXMgdXNpbmcgc3RlcHBlZCwgbGluZWFyLCBvciBhIEJlemllciBjdXJ2ZS4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdXJ2ZVRpbWVsaW5lIGV4dGVuZHMgVGltZWxpbmUge1xuXHRwcm90ZWN0ZWQgY3VydmVzOiBOdW1iZXJBcnJheUxpa2U7IC8vIHR5cGUsIHgsIHksIC4uLlxuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIC4uLnByb3BlcnR5SWRzOiBzdHJpbmdbXSkge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIC4uLnByb3BlcnR5SWRzKTtcblx0XHR0aGlzLmN1cnZlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoZnJhbWVDb3VudCArIGJlemllckNvdW50ICogMTgvKkJFWklFUl9TSVpFKi8pO1xuXHRcdHRoaXMuY3VydmVzW2ZyYW1lQ291bnQgLSAxXSA9IDEvKlNURVBQRUQqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lIHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uLiAqL1xuXHRzZXRMaW5lYXIgKGZyYW1lOiBudW1iZXIpIHtcblx0XHR0aGlzLmN1cnZlc1tmcmFtZV0gPSAwLypMSU5FQVIqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lIHRvIHN0ZXBwZWQgaW50ZXJwb2xhdGlvbi4gKi9cblx0c2V0U3RlcHBlZCAoZnJhbWU6IG51bWJlcikge1xuXHRcdHRoaXMuY3VydmVzW2ZyYW1lXSA9IDEvKlNURVBQRUQqLztcblx0fVxuXG5cdC8qKiBTaHJpbmtzIHRoZSBzdG9yYWdlIGZvciBCZXppZXIgY3VydmVzLCBmb3IgdXNlIHdoZW4gYGJlemllckNvdW50YCAoc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3Rvcikgd2FzIGxhcmdlclxuXHQgKiB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIEJlemllciBjdXJ2ZXMuICovXG5cdHNocmluayAoYmV6aWVyQ291bnQ6IG51bWJlcikge1xuXHRcdGNvbnN0IHNpemUgPSB0aGlzLmdldEZyYW1lQ291bnQoKSArIGJlemllckNvdW50ICogMTgvKkJFWklFUl9TSVpFKi87XG5cdFx0aWYgKHRoaXMuY3VydmVzLmxlbmd0aCA+IHNpemUpIHtcblx0XHRcdGNvbnN0IG5ld0N1cnZlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoc2l6ZSk7XG5cdFx0XHRVdGlscy5hcnJheUNvcHkodGhpcy5jdXJ2ZXMsIDAsIG5ld0N1cnZlcywgMCwgc2l6ZSk7XG5cdFx0XHR0aGlzLmN1cnZlcyA9IG5ld0N1cnZlcztcblx0XHR9XG5cdH1cblxuXHQvKiogU3RvcmVzIHRoZSBzZWdtZW50cyBmb3IgdGhlIHNwZWNpZmllZCBCZXppZXIgY3VydmUuIEZvciB0aW1lbGluZXMgdGhhdCBtb2RpZnkgbXVsdGlwbGUgdmFsdWVzLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuXG5cdCAqIG9uZSBjdXJ2ZSBwZXIgZnJhbWUuXG5cdCAqIEBwYXJhbSBiZXppZXIgVGhlIG9yZGluYWwgb2YgdGhpcyBCZXppZXIgY3VydmUgZm9yIHRoaXMgdGltZWxpbmUsIGJldHdlZW4gMCBhbmQgYGJlemllckNvdW50IC0gMWAgKHNwZWNpZmllZFxuXHQgKiAgICAgICAgICAgaW4gdGhlIGNvbnN0cnVjdG9yKSwgaW5jbHVzaXZlLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudCAtIDFgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5kZXggb2YgdGhlIHZhbHVlIGZvciB0aGlzIGZyYW1lIHRoYXQgdGhpcyBjdXJ2ZSBpcyB1c2VkIGZvci5cblx0ICogQHBhcmFtIHRpbWUxIFRoZSB0aW1lIGZvciB0aGUgZmlyc3Qga2V5LlxuXHQgKiBAcGFyYW0gdmFsdWUxIFRoZSB2YWx1ZSBmb3IgdGhlIGZpcnN0IGtleS5cblx0ICogQHBhcmFtIGN4MSBUaGUgdGltZSBmb3IgdGhlIGZpcnN0IEJlemllciBoYW5kbGUuXG5cdCAqIEBwYXJhbSBjeTEgVGhlIHZhbHVlIGZvciB0aGUgZmlyc3QgQmV6aWVyIGhhbmRsZS5cblx0ICogQHBhcmFtIGN4MiBUaGUgdGltZSBvZiB0aGUgc2Vjb25kIEJlemllciBoYW5kbGUuXG5cdCAqIEBwYXJhbSBjeTIgVGhlIHZhbHVlIGZvciB0aGUgc2Vjb25kIEJlemllciBoYW5kbGUuXG5cdCAqIEBwYXJhbSB0aW1lMiBUaGUgdGltZSBmb3IgdGhlIHNlY29uZCBrZXkuXG5cdCAqIEBwYXJhbSB2YWx1ZTIgVGhlIHZhbHVlIGZvciB0aGUgc2Vjb25kIGtleS4gKi9cblx0c2V0QmV6aWVyIChiZXppZXI6IG51bWJlciwgZnJhbWU6IG51bWJlciwgdmFsdWU6IG51bWJlciwgdGltZTE6IG51bWJlciwgdmFsdWUxOiBudW1iZXIsIGN4MTogbnVtYmVyLCBjeTE6IG51bWJlciwgY3gyOiBudW1iZXIsXG5cdFx0Y3kyOiBudW1iZXIsIHRpbWUyOiBudW1iZXIsIHZhbHVlMjogbnVtYmVyKSB7XG5cdFx0Y29uc3QgY3VydmVzID0gdGhpcy5jdXJ2ZXM7XG5cdFx0bGV0IGkgPSB0aGlzLmdldEZyYW1lQ291bnQoKSArIGJlemllciAqIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGlmICh2YWx1ZSA9PT0gMCkgY3VydmVzW2ZyYW1lXSA9IDIvKkJFWklFUiovICsgaTtcblx0XHRjb25zdCB0bXB4ID0gKHRpbWUxIC0gY3gxICogMiArIGN4MikgKiAwLjAzLCB0bXB5ID0gKHZhbHVlMSAtIGN5MSAqIDIgKyBjeTIpICogMC4wMztcblx0XHRjb25zdCBkZGR4ID0gKChjeDEgLSBjeDIpICogMyAtIHRpbWUxICsgdGltZTIpICogMC4wMDYsIGRkZHkgPSAoKGN5MSAtIGN5MikgKiAzIC0gdmFsdWUxICsgdmFsdWUyKSAqIDAuMDA2O1xuXHRcdGxldCBkZHggPSB0bXB4ICogMiArIGRkZHgsIGRkeSA9IHRtcHkgKiAyICsgZGRkeTtcblx0XHRsZXQgZHggPSAoY3gxIC0gdGltZTEpICogMC4zICsgdG1weCArIGRkZHggKiAwLjE2NjY2NjY3LCBkeSA9IChjeTEgLSB2YWx1ZTEpICogMC4zICsgdG1weSArIGRkZHkgKiAwLjE2NjY2NjY3O1xuXHRcdGxldCB4ID0gdGltZTEgKyBkeCwgeSA9IHZhbHVlMSArIGR5O1xuXHRcdGZvciAobGV0IG4gPSBpICsgMTgvKkJFWklFUl9TSVpFKi87IGkgPCBuOyBpICs9IDIpIHtcblx0XHRcdGN1cnZlc1tpXSA9IHg7XG5cdFx0XHRjdXJ2ZXNbaSArIDFdID0geTtcblx0XHRcdGR4ICs9IGRkeDtcblx0XHRcdGR5ICs9IGRkeTtcblx0XHRcdGRkeCArPSBkZGR4O1xuXHRcdFx0ZGR5ICs9IGRkZHk7XG5cdFx0XHR4ICs9IGR4O1xuXHRcdFx0eSArPSBkeTtcblx0XHR9XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgQmV6aWVyIGludGVycG9sYXRlZCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lLlxuXHQgKiBAcGFyYW0gZnJhbWVJbmRleCBUaGUgaW5kZXggaW50byB7QGxpbmsgZnJhbWVzfSBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgZnJhbWUgYmVmb3JlIGB0aW1lYC5cblx0ICogQHBhcmFtIHZhbHVlT2Zmc2V0IFRoZSBvZmZzZXQgZnJvbSBgZnJhbWVJbmRleGAgdG8gdGhlIHZhbHVlIHRoaXMgY3VydmUgaXMgdXNlZCBmb3IuXG5cdCAqIEBwYXJhbSBpIFRoZSBpbmRleCBvZiB0aGUgQmV6aWVyIHNlZ21lbnRzLiBTZWUge0BsaW5rIGdldEN1cnZlVHlwZX0uICovXG5cdGdldEJlemllclZhbHVlICh0aW1lOiBudW1iZXIsIGZyYW1lSW5kZXg6IG51bWJlciwgdmFsdWVPZmZzZXQ6IG51bWJlciwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgY3VydmVzID0gdGhpcy5jdXJ2ZXM7XG5cdFx0aWYgKGN1cnZlc1tpXSA+IHRpbWUpIHtcblx0XHRcdGNvbnN0IHggPSB0aGlzLmZyYW1lc1tmcmFtZUluZGV4XSwgeSA9IHRoaXMuZnJhbWVzW2ZyYW1lSW5kZXggKyB2YWx1ZU9mZnNldF07XG5cdFx0XHRyZXR1cm4geSArICh0aW1lIC0geCkgLyAoY3VydmVzW2ldIC0geCkgKiAoY3VydmVzW2kgKyAxXSAtIHkpO1xuXHRcdH1cblx0XHRjb25zdCBuID0gaSArIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGZvciAoaSArPSAyOyBpIDwgbjsgaSArPSAyKSB7XG5cdFx0XHRpZiAoY3VydmVzW2ldID49IHRpbWUpIHtcblx0XHRcdFx0Y29uc3QgeCA9IGN1cnZlc1tpIC0gMl0sIHkgPSBjdXJ2ZXNbaSAtIDFdO1xuXHRcdFx0XHRyZXR1cm4geSArICh0aW1lIC0geCkgLyAoY3VydmVzW2ldIC0geCkgKiAoY3VydmVzW2kgKyAxXSAtIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmcmFtZUluZGV4ICs9IHRoaXMuZ2V0RnJhbWVFbnRyaWVzKCk7XG5cdFx0Y29uc3QgeCA9IGN1cnZlc1tuIC0gMl0sIHkgPSBjdXJ2ZXNbbiAtIDFdO1xuXHRcdHJldHVybiB5ICsgKHRpbWUgLSB4KSAvICh0aGlzLmZyYW1lc1tmcmFtZUluZGV4XSAtIHgpICogKHRoaXMuZnJhbWVzW2ZyYW1lSW5kZXggKyB2YWx1ZU9mZnNldF0gLSB5KTtcblx0fVxufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGEge0BsaW5rIEN1cnZlVGltZWxpbmV9IHRoYXQgc2V0cyBvbmUgcHJvcGVydHkgd2l0aCBhIGN1cnZlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1cnZlVGltZWxpbmUxIGV4dGVuZHMgQ3VydmVUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHByb3BlcnR5SWQ6IHN0cmluZykge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBwcm9wZXJ0eUlkKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDIvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGFuZCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRmcmFtZSA8PD0gMTtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qVkFMVUUqL10gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgdGltZS4gKi9cblx0Z2V0Q3VydmVWYWx1ZSAodGltZTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0bGV0IGkgPSBmcmFtZXMubGVuZ3RoIC0gMjtcblx0XHRmb3IgKGxldCBpaSA9IDI7IGlpIDw9IGk7IGlpICs9IDIpIHtcblx0XHRcdGlmIChmcmFtZXNbaWldID4gdGltZSkge1xuXHRcdFx0XHRpID0gaWkgLSAyO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpID4+IDFdO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXSwgdmFsdWUgPSBmcmFtZXNbaSArIDEvKlZBTFVFKi9dO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgKyAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyAyLypFTlRSSUVTKi9dIC0gYmVmb3JlKSAqIChmcmFtZXNbaSArIDIvKkVOVFJJRVMqLyArIDEvKlZBTFVFKi9dIC0gdmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHJldHVybiBmcmFtZXNbaSArIDEvKlZBTFVFKi9dO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypWQUxVRSovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgaW50ZXJwb2xhdGVkIHZhbHVlIGZvciBwcm9wZXJ0aWVzIHJlbGF0aXZlIHRvIHRoZSBzZXR1cCB2YWx1ZS4gVGhlIHRpbWVsaW5lIHZhbHVlIGlzIGFkZGVkIHRvIHRoZSBzZXR1cFxuXHQgKiB2YWx1ZSwgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIGl0LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFRpbWVsaW5lLmFwcGx5fS5cblx0ICogQHBhcmFtIGN1cnJlbnQgVGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHNldHVwIFRoZSBzZXR1cCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LiAqL1xuXHRnZXRSZWxhdGl2ZVZhbHVlICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgY3VycmVudDogbnVtYmVyLCBzZXR1cDogbnVtYmVyKSB7XG5cdFx0aWYgKHRpbWUgPCB0aGlzLmZyYW1lc1swXSkgcmV0dXJuIEN1cnZlVGltZWxpbmUxLmJlZm9yZUZpcnN0S2V5KGZyb20sIGFscGhhLCBjdXJyZW50LCBzZXR1cCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEN1cnZlVmFsdWUodGltZSk7XG5cdFx0cmV0dXJuIGZyb20gPT09IE1peEZyb20uc2V0dXAgPyBzZXR1cCArIHZhbHVlICogYWxwaGEgOiBjdXJyZW50ICsgKGFkZCA/IHZhbHVlIDogdmFsdWUgKyBzZXR1cCAtIGN1cnJlbnQpICogYWxwaGE7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgaW50ZXJwb2xhdGVkIHZhbHVlIGZvciBwcm9wZXJ0aWVzIHNldCBhcyBhYnNvbHV0ZSB2YWx1ZXMuIFRoZSB0aW1lbGluZSB2YWx1ZSByZXBsYWNlcyB0aGUgc2V0dXAgdmFsdWUsXG5cdCAqIHJhdGhlciB0aGFuIGJlaW5nIHJlbGF0aXZlIHRvIGl0LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFRpbWVsaW5lLmFwcGx5fS5cblx0ICogQHBhcmFtIGN1cnJlbnQgVGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHNldHVwIFRoZSBzZXR1cCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LiAqL1xuXHRnZXRBYnNvbHV0ZVZhbHVlICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgY3VycmVudDogbnVtYmVyLCBzZXR1cDogbnVtYmVyKTogbnVtYmVyO1xuXG5cdC8qKiBSZXR1cm5zIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgZm9yIHByb3BlcnRpZXMgc2V0IGFzIGFic29sdXRlIHZhbHVlcywgdXNpbmcgdGhlIHNwZWNpZmllZCB0aW1lbGluZSB2YWx1ZSByYXRoZXIgdGhhblxuXHQgKiBjYWxsaW5nIHtAbGluayBnZXRDdXJ2ZVZhbHVlfS5cblx0ICpcblx0ICogU2VlIHtAbGluayBUaW1lbGluZS5hcHBseX0uXG5cdCAqIEBwYXJhbSBjdXJyZW50IFRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBzZXR1cCBUaGUgc2V0dXAgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB0aW1lbGluZSB2YWx1ZSB0byBhcHBseS4gKi9cblx0Z2V0QWJzb2x1dGVWYWx1ZSAodGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IG51bWJlcjtcblxuXHRnZXRBYnNvbHV0ZVZhbHVlICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgY3VycmVudDogbnVtYmVyLCBzZXR1cDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcikge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZTEodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgY3VycmVudCwgc2V0dXApO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB0aGlzLmdldEFic29sdXRlVmFsdWUyKHRpbWUsIGFscGhhLCBmcm9tLCBhZGQsIGN1cnJlbnQsIHNldHVwLCB2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFic29sdXRlVmFsdWUxICh0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgY3VycmVudDogbnVtYmVyLCBzZXR1cDogbnVtYmVyKSB7XG5cdFx0aWYgKHRpbWUgPCB0aGlzLmZyYW1lc1swXSkgcmV0dXJuIEN1cnZlVGltZWxpbmUxLmJlZm9yZUZpcnN0S2V5KGZyb20sIGFscGhhLCBjdXJyZW50LCBzZXR1cCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEN1cnZlVmFsdWUodGltZSk7XG5cdFx0cmV0dXJuIGZyb20gPT09IE1peEZyb20uc2V0dXAgPyBzZXR1cCArIChhZGQgPyB2YWx1ZSA6IHZhbHVlIC0gc2V0dXApICogYWxwaGFcblx0XHRcdDogY3VycmVudCArIChhZGQgPyB2YWx1ZSA6IHZhbHVlIC0gY3VycmVudCkgKiBhbHBoYTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QWJzb2x1dGVWYWx1ZTIgKHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBjdXJyZW50OiBudW1iZXIsIHNldHVwOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRpZiAodGltZSA8IHRoaXMuZnJhbWVzWzBdKSByZXR1cm4gQ3VydmVUaW1lbGluZTEuYmVmb3JlRmlyc3RLZXkoZnJvbSwgYWxwaGEsIGN1cnJlbnQsIHNldHVwKTtcblx0XHRyZXR1cm4gZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCA/IHNldHVwICsgKGFkZCA/IHZhbHVlIDogdmFsdWUgLSBzZXR1cCkgKiBhbHBoYVxuXHRcdFx0OiBjdXJyZW50ICsgKGFkZCA/IHZhbHVlIDogdmFsdWUgLSBjdXJyZW50KSAqIGFscGhhO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGludGVycG9sYXRlZCB2YWx1ZSBmb3Igc2NhbGUgcHJvcGVydGllcy4gVGhlIHRpbWVsaW5lIGFuZCBzZXR1cCB2YWx1ZXMgYXJlIG11bHRpcGxpZWQgYW5kIHNpZ24gYWRqdXN0ZWQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVGltZWxpbmUuYXBwbHl9LlxuXHQgKiBAcGFyYW0gY3VycmVudCBUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gc2V0dXAgVGhlIHNldHVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuICovXG5cdGdldFNjYWxlVmFsdWUgKHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlcikge1xuXHRcdGlmICh0aW1lIDwgdGhpcy5mcmFtZXNbMF0pIHJldHVybiBDdXJ2ZVRpbWVsaW5lMS5iZWZvcmVGaXJzdEtleShmcm9tLCBhbHBoYSwgY3VycmVudCwgc2V0dXApO1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDdXJ2ZVZhbHVlKHRpbWUpICogc2V0dXA7XG5cdFx0aWYgKGFscGhhID09PSAxICYmICFhZGQpIHJldHVybiB2YWx1ZTtcblx0XHRsZXQgYmFzZSA9IGZyb20gPT09IE1peEZyb20uc2V0dXAgPyBzZXR1cCA6IGN1cnJlbnQ7XG5cdFx0aWYgKGFkZCkgcmV0dXJuIGJhc2UgKyAodmFsdWUgLSBzZXR1cCkgKiBhbHBoYTtcblx0XHRpZiAob3V0KSByZXR1cm4gYmFzZSArIChNYXRoLmFicyh2YWx1ZSkgKiBNYXRoLnNpZ24oYmFzZSkgLSBiYXNlKSAqIGFscGhhO1xuXHRcdGJhc2UgPSBNYXRoLmFicyhiYXNlKSAqIE1hdGguc2lnbih2YWx1ZSk7XG5cdFx0cmV0dXJuIGJhc2UgKyAodmFsdWUgLSBiYXNlKSAqIGFscGhhO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGF0aWMgYmVmb3JlRmlyc3RLZXkgKGZyb206IE1peEZyb20sIGFscGhhOiBudW1iZXIsIGN1cnJlbnQ6IG51bWJlciwgc2V0dXA6IG51bWJlcik6IG51bWJlciB7XG5cdFx0c3dpdGNoIChmcm9tKSB7XG5cdFx0XHRjYXNlIE1peEZyb20uc2V0dXA6IHJldHVybiBzZXR1cDtcblx0XHRcdGNhc2UgTWl4RnJvbS5maXJzdDogcmV0dXJuIGN1cnJlbnQgKyAoc2V0dXAgLSBjdXJyZW50KSAqIGFscGhhO1xuXHRcdFx0Y2FzZSBNaXhGcm9tLmN1cnJlbnQ6IHJldHVybiBjdXJyZW50O1xuXHRcdH1cblx0fVxufVxuXG4vKiogQW4gaW50ZXJmYWNlIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgYSBib25lJ3MgcHJvcGVydGllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZVRpbWVsaW5lIHtcblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgYm9uZSBpbiB7QGxpbmsgU2tlbGV0b24uYm9uZXN9IHRoYXQgaXMgY2hhbmdlZCBieSB0aGlzIHRpbWVsaW5lLiAqL1xuXHRib25lSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9uZVRpbWVsaW5lIChvYmo6IFRpbWVsaW5lICYgUGFydGlhbDxCb25lVGltZWxpbmU+KTogb2JqIGlzIFRpbWVsaW5lICYgQm9uZVRpbWVsaW5lIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLmJvbmVJbmRleCA9PT0gJ251bWJlcic7XG59XG5cbi8qKiBUaGUgYmFzZSBjbGFzcyBmb3IgdGltZWxpbmVzIHRoYXQgY2hhbmdlIDEgYm9uZSBwcm9wZXJ0eSB3aXRoIGEgY3VydmUuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQm9uZVRpbWVsaW5lMSBleHRlbmRzIEN1cnZlVGltZWxpbmUxIGltcGxlbWVudHMgQm9uZVRpbWVsaW5lIHtcblx0cmVhZG9ubHkgYm9uZUluZGV4OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIsIHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtwcm9wZXJ0eX18JHtib25lSW5kZXh9YCk7XG5cdFx0dGhpcy5ib25lSW5kZXggPSBib25lSW5kZXg7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgYXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYm9uZSA9IHNrZWxldG9uLmJvbmVzW3RoaXMuYm9uZUluZGV4XTtcblx0XHRpZiAoYm9uZS5hY3RpdmUpXG5cdFx0XHR0aGlzLmFwcGx5MShhcHBsaWVkUG9zZSA/IGJvbmUuYXBwbGllZFBvc2UgOiBib25lLnBvc2UsIGJvbmUuZGF0YS5zZXR1cFBvc2UsIHRpbWUsIGFscGhhLCBmcm9tLCBhZGQsIG91dCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIHRpbWVsaW5lcyB0aGF0IGNoYW5nZSB0d28gYm9uZSBwcm9wZXJ0aWVzIHdpdGggYSBjdXJ2ZS4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCb25lVGltZWxpbmUyIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIEJvbmVUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGJvbmVJbmRleDtcblxuXHQvKiogQHBhcmFtIGJlemllckNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBCZXppZXIgY3VydmVzLiBTZWUge0BsaW5rIHNocmlua30uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUlkcyBVbmlxdWUgaWRlbnRpZmllcnMgZm9yIHRoZSBwcm9wZXJ0aWVzIHRoZSB0aW1lbGluZSBtb2RpZmllcy4gKi9cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIsIHByb3BlcnR5MTogUHJvcGVydHksIHByb3BlcnR5MjogUHJvcGVydHkpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYCR7cHJvcGVydHkxfXwke2JvbmVJbmRleH1gLCBgJHtwcm9wZXJ0eTJ9fCR7Ym9uZUluZGV4fWApO1xuXHRcdHRoaXMuYm9uZUluZGV4ID0gYm9uZUluZGV4O1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gMy8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgYW5kIHZhbHVlcyBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHZhbHVlMTogbnVtYmVyLCB2YWx1ZTI6IG51bWJlcikge1xuXHRcdGZyYW1lICo9IDMvKkVOVFJJRVMqLztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qVkFMVUUxKi9dID0gdmFsdWUxO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMi8qVkFMVUUyKi9dID0gdmFsdWUyO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiB8IG51bGwsIGFscGhhOiBudW1iZXIsXG5cdFx0ZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgYm9uZSA9IHNrZWxldG9uLmJvbmVzW3RoaXMuYm9uZUluZGV4XTtcblx0XHRpZiAoYm9uZS5hY3RpdmUpXG5cdFx0XHR0aGlzLmFwcGx5MShhcHBsaWVkUG9zZSA/IGJvbmUuYXBwbGllZFBvc2UgOiBib25lLnBvc2UsIGJvbmUuZGF0YS5zZXR1cFBvc2UsIHRpbWUsIGFscGhhLCBmcm9tLCBhZGQsIG91dCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4sKTogdm9pZDtcbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmVQb3NlLnJvdGF0aW9ufS4gKi9cbmV4cG9ydCBjbGFzcyBSb3RhdGVUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnJvdGF0ZSk7XG5cdH1cblxuXHRhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdHBvc2Uucm90YXRpb24gPSB0aGlzLmdldFJlbGF0aXZlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgcG9zZS5yb3RhdGlvbiwgc2V0dXAucm90YXRpb24pO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBCb25lUG9zZS54fSBhbmQge0BsaW5rIEJvbmVQb3NlLnl9LiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMiB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkueCwgUHJvcGVydHkueSk7XG5cdH1cblxuXHRhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOlxuXHRcdFx0XHRcdHBvc2UueCA9IHNldHVwLng7XG5cdFx0XHRcdFx0cG9zZS55ID0gc2V0dXAueTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLmZpcnN0OlxuXHRcdFx0XHRcdHBvc2UueCArPSAoc2V0dXAueCAtIHBvc2UueCkgKiBhbHBoYTtcblx0XHRcdFx0XHRwb3NlLnkgKz0gKHNldHVwLnkgLSBwb3NlLnkpICogYWxwaGE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHggPSAwLCB5ID0gMDtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgMy8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpIC8gMy8qRU5UUklFUyovXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDEvKlZBTFVFMSovXTtcblx0XHRcdFx0eSA9IGZyYW1lc1tpICsgMi8qVkFMVUUyKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHggKz0gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovICsgMS8qVkFMVUUxKi9dIC0geCkgKiB0O1xuXHRcdFx0XHR5ICs9IChmcmFtZXNbaSArIDMvKkVOVFJJRVMqLyArIDIvKlZBTFVFMiovXSAtIHkpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0eCA9IGZyYW1lc1tpICsgMS8qVkFMVUUxKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAyLypWQUxVRTIqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0eCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qVkFMVUUxKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qVkFMVUUyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdH1cblxuXHRcdGlmIChmcm9tID09PSBNaXhGcm9tLnNldHVwKSB7XG5cdFx0XHRwb3NlLnggPSBzZXR1cC54ICsgeCAqIGFscGhhO1xuXHRcdFx0cG9zZS55ID0gc2V0dXAueSArIHkgKiBhbHBoYTtcblx0XHR9IGVsc2UgaWYgKGFkZCkge1xuXHRcdFx0cG9zZS54ICs9IHggKiBhbHBoYTtcblx0XHRcdHBvc2UueSArPSB5ICogYWxwaGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2UueCArPSAoc2V0dXAueCArIHggLSBwb3NlLngpICogYWxwaGE7XG5cdFx0XHRwb3NlLnkgKz0gKHNldHVwLnkgKyB5IC0gcG9zZS55KSAqIGFscGhhO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2UueH0uICovXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlWFRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkueCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pIHtcblx0XHRwb3NlLnggPSB0aGlzLmdldFJlbGF0aXZlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgcG9zZS54LCBzZXR1cC54KTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2UueX0uICovXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlWVRpbWVsaW5lIGV4dGVuZHMgQm9uZVRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGJvbmVJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGJvbmVJbmRleCwgUHJvcGVydHkueSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pIHtcblx0XHRwb3NlLnkgPSB0aGlzLmdldFJlbGF0aXZlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgcG9zZS55LCBzZXR1cC55KTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2Uuc2NhbGVYfSBhbmQge0BsaW5rIEJvbmVQb3NlLnNjYWxlWX0uICovXG5leHBvcnQgY2xhc3MgU2NhbGVUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTIge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnNjYWxlWCwgUHJvcGVydHkuc2NhbGVZKTtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHBvc2U6IEJvbmVQb3NlLCBzZXR1cDogQm9uZVBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuLFxuXHRcdG91dDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOlxuXHRcdFx0XHRcdHBvc2Uuc2NhbGVYID0gc2V0dXAuc2NhbGVYO1xuXHRcdFx0XHRcdHBvc2Uuc2NhbGVZID0gc2V0dXAuc2NhbGVZO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIE1peEZyb20uZmlyc3Q6XG5cdFx0XHRcdFx0cG9zZS5zY2FsZVggKz0gKHNldHVwLnNjYWxlWCAtIHBvc2Uuc2NhbGVYKSAqIGFscGhhO1xuXHRcdFx0XHRcdHBvc2Uuc2NhbGVZICs9IChzZXR1cC5zY2FsZVkgLSBwb3NlLnNjYWxlWSkgKiBhbHBoYTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgeDogbnVtYmVyLCB5OiBudW1iZXI7XG5cdFx0Y29uc3QgaSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDMvKkVOVFJJRVMqLyk7XG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSAvIDMvKkVOVFJJRVMqL107XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAxLypWQUxVRTEqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDIvKlZBTFVFMiovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDMvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHR4ICs9IChmcmFtZXNbaSArIDMvKkVOVFJJRVMqLyArIDEvKlZBTFVFMSovXSAtIHgpICogdDtcblx0XHRcdFx0eSArPSAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi8gKyAyLypWQUxVRTIqL10gLSB5KSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHggPSBmcmFtZXNbaSArIDEvKlZBTFVFMSovXTtcblx0XHRcdFx0eSA9IGZyYW1lc1tpICsgMi8qVkFMVUUyKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHggPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlZBTFVFMSovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHkgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKlZBTFVFMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cdFx0eCAqPSBzZXR1cC5zY2FsZVg7XG5cdFx0eSAqPSBzZXR1cC5zY2FsZVk7XG5cblx0XHRpZiAoYWxwaGEgPT09IDEgJiYgIWFkZCkge1xuXHRcdFx0cG9zZS5zY2FsZVggPSB4O1xuXHRcdFx0cG9zZS5zY2FsZVkgPSB5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgYnggPSAwLCBieSA9IDA7XG5cdFx0XHRpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0XHRieCA9IHNldHVwLnNjYWxlWDtcblx0XHRcdFx0YnkgPSBzZXR1cC5zY2FsZVk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieCA9IHBvc2Uuc2NhbGVYO1xuXHRcdFx0XHRieSA9IHBvc2Uuc2NhbGVZO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFkZCkge1xuXHRcdFx0XHRwb3NlLnNjYWxlWCA9IGJ4ICsgKHggLSBzZXR1cC5zY2FsZVgpICogYWxwaGE7XG5cdFx0XHRcdHBvc2Uuc2NhbGVZID0gYnkgKyAoeSAtIHNldHVwLnNjYWxlWSkgKiBhbHBoYTtcblx0XHRcdH0gZWxzZSBpZiAob3V0KSB7XG5cdFx0XHRcdHBvc2Uuc2NhbGVYID0gYnggKyAoTWF0aC5hYnMoeCkgKiBNYXRoLnNpZ24oYngpIC0gYngpICogYWxwaGE7XG5cdFx0XHRcdHBvc2Uuc2NhbGVZID0gYnkgKyAoTWF0aC5hYnMoeSkgKiBNYXRoLnNpZ24oYnkpIC0gYnkpICogYWxwaGE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieCA9IE1hdGguYWJzKGJ4KSAqIE1hdGguc2lnbih4KTtcblx0XHRcdFx0YnkgPSBNYXRoLmFicyhieSkgKiBNYXRoLnNpZ24oeSk7XG5cdFx0XHRcdHBvc2Uuc2NhbGVYID0gYnggKyAoeCAtIGJ4KSAqIGFscGhhO1xuXHRcdFx0XHRwb3NlLnNjYWxlWSA9IGJ5ICsgKHkgLSBieSkgKiBhbHBoYTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMgYSB7QGxpbmsgQm9uZVBvc2Uuc2NhbGVYfS4gKi9cbmV4cG9ydCBjbGFzcyBTY2FsZVhUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnNjYWxlWCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pIHtcblx0XHRwb3NlLnNjYWxlWCA9IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbSwgYWRkLCBvdXQsIHBvc2Uuc2NhbGVYLCBzZXR1cC5zY2FsZVgpO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIGEge0BsaW5rIEJvbmVQb3NlLnNjYWxlWX0uICovXG5leHBvcnQgY2xhc3MgU2NhbGVZVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS5zY2FsZVkpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4sXG5cdFx0b3V0OiBib29sZWFuKSB7XG5cdFx0cG9zZS5zY2FsZVkgPSB0aGlzLmdldFNjYWxlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgb3V0LCBwb3NlLnNjYWxlWSwgc2V0dXAuc2NhbGVZKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZS5zaGVhclh9IGFuZCB7QGxpbmsgQm9uZS5zaGVhcll9LiAqL1xuZXhwb3J0IGNsYXNzIFNoZWFyVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUyIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS5zaGVhclgsIFByb3BlcnR5LnNoZWFyWSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCkge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOlxuXHRcdFx0XHRcdHBvc2Uuc2hlYXJYID0gc2V0dXAuc2hlYXJYO1xuXHRcdFx0XHRcdHBvc2Uuc2hlYXJZID0gc2V0dXAuc2hlYXJZO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIE1peEZyb20uZmlyc3Q6XG5cdFx0XHRcdFx0cG9zZS5zaGVhclggKz0gKHNldHVwLnNoZWFyWCAtIHBvc2Uuc2hlYXJYKSAqIGFscGhhO1xuXHRcdFx0XHRcdHBvc2Uuc2hlYXJZICs9IChzZXR1cC5zaGVhclkgLSBwb3NlLnNoZWFyWSkgKiBhbHBoYTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgeCA9IDAsIHkgPSAwO1xuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCAzLypFTlRSSUVTKi8pO1xuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyAzLypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0eCA9IGZyYW1lc1tpICsgMS8qVkFMVUUxKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAyLypWQUxVRTIqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0eCArPSAoZnJhbWVzW2kgKyAzLypFTlRSSUVTKi8gKyAxLypWQUxVRTEqL10gLSB4KSAqIHQ7XG5cdFx0XHRcdHkgKz0gKGZyYW1lc1tpICsgMy8qRU5UUklFUyovICsgMi8qVkFMVUUyKi9dIC0geSkgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAxLypWQUxVRTEqL107XG5cdFx0XHRcdHkgPSBmcmFtZXNbaSArIDIvKlZBTFVFMiovXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR4ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypWQUxVRTEqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHR5ID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypWQUxVRTIqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyb20gPT09IE1peEZyb20uc2V0dXApIHtcblx0XHRcdHBvc2Uuc2hlYXJYID0gc2V0dXAuc2hlYXJYICsgeCAqIGFscGhhO1xuXHRcdFx0cG9zZS5zaGVhclkgPSBzZXR1cC5zaGVhclkgKyB5ICogYWxwaGE7XG5cdFx0fSBlbHNlIGlmIChhZGQpIHtcblx0XHRcdHBvc2Uuc2hlYXJYICs9IHggKiBhbHBoYTtcblx0XHRcdHBvc2Uuc2hlYXJZICs9IHkgKiBhbHBoYTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zZS5zaGVhclggKz0gKHNldHVwLnNoZWFyWCArIHggLSBwb3NlLnNoZWFyWCkgKiBhbHBoYTtcblx0XHRcdHBvc2Uuc2hlYXJZICs9IChzZXR1cC5zaGVhclkgKyB5IC0gcG9zZS5zaGVhclkpICogYWxwaGE7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBCb25lLnNoZWFyWH0gYW5kIHtAbGluayBCb25lLnNoZWFyWX0uICovXG5leHBvcnQgY2xhc3MgU2hlYXJYVGltZWxpbmUgZXh0ZW5kcyBCb25lVGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgYm9uZUluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYm9uZUluZGV4LCBQcm9wZXJ0eS5zaGVhclgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAocG9zZTogQm9uZVBvc2UsIHNldHVwOiBCb25lUG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4sXG5cdFx0b3V0OiBib29sZWFuKSB7XG5cdFx0cG9zZS5zaGVhclggPSB0aGlzLmdldFJlbGF0aXZlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgcG9zZS5zaGVhclgsIHNldHVwLnNoZWFyWCk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIEJvbmUuc2hlYXJYfSBhbmQge0BsaW5rIEJvbmUuc2hlYXJZfS4gKi9cbmV4cG9ydCBjbGFzcyBTaGVhcllUaW1lbGluZSBleHRlbmRzIEJvbmVUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBib25lSW5kZXgsIFByb3BlcnR5LnNoZWFyWSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChwb3NlOiBCb25lUG9zZSwgc2V0dXA6IEJvbmVQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbixcblx0XHRvdXQ6IGJvb2xlYW4pIHtcblx0XHRwb3NlLnNoZWFyWSA9IHRoaXMuZ2V0UmVsYXRpdmVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbSwgYWRkLCBwb3NlLnNoZWFyWSwgc2V0dXAuc2hlYXJZKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgQm9uZVBvc2UuaW5oZXJpdH0uICovXG5leHBvcnQgY2xhc3MgSW5oZXJpdFRpbWVsaW5lIGV4dGVuZHMgVGltZWxpbmUgaW1wbGVtZW50cyBCb25lVGltZWxpbmUge1xuXHRyZWFkb25seSBib25lSW5kZXg6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBib25lSW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGAke1Byb3BlcnR5LmluaGVyaXR9fCR7Ym9uZUluZGV4fWApO1xuXHRcdHRoaXMuYm9uZUluZGV4ID0gYm9uZUluZGV4O1xuXHRcdHRoaXMuaW5zdGFudCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gMi8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIGluaGVyaXQgdHJhbnNmb3JtIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUuXG5cdCAqIEBwYXJhbSBmcmFtZSBCZXR3ZWVuIDAgYW5kIGBmcmFtZUNvdW50YCwgaW5jbHVzaXZlLlxuXHQgKiBAcGFyYW0gdGltZSBUaGUgZnJhbWUgdGltZSBpbiBzZWNvbmRzLiAqL1xuXHRwdWJsaWMgc2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgaW5oZXJpdDogSW5oZXJpdCkge1xuXHRcdGZyYW1lICo9IDIvKkVOVFJJRVMqLztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qSU5IRVJJVCovXSA9IGluaGVyaXQ7XG5cdH1cblxuXHRwdWJsaWMgYXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGJvbmUgPSBza2VsZXRvbi5ib25lc1t0aGlzLmJvbmVJbmRleF07XG5cdFx0aWYgKCFib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGJvbmUuYXBwbGllZFBvc2UgOiBib25lLnBvc2U7XG5cblx0XHRpZiAob3V0KSB7XG5cdFx0XHRpZiAoZnJvbSAhPT0gTWl4RnJvbS5jdXJyZW50KSBwb3NlLmluaGVyaXQgPSBib25lLmRhdGEuc2V0dXBQb3NlLmluaGVyaXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdFx0aWYgKGZyb20gIT09IE1peEZyb20uY3VycmVudCkgcG9zZS5pbmhlcml0ID0gYm9uZS5kYXRhLnNldHVwUG9zZS5pbmhlcml0O1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHBvc2UuaW5oZXJpdCA9IHRoaXMuZnJhbWVzW1RpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDIvKkVOVFJJRVMqLykgKyAxLypJTkhFUklUKi9dO1xuXHRcdH1cblx0fVxufVxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciB0aW1lbGluZXMgdGhhdCBjaGFuZ2UgYW55IG51bWJlciBvZiBzbG90IHByb3BlcnRpZXMgd2l0aCBhIGN1cnZlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNsb3RDdXJ2ZVRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHJlYWRvbmx5IHNsb3RJbmRleDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyLCAuLi5wcm9wZXJ0eUlkczogc3RyaW5nW10pIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgLi4ucHJvcGVydHlJZHMpO1xuXHRcdHRoaXMuc2xvdEluZGV4ID0gc2xvdEluZGV4O1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBldmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IHNsb3QgPSBza2VsZXRvbi5zbG90c1t0aGlzLnNsb3RJbmRleF07XG5cdFx0aWYgKHNsb3QuYm9uZS5hY3RpdmUpIHRoaXMuYXBwbHkxKHNsb3QsIGFwcGxpZWRQb3NlID8gc2xvdC5hcHBsaWVkUG9zZSA6IHNsb3QucG9zZSwgdGltZSwgYWxwaGEsIGZyb20sIGFkZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgYXBwbHkxIChzbG90OiBTbG90LCBwb3NlOiBTbG90UG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UuY29sb3J9LiAqL1xuZXhwb3J0IGNsYXNzIFJHQkFUaW1lbGluZSBleHRlbmRzIFNsb3RDdXJ2ZVRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgc2xvdEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgc2xvdEluZGV4LCAvL1xuXHRcdFx0YCR7UHJvcGVydHkucmdifXwke3Nsb3RJbmRleH1gLCAvL1xuXHRcdFx0YCR7UHJvcGVydHkuYWxwaGF9fCR7c2xvdEluZGV4fWApO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gNS8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgaW4gc2Vjb25kcywgcmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGZvciB0aGUgc3BlY2lmaWVkIGtleSBmcmFtZS4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XG5cdFx0ZnJhbWUgKj0gNS8qRU5UUklFUyovO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypSKi9dID0gcjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDIvKkcqL10gPSBnO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQiovXSA9IGI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA0LypBKi9dID0gYTtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHNsb3Q6IFNsb3QsIHBvc2U6IFNsb3RQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGNvbG9yID0gcG9zZS5jb2xvcjtcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0Y29uc3Qgc2V0dXAgPSBzbG90LmRhdGEuc2V0dXBQb3NlLmNvbG9yO1xuXHRcdFx0c3dpdGNoIChmcm9tKSB7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5zZXR1cDogY29sb3Iuc2V0RnJvbUNvbG9yKHNldHVwKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5maXJzdDogY29sb3IuYWRkKChzZXR1cC5yIC0gY29sb3IucikgKiBhbHBoYSwgKHNldHVwLmcgLSBjb2xvci5nKSAqIGFscGhhLCAoc2V0dXAuYiAtIGNvbG9yLmIpICogYWxwaGEsXG5cdFx0XHRcdFx0KHNldHVwLmEgLSBjb2xvci5hKSAqIGFscGhhKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgciA9IDAsIGcgPSAwLCBiID0gMCwgYSA9IDA7XG5cdFx0Y29uc3QgaSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDUvKkVOVFJJRVMqLyk7XG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSAvIDUvKkVOVFJJRVMqL107XG5cdFx0c3dpdGNoIChjdXJ2ZVR5cGUpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgYmVmb3JlID0gZnJhbWVzW2ldO1xuXHRcdFx0XHRyID0gZnJhbWVzW2kgKyAxLypSKi9dO1xuXHRcdFx0XHRnID0gZnJhbWVzW2kgKyAyLypHKi9dO1xuXHRcdFx0XHRiID0gZnJhbWVzW2kgKyAzLypCKi9dO1xuXHRcdFx0XHRhID0gZnJhbWVzW2kgKyA0LypBKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgNS8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHIgKz0gKGZyYW1lc1tpICsgNS8qRU5UUklFUyovICsgMS8qUiovXSAtIHIpICogdDtcblx0XHRcdFx0ZyArPSAoZnJhbWVzW2kgKyA1LypFTlRSSUVTKi8gKyAyLypHKi9dIC0gZykgKiB0O1xuXHRcdFx0XHRiICs9IChmcmFtZXNbaSArIDUvKkVOVFJJRVMqLyArIDMvKkIqL10gLSBiKSAqIHQ7XG5cdFx0XHRcdGEgKz0gKGZyYW1lc1tpICsgNS8qRU5UUklFUyovICsgNC8qQSovXSAtIGEpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0YSA9IGZyYW1lc1tpICsgNC8qQSovXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypSKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0ZyA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qRyovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0YiA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMy8qQiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDIgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGEgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDQvKkEqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiAzIC0gMi8qQkVaSUVSKi8pO1xuXHRcdH1cblx0XHRpZiAoYWxwaGEgPT09IDEpXG5cdFx0XHRjb2xvci5zZXQociwgZywgYiwgYSk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRcdGNvbG9yLnNldChzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhLCBzZXR1cC5nICsgKGcgLSBzZXR1cC5nKSAqIGFscGhhLCBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhLFxuXHRcdFx0XHRcdHNldHVwLmEgKyAoYSAtIHNldHVwLmEpICogYWxwaGEpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbG9yLmFkZCgociAtIGNvbG9yLnIpICogYWxwaGEsIChnIC0gY29sb3IuZykgKiBhbHBoYSwgKGIgLSBjb2xvci5iKSAqIGFscGhhLCAoYSAtIGNvbG9yLmEpICogYWxwaGEpO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyBSR0IgZm9yIGEgc2xvdCdzIHtAbGluayBTbG90UG9zZS5jb2xvcn0uICovXG5leHBvcnQgY2xhc3MgUkdCVGltZWxpbmUgZXh0ZW5kcyBTbG90Q3VydmVUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIHNsb3RJbmRleCwgYCR7UHJvcGVydHkucmdifXwke3Nsb3RJbmRleH1gKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDQvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMsIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgZnJhbWUuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpIHtcblx0XHRmcmFtZSA8PD0gMjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qUiovXSA9IHI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAyLypHKi9dID0gZztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDMvKkIqL10gPSBiO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFwcGx5MSAoc2xvdDogU2xvdCwgcG9zZTogU2xvdFBvc2UsIHRpbWU6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSwgYWRkOiBib29sZWFuKSB7XG5cdFx0Y29uc3QgY29sb3IgPSBwb3NlLmNvbG9yO1xuXHRcdGxldCByID0gMCwgZyA9IDAsIGIgPSAwO1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOiB7XG5cdFx0XHRcdFx0Y29sb3IuciA9IHNldHVwLnI7XG5cdFx0XHRcdFx0Y29sb3IuZyA9IHNldHVwLmc7XG5cdFx0XHRcdFx0Y29sb3IuYiA9IHNldHVwLmI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBNaXhGcm9tLmZpcnN0OiB7XG5cdFx0XHRcdFx0Y29sb3IuciArPSAoc2V0dXAuciAtIGNvbG9yLnIpICogYWxwaGE7XG5cdFx0XHRcdFx0Y29sb3IuZyArPSAoc2V0dXAuZyAtIGNvbG9yLmcpICogYWxwaGE7XG5cdFx0XHRcdFx0Y29sb3IuYiArPSAoc2V0dXAuYiAtIGNvbG9yLmIpICogYWxwaGE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgNC8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpID4+IDJdO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDQvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHRyICs9IChmcmFtZXNbaSArIDQvKkVOVFJJRVMqLyArIDEvKlIqL10gLSByKSAqIHQ7XG5cdFx0XHRcdGcgKz0gKGZyYW1lc1tpICsgNC8qRU5UUklFUyovICsgMi8qRyovXSAtIGcpICogdDtcblx0XHRcdFx0YiArPSAoZnJhbWVzW2kgKyA0LypFTlRSSUVTKi8gKyAzLypCKi9dIC0gYikgKiB0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgMS8qU1RFUFBFRCovOlxuXHRcdFx0XHRyID0gZnJhbWVzW2kgKyAxLypSKi9dO1xuXHRcdFx0XHRnID0gZnJhbWVzW2kgKyAyLypHKi9dO1xuXHRcdFx0XHRiID0gZnJhbWVzW2kgKyAzLypCKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKlIqLywgY3VydmVUeXBlIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRnID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypHKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRiID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAzLypCKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMiAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cdFx0aWYgKGFscGhhICE9PSAxKSB7XG5cdFx0XHRpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRcdHIgPSBzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhO1xuXHRcdFx0XHRnID0gc2V0dXAuZyArIChnIC0gc2V0dXAuZykgKiBhbHBoYTtcblx0XHRcdFx0YiA9IHNldHVwLmIgKyAoYiAtIHNldHVwLmIpICogYWxwaGE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyID0gY29sb3IuciArIChyIC0gY29sb3IucikgKiBhbHBoYTtcblx0XHRcdFx0ZyA9IGNvbG9yLmcgKyAoZyAtIGNvbG9yLmcpICogYWxwaGE7XG5cdFx0XHRcdGIgPSBjb2xvci5iICsgKGIgLSBjb2xvci5iKSAqIGFscGhhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb2xvci5yID0gciA8IDAgPyAwIDogKHIgPiAxID8gMSA6IHIpO1xuXHRcdGNvbG9yLmcgPSBnIDwgMCA/IDAgOiAoZyA+IDEgPyAxIDogZyk7XG5cdFx0Y29sb3IuYiA9IGIgPCAwID8gMCA6IChiID4gMSA/IDEgOiBiKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyBhbHBoYSBmb3IgYSBzbG90J3Mge0BsaW5rIFNsb3RQb3NlLmNvbG9yfS4gKi9cbmV4cG9ydCBjbGFzcyBBbHBoYVRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZTEgaW1wbGVtZW50cyBTbG90VGltZWxpbmUge1xuXHRzbG90SW5kZXggPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LmFscGhhfXwke3Nsb3RJbmRleH1gKTtcblx0XHR0aGlzLnNsb3RJbmRleCA9IHNsb3RJbmRleDtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cblx0XHRjb25zdCBzbG90ID0gc2tlbGV0b24uc2xvdHNbdGhpcy5zbG90SW5kZXhdO1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sb3IgPSAoYXBwbGllZFBvc2UgPyBzbG90LmFwcGxpZWRQb3NlIDogc2xvdC5wb3NlKS5jb2xvcjtcblx0XHRsZXQgYSA9IDA7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdGNvbnN0IHNldHVwID0gc2xvdC5kYXRhLnNldHVwUG9zZS5jb2xvci5hO1xuXHRcdFx0c3dpdGNoIChmcm9tKSB7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5zZXR1cDogY29sb3IuYSA9IHNldHVwOyBicmVhaztcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLmZpcnN0OiBjb2xvci5hICs9IChzZXR1cCAtIGNvbG9yLmEpICogYWxwaGE7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGEgPSB0aGlzLmdldEN1cnZlVmFsdWUodGltZSk7XG5cdFx0aWYgKGFscGhhICE9PSAxKSB7XG5cdFx0XHRpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cCA9IHNsb3QuZGF0YS5zZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRcdGEgPSBzZXR1cC5hICsgKGEgLSBzZXR1cC5hKSAqIGFscGhhO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGEgPSBjb2xvci5hICsgKGEgLSBjb2xvci5hKSAqIGFscGhhO1xuXHRcdH1cblx0XHRjb2xvci5hID0gYSA8IDAgPyAwIDogKGEgPiAxID8gMSA6IGEpO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBTbG90UG9zZS5jb2xvcn0gYW5kIHtAbGluayBTbG90UG9zZS5kYXJrQ29sb3J9IGZvciB0d28gY29sb3IgdGludGluZy4gKi9cbmV4cG9ydCBjbGFzcyBSR0JBMlRpbWVsaW5lIGV4dGVuZHMgU2xvdEN1cnZlVGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBzbG90SW5kZXgsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2J9fCR7c2xvdEluZGV4fWAsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5hbHBoYX18JHtzbG90SW5kZXh9YCwgLy9cblx0XHRcdGAke1Byb3BlcnR5LnJnYjJ9fCR7c2xvdEluZGV4fWApO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gOC8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgaW4gc2Vjb25kcywgbGlnaHQsIGFuZCBkYXJrIGNvbG9ycyBmb3IgdGhlIHNwZWNpZmllZCBrZXkgZnJhbWUuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlciwgcjI6IG51bWJlciwgZzI6IG51bWJlciwgYjI6IG51bWJlcikge1xuXHRcdGZyYW1lIDw8PSAzO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypSKi9dID0gcjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDIvKkcqL10gPSBnO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQiovXSA9IGI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA0LypBKi9dID0gYTtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDUvKlIyKi9dID0gcjI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA2LypHMiovXSA9IGcyO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNy8qQjIqL10gPSBiMjtcblx0fVxuXG5cdHByb3RlY3RlZCBhcHBseTEgKHNsb3Q6IFNsb3QsIHBvc2U6IFNsb3RQb3NlLCB0aW1lOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbikge1xuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRjb25zdCBsaWdodCA9IHBvc2UuY29sb3IsIGRhcmsgPSBwb3NlLmRhcmtDb2xvciE7XG5cdFx0bGV0IHIyID0gMCwgZzIgPSAwLCBiMiA9IDBcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0Y29uc3Qgc2V0dXAgPSBzbG90LmRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiByZWZlcmVuY2UgcnVudGltZVxuXHRcdFx0Y29uc3Qgc2V0dXBMaWdodCA9IHNldHVwLmNvbG9yLCBzZXR1cERhcmsgPSBzZXR1cC5kYXJrQ29sb3IhO1xuXHRcdFx0c3dpdGNoIChmcm9tKSB7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5zZXR1cDoge1xuXHRcdFx0XHRcdGxpZ2h0LnNldEZyb21Db2xvcihzZXR1cExpZ2h0KTtcblx0XHRcdFx0XHRkYXJrLnIgPSBzZXR1cERhcmsucjtcblx0XHRcdFx0XHRkYXJrLmcgPSBzZXR1cERhcmsuZztcblx0XHRcdFx0XHRkYXJrLmIgPSBzZXR1cERhcmsuYjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIE1peEZyb20uZmlyc3Q6IHtcblx0XHRcdFx0XHRsaWdodC5hZGQoKHNldHVwTGlnaHQuciAtIGxpZ2h0LnIpICogYWxwaGEsIChzZXR1cExpZ2h0LmcgLSBsaWdodC5nKSAqIGFscGhhLCAoc2V0dXBMaWdodC5iIC0gbGlnaHQuYikgKiBhbHBoYSxcblx0XHRcdFx0XHRcdChzZXR1cExpZ2h0LmEgLSBsaWdodC5hKSAqIGFscGhhKTtcblx0XHRcdFx0XHRkYXJrLnIgKz0gKHNldHVwRGFyay5yIC0gZGFyay5yKSAqIGFscGhhO1xuXHRcdFx0XHRcdGRhcmsuZyArPSAoc2V0dXBEYXJrLmcgLSBkYXJrLmcpICogYWxwaGE7XG5cdFx0XHRcdFx0ZGFyay5iICs9IChzZXR1cERhcmsuYiAtIGRhcmsuYikgKiBhbHBoYTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByID0gMCwgZyA9IDAsIGIgPSAwLCBhID0gMDtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgOC8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpID4+IDNdO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0YSA9IGZyYW1lc1tpICsgNC8qQSovXTtcblx0XHRcdFx0cjIgPSBmcmFtZXNbaSArIDUvKlIyKi9dO1xuXHRcdFx0XHRnMiA9IGZyYW1lc1tpICsgNi8qRzIqL107XG5cdFx0XHRcdGIyID0gZnJhbWVzW2kgKyA3LypCMiovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDgvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHRyICs9IChmcmFtZXNbaSArIDgvKkVOVFJJRVMqLyArIDEvKlIqL10gLSByKSAqIHQ7XG5cdFx0XHRcdGcgKz0gKGZyYW1lc1tpICsgOC8qRU5UUklFUyovICsgMi8qRyovXSAtIGcpICogdDtcblx0XHRcdFx0YiArPSAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi8gKyAzLypCKi9dIC0gYikgKiB0O1xuXHRcdFx0XHRhICs9IChmcmFtZXNbaSArIDgvKkVOVFJJRVMqLyArIDQvKkEqL10gLSBhKSAqIHQ7XG5cdFx0XHRcdHIyICs9IChmcmFtZXNbaSArIDgvKkVOVFJJRVMqLyArIDUvKlIyKi9dIC0gcjIpICogdDtcblx0XHRcdFx0ZzIgKz0gKGZyYW1lc1tpICsgOC8qRU5UUklFUyovICsgNi8qRzIqL10gLSBnMikgKiB0O1xuXHRcdFx0XHRiMiArPSAoZnJhbWVzW2kgKyA4LypFTlRSSUVTKi8gKyA3LypCMiovXSAtIGIyKSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHIgPSBmcmFtZXNbaSArIDEvKlIqL107XG5cdFx0XHRcdGcgPSBmcmFtZXNbaSArIDIvKkcqL107XG5cdFx0XHRcdGIgPSBmcmFtZXNbaSArIDMvKkIqL107XG5cdFx0XHRcdGEgPSBmcmFtZXNbaSArIDQvKkEqL107XG5cdFx0XHRcdHIyID0gZnJhbWVzW2kgKyA1LypSMiovXTtcblx0XHRcdFx0ZzIgPSBmcmFtZXNbaSArIDYvKkcyKi9dO1xuXHRcdFx0XHRiMiA9IGZyYW1lc1tpICsgNy8qQjIqL107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ciA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qUiovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGcgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDIvKkcqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDMvKkIqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiAyIC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRhID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA0LypBKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0cjIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDUvKlIyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNCAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0ZzIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDYvKkcyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0YjIgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDcvKkIyKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogNiAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cblx0XHRpZiAoYWxwaGEgPT09IDEpXG5cdFx0XHRsaWdodC5zZXQociwgZywgYiwgYSk7XG5cdFx0ZWxzZSBpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0Y29uc3Qgc2V0dXBQb3NlID0gc2xvdC5kYXRhLnNldHVwUG9zZTtcblx0XHRcdGxldCBzZXR1cCA9IHNldHVwUG9zZS5jb2xvcjtcblx0XHRcdGxpZ2h0LnNldChzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhLCBzZXR1cC5nICsgKGcgLSBzZXR1cC5nKSAqIGFscGhhLCBzZXR1cC5iICsgKGIgLSBzZXR1cC5iKSAqIGFscGhhLFxuXHRcdFx0XHRzZXR1cC5hICsgKGEgLSBzZXR1cC5hKSAqIGFscGhhKTtcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdHNldHVwID0gc2V0dXBQb3NlLmRhcmtDb2xvciE7XG5cdFx0XHRyMiA9IHNldHVwLnIgKyAocjIgLSBzZXR1cC5yKSAqIGFscGhhO1xuXHRcdFx0ZzIgPSBzZXR1cC5nICsgKGcyIC0gc2V0dXAuZykgKiBhbHBoYTtcblx0XHRcdGIyID0gc2V0dXAuYiArIChiMiAtIHNldHVwLmIpICogYWxwaGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpZ2h0LmFkZCgociAtIGxpZ2h0LnIpICogYWxwaGEsIChnIC0gbGlnaHQuZykgKiBhbHBoYSwgKGIgLSBsaWdodC5iKSAqIGFscGhhLCAoYSAtIGxpZ2h0LmEpICogYWxwaGEpO1xuXHRcdFx0cjIgPSBkYXJrLnIgKyAocjIgLSBkYXJrLnIpICogYWxwaGE7XG5cdFx0XHRnMiA9IGRhcmsuZyArIChnMiAtIGRhcmsuZykgKiBhbHBoYTtcblx0XHRcdGIyID0gZGFyay5iICsgKGIyIC0gZGFyay5iKSAqIGFscGhhO1xuXHRcdH1cblx0XHRkYXJrLnIgPSByMiA8IDAgPyAwIDogKHIyID4gMSA/IDEgOiByMik7XG5cdFx0ZGFyay5nID0gZzIgPCAwID8gMCA6IChnMiA+IDEgPyAxIDogZzIpO1xuXHRcdGRhcmsuYiA9IGIyIDwgMCA/IDAgOiAoYjIgPiAxID8gMSA6IGIyKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgU2xvdFBvc2UuY29sb3J9IGFuZCB7QGxpbmsgU2xvdFBvc2UuZGFya0NvbG9yfSBmb3IgdHdvIGNvbG9yIHRpbnRpbmcuICovXG5leHBvcnQgY2xhc3MgUkdCMlRpbWVsaW5lIGV4dGVuZHMgU2xvdEN1cnZlVGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBzbG90SW5kZXgsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2J9fCR7c2xvdEluZGV4fWAsIC8vXG5cdFx0XHRgJHtQcm9wZXJ0eS5yZ2IyfXwke3Nsb3RJbmRleH1gKTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDcvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMsIGxpZ2h0LCBhbmQgZGFyayBjb2xvcnMgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCByMjogbnVtYmVyLCBnMjogbnVtYmVyLCBiMjogbnVtYmVyKSB7XG5cdFx0ZnJhbWUgKj0gNy8qRU5UUklFUyovO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyAxLypSKi9dID0gcjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDIvKkcqL10gPSBnO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMy8qQiovXSA9IGI7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWUgKyA0LypSMiovXSA9IHIyO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgNS8qRzIqL10gPSBnMjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDYvKkIyKi9dID0gYjI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXBwbHkxIChzbG90OiBTbG90LCBwb3NlOiBTbG90UG9zZSwgdGltZTogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4pIHtcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05vbk51bGxBc3NlcnRpb246IHJlZmVyZW5jZSBydW50aW1lXG5cdFx0Y29uc3QgbGlnaHQgPSBwb3NlLmNvbG9yLCBkYXJrID0gcG9zZS5kYXJrQ29sb3IhO1xuXHRcdGxldCByID0gMCwgZyA9IDAsIGIgPSAwLCByMiA9IDAsIGcyID0gMCwgYjIgPSAwXG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdGNvbnN0IHNldHVwID0gc2xvdC5kYXRhLnNldHVwUG9zZTtcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdGNvbnN0IHNldHVwTGlnaHQgPSBzZXR1cC5jb2xvciwgc2V0dXBEYXJrID0gc2V0dXAuZGFya0NvbG9yITtcblx0XHRcdHN3aXRjaCAoZnJvbSkge1xuXHRcdFx0XHRjYXNlIE1peEZyb20uc2V0dXA6XG5cdFx0XHRcdFx0bGlnaHQuciA9IHNldHVwTGlnaHQucjtcblx0XHRcdFx0XHRsaWdodC5nID0gc2V0dXBMaWdodC5nO1xuXHRcdFx0XHRcdGxpZ2h0LmIgPSBzZXR1cExpZ2h0LmI7XG5cdFx0XHRcdFx0ZGFyay5yID0gc2V0dXBEYXJrLnI7XG5cdFx0XHRcdFx0ZGFyay5nID0gc2V0dXBEYXJrLmc7XG5cdFx0XHRcdFx0ZGFyay5iID0gc2V0dXBEYXJrLmI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5maXJzdDpcblx0XHRcdFx0XHRsaWdodC5yICs9IChzZXR1cExpZ2h0LnIgLSBsaWdodC5yKSAqIGFscGhhO1xuXHRcdFx0XHRcdGxpZ2h0LmcgKz0gKHNldHVwTGlnaHQuZyAtIGxpZ2h0LmcpICogYWxwaGE7XG5cdFx0XHRcdFx0bGlnaHQuYiArPSAoc2V0dXBMaWdodC5iIC0gbGlnaHQuYikgKiBhbHBoYTtcblx0XHRcdFx0XHRkYXJrLnIgKz0gKHNldHVwRGFyay5yIC0gZGFyay5yKSAqIGFscGhhO1xuXHRcdFx0XHRcdGRhcmsuZyArPSAoc2V0dXBEYXJrLmcgLSBkYXJrLmcpICogYWxwaGE7XG5cdFx0XHRcdFx0ZGFyay5iICs9IChzZXR1cERhcmsuYiAtIGRhcmsuYikgKiBhbHBoYTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgNy8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpIC8gNy8qRU5UUklFUyovXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHIgPSBmcmFtZXNbaSArIDEvKlIqL107XG5cdFx0XHRcdGcgPSBmcmFtZXNbaSArIDIvKkcqL107XG5cdFx0XHRcdGIgPSBmcmFtZXNbaSArIDMvKkIqL107XG5cdFx0XHRcdHIyID0gZnJhbWVzW2kgKyA0LypSMiovXTtcblx0XHRcdFx0ZzIgPSBmcmFtZXNbaSArIDUvKkcyKi9dO1xuXHRcdFx0XHRiMiA9IGZyYW1lc1tpICsgNi8qQjIqL107XG5cdFx0XHRcdGNvbnN0IHQgPSAodGltZSAtIGJlZm9yZSkgLyAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi9dIC0gYmVmb3JlKTtcblx0XHRcdFx0ciArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyAxLypSKi9dIC0gcikgKiB0O1xuXHRcdFx0XHRnICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDIvKkcqL10gLSBnKSAqIHQ7XG5cdFx0XHRcdGIgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgMy8qQiovXSAtIGIpICogdDtcblx0XHRcdFx0cjIgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgNC8qUjIqL10gLSByMikgKiB0O1xuXHRcdFx0XHRnMiArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyA1LypHMiovXSAtIGcyKSAqIHQ7XG5cdFx0XHRcdGIyICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDYvKkIyKi9dIC0gYjIpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0ciA9IGZyYW1lc1tpICsgMS8qUiovXTtcblx0XHRcdFx0ZyA9IGZyYW1lc1tpICsgMi8qRyovXTtcblx0XHRcdFx0YiA9IGZyYW1lc1tpICsgMy8qQiovXTtcblx0XHRcdFx0cjIgPSBmcmFtZXNbaSArIDQvKlIyKi9dO1xuXHRcdFx0XHRnMiA9IGZyYW1lc1tpICsgNS8qRzIqL107XG5cdFx0XHRcdGIyID0gZnJhbWVzW2kgKyA2LypCMiovXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAxLypSKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0ZyA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qRyovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0YiA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMy8qQiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDIgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHIyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA0LypSMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDMgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGcyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA1LypHMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDQgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdGIyID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA2LypCMiovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDUgLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFscGhhICE9PSAxKSB7XG5cdFx0XHRpZiAoZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCkge1xuXHRcdFx0XHRjb25zdCBzZXR1cFBvc2UgPSBzbG90LmRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0XHRsZXQgc2V0dXAgPSBzZXR1cFBvc2UuY29sb3I7XG5cdFx0XHRcdHIgPSBzZXR1cC5yICsgKHIgLSBzZXR1cC5yKSAqIGFscGhhO1xuXHRcdFx0XHRnID0gc2V0dXAuZyArIChnIC0gc2V0dXAuZykgKiBhbHBoYTtcblx0XHRcdFx0YiA9IHNldHVwLmIgKyAoYiAtIHNldHVwLmIpICogYWxwaGE7XG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdFx0c2V0dXAgPSBzZXR1cFBvc2UuZGFya0NvbG9yITtcblx0XHRcdFx0cjIgPSBzZXR1cC5yICsgKHIyIC0gc2V0dXAucikgKiBhbHBoYTtcblx0XHRcdFx0ZzIgPSBzZXR1cC5nICsgKGcyIC0gc2V0dXAuZykgKiBhbHBoYTtcblx0XHRcdFx0YjIgPSBzZXR1cC5iICsgKGIyIC0gc2V0dXAuYikgKiBhbHBoYTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHIgPSBsaWdodC5yICsgKHIgLSBsaWdodC5yKSAqIGFscGhhO1xuXHRcdFx0XHRnID0gbGlnaHQuZyArIChnIC0gbGlnaHQuZykgKiBhbHBoYTtcblx0XHRcdFx0YiA9IGxpZ2h0LmIgKyAoYiAtIGxpZ2h0LmIpICogYWxwaGE7XG5cdFx0XHRcdHIyID0gZGFyay5yICsgKHIyIC0gZGFyay5yKSAqIGFscGhhO1xuXHRcdFx0XHRnMiA9IGRhcmsuZyArIChnMiAtIGRhcmsuZykgKiBhbHBoYTtcblx0XHRcdFx0YjIgPSBkYXJrLmIgKyAoYjIgLSBkYXJrLmIpICogYWxwaGE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxpZ2h0LnIgPSByIDwgMCA/IDAgOiAociA+IDEgPyAxIDogcik7XG5cdFx0bGlnaHQuZyA9IGcgPCAwID8gMCA6IChnID4gMSA/IDEgOiBnKTtcblx0XHRsaWdodC5iID0gYiA8IDAgPyAwIDogKGIgPiAxID8gMSA6IGIpO1xuXHRcdGRhcmsuciA9IHIyIDwgMCA/IDAgOiAocjIgPiAxID8gMSA6IHIyKTtcblx0XHRkYXJrLmcgPSBnMiA8IDAgPyAwIDogKGcyID4gMSA/IDEgOiBnMik7XG5cdFx0ZGFyay5iID0gYjIgPCAwID8gMCA6IChiMiA+IDEgPyAxIDogYjIpO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBTbG90UG9zZS50dGFjaG1lbnR9LiAqL1xuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIGltcGxlbWVudHMgU2xvdFRpbWVsaW5lIHtcblx0c2xvdEluZGV4ID0gMDtcblxuXHQvKiogVGhlIGF0dGFjaG1lbnQgbmFtZSBmb3IgZWFjaCBrZXkgZnJhbWUuIE1heSBjb250YWluIG51bGwgdmFsdWVzIHRvIGNsZWFyIHRoZSBhdHRhY2htZW50LiAqL1xuXHRhdHRhY2htZW50TmFtZXM6IEFycmF5PHN0cmluZyB8IG51bGw+O1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYCR7UHJvcGVydHkuYXR0YWNobWVudH18JHtzbG90SW5kZXh9YCk7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5hdHRhY2htZW50TmFtZXMgPSBuZXcgQXJyYXk8c3RyaW5nPihmcmFtZUNvdW50KTtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVDb3VudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJhbWVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGluIHNlY29uZHMgYW5kIHRoZSBhdHRhY2htZW50IG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBhdHRhY2htZW50TmFtZTogc3RyaW5nIHwgbnVsbCkge1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0dGhpcy5hdHRhY2htZW50TmFtZXNbZnJhbWVdID0gYXR0YWNobWVudE5hbWU7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3Qgc2xvdCA9IHNrZWxldG9uLnNsb3RzW3RoaXMuc2xvdEluZGV4XTtcblx0XHRpZiAoIXNsb3QuYm9uZS5hY3RpdmUpIHJldHVybjtcblx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBzbG90LmFwcGxpZWRQb3NlIDogc2xvdC5wb3NlO1xuXG5cdFx0aWYgKG91dCB8fCB0aW1lIDwgdGhpcy5mcmFtZXNbMF0pIHtcblx0XHRcdGlmIChmcm9tICE9PSBNaXhGcm9tLmN1cnJlbnQpIHRoaXMuc2V0QXR0YWNobWVudChza2VsZXRvbiwgcG9zZSwgc2xvdC5kYXRhLmF0dGFjaG1lbnROYW1lKTtcblx0XHR9IGVsc2Vcblx0XHRcdHRoaXMuc2V0QXR0YWNobWVudChza2VsZXRvbiwgcG9zZSwgdGhpcy5hdHRhY2htZW50TmFtZXNbVGltZWxpbmUuc2VhcmNoKHRoaXMuZnJhbWVzLCB0aW1lKV0pO1xuXHR9XG5cblx0c2V0QXR0YWNobWVudCAoc2tlbGV0b246IFNrZWxldG9uLCBwb3NlOiBTbG90UG9zZSwgYXR0YWNobWVudE5hbWU6IHN0cmluZyB8IG51bGwpIHtcblx0XHRwb3NlLnNldEF0dGFjaG1lbnQoIWF0dGFjaG1lbnROYW1lID8gbnVsbCA6IHNrZWxldG9uLmdldEF0dGFjaG1lbnQodGhpcy5zbG90SW5kZXgsIGF0dGFjaG1lbnROYW1lKSk7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFNsb3RQb3NlLmRlZm9ybX0gdG8gZGVmb3JtIGEge0BsaW5rIFZlcnRleEF0dGFjaG1lbnR9LiAqL1xuZXhwb3J0IGNsYXNzIERlZm9ybVRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHJlYWRvbmx5IHNsb3RJbmRleDogbnVtYmVyO1xuXG5cdC8qKiBUaGUgYXR0YWNobWVudCB0aGF0IHdpbGwgYmUgZGVmb3JtZWQuXG5cdCAqXG5cdCAqIFNlZSB7QGxpbmsgVmVydGV4QXR0YWNobWVudC5nZXRUaW1lbGluZUF0dGFjaG1lbnR9LiAqL1xuXHRyZWFkb25seSBhdHRhY2htZW50OiBWZXJ0ZXhBdHRhY2htZW50O1xuXG5cdC8qKiBUaGUgdmVydGljZXMgZm9yIGVhY2gga2V5IGZyYW1lLiAqL1xuXHR2ZXJ0aWNlczogQXJyYXk8TnVtYmVyQXJyYXlMaWtlPjtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBzbG90SW5kZXg6IG51bWJlciwgYXR0YWNobWVudDogVmVydGV4QXR0YWNobWVudCkge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtQcm9wZXJ0eS5kZWZvcm19fCR7c2xvdEluZGV4fXwke2F0dGFjaG1lbnQuaWR9YCk7XG5cdFx0dGhpcy5zbG90SW5kZXggPSBzbG90SW5kZXg7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gYXR0YWNobWVudDtcblx0XHR0aGlzLnZlcnRpY2VzID0gbmV3IEFycmF5PE51bWJlckFycmF5TGlrZT4oZnJhbWVDb3VudCk7XG5cdFx0dGhpcy5hZGRpdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcmFtZXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgYW5kIHZlcnRpY2VzIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudGAsIGluY2x1c2l2ZS5cblx0ICogQHBhcmFtIHRpbWUgVGhlIGZyYW1lIHRpbWUgaW4gc2Vjb25kcy5cblx0ICogQHBhcmFtIHZlcnRpY2VzIFZlcnRleCBwb3NpdGlvbnMgZm9yIGFuIHVud2VpZ2h0ZWQgVmVydGV4QXR0YWNobWVudCwgb3IgZGVmb3JtIG9mZnNldHMgaWYgaXQgaGFzIHdlaWdodHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHZlcnRpY2VzOiBOdW1iZXJBcnJheUxpa2UpIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMudmVydGljZXNbZnJhbWVdID0gdmVydGljZXM7XG5cdH1cblxuXHQvKiogQHBhcmFtIHZhbHVlMSBJZ25vcmVkICgwIGlzIHVzZWQgZm9yIGEgZGVmb3JtIHRpbWVsaW5lKS5cblx0ICogQHBhcmFtIHZhbHVlMiBJZ25vcmVkICgxIGlzIHVzZWQgZm9yIGEgZGVmb3JtIHRpbWVsaW5lKS4gKi9cblx0c2V0QmV6aWVyIChiZXppZXI6IG51bWJlciwgZnJhbWU6IG51bWJlciwgdmFsdWU6IG51bWJlciwgdGltZTE6IG51bWJlciwgdmFsdWUxOiBudW1iZXIsIGN4MTogbnVtYmVyLCBjeTE6IG51bWJlciwgY3gyOiBudW1iZXIsXG5cdFx0Y3kyOiBudW1iZXIsIHRpbWUyOiBudW1iZXIsIHZhbHVlMjogbnVtYmVyKSB7XG5cdFx0Y29uc3QgY3VydmVzID0gdGhpcy5jdXJ2ZXM7XG5cdFx0bGV0IGkgPSB0aGlzLmdldEZyYW1lQ291bnQoKSArIGJlemllciAqIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGlmICh2YWx1ZSA9PT0gMCkgY3VydmVzW2ZyYW1lXSA9IDIvKkJFWklFUiovICsgaTtcblx0XHRjb25zdCB0bXB4ID0gKHRpbWUxIC0gY3gxICogMiArIGN4MikgKiAwLjAzLCB0bXB5ID0gY3kyICogMC4wMyAtIGN5MSAqIDAuMDY7XG5cdFx0Y29uc3QgZGRkeCA9ICgoY3gxIC0gY3gyKSAqIDMgLSB0aW1lMSArIHRpbWUyKSAqIDAuMDA2LCBkZGR5ID0gKGN5MSAtIGN5MiArIDAuMzMzMzMzMzMpICogMC4wMTg7XG5cdFx0bGV0IGRkeCA9IHRtcHggKiAyICsgZGRkeCwgZGR5ID0gdG1weSAqIDIgKyBkZGR5O1xuXHRcdGxldCBkeCA9IChjeDEgLSB0aW1lMSkgKiAwLjMgKyB0bXB4ICsgZGRkeCAqIDAuMTY2NjY2NjcsIGR5ID0gY3kxICogMC4zICsgdG1weSArIGRkZHkgKiAwLjE2NjY2NjY3O1xuXHRcdGxldCB4ID0gdGltZTEgKyBkeCwgeSA9IGR5O1xuXHRcdGZvciAobGV0IG4gPSBpICsgMTgvKkJFWklFUl9TSVpFKi87IGkgPCBuOyBpICs9IDIpIHtcblx0XHRcdGN1cnZlc1tpXSA9IHg7XG5cdFx0XHRjdXJ2ZXNbaSArIDFdID0geTtcblx0XHRcdGR4ICs9IGRkeDtcblx0XHRcdGR5ICs9IGRkeTtcblx0XHRcdGRkeCArPSBkZGR4O1xuXHRcdFx0ZGR5ICs9IGRkZHk7XG5cdFx0XHR4ICs9IGR4O1xuXHRcdFx0eSArPSBkeTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJ2ZVBlcmNlbnQgKHRpbWU6IG51bWJlciwgZnJhbWU6IG51bWJlcikge1xuXHRcdGNvbnN0IGN1cnZlcyA9IHRoaXMuY3VydmVzO1xuXHRcdGxldCBpID0gY3VydmVzW2ZyYW1lXTtcblx0XHRzd2l0Y2ggKGkpIHtcblx0XHRcdGNhc2UgMC8qTElORUFSKi86IHtcblx0XHRcdFx0Y29uc3QgeCA9IHRoaXMuZnJhbWVzW2ZyYW1lXTtcblx0XHRcdFx0cmV0dXJuICh0aW1lIC0geCkgLyAodGhpcy5mcmFtZXNbZnJhbWUgKyB0aGlzLmdldEZyYW1lRW50cmllcygpXSAtIHgpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpIC09IDIvKkJFWklFUiovO1xuXHRcdGlmIChjdXJ2ZXNbaV0gPiB0aW1lKSB7XG5cdFx0XHRjb25zdCB4ID0gdGhpcy5mcmFtZXNbZnJhbWVdO1xuXHRcdFx0cmV0dXJuIGN1cnZlc1tpICsgMV0gKiAodGltZSAtIHgpIC8gKGN1cnZlc1tpXSAtIHgpO1xuXHRcdH1cblx0XHRjb25zdCBuID0gaSArIDE4LypCRVpJRVJfU0laRSovO1xuXHRcdGZvciAoaSArPSAyOyBpIDwgbjsgaSArPSAyKSB7XG5cdFx0XHRpZiAoY3VydmVzW2ldID49IHRpbWUpIHtcblx0XHRcdFx0Y29uc3QgeCA9IGN1cnZlc1tpIC0gMl0sIHkgPSBjdXJ2ZXNbaSAtIDFdO1xuXHRcdFx0XHRyZXR1cm4geSArICh0aW1lIC0geCkgLyAoY3VydmVzW2ldIC0geCkgKiAoY3VydmVzW2kgKyAxXSAtIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB4ID0gY3VydmVzW24gLSAyXSwgeSA9IGN1cnZlc1tuIC0gMV07XG5cdFx0cmV0dXJuIHkgKyAoMSAtIHkpICogKHRpbWUgLSB4KSAvICh0aGlzLmZyYW1lc1tmcmFtZSArIHRoaXMuZ2V0RnJhbWVFbnRyaWVzKCldIC0geCk7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogRXZlbnRbXSB8IG51bGwsIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc2xvdHMgPSBza2VsZXRvbi5zbG90cztcblx0XHRpZiAoIXRoaXMuYXR0YWNobWVudC5pc1RpbWVsaW5lQWN0aXZlKHNsb3RzLCB0aGlzLnNsb3RJbmRleCwgYXBwbGllZFBvc2UpKSByZXR1cm47XG5cdFx0Y29uc3QgdGltZWxpbmVTbG90cyA9IHRoaXMuYXR0YWNobWVudC50aW1lbGluZVNsb3RzO1xuXG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKHRpbWUgPCBmcmFtZXNbMF0pIHtcblx0XHRcdHRoaXMuYXBwbHlCZWZvcmVGaXJzdChzbG90c1t0aGlzLnNsb3RJbmRleF0sIGFwcGxpZWRQb3NlLCBhbHBoYSwgZnJvbSk7XG5cdFx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0XHR0aGlzLmFwcGx5QmVmb3JlRmlyc3Qoc2xvdHNbc2xvdEluZGV4XSwgYXBwbGllZFBvc2UsIGFscGhhLCBmcm9tKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgdjE6IE51bWJlckFycmF5TGlrZSwgdjI6IE51bWJlckFycmF5TGlrZSB8IG51bGw7XG5cdFx0bGV0IHBlcmNlbnQ6IG51bWJlcjtcblx0XHRpZiAodGltZSA+PSBmcmFtZXNbZnJhbWVzLmxlbmd0aCAtIDFdKSB7XG5cdFx0XHRwZXJjZW50ID0gMDtcblx0XHRcdHYxID0gdGhpcy52ZXJ0aWNlc1tmcmFtZXMubGVuZ3RoIC0gMV07XG5cdFx0XHR2MiA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZyYW1lID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSk7XG5cdFx0XHRwZXJjZW50ID0gdGhpcy5nZXRDdXJ2ZVBlcmNlbnQodGltZSwgZnJhbWUpO1xuXHRcdFx0djEgPSB0aGlzLnZlcnRpY2VzW2ZyYW1lXTtcblx0XHRcdHYyID0gdGhpcy52ZXJ0aWNlc1tmcmFtZSArIDFdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZlcnRleENvdW50ID0gdGhpcy52ZXJ0aWNlc1swXS5sZW5ndGg7XG5cdFx0dGhpcy5hcHBseVRvU2xvdChzbG90c1t0aGlzLnNsb3RJbmRleF0sIGFwcGxpZWRQb3NlLCB2MSwgdjIsIHBlcmNlbnQsIHZlcnRleENvdW50LCBhbHBoYSwgZnJvbSwgYWRkKTtcblx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0dGhpcy5hcHBseVRvU2xvdChzbG90c1tzbG90SW5kZXhdLCBhcHBsaWVkUG9zZSwgdjEsIHYyLCBwZXJjZW50LCB2ZXJ0ZXhDb3VudCwgYWxwaGEsIGZyb20sIGFkZCk7XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5QmVmb3JlRmlyc3QgKHNsb3Q6IFNsb3QsIGFwcGxpZWRQb3NlOiBib29sZWFuLCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tKSB7XG5cdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gc2xvdC5hcHBsaWVkUG9zZSA6IHNsb3QucG9zZTtcblx0XHRpZiAocG9zZS5hdHRhY2htZW50ID09IG51bGwgfHwgcG9zZS5hdHRhY2htZW50LnRpbWVsaW5lQXR0YWNobWVudCAhPT0gdGhpcy5hdHRhY2htZW50KSByZXR1cm47XG5cdFx0Y29uc3QgZGVmb3JtQXJyYXkgPSBwb3NlLmRlZm9ybTtcblx0XHRpZiAoZGVmb3JtQXJyYXkubGVuZ3RoID09PSAwKSBmcm9tID0gTWl4RnJvbS5zZXR1cDtcblx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdGNhc2UgTWl4RnJvbS5zZXR1cDogZGVmb3JtQXJyYXkubGVuZ3RoID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlIE1peEZyb20uZmlyc3Q6IHtcblx0XHRcdFx0aWYgKGFscGhhID09PSAxKSB7XG5cdFx0XHRcdFx0ZGVmb3JtQXJyYXkubGVuZ3RoID0gMDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdmVydGV4Q291bnQgPSB0aGlzLnZlcnRpY2VzWzBdLmxlbmd0aDtcblx0XHRcdFx0ZGVmb3JtQXJyYXkubGVuZ3RoID0gdmVydGV4Q291bnQ7XG5cdFx0XHRcdGNvbnN0IGRlZm9ybSA9IGRlZm9ybUFycmF5O1xuXHRcdFx0XHRjb25zdCB2ZXJ0ZXhBdHRhY2htZW50ID0gcG9zZS5hdHRhY2htZW50IGFzIFZlcnRleEF0dGFjaG1lbnQ7XG5cdFx0XHRcdGlmICh2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzID09PSBudWxsKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dXBWZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9IChzZXR1cFZlcnRpY2VzW2ldIC0gZGVmb3JtW2ldKSAqIGFscGhhO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFscGhhID0gMSAtIGFscGhhO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKylcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSAqPSBhbHBoYTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXBwbHlUb1Nsb3QgKHNsb3Q6IFNsb3QsIGFwcGxpZWRQb3NlOiBib29sZWFuLCB2MTogTnVtYmVyQXJyYXlMaWtlLCB2MjogTnVtYmVyQXJyYXlMaWtlIHwgbnVsbCwgcGVyY2VudDogbnVtYmVyLCB2ZXJ0ZXhDb3VudDogbnVtYmVyLFxuXHRcdGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbikge1xuXHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IHNsb3QuYXBwbGllZFBvc2UgOiBzbG90LnBvc2U7XG5cdFx0aWYgKHBvc2UuYXR0YWNobWVudCA9PT0gbnVsbCB8fCBwb3NlLmF0dGFjaG1lbnQudGltZWxpbmVBdHRhY2htZW50ICE9PSB0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHZlcnRleEF0dGFjaG1lbnQgPSBwb3NlLmF0dGFjaG1lbnQgYXMgVmVydGV4QXR0YWNobWVudDtcblx0XHRjb25zdCBkZWZvcm0gPSBwb3NlLmRlZm9ybTtcblx0XHRpZiAoZGVmb3JtLmxlbmd0aCA9PT0gMCkgZnJvbSA9IE1peEZyb20uc2V0dXA7XG5cdFx0Y29uc3QgZnJvbVNldHVwID0gZnJvbSA9PT0gTWl4RnJvbS5zZXR1cDtcblx0XHRkZWZvcm0ubGVuZ3RoID0gdmVydGV4Q291bnQ7XG5cblx0XHRpZiAodjIgPT09IG51bGwpIHsgLy8gVGltZSBpcyBhZnRlciBsYXN0IGZyYW1lLlxuXHRcdFx0aWYgKGFscGhhID09PSAxKSB7XG5cdFx0XHRcdGlmIChhZGQgJiYgIWZyb21TZXR1cCkge1xuXHRcdFx0XHRcdGlmICghdmVydGV4QXR0YWNobWVudC5ib25lcykgeyAvLyBVbndlaWdodGVkIHZlcnRleCBwb3NpdGlvbnMsIG5vIGFscGhhLlxuXHRcdFx0XHRcdFx0Y29uc3Qgc2V0dXBWZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSB2MVtpXSAtIHNldHVwVmVydGljZXNbaV07XG5cdFx0XHRcdFx0fSBlbHNlIHsgLy8gV2VpZ2h0ZWQgZGVmb3JtIG9mZnNldHMsIG5vIGFscGhhLlxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0XHRkZWZvcm1baV0gKz0gdjFbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgLy8gVmVydGV4IHBvc2l0aW9ucyBvciBkZWZvcm0gb2Zmc2V0cywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0VXRpbHMuYXJyYXlDb3B5KHYxLCAwLCBkZWZvcm0sIDAsIHZlcnRleENvdW50KTtcblx0XHRcdH0gZWxzZSBpZiAoZnJvbVNldHVwKSB7XG5cdFx0XHRcdGlmICghdmVydGV4QXR0YWNobWVudC5ib25lcykgeyAvLyBVbndlaWdodGVkIHZlcnRleCBwb3NpdGlvbnMsIHdpdGggYWxwaGEuXG5cdFx0XHRcdFx0Y29uc3Qgc2V0dXBWZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzZXR1cCA9IHNldHVwVmVydGljZXNbaV07XG5cdFx0XHRcdFx0XHRkZWZvcm1baV0gPSBzZXR1cCArICh2MVtpXSAtIHNldHVwKSAqIGFscGhhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHsgLy8gV2VpZ2h0ZWQgZGVmb3JtIG9mZnNldHMsIHdpdGggYWxwaGEuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldID0gdjFbaV0gKiBhbHBoYTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhZGQpIHtcblx0XHRcdFx0aWYgKCF2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzKSB7IC8vIFVud2VpZ2h0ZWQgdmVydGV4IHBvc2l0aW9ucywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0Y29uc3Qgc2V0dXBWZXJ0aWNlcyA9IHZlcnRleEF0dGFjaG1lbnQudmVydGljZXM7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0ZGVmb3JtW2ldICs9ICh2MVtpXSAtIHNldHVwVmVydGljZXNbaV0pICogYWxwaGE7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIFdlaWdodGVkIGRlZm9ybSBvZmZzZXRzLCBhbHBoYS5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspXG5cdFx0XHRcdFx0XHRkZWZvcm1baV0gKz0gdjFbaV0gKiBhbHBoYTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHsgLy8gVmVydGV4IHBvc2l0aW9ucyBvciBkZWZvcm0gb2Zmc2V0cywgd2l0aCBhbHBoYS5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKVxuXHRcdFx0XHRcdGRlZm9ybVtpXSArPSAodjFbaV0gLSBkZWZvcm1baV0pICogYWxwaGE7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHsgLy8gQmV0d2VlbiBmcmFtZXMuXG5cdFx0XHRpZiAoYWxwaGEgPT09IDEpIHtcblx0XHRcdFx0aWYgKGFkZCAmJiAhZnJvbVNldHVwKSB7XG5cdFx0XHRcdFx0aWYgKCF2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzKSB7IC8vIFVud2VpZ2h0ZWQgdmVydGV4IHBvc2l0aW9ucywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0XHRjb25zdCBzZXR1cFZlcnRpY2VzID0gdmVydGV4QXR0YWNobWVudC52ZXJ0aWNlcztcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmV2ID0gdjFbaV07XG5cdFx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSBwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50IC0gc2V0dXBWZXJ0aWNlc1tpXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgeyAvLyBXZWlnaHRlZCBkZWZvcm0gb2Zmc2V0cywgbm8gYWxwaGEuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldO1xuXHRcdFx0XHRcdFx0XHRkZWZvcm1baV0gKz0gcHJldiArICh2MltpXSAtIHByZXYpICogcGVyY2VudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocGVyY2VudCA9PT0gMClcblx0XHRcdFx0XHRVdGlscy5hcnJheUNvcHkodjEsIDAsIGRlZm9ybSwgMCwgdmVydGV4Q291bnQpXG5cdFx0XHRcdGVsc2UgeyAvLyBWZXJ0ZXggcG9zaXRpb25zIG9yIGRlZm9ybSBvZmZzZXRzLCBubyBhbHBoYS5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSA9IHByZXYgKyAodjJbaV0gLSBwcmV2KSAqIHBlcmNlbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGZyb21TZXR1cCkge1xuXHRcdFx0XHRpZiAoIXZlcnRleEF0dGFjaG1lbnQuYm9uZXMpIHsgLy8gVW53ZWlnaHRlZCB2ZXJ0ZXggcG9zaXRpb25zLCB3aXRoIGFscGhhLlxuXHRcdFx0XHRcdGNvbnN0IHNldHVwVmVydGljZXMgPSB2ZXJ0ZXhBdHRhY2htZW50LnZlcnRpY2VzO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldiA9IHYxW2ldLCBzZXR1cCA9IHNldHVwVmVydGljZXNbaV07XG5cdFx0XHRcdFx0XHRkZWZvcm1baV0gPSBzZXR1cCArIChwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50IC0gc2V0dXApICogYWxwaGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgeyAvLyBXZWlnaHRlZCBkZWZvcm0gb2Zmc2V0cywgd2l0aCBhbHBoYS5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSA9IChwcmV2ICsgKHYyW2ldIC0gcHJldikgKiBwZXJjZW50KSAqIGFscGhhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhZGQpIHtcblx0XHRcdFx0aWYgKCF2ZXJ0ZXhBdHRhY2htZW50LmJvbmVzKSB7IC8vIFVud2VpZ2h0ZWQgdmVydGV4IHBvc2l0aW9ucywgd2l0aCBhbHBoYS5cblx0XHRcdFx0XHRjb25zdCBzZXR1cFZlcnRpY2VzID0gdmVydGV4QXR0YWNobWVudC52ZXJ0aWNlcztcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSAocHJldiArICh2MltpXSAtIHByZXYpICogcGVyY2VudCAtIHNldHVwVmVydGljZXNbaV0pICogYWxwaGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgeyAvLyBXZWlnaHRlZCBkZWZvcm0gb2Zmc2V0cywgd2l0aCBhbHBoYS5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRcdGRlZm9ybVtpXSArPSAocHJldiArICh2MltpXSAtIHByZXYpICogcGVyY2VudCkgKiBhbHBoYTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHByZXYgPSB2MVtpXTtcblx0XHRcdFx0XHRkZWZvcm1baV0gKz0gKHByZXYgKyAodjJbaV0gLSBwcmV2KSAqIHBlcmNlbnQgLSBkZWZvcm1baV0pICogYWxwaGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFNsb3QuZ2V0U2VxdWVuY2VJbmRleH0gZm9yIGFuIGF0dGFjaG1lbnQncyB7QGxpbmsgU2VxdWVuY2V9LiAqL1xuZXhwb3J0IGNsYXNzIFNlcXVlbmNlVGltZWxpbmUgZXh0ZW5kcyBUaW1lbGluZSBpbXBsZW1lbnRzIFNsb3RUaW1lbGluZSB7XG5cdHN0YXRpYyBFTlRSSUVTID0gMztcblx0c3RhdGljIE1PREUgPSAxO1xuXHRzdGF0aWMgREVMQVkgPSAyO1xuXG5cdHJlYWRvbmx5IHNsb3RJbmRleDogbnVtYmVyO1xuXHRyZWFkb25seSBhdHRhY2htZW50OiBBdHRhY2htZW50O1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIHNsb3RJbmRleDogbnVtYmVyLCBhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYCR7UHJvcGVydHkuc2VxdWVuY2V9fCR7c2xvdEluZGV4fXwkeyhhdHRhY2htZW50IGFzIHVua25vd24gYXMgSGFzU2VxdWVuY2UpLnNlcXVlbmNlLmlkfWApO1xuXHRcdHRoaXMuc2xvdEluZGV4ID0gc2xvdEluZGV4O1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5pbnN0YW50ID0gdHJ1ZTtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIFNlcXVlbmNlVGltZWxpbmUuRU5UUklFUztcblx0fVxuXG5cdGdldFNsb3RJbmRleCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2xvdEluZGV4O1xuXHR9XG5cblx0LyoqIFRoZSBhdHRhY2htZW50IGZvciB3aGljaCB0aGUge0BsaW5rIFNsb3RQb3NlLnNlcXVlbmNlSW5kZXh9IHdpbGwgYmUgc2V0LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFZlcnRleEF0dGFjaG1lbnQudGltZWxpbmVBdHRhY2htZW50fS4gKi9cblx0Z2V0QXR0YWNobWVudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNobWVudDtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lLCBtb2RlLCBpbmRleCwgYW5kIGZyYW1lIHRpbWUgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUuXG5cdCAqIEBwYXJhbSBmcmFtZSBCZXR3ZWVuIDAgYW5kIGBmcmFtZUNvdW50YCwgaW5jbHVzaXZlLlxuXHQgKiBAcGFyYW0gdGltZSBTZWNvbmRzIGJldHdlZW4gZnJhbWVzLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBtb2RlOiBTZXF1ZW5jZU1vZGUsIGluZGV4OiBudW1iZXIsIGRlbGF5OiBudW1iZXIpIHtcblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRmcmFtZSAqPSBTZXF1ZW5jZVRpbWVsaW5lLkVOVFJJRVM7XG5cdFx0ZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdFx0ZnJhbWVzW2ZyYW1lICsgU2VxdWVuY2VUaW1lbGluZS5NT0RFXSA9IG1vZGUgfCAoaW5kZXggPDwgNCk7XG5cdFx0ZnJhbWVzW2ZyYW1lICsgU2VxdWVuY2VUaW1lbGluZS5ERUxBWV0gPSBkZWxheTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc2xvdHMgPSBza2VsZXRvbi5zbG90cztcblx0XHRpZiAoIXRoaXMuYXR0YWNobWVudC5pc1RpbWVsaW5lQWN0aXZlKHNsb3RzLCB0aGlzLnNsb3RJbmRleCwgYXBwbGllZFBvc2UpKSByZXR1cm47XG5cdFx0Y29uc3QgdGltZWxpbmVTbG90cyA9IHRoaXMuYXR0YWNobWVudC50aW1lbGluZVNsb3RzO1xuXG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0aWYgKG91dCB8fCB0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRpZiAoZnJvbSAhPT0gTWl4RnJvbS5jdXJyZW50KSB7XG5cdFx0XHRcdHRoaXMuc2V0dXBQb3NlKHNsb3RzW3RoaXMuc2xvdEluZGV4XSwgYXBwbGllZFBvc2UpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNsb3RJbmRleCBvZiB0aW1lbGluZVNsb3RzKVxuXHRcdFx0XHRcdHRoaXMuc2V0dXBQb3NlKHNsb3RzW3Nsb3RJbmRleF0sIGFwcGxpZWRQb3NlKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGkgPSBUaW1lbGluZS5zZWFyY2goZnJhbWVzLCB0aW1lLCBTZXF1ZW5jZVRpbWVsaW5lLkVOVFJJRVMpO1xuXHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRjb25zdCBtb2RlQW5kSW5kZXggPSBmcmFtZXNbaSArIFNlcXVlbmNlVGltZWxpbmUuTU9ERV07XG5cdFx0Y29uc3QgZGVsYXkgPSBmcmFtZXNbaSArIFNlcXVlbmNlVGltZWxpbmUuREVMQVldO1xuXG5cdFx0dGhpcy5hcHBseVRvU2xvdChzbG90c1t0aGlzLnNsb3RJbmRleF0sIGFwcGxpZWRQb3NlLCB0aW1lLCBiZWZvcmUsIG1vZGVBbmRJbmRleCwgZGVsYXkpO1xuXHRcdGZvciAoY29uc3Qgc2xvdEluZGV4IG9mIHRpbWVsaW5lU2xvdHMpXG5cdFx0XHR0aGlzLmFwcGx5VG9TbG90KHNsb3RzW3Nsb3RJbmRleF0sIGFwcGxpZWRQb3NlLCB0aW1lLCBiZWZvcmUsIG1vZGVBbmRJbmRleCwgZGVsYXkpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXR1cFBvc2UgKHNsb3Q6IFNsb3QsIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gc2xvdC5hcHBsaWVkUG9zZSA6IHNsb3QucG9zZTtcblx0XHRpZiAocG9zZS5hdHRhY2htZW50ID09PSBudWxsIHx8IHBvc2UuYXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgIT09IHRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xuXHRcdHBvc2Uuc2VxdWVuY2VJbmRleCA9IC0xO1xuXHR9XG5cblx0cHJpdmF0ZSBhcHBseVRvU2xvdCAoc2xvdDogU2xvdCwgYXBwbGllZFBvc2U6IGJvb2xlYW4sIHRpbWU6IG51bWJlciwgYmVmb3JlOiBudW1iZXIsIG1vZGVBbmRJbmRleDogbnVtYmVyLCBkZWxheTogbnVtYmVyKSB7XG5cdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gc2xvdC5hcHBsaWVkUG9zZSA6IHNsb3QucG9zZTtcblx0XHRpZiAocG9zZS5hdHRhY2htZW50ID09PSBudWxsIHx8IHBvc2UuYXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgIT09IHRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xuXG5cdFx0bGV0IGluZGV4ID0gbW9kZUFuZEluZGV4ID4+IDQsIGNvdW50ID0gKHBvc2UuYXR0YWNobWVudCBhcyB1bmtub3duIGFzIEhhc1NlcXVlbmNlKS5zZXF1ZW5jZS5yZWdpb25zLmxlbmd0aDtcblx0XHRjb25zdCBtb2RlID0gU2VxdWVuY2VNb2RlVmFsdWVzW21vZGVBbmRJbmRleCAmIDB4Zl07XG5cdFx0aWYgKG1vZGUgIT09IFNlcXVlbmNlTW9kZS5ob2xkKSB7XG5cdFx0XHRpbmRleCArPSAoKCh0aW1lIC0gYmVmb3JlKSAvIGRlbGF5ICsgMC4wMDAwMSkgfCAwKTtcblx0XHRcdHN3aXRjaCAobW9kZSkge1xuXHRcdFx0XHRjYXNlIFNlcXVlbmNlTW9kZS5vbmNlOiBpbmRleCA9IE1hdGgubWluKGNvdW50IC0gMSwgaW5kZXgpOyBicmVhaztcblx0XHRcdFx0Y2FzZSBTZXF1ZW5jZU1vZGUubG9vcDogaW5kZXggJT0gY291bnQ7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNlcXVlbmNlTW9kZS5waW5ncG9uZzoge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSAoY291bnQgPDwgMSkgLSAyO1xuXHRcdFx0XHRcdGluZGV4ID0gbiA9PT0gMCA/IDAgOiBpbmRleCAlIG47XG5cdFx0XHRcdFx0aWYgKGluZGV4ID49IGNvdW50KSBpbmRleCA9IG4gLSBpbmRleDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFNlcXVlbmNlTW9kZS5vbmNlUmV2ZXJzZTogaW5kZXggPSBNYXRoLm1heChjb3VudCAtIDEgLSBpbmRleCwgMCk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNlcXVlbmNlTW9kZS5sb29wUmV2ZXJzZTogaW5kZXggPSBjb3VudCAtIDEgLSAoaW5kZXggJSBjb3VudCk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNlcXVlbmNlTW9kZS5waW5ncG9uZ1JldmVyc2U6IHtcblx0XHRcdFx0XHRjb25zdCBuID0gKGNvdW50IDw8IDEpIC0gMjtcblx0XHRcdFx0XHRpbmRleCA9IG4gPT09IDAgPyAwIDogKGluZGV4ICsgY291bnQgLSAxKSAlIG47XG5cdFx0XHRcdFx0aWYgKGluZGV4ID49IGNvdW50KSBpbmRleCA9IG4gLSBpbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRwb3NlLnNlcXVlbmNlSW5kZXggPSBpbmRleDtcblx0fVxufVxuXG4vKiogRmlyZXMgYW4ge0BsaW5rIEV2ZW50fSB3aGVuIHNwZWNpZmljIGFuaW1hdGlvbiB0aW1lcyBhcmUgcmVhY2hlZC4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudFRpbWVsaW5lIGV4dGVuZHMgVGltZWxpbmUge1xuXHRzdGF0aWMgcHJvcGVydHlJZHMgPSBbYCR7UHJvcGVydHkuZXZlbnR9YF07XG5cblx0LyoqIFRoZSBldmVudCBmb3IgZWFjaCBrZXkgZnJhbWUuICovXG5cdGV2ZW50czogQXJyYXk8RXZlbnQ+O1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCAuLi5FdmVudFRpbWVsaW5lLnByb3BlcnR5SWRzKTtcblx0XHR0aGlzLmV2ZW50cyA9IG5ldyBBcnJheTxFdmVudD4oZnJhbWVDb3VudCk7XG5cdFx0dGhpcy5pbnN0YW50ID0gdHJ1ZTtcblx0fVxuXG5cdGdldEZyYW1lQ291bnQgKCkge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSBpbiBzZWNvbmRzIGFuZCB0aGUgZXZlbnQgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWVdID0gZXZlbnQudGltZTtcblx0XHR0aGlzLmV2ZW50c1tmcmFtZV0gPSBldmVudDtcblx0fVxuXG5cdC8qKiBGaXJlcyBldmVudHMgZm9yIGZyYW1lcyA+IGBsYXN0VGltZWAgYW5kIDw9IGB0aW1lYC4gKi9cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiB8IG51bGwsIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlcixcblx0XHRmcm9tOiBNaXhGcm9tLCBhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGlmICghZmlyZWRFdmVudHMpIHJldHVybjtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGNvbnN0IGZyYW1lQ291bnQgPSB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cblx0XHRpZiAobGFzdFRpbWUgPiB0aW1lKSB7IC8vIEFwcGx5IGFmdGVyIGxhc3RUaW1lIGZvciBsb29wZWQgYW5pbWF0aW9ucy5cblx0XHRcdC8vIFJlZmVyZW5jZSBydW50aW1lIHBhc3NlcyBudWxsIGZvciBNaXhGcm9tIGhlcmUuIFRoaXMgdGltZWxpbmUgZG9lc24ndCB1c2UgaXQsIGJ1dCBUUyBrZWVwcyB0aGUgdHlwZSBub24tbnVsbC5cblx0XHRcdHRoaXMuYXBwbHkobnVsbCwgbGFzdFRpbWUsIE51bWJlci5NQVhfVkFMVUUsIGZpcmVkRXZlbnRzLCAwLCBmcm9tLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdGxhc3RUaW1lID0gLTE7XG5cdFx0fSBlbHNlIGlmIChsYXN0VGltZSA+PSBmcmFtZXNbZnJhbWVDb3VudCAtIDFdKSAvLyBMYXN0IHRpbWUgaXMgYWZ0ZXIgbGFzdCBmcmFtZS5cblx0XHRcdHJldHVybjtcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkgcmV0dXJuO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGlmIChsYXN0VGltZSA8IGZyYW1lc1swXSlcblx0XHRcdGkgPSAwO1xuXHRcdGVsc2Uge1xuXHRcdFx0aSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIGxhc3RUaW1lKSArIDE7XG5cdFx0XHRjb25zdCBmcmFtZVRpbWUgPSBmcmFtZXNbaV07XG5cdFx0XHR3aGlsZSAoaSA+IDApIHsgLy8gRmlyZSBtdWx0aXBsZSBldmVudHMgd2l0aCB0aGUgc2FtZSBmcmFtZS5cblx0XHRcdFx0aWYgKGZyYW1lc1tpIC0gMV0gIT09IGZyYW1lVGltZSkgYnJlYWs7XG5cdFx0XHRcdGktLTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yICg7IGkgPCBmcmFtZUNvdW50ICYmIHRpbWUgPj0gZnJhbWVzW2ldOyBpKyspXG5cdFx0XHRmaXJlZEV2ZW50cy5wdXNoKHRoaXMuZXZlbnRzW2ldKTtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB0aGUge0BsaW5rIFNrZWxldG9uLmdldERyYXdPcmRlcn0uICovXG5leHBvcnQgY2xhc3MgRHJhd09yZGVyVGltZWxpbmUgZXh0ZW5kcyBUaW1lbGluZSB7XG5cdHN0YXRpYyByZWFkb25seSBwcm9wZXJ0eUlEID0gYCR7UHJvcGVydHkuZHJhd09yZGVyfWA7XG5cdHN0YXRpYyBwcm9wZXJ0eUlkcyA9IFtEcmF3T3JkZXJUaW1lbGluZS5wcm9wZXJ0eUlEXTtcblxuXHQvKiogVGhlIGRyYXcgb3JkZXIgZm9yIGVhY2gga2V5IGZyYW1lLiBTZWUge0BsaW5rIHNldEZyYW1lfS4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBkcmF3T3JkZXJzOiBBcnJheTxBcnJheTxudW1iZXI+IHwgbnVsbD47XG5cblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIC4uLkRyYXdPcmRlclRpbWVsaW5lLnByb3BlcnR5SWRzKTtcblx0XHR0aGlzLmRyYXdPcmRlcnMgPSBuZXcgQXJyYXk8QXJyYXk8bnVtYmVyPiB8IG51bGw+KGZyYW1lQ291bnQpO1xuXHRcdHRoaXMuaW5zdGFudCA9IHRydWU7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5mcmFtZXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbmQgdGhlIGRyYXcgb3JkZXIgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyYW1lLlxuXHQgKiBAcGFyYW0gZHJhd09yZGVyIE9yZGVyZWQge0BsaW5rIFNrZWxldG9uLnNsb3RzfSBpbmRpY2VzLCBvciBudWxsIHRvIHVzZSBzZXR1cCBwb3NlXG5cdCAqICAgICAgICAgICBkcmF3IG9yZGVyLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBkcmF3T3JkZXI6IEFycmF5PG51bWJlcj4gfCBudWxsKSB7XG5cdFx0dGhpcy5mcmFtZXNbZnJhbWVdID0gdGltZTtcblx0XHR0aGlzLmRyYXdPcmRlcnNbZnJhbWVdID0gZHJhd09yZGVyO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBmaXJlZEV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLFxuXHRcdGZyb206IE1peEZyb20sIGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXHRcdGNvbnN0IHBvc2UgPSAoYXBwbGllZFBvc2UgPyBza2VsZXRvbi5kcmF3T3JkZXIuYXBwbGllZFBvc2UgOiBza2VsZXRvbi5kcmF3T3JkZXIucG9zZSk7XG5cdFx0Y29uc3Qgc2V0dXAgPSBza2VsZXRvbi5zbG90cztcblx0XHRpZiAob3V0IHx8IHRpbWUgPCB0aGlzLmZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb20gIT09IE1peEZyb20uY3VycmVudCkgVXRpbHMuYXJyYXlDb3B5KHNldHVwLCAwLCBwb3NlLCAwLCBza2VsZXRvbi5zbG90cy5sZW5ndGgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9yZGVyID0gdGhpcy5kcmF3T3JkZXJzW1RpbWVsaW5lLnNlYXJjaCh0aGlzLmZyYW1lcywgdGltZSldO1xuXHRcdGlmICghb3JkZXIpXG5cdFx0XHRVdGlscy5hcnJheUNvcHkoc2V0dXAsIDAsIHBvc2UsIDAsIHNrZWxldG9uLnNsb3RzLmxlbmd0aCk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IG9yZGVyLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdFx0cG9zZVtpXSA9IHNldHVwW29yZGVyW2ldXTtcblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMgYSBzdWJzZXQgb2YgdGhlIHtAbGluayBTa2VsZXRvbi5nZXREcmF3T3JkZXIgfCBkcmF3IG9yZGVyfS4gKi9cbmV4cG9ydCBjbGFzcyBEcmF3T3JkZXJGb2xkZXJUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIHtcblx0c3RhdGljIHJlYWRvbmx5IHByb3BlcnR5SUQgPSBgJHtQcm9wZXJ0eS5kcmF3T3JkZXJGb2xkZXJ9YDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RzOiBudW1iZXJbXTtcblx0cHJpdmF0ZSByZWFkb25seSBpbkZvbGRlcjogYm9vbGVhbltdO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRyYXdPcmRlcnM6IEFycmF5PEFycmF5PG51bWJlcj4gfCBudWxsPjtcblxuXHQvKiogQHBhcmFtIHNsb3RzIHtAbGluayBTa2VsZXRvbi5zbG90c30gaW5kaWNlcyBjb250cm9sbGVkIGJ5IHRoaXMgdGltZWxpbmUsIGluIHNldHVwIG9yZGVyLlxuXHQgKiBAcGFyYW0gc2xvdENvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cyBpbiB0aGUgc2tlbGV0b24uICovXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIHNsb3RzOiBudW1iZXJbXSwgc2xvdENvdW50OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCAuLi5EcmF3T3JkZXJGb2xkZXJUaW1lbGluZS5wcm9wZXJ0eUlkcyhzbG90cykpO1xuXHRcdHRoaXMuc2xvdHMgPSBzbG90cztcblx0XHR0aGlzLmRyYXdPcmRlcnMgPSBuZXcgQXJyYXkoZnJhbWVDb3VudCk7XG5cdFx0dGhpcy5pbkZvbGRlciA9IG5ldyBBcnJheShzbG90Q291bnQpO1xuXHRcdGZvciAoY29uc3QgaSBvZiBzbG90cylcblx0XHRcdHRoaXMuaW5Gb2xkZXJbaV0gPSB0cnVlO1xuXHRcdHRoaXMuaW5zdGFudCA9IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBwcm9wZXJ0eUlkcyAoc2xvdHM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG4gPSBzbG90cy5sZW5ndGg7XG5cdFx0Y29uc3QgaWRzID0gbmV3IEFycmF5KG4pO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKVxuXHRcdFx0aWRzW2ldID0gYCR7RHJhd09yZGVyRm9sZGVyVGltZWxpbmUucHJvcGVydHlJRH18JHtzbG90c1tpXX1gO1xuXHRcdHJldHVybiBpZHM7XG5cdH1cblxuXHRnZXRGcmFtZUNvdW50ICgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmZyYW1lcy5sZW5ndGg7XG5cdH1cblxuXHQvKiogVGhlIHtAbGluayBTa2VsZXRvbi5nZXRTbG90c30gaW5kaWNlcyB0aGF0IHRoaXMgdGltZWxpbmUgYWZmZWN0cywgaW4gc2V0dXAgb3JkZXIuICovXG5cdGdldFNsb3RzICgpOiBudW1iZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuc2xvdHM7XG5cdH1cblxuXHQvKiogVGhlIGRyYXcgb3JkZXIgZm9yIGVhY2ggZnJhbWUuIFNlZSB7QGxpbmsgc2V0RnJhbWV9LiAqL1xuXHRnZXREcmF3T3JkZXJzICgpOiBBcnJheTxBcnJheTxudW1iZXI+IHwgbnVsbD4ge1xuXHRcdHJldHVybiB0aGlzLmRyYXdPcmRlcnM7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdGltZSBhbmQgZHJhdyBvcmRlciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuXG5cdCAqIEBwYXJhbSBkcmF3T3JkZXIgT3JkZXJlZCB7QGxpbmsgZ2V0U2xvdHN9IGluZGljZXMsIG9yIG51bGwgdG8gdXNlIHNldHVwIHBvc2Ugb3JkZXIuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGRyYXdPcmRlcjogQXJyYXk8bnVtYmVyPiB8IG51bGwpOiB2b2lkIHtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZHJhd09yZGVyc1tmcmFtZV0gPSBkcmF3T3JkZXI7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHBvc2UgPSAoYXBwbGllZFBvc2UgPyBza2VsZXRvbi5kcmF3T3JkZXIuYXBwbGllZFBvc2UgOiBza2VsZXRvbi5kcmF3T3JkZXIucG9zZSk7XG5cdFx0Y29uc3Qgc2V0dXAgPSBza2VsZXRvbi5zbG90cztcblx0XHRpZiAob3V0IHx8IHRpbWUgPCB0aGlzLmZyYW1lc1swXSkge1xuXHRcdFx0aWYgKGZyb20gIT09IE1peEZyb20uY3VycmVudCkgdGhpcy5zZXR1cChwb3NlLCBzZXR1cCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9yZGVyID0gdGhpcy5kcmF3T3JkZXJzW1RpbWVsaW5lLnNlYXJjaCh0aGlzLmZyYW1lcywgdGltZSldO1xuXHRcdFx0aWYgKCFvcmRlcilcblx0XHRcdFx0dGhpcy5zZXR1cChwb3NlLCBzZXR1cCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgaW5Gb2xkZXIgPSB0aGlzLmluRm9sZGVyO1xuXHRcdFx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBmb3VuZCA9IDAsIGRvbmUgPSBzbG90cy5sZW5ndGg7IDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGluRm9sZGVyW3Bvc2VbaV0uZGF0YS5pbmRleF0pIHtcblx0XHRcdFx0XHRcdHBvc2VbaV0gPSBzZXR1cFtzbG90c1tvcmRlcltmb3VuZF1dXTtcblx0XHRcdFx0XHRcdGlmICgrK2ZvdW5kID09PSBkb25lKSBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHNldHVwIChwb3NlOiBTbG90W10sIHNldHVwOiBTbG90W10pOiB2b2lkIHtcblx0XHRjb25zdCB7IGluRm9sZGVyLCBzbG90cyB9ID0gdGhpcztcblx0XHRmb3IgKGxldCBpID0gMCwgZm91bmQgPSAwLCBkb25lID0gc2xvdHMubGVuZ3RoOyA7IGkrKykge1xuXHRcdFx0aWYgKGluRm9sZGVyW3Bvc2VbaV0uZGF0YS5pbmRleF0pIHtcblx0XHRcdFx0cG9zZVtpXSA9IHNldHVwW3Nsb3RzW2ZvdW5kXV07XG5cdFx0XHRcdGlmICgrK2ZvdW5kID09PSBkb25lKSBicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zdHJhaW50VGltZWxpbmUge1xuXHQvKiogVGhlIGluZGV4IG9mIHRoZSBjb25zdHJhaW50IGluIHtAbGluayBTa2VsZXRvbi5jb25zdHJhaW50c30gdGhhdCB3aWxsIGJlIGNoYW5nZWQgd2hlbiB0aGlzIHRpbWVsaW5lIGlzIGFwcGxpZWQsIG9yIC0xIGlmXG5cdCAqIGEgc3BlY2lmaWMgY29uc3RyYWludCB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAqL1xuXHRyZWFkb25seSBjb25zdHJhaW50SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RyYWludFRpbWVsaW5lIChvYmo6IFRpbWVsaW5lICYgUGFydGlhbDxDb25zdHJhaW50VGltZWxpbmU+KTogb2JqIGlzIFRpbWVsaW5lICYgQ29uc3RyYWludFRpbWVsaW5lIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLmNvbnN0cmFpbnRJbmRleCA9PT0gJ251bWJlcic7XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBJa0NvbnN0cmFpbnRQb3NlLm1peCl9LCB7QGxpbmsgSWtDb25zdHJhaW50UG9zZS5zb2Z0bmVzc30sXG4gKiB7QGxpbmsgSWtDb25zdHJhaW50UG9zZS5iZW5kRGlyZWN0aW9ufSwge0BsaW5rIElrQ29uc3RyYWludFBvc2Uuc3RyZXRjaH0sIGFuZFxuICoge0BsaW5rIElrQ29uc3RyYWludFBvc2UuY29tcHJlc3N9LiAqL1xuZXhwb3J0IGNsYXNzIElrQ29uc3RyYWludFRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBgJHtQcm9wZXJ0eS5pa0NvbnN0cmFpbnR9fCR7Y29uc3RyYWludEluZGV4fWApO1xuXHRcdHRoaXMuY29uc3RyYWludEluZGV4ID0gY29uc3RyYWludEluZGV4O1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gNi8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUsIG1peCwgc29mdG5lc3MsIGJlbmQgZGlyZWN0aW9uLCBjb21wcmVzcywgYW5kIHN0cmV0Y2ggZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUuXG5cdCAqIEBwYXJhbSBmcmFtZSBCZXR3ZWVuIDAgYW5kIGBmcmFtZUNvdW50YCwgaW5jbHVzaXZlLlxuXHQgKiBAcGFyYW0gdGltZSBUaGUgZnJhbWUgdGltZSBpbiBzZWNvbmRzLlxuXHQgKiBAcGFyYW0gYmVuZERpcmVjdGlvbiAxIG9yIC0xLiAqL1xuXHRzZXRGcmFtZSAoZnJhbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBtaXg6IG51bWJlciwgc29mdG5lc3M6IG51bWJlciwgYmVuZERpcmVjdGlvbjogbnVtYmVyLCBjb21wcmVzczogYm9vbGVhbiwgc3RyZXRjaDogYm9vbGVhbikge1xuXHRcdGZyYW1lICo9IDYvKkVOVFJJRVMqLztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMS8qTUlYKi9dID0gbWl4O1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lICsgMi8qU09GVE5FU1MqL10gPSBzb2Z0bmVzcztcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDMvKkJFTkRfRElSRUNUSU9OKi9dID0gYmVuZERpcmVjdGlvbjtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDQvKkNPTVBSRVNTKi9dID0gY29tcHJlc3MgPyAxIDogMDtcblx0XHR0aGlzLmZyYW1lc1tmcmFtZSArIDUvKlNUUkVUQ0gqL10gPSBzdHJldGNoID8gMSA6IDA7XG5cdH1cblxuXHRhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBsYXN0VGltZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIGZpcmVkRXZlbnRzOiBBcnJheTxFdmVudD4sIGFscGhhOiBudW1iZXIsIGZyb206IE1peEZyb20sXG5cdFx0YWRkOiBib29sZWFuLCBvdXQ6IGJvb2xlYW4sIGFwcGxpZWRQb3NlOiBib29sZWFuKSB7XG5cblx0XHRjb25zdCBjb25zdHJhaW50ID0gc2tlbGV0b24uY29uc3RyYWludHNbdGhpcy5jb25zdHJhaW50SW5kZXhdIGFzIElrQ29uc3RyYWludDtcblx0XHRpZiAoIWNvbnN0cmFpbnQuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRjb25zdCBzZXR1cCA9IGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOiB7XG5cdFx0XHRcdFx0cG9zZS5taXggPSBzZXR1cC5taXg7XG5cdFx0XHRcdFx0cG9zZS5zb2Z0bmVzcyA9IHNldHVwLnNvZnRuZXNzO1xuXHRcdFx0XHRcdHBvc2UuYmVuZERpcmVjdGlvbiA9IHNldHVwLmJlbmREaXJlY3Rpb247XG5cdFx0XHRcdFx0cG9zZS5jb21wcmVzcyA9IHNldHVwLmNvbXByZXNzO1xuXHRcdFx0XHRcdHBvc2Uuc3RyZXRjaCA9IHNldHVwLnN0cmV0Y2g7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBNaXhGcm9tLmZpcnN0OiB7XG5cdFx0XHRcdFx0cG9zZS5taXggKz0gKHNldHVwLm1peCAtIHBvc2UubWl4KSAqIGFscGhhO1xuXHRcdFx0XHRcdHBvc2Uuc29mdG5lc3MgKz0gKHNldHVwLnNvZnRuZXNzIC0gcG9zZS5zb2Z0bmVzcykgKiBhbHBoYTtcblx0XHRcdFx0XHRwb3NlLmJlbmREaXJlY3Rpb24gPSBzZXR1cC5iZW5kRGlyZWN0aW9uO1xuXHRcdFx0XHRcdHBvc2UuY29tcHJlc3MgPSBzZXR1cC5jb21wcmVzcztcblx0XHRcdFx0XHRwb3NlLnN0cmV0Y2ggPSBzZXR1cC5zdHJldGNoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IG1peCA9IDAsIHNvZnRuZXNzID0gMDtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgNi8qRU5UUklFUyovKVxuXHRcdGNvbnN0IGN1cnZlVHlwZSA9IHRoaXMuY3VydmVzW2kgLyA2LypFTlRSSUVTKi9dO1xuXHRcdHN3aXRjaCAoY3VydmVUeXBlKSB7XG5cdFx0XHRjYXNlIDAvKkxJTkVBUiovOiB7XG5cdFx0XHRcdGNvbnN0IGJlZm9yZSA9IGZyYW1lc1tpXTtcblx0XHRcdFx0bWl4ID0gZnJhbWVzW2kgKyAxLypNSVgqL107XG5cdFx0XHRcdHNvZnRuZXNzID0gZnJhbWVzW2kgKyAyLypTT0ZUTkVTUyovXTtcblx0XHRcdFx0Y29uc3QgdCA9ICh0aW1lIC0gYmVmb3JlKSAvIChmcmFtZXNbaSArIDYvKkVOVFJJRVMqL10gLSBiZWZvcmUpO1xuXHRcdFx0XHRtaXggKz0gKGZyYW1lc1tpICsgNi8qRU5UUklFUyovICsgMS8qTUlYKi9dIC0gbWl4KSAqIHQ7XG5cdFx0XHRcdHNvZnRuZXNzICs9IChmcmFtZXNbaSArIDYvKkVOVFJJRVMqLyArIDIvKlNPRlRORVNTKi9dIC0gc29mdG5lc3MpICogdDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIDEvKlNURVBQRUQqLzpcblx0XHRcdFx0bWl4ID0gZnJhbWVzW2kgKyAxLypNSVgqL107XG5cdFx0XHRcdHNvZnRuZXNzID0gZnJhbWVzW2kgKyAyLypTT0ZUTkVTUyovXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtaXggPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDEvKk1JWCovLCBjdXJ2ZVR5cGUgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHNvZnRuZXNzID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCAyLypTT0ZUTkVTUyovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHR9XG5cblx0XHRjb25zdCBiYXNlID0gZnJvbSA9PT0gTWl4RnJvbS5zZXR1cCA/IGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UgOiBwb3NlO1xuXHRcdHBvc2UubWl4ID0gYmFzZS5taXggKyAobWl4IC0gYmFzZS5taXgpICogYWxwaGE7XG5cdFx0cG9zZS5zb2Z0bmVzcyA9IGJhc2Uuc29mdG5lc3MgKyAoc29mdG5lc3MgLSBiYXNlLnNvZnRuZXNzKSAqIGFscGhhO1xuXHRcdGlmIChvdXQpIHtcblx0XHRcdGlmIChmcm9tID09PSBNaXhGcm9tLnNldHVwKSB7XG5cdFx0XHRcdHBvc2UuYmVuZERpcmVjdGlvbiA9IGJhc2UuYmVuZERpcmVjdGlvbjtcblx0XHRcdFx0cG9zZS5jb21wcmVzcyA9IGJhc2UuY29tcHJlc3M7XG5cdFx0XHRcdHBvc2Uuc3RyZXRjaCA9IGJhc2Uuc3RyZXRjaDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zZS5iZW5kRGlyZWN0aW9uID0gZnJhbWVzW2kgKyAzLypCRU5EX0RJUkVDVElPTiovXTtcblx0XHRcdHBvc2UuY29tcHJlc3MgPSBmcmFtZXNbaSArIDQvKkNPTVBSRVNTKi9dICE9PSAwO1xuXHRcdFx0cG9zZS5zdHJldGNoID0gZnJhbWVzW2kgKyA1LypTVFJFVENIKi9dICE9PSAwO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgVHJhbnNmb3JtQ29uc3RyYWludFBvc2UubWl4Um90YXRlfSwge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFh9LFxuICoge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFl9LCB7QGxpbmsgVHJhbnNmb3JtQ29uc3RyYWludFBvc2UubWl4U2NhbGVYfSxcbiAqIHtAbGluayBUcmFuc2Zvcm1Db25zdHJhaW50UG9zZS5taXhTY2FsZVl9LCBhbmQge0BsaW5rIFRyYW5zZm9ybUNvbnN0cmFpbnRQb3NlLm1peFNoZWFyWX0uICovXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtQ29uc3RyYWludFRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdC8qKiBUaGUgaW5kZXggb2YgdGhlIHRyYW5zZm9ybSBjb25zdHJhaW50IHNsb3QgaW4ge0BsaW5rIFNrZWxldG9uLnRyYW5zZm9ybUNvbnN0cmFpbnRzfSB0aGF0IHdpbGwgYmUgY2hhbmdlZC4gKi9cblx0Y29uc3RyYWludEluZGV4OiBudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LnRyYW5zZm9ybUNvbnN0cmFpbnR9fCR7Y29uc3RyYWludEluZGV4fWApO1xuXHRcdHRoaXMuY29uc3RyYWludEluZGV4ID0gY29uc3RyYWludEluZGV4O1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVFbnRyaWVzICgpIHtcblx0XHRyZXR1cm4gNy8qRU5UUklFUyovO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHRpbWUsIHJvdGF0ZSBtaXgsIHRyYW5zbGF0ZSBtaXgsIHNjYWxlIG1peCwgYW5kIHNoZWFyIG1peCBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1peFJvdGF0ZTogbnVtYmVyLCBtaXhYOiBudW1iZXIsIG1peFk6IG51bWJlciwgbWl4U2NhbGVYOiBudW1iZXIsIG1peFNjYWxlWTogbnVtYmVyLFxuXHRcdG1peFNoZWFyWTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5mcmFtZXM7XG5cdFx0ZnJhbWUgKj0gNy8qRU5UUklFUyovO1xuXHRcdGZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdGZyYW1lc1tmcmFtZSArIDEvKlJPVEFURSovXSA9IG1peFJvdGF0ZTtcblx0XHRmcmFtZXNbZnJhbWUgKyAyLypYKi9dID0gbWl4WDtcblx0XHRmcmFtZXNbZnJhbWUgKyAzLypZKi9dID0gbWl4WTtcblx0XHRmcmFtZXNbZnJhbWUgKyA0LypTQ0FMRVgqL10gPSBtaXhTY2FsZVg7XG5cdFx0ZnJhbWVzW2ZyYW1lICsgNS8qU0NBTEVZKi9dID0gbWl4U2NhbGVZO1xuXHRcdGZyYW1lc1tmcmFtZSArIDYvKlNIRUFSWSovXSA9IG1peFNoZWFyWTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgVHJhbnNmb3JtQ29uc3RyYWludDtcblx0XHRpZiAoIWNvbnN0cmFpbnQuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGlmICh0aW1lIDwgZnJhbWVzWzBdKSB7XG5cdFx0XHRjb25zdCBzZXR1cCA9IGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2U7XG5cdFx0XHRzd2l0Y2ggKGZyb20pIHtcblx0XHRcdFx0Y2FzZSBNaXhGcm9tLnNldHVwOiB7XG5cdFx0XHRcdFx0cG9zZS5taXhSb3RhdGUgPSBzZXR1cC5taXhSb3RhdGU7XG5cdFx0XHRcdFx0cG9zZS5taXhYID0gc2V0dXAubWl4WDtcblx0XHRcdFx0XHRwb3NlLm1peFkgPSBzZXR1cC5taXhZO1xuXHRcdFx0XHRcdHBvc2UubWl4U2NhbGVYID0gc2V0dXAubWl4U2NhbGVYO1xuXHRcdFx0XHRcdHBvc2UubWl4U2NhbGVZID0gc2V0dXAubWl4U2NhbGVZO1xuXHRcdFx0XHRcdHBvc2UubWl4U2hlYXJZID0gc2V0dXAubWl4U2hlYXJZO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5maXJzdDoge1xuXHRcdFx0XHRcdHBvc2UubWl4Um90YXRlICs9IChzZXR1cC5taXhSb3RhdGUgLSBwb3NlLm1peFJvdGF0ZSkgKiBhbHBoYTtcblx0XHRcdFx0XHRwb3NlLm1peFggKz0gKHNldHVwLm1peFggLSBwb3NlLm1peFgpICogYWxwaGE7XG5cdFx0XHRcdFx0cG9zZS5taXhZICs9IChzZXR1cC5taXhZIC0gcG9zZS5taXhZKSAqIGFscGhhO1xuXHRcdFx0XHRcdHBvc2UubWl4U2NhbGVYICs9IChzZXR1cC5taXhTY2FsZVggLSBwb3NlLm1peFNjYWxlWCkgKiBhbHBoYTtcblx0XHRcdFx0XHRwb3NlLm1peFNjYWxlWSArPSAoc2V0dXAubWl4U2NhbGVZIC0gcG9zZS5taXhTY2FsZVkpICogYWxwaGE7XG5cdFx0XHRcdFx0cG9zZS5taXhTaGVhclkgKz0gKHNldHVwLm1peFNoZWFyWSAtIHBvc2UubWl4U2hlYXJZKSAqIGFscGhhO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHJvdGF0ZTogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgc2NhbGVYOiBudW1iZXIsIHNjYWxlWTogbnVtYmVyLCBzaGVhclk6IG51bWJlcjtcblx0XHRjb25zdCBpID0gVGltZWxpbmUuc2VhcmNoKGZyYW1lcywgdGltZSwgNy8qRU5UUklFUyovKTtcblx0XHRjb25zdCBjdXJ2ZVR5cGUgPSB0aGlzLmN1cnZlc1tpIC8gNy8qRU5UUklFUyovXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHJvdGF0ZSA9IGZyYW1lc1tpICsgMS8qUk9UQVRFKi9dO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAyLypYKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAzLypZKi9dO1xuXHRcdFx0XHRzY2FsZVggPSBmcmFtZXNbaSArIDQvKlNDQUxFWCovXTtcblx0XHRcdFx0c2NhbGVZID0gZnJhbWVzW2kgKyA1LypTQ0FMRVkqL107XG5cdFx0XHRcdHNoZWFyWSA9IGZyYW1lc1tpICsgNi8qU0hFQVJZKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHJvdGF0ZSArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyAxLypST1RBVEUqL10gLSByb3RhdGUpICogdDtcblx0XHRcdFx0eCArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyAyLypYKi9dIC0geCkgKiB0O1xuXHRcdFx0XHR5ICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDMvKlkqL10gLSB5KSAqIHQ7XG5cdFx0XHRcdHNjYWxlWCArPSAoZnJhbWVzW2kgKyA3LypFTlRSSUVTKi8gKyA0LypTQ0FMRVgqL10gLSBzY2FsZVgpICogdDtcblx0XHRcdFx0c2NhbGVZICs9IChmcmFtZXNbaSArIDcvKkVOVFJJRVMqLyArIDUvKlNDQUxFWSovXSAtIHNjYWxlWSkgKiB0O1xuXHRcdFx0XHRzaGVhclkgKz0gKGZyYW1lc1tpICsgNy8qRU5UUklFUyovICsgNi8qU0hFQVJZKi9dIC0gc2hlYXJZKSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHJvdGF0ZSA9IGZyYW1lc1tpICsgMS8qUk9UQVRFKi9dO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAyLypYKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAzLypZKi9dO1xuXHRcdFx0XHRzY2FsZVggPSBmcmFtZXNbaSArIDQvKlNDQUxFWCovXTtcblx0XHRcdFx0c2NhbGVZID0gZnJhbWVzW2kgKyA1LypTQ0FMRVkqL107XG5cdFx0XHRcdHNoZWFyWSA9IGZyYW1lc1tpICsgNi8qU0hFQVJZKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJvdGF0ZSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qUk9UQVRFKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qWCovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMy8qWSovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDIgLSAyLypCRVpJRVIqLyk7XG5cdFx0XHRcdHNjYWxlWCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgNC8qU0NBTEVYKi8sIGN1cnZlVHlwZSArIDE4LypCRVpJRVJfU0laRSovICogMyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0c2NhbGVZID0gdGhpcy5nZXRCZXppZXJWYWx1ZSh0aW1lLCBpLCA1LypTQ0FMRVkqLywgY3VydmVUeXBlICsgMTgvKkJFWklFUl9TSVpFKi8gKiA0IC0gMi8qQkVaSUVSKi8pO1xuXHRcdFx0XHRzaGVhclkgPSB0aGlzLmdldEJlemllclZhbHVlKHRpbWUsIGksIDYvKlNIRUFSWSovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDUgLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmFzZSA9IGZyb20gPT09IE1peEZyb20uc2V0dXAgPyBjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlIDogcG9zZTtcblx0XHRpZiAoYWRkKSB7XG5cdFx0XHRwb3NlLm1peFJvdGF0ZSA9IGJhc2UubWl4Um90YXRlICsgcm90YXRlICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFggPSBiYXNlLm1peFggKyB4ICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFkgPSBiYXNlLm1peFkgKyB5ICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFNjYWxlWCA9IGJhc2UubWl4U2NhbGVYICsgc2NhbGVYICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFNjYWxlWSA9IGJhc2UubWl4U2NhbGVZICsgc2NhbGVZICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFNoZWFyWSA9IGJhc2UubWl4U2hlYXJZICsgc2hlYXJZICogYWxwaGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2UubWl4Um90YXRlID0gYmFzZS5taXhSb3RhdGUgKyAocm90YXRlIC0gYmFzZS5taXhSb3RhdGUpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFggPSBiYXNlLm1peFggKyAoeCAtIGJhc2UubWl4WCkgKiBhbHBoYTtcblx0XHRcdHBvc2UubWl4WSA9IGJhc2UubWl4WSArICh5IC0gYmFzZS5taXhZKSAqIGFscGhhO1xuXHRcdFx0cG9zZS5taXhTY2FsZVggPSBiYXNlLm1peFNjYWxlWCArIChzY2FsZVggLSBiYXNlLm1peFNjYWxlWCkgKiBhbHBoYTtcblx0XHRcdHBvc2UubWl4U2NhbGVZID0gYmFzZS5taXhTY2FsZVkgKyAoc2NhbGVZIC0gYmFzZS5taXhTY2FsZVkpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFNoZWFyWSA9IGJhc2UubWl4U2hlYXJZICsgKHNoZWFyWSAtIGJhc2UubWl4U2hlYXJZKSAqIGFscGhhO1xuXHRcdH1cblx0fVxufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIHRpbWVsaW5lcyB0aGF0IGNoYW5nZSAxIGNvbnN0cmFpbnQgcHJvcGVydHkgd2l0aCBhIGN1cnZlLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnN0cmFpbnRUaW1lbGluZTEgZXh0ZW5kcyBDdXJ2ZVRpbWVsaW5lMSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyLCBwcm9wZXJ0eTogUHJvcGVydHkpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgYCR7cHJvcGVydHl9fCR7Y29uc3RyYWludEluZGV4fWApO1xuXHRcdHRoaXMuY29uc3RyYWludEluZGV4ID0gY29uc3RyYWludEluZGV4O1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQYXRoQ29uc3RyYWludFBvc2UucG9zaXRpb259LiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhDb25zdHJhaW50UG9zaXRpb25UaW1lbGluZSBleHRlbmRzIENvbnN0cmFpbnRUaW1lbGluZTEge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBhdGhDb25zdHJhaW50UG9zaXRpb24pO1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBmaXJlZEV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBQYXRoQ29uc3RyYWludDtcblx0XHRpZiAoY29uc3RyYWludC5hY3RpdmUpIHtcblx0XHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGNvbnN0cmFpbnQuYXBwbGllZFBvc2UgOiBjb25zdHJhaW50LnBvc2U7XG5cdFx0XHRwb3NlLnBvc2l0aW9uID0gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tLCBhZGQsIHBvc2UucG9zaXRpb24sIGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UucG9zaXRpb24pO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGF0aENvbnN0cmFpbnRQb3NlLnNwYWNpbmd9LiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhDb25zdHJhaW50U3BhY2luZ1RpbWVsaW5lIGV4dGVuZHMgQ29uc3RyYWludFRpbWVsaW5lMSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGF0aENvbnN0cmFpbnRTcGFjaW5nKTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgUGF0aENvbnN0cmFpbnQ7XG5cdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlKSB7XG5cdFx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXHRcdFx0cG9zZS5zcGFjaW5nID0gdGhpcy5nZXRBYnNvbHV0ZVZhbHVlKHRpbWUsIGFscGhhLCBmcm9tLCBmYWxzZSwgcG9zZS5zcGFjaW5nLFxuXHRcdFx0XHRjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlLnNwYWNpbmcpO1xuXHRcdH1cblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGF0aENvbnN0cmFpbnQubWl4Um90YXRlfSwge0BsaW5rIFBhdGhDb25zdHJhaW50Lm1peFh9LCBhbmRcbiAqIHtAbGluayBQYXRoQ29uc3RyYWludC5taXhZfS4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoQ29uc3RyYWludE1peFRpbWVsaW5lIGV4dGVuZHMgQ3VydmVUaW1lbGluZSBpbXBsZW1lbnRzIENvbnN0cmFpbnRUaW1lbGluZSB7XG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGAke1Byb3BlcnR5LnBhdGhDb25zdHJhaW50TWl4fXwke2NvbnN0cmFpbnRJbmRleH1gKTtcblx0XHR0aGlzLmNvbnN0cmFpbnRJbmRleCA9IGNvbnN0cmFpbnRJbmRleDtcblx0fVxuXG5cdGdldEZyYW1lRW50cmllcyAoKSB7XG5cdFx0cmV0dXJuIDQvKkVOVFJJRVMqLztcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGFuZCBjb2xvciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZS5cblx0ICogQHBhcmFtIGZyYW1lIEJldHdlZW4gMCBhbmQgYGZyYW1lQ291bnRgLCBpbmNsdXNpdmUuXG5cdCAqIEBwYXJhbSB0aW1lIFRoZSBmcmFtZSB0aW1lIGluIHNlY29uZHMuICovXG5cdHNldEZyYW1lIChmcmFtZTogbnVtYmVyLCB0aW1lOiBudW1iZXIsIG1peFJvdGF0ZTogbnVtYmVyLCBtaXhYOiBudW1iZXIsIG1peFk6IG51bWJlcikge1xuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXHRcdGZyYW1lIDw8PSAyO1xuXHRcdGZyYW1lc1tmcmFtZV0gPSB0aW1lO1xuXHRcdGZyYW1lc1tmcmFtZSArIDEvKlJPVEFURSovXSA9IG1peFJvdGF0ZTtcblx0XHRmcmFtZXNbZnJhbWUgKyAyLypYKi9dID0gbWl4WDtcblx0XHRmcmFtZXNbZnJhbWUgKyAzLypZKi9dID0gbWl4WTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgUGF0aENvbnN0cmFpbnQ7XG5cdFx0aWYgKCFjb25zdHJhaW50LmFjdGl2ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHBvc2UgPSBhcHBsaWVkUG9zZSA/IGNvbnN0cmFpbnQuYXBwbGllZFBvc2UgOiBjb25zdHJhaW50LnBvc2U7XG5cblx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLmZyYW1lcztcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkge1xuXHRcdFx0Y29uc3Qgc2V0dXAgPSBjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlO1xuXHRcdFx0c3dpdGNoIChmcm9tKSB7XG5cdFx0XHRcdGNhc2UgTWl4RnJvbS5zZXR1cDoge1xuXHRcdFx0XHRcdHBvc2UubWl4Um90YXRlID0gc2V0dXAubWl4Um90YXRlO1xuXHRcdFx0XHRcdHBvc2UubWl4WCA9IHNldHVwLm1peFg7XG5cdFx0XHRcdFx0cG9zZS5taXhZID0gc2V0dXAubWl4WTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIE1peEZyb20uZmlyc3Q6IHtcblx0XHRcdFx0XHRwb3NlLm1peFJvdGF0ZSArPSAoc2V0dXAubWl4Um90YXRlIC0gcG9zZS5taXhSb3RhdGUpICogYWxwaGE7XG5cdFx0XHRcdFx0cG9zZS5taXhYICs9IChzZXR1cC5taXhYIC0gcG9zZS5taXhYKSAqIGFscGhhO1xuXHRcdFx0XHRcdHBvc2UubWl4WSArPSAoc2V0dXAubWl4WSAtIHBvc2UubWl4WSkgKiBhbHBoYTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByb3RhdGU6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXI7XG5cdFx0Y29uc3QgaSA9IFRpbWVsaW5lLnNlYXJjaChmcmFtZXMsIHRpbWUsIDQvKkVOVFJJRVMqLyk7XG5cdFx0Y29uc3QgY3VydmVUeXBlID0gdGhpcy5jdXJ2ZXNbaSA+PiAyXTtcblx0XHRzd2l0Y2ggKGN1cnZlVHlwZSkge1xuXHRcdFx0Y2FzZSAwLypMSU5FQVIqLzoge1xuXHRcdFx0XHRjb25zdCBiZWZvcmUgPSBmcmFtZXNbaV07XG5cdFx0XHRcdHJvdGF0ZSA9IGZyYW1lc1tpICsgMS8qUk9UQVRFKi9dO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAyLypYKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAzLypZKi9dO1xuXHRcdFx0XHRjb25zdCB0ID0gKHRpbWUgLSBiZWZvcmUpIC8gKGZyYW1lc1tpICsgNC8qRU5UUklFUyovXSAtIGJlZm9yZSk7XG5cdFx0XHRcdHJvdGF0ZSArPSAoZnJhbWVzW2kgKyA0LypFTlRSSUVTKi8gKyAxLypST1RBVEUqL10gLSByb3RhdGUpICogdDtcblx0XHRcdFx0eCArPSAoZnJhbWVzW2kgKyA0LypFTlRSSUVTKi8gKyAyLypYKi9dIC0geCkgKiB0O1xuXHRcdFx0XHR5ICs9IChmcmFtZXNbaSArIDQvKkVOVFJJRVMqLyArIDMvKlkqL10gLSB5KSAqIHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAxLypTVEVQUEVEKi86XG5cdFx0XHRcdHJvdGF0ZSA9IGZyYW1lc1tpICsgMS8qUk9UQVRFKi9dO1xuXHRcdFx0XHR4ID0gZnJhbWVzW2kgKyAyLypYKi9dO1xuXHRcdFx0XHR5ID0gZnJhbWVzW2kgKyAzLypZKi9dO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJvdGF0ZSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMS8qUk9UQVRFKi8sIGN1cnZlVHlwZSAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eCA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMi8qWCovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAtIDIvKkJFWklFUiovKTtcblx0XHRcdFx0eSA9IHRoaXMuZ2V0QmV6aWVyVmFsdWUodGltZSwgaSwgMy8qWSovLCBjdXJ2ZVR5cGUgKyAxOC8qQkVaSUVSX1NJWkUqLyAqIDIgLSAyLypCRVpJRVIqLyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmFzZSA9IGZyb20gPT09IE1peEZyb20uc2V0dXAgPyBjb25zdHJhaW50LmRhdGEuc2V0dXBQb3NlIDogcG9zZTtcblx0XHRpZiAoYWRkKSB7XG5cdFx0XHRwb3NlLm1peFJvdGF0ZSA9IGJhc2UubWl4Um90YXRlICsgcm90YXRlICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFggPSBiYXNlLm1peFggKyB4ICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFkgPSBiYXNlLm1peFkgKyB5ICogYWxwaGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2UubWl4Um90YXRlID0gYmFzZS5taXhSb3RhdGUgKyAocm90YXRlIC0gYmFzZS5taXhSb3RhdGUpICogYWxwaGE7XG5cdFx0XHRwb3NlLm1peFggPSBiYXNlLm1peFggKyAoeCAtIGJhc2UubWl4WCkgKiBhbHBoYTtcblx0XHRcdHBvc2UubWl4WSA9IGJhc2UubWl4WSArICh5IC0gYmFzZS5taXhZKSAqIGFscGhhO1xuXHRcdH1cblx0fVxufVxuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIG1vc3Qge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50fSB0aW1lbGluZXMuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSBleHRlbmRzIENvbnN0cmFpbnRUaW1lbGluZTEge1xuXHQvKiogQHBhcmFtIGNvbnN0cmFpbnRJbmRleCAtMSBmb3IgYWxsIHBoeXNpY3MgY29uc3RyYWludHMgaW4gdGhlIHNrZWxldG9uLiAqL1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlciwgcHJvcGVydHk6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIHByb3BlcnR5KTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGlmIChhZGQgJiYgIXRoaXMuYWRkaXRpdmUpIGFkZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbnN0cmFpbnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGltZSA+PSB0aGlzLmZyYW1lc1swXSA/IHRoaXMuZ2V0Q3VydmVWYWx1ZSh0aW1lKSA6IDA7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50cyA9IHNrZWxldG9uLnBoeXNpY3M7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnN0cmFpbnQgb2YgY29uc3RyYWludHMpIHtcblx0XHRcdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlICYmIHRoaXMuZ2xvYmFsKGNvbnN0cmFpbnQuZGF0YSkpIHtcblx0XHRcdFx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXHRcdFx0XHRcdHRoaXMuc2V0KHBvc2UsIHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbSwgYWRkLCB0aGlzLmdldChwb3NlKSwgdGhpcy5nZXQoY29uc3RyYWludC5kYXRhLnNldHVwUG9zZSksIHZhbHVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBQaHlzaWNzQ29uc3RyYWludDtcblx0XHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkge1xuXHRcdFx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXHRcdFx0XHR0aGlzLnNldChwb3NlLCB0aGlzLmdldEFic29sdXRlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgdGhpcy5nZXQocG9zZSksIHRoaXMuZ2V0KGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWJzdHJhY3QgZ2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UpOiBudW1iZXI7XG5cblx0YWJzdHJhY3Qgc2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkO1xuXG5cdGFic3RyYWN0IGdsb2JhbCAoY29uc3RyYWludDogUGh5c2ljc0NvbnN0cmFpbnREYXRhKTogYm9vbGVhbjtcbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS5pbmVydGlhfS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludEluZXJ0aWFUaW1lbGluZSBleHRlbmRzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50SW5lcnRpYSk7XG5cdH1cblxuXHRnZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBvc2UuaW5lcnRpYTtcblx0fVxuXG5cdHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0cG9zZS5pbmVydGlhID0gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50LmluZXJ0aWFHbG9iYWw7XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS5zdHJlbmd0aH0uICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnRTdHJlbmd0aFRpbWVsaW5lIGV4dGVuZHMgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGh5c2ljc0NvbnN0cmFpbnRTdHJlbmd0aCk7XG5cdH1cblx0Z2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UpOiBudW1iZXIge1xuXHRcdHJldHVybiBwb3NlLnN0cmVuZ3RoO1xuXHR9XG5cblx0c2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRwb3NlLnN0cmVuZ3RoID0gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50LnN0cmVuZ3RoR2xvYmFsO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2UuZGFtcGluZ30uICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnREYW1waW5nVGltZWxpbmUgZXh0ZW5kcyBQaHlzaWNzQ29uc3RyYWludFRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5waHlzaWNzQ29uc3RyYWludERhbXBpbmcpO1xuXHR9XG5cblx0Z2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UpOiBudW1iZXIge1xuXHRcdHJldHVybiBwb3NlLmRhbXBpbmc7XG5cdH1cblxuXHRzZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHBvc2UuZGFtcGluZyA9IHZhbHVlO1xuXHR9XG5cblx0Z2xvYmFsIChjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludERhdGEpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29uc3RyYWludC5kYW1waW5nR2xvYmFsO1xuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2UubWFzc0ludmVyc2V9LiBUaGUgdGltZWxpbmUgdmFsdWVzIGFyZSBub3QgaW52ZXJ0ZWQuICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnRNYXNzVGltZWxpbmUgZXh0ZW5kcyBQaHlzaWNzQ29uc3RyYWludFRpbWVsaW5lIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5waHlzaWNzQ29uc3RyYWludE1hc3MpO1xuXHR9XG5cblx0Z2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UpOiBudW1iZXIge1xuXHRcdHJldHVybiAxIC8gcG9zZS5tYXNzSW52ZXJzZTtcblx0fVxuXG5cdHNldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0cG9zZS5tYXNzSW52ZXJzZSA9IDEgLyB2YWx1ZTtcblx0fVxuXG5cdGdsb2JhbCAoY29uc3RyYWludDogUGh5c2ljc0NvbnN0cmFpbnREYXRhKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbnN0cmFpbnQubWFzc0dsb2JhbDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLndpbmR9LiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50V2luZFRpbWVsaW5lIGV4dGVuZHMgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGh5c2ljc0NvbnN0cmFpbnRXaW5kKTtcblx0XHR0aGlzLmFkZGl0aXZlID0gdHJ1ZTtcblx0fVxuXG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcG9zZS53aW5kO1xuXHR9XG5cblx0c2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRwb3NlLndpbmQgPSB2YWx1ZTtcblx0fVxuXG5cdGdsb2JhbCAoY29uc3RyYWludDogUGh5c2ljc0NvbnN0cmFpbnREYXRhKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbnN0cmFpbnQud2luZEdsb2JhbDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmdyYXZpdHl9LiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50R3Jhdml0eVRpbWVsaW5lIGV4dGVuZHMgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB7XG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGJlemllckNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgYmV6aWVyQ291bnQsIGNvbnN0cmFpbnRJbmRleCwgUHJvcGVydHkucGh5c2ljc0NvbnN0cmFpbnRHcmF2aXR5KTtcblx0XHR0aGlzLmFkZGl0aXZlID0gdHJ1ZTtcblx0fVxuXG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcG9zZS5ncmF2aXR5O1xuXHR9XG5cblx0c2V0IChwb3NlOiBQaHlzaWNzQ29uc3RyYWludFBvc2UsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRwb3NlLmdyYXZpdHkgPSB2YWx1ZTtcblx0fVxuXG5cdGdsb2JhbCAoY29uc3RyYWludDogUGh5c2ljc0NvbnN0cmFpbnREYXRhKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbnN0cmFpbnQuZ3Jhdml0eUdsb2JhbDtcblx0fVxufVxuXG4vKiogQ2hhbmdlcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLm1peH0uICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnRNaXhUaW1lbGluZSBleHRlbmRzIFBoeXNpY3NDb25zdHJhaW50VGltZWxpbmUge1xuXHRjb25zdHJ1Y3RvciAoZnJhbWVDb3VudDogbnVtYmVyLCBiZXppZXJDb3VudDogbnVtYmVyLCBjb25zdHJhaW50SW5kZXg6IG51bWJlcikge1xuXHRcdHN1cGVyKGZyYW1lQ291bnQsIGJlemllckNvdW50LCBjb25zdHJhaW50SW5kZXgsIFByb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50TWl4KTtcblx0fVxuXG5cdGdldCAocG9zZTogUGh5c2ljc0NvbnN0cmFpbnRQb3NlKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcG9zZS5taXg7XG5cdH1cblxuXHRzZXQgKHBvc2U6IFBoeXNpY3NDb25zdHJhaW50UG9zZSwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHBvc2UubWl4ID0gdmFsdWU7XG5cdH1cblxuXHRnbG9iYWwgKGNvbnN0cmFpbnQ6IFBoeXNpY3NDb25zdHJhaW50RGF0YSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb25zdHJhaW50Lm1peEdsb2JhbDtcblx0fVxufVxuXG4vKiogUmVzZXRzIGEgcGh5c2ljcyBjb25zdHJhaW50IHdoZW4gc3BlY2lmaWMgYW5pbWF0aW9uIHRpbWVzIGFyZSByZWFjaGVkLiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNpY3NDb25zdHJhaW50UmVzZXRUaW1lbGluZSBleHRlbmRzIFRpbWVsaW5lIGltcGxlbWVudHMgQ29uc3RyYWludFRpbWVsaW5lIHtcblx0cHJpdmF0ZSBzdGF0aWMgcHJvcGVydHlJZHM6IHN0cmluZ1tdID0gW1Byb3BlcnR5LnBoeXNpY3NDb25zdHJhaW50UmVzZXQudG9TdHJpbmcoKV07XG5cblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgcGh5c2ljcyBjb25zdHJhaW50IGluIHtAbGluayBTa2VsZXRvbi5jb250cmFpbnRzfSB0aGF0IHdpbGwgYmUgcmVzZXQgd2hlbiB0aGlzIHRpbWVsaW5lIGlzXG5cdCogYXBwbGllZCwgb3IgLTEgaWYgYWxsIHBoeXNpY3MgY29uc3RyYWludHMgaW4gdGhlIHNrZWxldG9uIHdpbGwgYmUgcmVzZXQuICovXG5cdHJlYWRvbmx5IGNvbnN0cmFpbnRJbmRleDogbnVtYmVyO1xuXG5cdC8qKiBAcGFyYW0gY29uc3RyYWludEluZGV4IC0xIGZvciBhbGwgcGh5c2ljcyBjb25zdHJhaW50cyBpbiB0aGUgc2tlbGV0b24uICovXG5cdGNvbnN0cnVjdG9yIChmcmFtZUNvdW50OiBudW1iZXIsIGNvbnN0cmFpbnRJbmRleDogbnVtYmVyKSB7XG5cdFx0c3VwZXIoZnJhbWVDb3VudCwgLi4uUGh5c2ljc0NvbnN0cmFpbnRSZXNldFRpbWVsaW5lLnByb3BlcnR5SWRzKTtcblx0XHR0aGlzLmNvbnN0cmFpbnRJbmRleCA9IGNvbnN0cmFpbnRJbmRleDtcblx0XHR0aGlzLmluc3RhbnQgPSB0cnVlO1xuXHR9XG5cblx0Z2V0RnJhbWVDb3VudCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnJhbWVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSB0aW1lIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLlxuXHQgKiBAcGFyYW0gZnJhbWUgQmV0d2VlbiAwIGFuZCBgZnJhbWVDb3VudGAsIGluY2x1c2l2ZS4gKi9cblx0c2V0RnJhbWUgKGZyYW1lOiBudW1iZXIsIHRpbWU6IG51bWJlcikge1xuXHRcdHRoaXMuZnJhbWVzW2ZyYW1lXSA9IHRpbWU7XG5cdH1cblxuXHQvKiogUmVzZXRzIHRoZSBwaHlzaWNzIGNvbnN0cmFpbnQgd2hlbiBmcmFtZXMgPiBgbGFzdFRpbWVgIGFuZCA8PSBgdGltZWAuICovXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGxldCBjb25zdHJhaW50OiBQaHlzaWNzQ29uc3RyYWludCB8IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5jb25zdHJhaW50SW5kZXggIT09IC0xKSB7XG5cdFx0XHRjb25zdHJhaW50ID0gc2tlbGV0b24uY29uc3RyYWludHNbdGhpcy5jb25zdHJhaW50SW5kZXhdIGFzIFBoeXNpY3NDb25zdHJhaW50O1xuXHRcdFx0aWYgKCFjb25zdHJhaW50LmFjdGl2ZSkgcmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMuZnJhbWVzO1xuXG5cdFx0aWYgKGxhc3RUaW1lID4gdGltZSkgeyAvLyBBcHBseSBhZnRlciBsYXN0VGltZSBmb3IgbG9vcGVkIGFuaW1hdGlvbnMuXG5cdFx0XHQvLyBSZWZlcmVuY2UgcnVudGltZSBwYXNzZXMgbnVsbCBmb3IgTWl4RnJvbSBoZXJlLiBUaGlzIHRpbWVsaW5lIGRvZXNuJ3QgdXNlIGl0LCBidXQgVFMga2VlcHMgdGhlIHR5cGUgbm9uLW51bGwuXG5cdFx0XHR0aGlzLmFwcGx5KHNrZWxldG9uLCBsYXN0VGltZSwgTnVtYmVyLk1BWF9WQUxVRSwgW10sIGFscGhhLCBmcm9tLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdGxhc3RUaW1lID0gLTE7XG5cdFx0fSBlbHNlIGlmIChsYXN0VGltZSA+PSBmcmFtZXNbZnJhbWVzLmxlbmd0aCAtIDFdKSAvLyBMYXN0IHRpbWUgaXMgYWZ0ZXIgbGFzdCBmcmFtZS5cblx0XHRcdHJldHVybjtcblx0XHRpZiAodGltZSA8IGZyYW1lc1swXSkgcmV0dXJuO1xuXG5cdFx0aWYgKGxhc3RUaW1lIDwgZnJhbWVzWzBdIHx8IHRpbWUgPj0gZnJhbWVzW1RpbWVsaW5lLnNlYXJjaChmcmFtZXMsIGxhc3RUaW1lKSArIDFdKSB7XG5cdFx0XHRpZiAoY29uc3RyYWludCAhPSBudWxsKVxuXHRcdFx0XHRjb25zdHJhaW50LnJlc2V0KHNrZWxldG9uKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnN0cmFpbnQgb2Ygc2tlbGV0b24ucGh5c2ljcykge1xuXHRcdFx0XHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkgY29uc3RyYWludC5yZXNldChza2VsZXRvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqIENoYW5nZXMge0BsaW5rIFNsaWRlclBvc2UudGltZX0uICovXG5leHBvcnQgY2xhc3MgU2xpZGVyVGltZWxpbmUgZXh0ZW5kcyBDb25zdHJhaW50VGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5zbGlkZXJUaW1lKTtcblx0fVxuXG5cdGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGxhc3RUaW1lOiBudW1iZXIsIHRpbWU6IG51bWJlciwgZmlyZWRFdmVudHM6IEFycmF5PEV2ZW50PiwgYWxwaGE6IG51bWJlciwgZnJvbTogTWl4RnJvbSxcblx0XHRhZGQ6IGJvb2xlYW4sIG91dDogYm9vbGVhbiwgYXBwbGllZFBvc2U6IGJvb2xlYW4pIHtcblxuXHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2VsZXRvbi5jb25zdHJhaW50c1t0aGlzLmNvbnN0cmFpbnRJbmRleF0gYXMgU2xpZGVyO1xuXHRcdGlmIChjb25zdHJhaW50LmFjdGl2ZSkge1xuXHRcdFx0Y29uc3QgcG9zZSA9IGFwcGxpZWRQb3NlID8gY29uc3RyYWludC5hcHBsaWVkUG9zZSA6IGNvbnN0cmFpbnQucG9zZTtcblx0XHRcdHBvc2UudGltZSA9IHRoaXMuZ2V0QWJzb2x1dGVWYWx1ZSh0aW1lLCBhbHBoYSwgZnJvbSwgYWRkLCBwb3NlLnRpbWUsIGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UudGltZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKiBDaGFuZ2VzIHtAbGluayBTbGlkZXJQb3NlLm1peH0uICovXG5leHBvcnQgY2xhc3MgU2xpZGVyTWl4VGltZWxpbmUgZXh0ZW5kcyBDb25zdHJhaW50VGltZWxpbmUxIHtcblx0Y29uc3RydWN0b3IgKGZyYW1lQ291bnQ6IG51bWJlciwgYmV6aWVyQ291bnQ6IG51bWJlciwgY29uc3RyYWludEluZGV4OiBudW1iZXIpIHtcblx0XHRzdXBlcihmcmFtZUNvdW50LCBiZXppZXJDb3VudCwgY29uc3RyYWludEluZGV4LCBQcm9wZXJ0eS5zbGlkZXJNaXgpO1xuXHRcdHRoaXMuYWRkaXRpdmUgPSB0cnVlO1xuXHR9XG5cblx0YXBwbHkgKHNrZWxldG9uOiBTa2VsZXRvbiwgbGFzdFRpbWU6IG51bWJlciwgdGltZTogbnVtYmVyLCBmaXJlZEV2ZW50czogQXJyYXk8RXZlbnQ+LCBhbHBoYTogbnVtYmVyLCBmcm9tOiBNaXhGcm9tLFxuXHRcdGFkZDogYm9vbGVhbiwgb3V0OiBib29sZWFuLCBhcHBsaWVkUG9zZTogYm9vbGVhbikge1xuXG5cdFx0Y29uc3QgY29uc3RyYWludCA9IHNrZWxldG9uLmNvbnN0cmFpbnRzW3RoaXMuY29uc3RyYWludEluZGV4XSBhcyBTbGlkZXI7XG5cdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlKSB7XG5cdFx0XHRjb25zdCBwb3NlID0gYXBwbGllZFBvc2UgPyBjb25zdHJhaW50LmFwcGxpZWRQb3NlIDogY29uc3RyYWludC5wb3NlO1xuXHRcdFx0cG9zZS5taXggPSB0aGlzLmdldEFic29sdXRlVmFsdWUodGltZSwgYWxwaGEsIGZyb20sIGFkZCwgcG9zZS5taXgsIGNvbnN0cmFpbnQuZGF0YS5zZXR1cFBvc2UubWl4KTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==