vcomply-workflow-engine 6.0.56 → 6.0.57
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/esm2022/lib/interfaces/responsibilty.interface.mjs +1 -1
- package/esm2022/lib/sharedComponents/frequency/frequency.service.mjs +58 -1
- package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +4 -4
- package/esm2022/lib/workflow-services/responsibility.service.mjs +26 -20
- package/fesm2022/vcomply-workflow-engine.mjs +85 -22
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +1 -1
- package/lib/interfaces/responsibilty.interface.d.ts +8 -8
- package/lib/sharedComponents/frequency/frequency.service.d.ts +57 -0
- package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
- package/lib/workflow-services/responsibility.service.d.ts +11 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2liaWx0eS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9pbnRlcmZhY2VzL3Jlc3BvbnNpYmlsdHkuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgRnJlcXVlbmN5IHtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXNzaWduZWUge1xuICB0eXBlOiAnYWxsJyB8ICdhbnlfb25lJztcbiAgdXNlcklkOiBudW1iZXJbXTtcbiAgdXNlckdyb3VwSWQ6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgUmVzcG9uc2liaWxpdHlDZW50ZXIge1xuICB0eXBlOiAnYW55JyB8ICdhbGwnO1xuICBpZDogbnVtYmVyW107XG59XG5cbmludGVyZmFjZSBSZXZpZXdlckZyZXF1ZW5jeSB7XG4gIGR1ZURheXM6IG51bWJlcjtcbiAgZXh0ZW5zaW9uRGF5czogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmV2aWV3ZXIge1xuICB0eXBlOiAnc2VxdWVudGlhbCcgfCAnYW55X29uZSc7XG4gIGZyZXF1ZW5jeTogUmV2aWV3ZXJGcmVxdWVuY3k7XG4gIHVzZXJJZDogbnVtYmVyW107XG59XG5cbmludGVyZmFjZSBPdmVyc2Vlckdyb3VwIHtcbiAgdXNlcklkOiBudW1iZXJbXTtcbiAgdXNlckdyb3VwSWQ6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgT3ZlcnNlZXIge1xuICBzdWNjZXNzOiBPdmVyc2Vlckdyb3VwO1xuICBmYWlsOiBPdmVyc2Vlckdyb3VwO1xufVxuXG5pbnRlcmZhY2UgQ29sbGFib3JhdG9yIHtcbiAgdXNlcklkOiBudW1iZXJbXTtcbiAgdXNlckdyb3VwSWQ6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgRXZpZGVuY2VGb3JtYXQge1xuICB0eXBlOiAnbGluaycgfCAnZmlsZScgfCAnJztcbiAgZGF0YTogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBFdmlkZW5jZSB7XG4gIHJlcXVpcmVkOiAnMCB8IDEnO1xuICBmb3JtYXQ6IEV2aWRlbmNlRm9ybWF0O1xufVxuXG5pbnRlcmZhY2UgUHJvZ3JhbSB7XG4gIGlkOiBudW1iZXJbXTtcbiAgdGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zaWJpbGl0eSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGtleTogbnVtYmVyO1xuICByaXNrQ2xhc3M6ICdsb3cnIHwgJ2xvd19tZWRpdW0nIHwgJ21lZGl1bV9oaWdoJyB8ICdoaWdoJztcbiAgbm90ZXM6IHN0cmluZztcbiAgb2JqZWN0aXZlOiBzdHJpbmc7XG4gIGZyZXF1ZW5jeTogRnJlcXVlbmN5O1xuICBhc3NpZ25vcjogbnVtYmVyO1xuICBhc3NpZ25lZTogQXNzaWduZWU7XG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBSZXNwb25zaWJpbGl0eUNlbnRlciB8IHVuZGVmaW5lZDtcbiAgcmV2aWV3ZXI6IFJldmlld2VyIHwgdW5kZWZpbmVkO1xuICBvdmVyc2VlcjogT3ZlcnNlZXIgfCB1bmRlZmluZWQ7XG4gIGV2aWRlbmNlOiBFdmlkZW5jZTtcbiAgcHJvZ3JhbTogUHJvZ3JhbTtcbiAgZ3JjT2JqZWN0SWQ6IGFueVtdO1xuICBhc3Nlc3NtZW50SWQ6IHN0cmluZztcbn0iXX0=
|
|
@@ -562,6 +562,63 @@ export class FrequencyService {
|
|
|
562
562
|
const formattedDate = `${day}-${month}-${year}`;
|
|
563
563
|
return formattedDate;
|
|
564
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* Converts a frequency configuration object into a standardized FrequencyObject format.
|
|
567
|
+
*
|
|
568
|
+
* @param frequency - The input frequency configuration object with the following properties:
|
|
569
|
+
* - case: The type of frequency ('one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semester' | 'yearly' | 'random' | 'ongoing' | 'on_completion_of' | 'biannually')
|
|
570
|
+
* - window: Number of days before the task can be started
|
|
571
|
+
* - failedAfter: Number of days after which the task is considered failed
|
|
572
|
+
* - continuous_failed_days: Number of days after which the task is auto-deactivated
|
|
573
|
+
* - day: The day of occurrence
|
|
574
|
+
* - timeIn24Hr: Time in 24-hour format
|
|
575
|
+
* - every: Frequency interval
|
|
576
|
+
* - selectedDay: Array of selected days for weekly frequency (1-7 representing Monday-Sunday)
|
|
577
|
+
* - selectedMonth: Array of selected months (0-11 representing January-December)
|
|
578
|
+
* - startFrom: Unix timestamp for the start date
|
|
579
|
+
* - lifecycleDetails: String in format "YYYY-MM-DD~~N" where N is the number of occurrences
|
|
580
|
+
* - randomTypeSelected: Index for random frequency type (0: weekly, 1: monthly, 2: quarterly, 3: yearly)
|
|
581
|
+
* - randomInstances: Number of random occurrences
|
|
582
|
+
* - selectedType: Number of reminders for ongoing frequency
|
|
583
|
+
* - selectedOngoingType: Index for ongoing frequency type (1: week, 2: month, 3: quarter, 4: semester, 5: year)
|
|
584
|
+
*
|
|
585
|
+
* @returns A FrequencyObject with the following structure:
|
|
586
|
+
* - type: Frequency type
|
|
587
|
+
* - startBefore: Days before task can start
|
|
588
|
+
* - endAfter: Days after which task fails
|
|
589
|
+
* - autoDeactivate: Days after which task is deactivated
|
|
590
|
+
* - day: Day of occurrence
|
|
591
|
+
* - time: Time in 24-hour format
|
|
592
|
+
* - repeatOptions: {
|
|
593
|
+
* every: number,
|
|
594
|
+
* repeatOn: string (binary representation of selected days/months),
|
|
595
|
+
* lifecycle: {
|
|
596
|
+
* startFrom: string (YYYY-MM-DD),
|
|
597
|
+
* endBy?: string (YYYY-MM-DD),
|
|
598
|
+
* endAfter?: number
|
|
599
|
+
* }
|
|
600
|
+
* }
|
|
601
|
+
* - random?: { type: string, occurrence: number }
|
|
602
|
+
* - onComplete: {}
|
|
603
|
+
* - onGoing: { reminders: number, startOf: 'week' | 'month' | 'quarter' | 'semester' | 'year' }
|
|
604
|
+
*
|
|
605
|
+
* @example
|
|
606
|
+
* ```typescript
|
|
607
|
+
* const frequency = {
|
|
608
|
+
* case: 'weekly',
|
|
609
|
+
* window: 2,
|
|
610
|
+
* failedAfter: 1,
|
|
611
|
+
* continuous_failed_days: 3,
|
|
612
|
+
* day: 1,
|
|
613
|
+
* timeIn24Hr: '09:00:00',
|
|
614
|
+
* every: 1,
|
|
615
|
+
* selectedDay: [1, 3, 5], // Monday, Wednesday, Friday
|
|
616
|
+
* startFrom: 1678900000,
|
|
617
|
+
* lifecycleDetails: '2024-12-31~~10'
|
|
618
|
+
* };
|
|
619
|
+
* const result = setFrequencyObject(frequency);
|
|
620
|
+
* ```
|
|
621
|
+
*/
|
|
565
622
|
setFrequencyObject(frequency) {
|
|
566
623
|
const repeatOptions = this.repeatOptions(frequency);
|
|
567
624
|
const lifecycleDetails = frequency.lifecycleDetails.split('~~');
|
|
@@ -759,4 +816,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
759
816
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Configurations, decorators: [{
|
|
760
817
|
type: Optional
|
|
761
818
|
}] }]; } });
|
|
762
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlcXVlbmN5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFHLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBTTlELE1BQU0sT0FBTyxnQkFBZ0I7SUFxRTNCLFlBQ1UsSUFBZ0IsRUFDaEIsV0FBd0IsRUFDcEIsTUFBdUI7UUFGM0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXRFM0IsZUFBVSxHQUFrQjtZQUNqQyxTQUFTO1lBQ1QsVUFBVTtZQUNWLE9BQU87WUFDUCxPQUFPO1lBQ1AsS0FBSztZQUNMLE1BQU07WUFDTixNQUFNO1lBQ04sUUFBUTtZQUNSLFdBQVc7WUFDWCxTQUFTO1lBQ1QsVUFBVTtZQUNWLFVBQVU7U0FDWCxDQUFDO1FBRUssWUFBTyxHQUFrQjtZQUM5QixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQyxDQUFDLGdCQUFnQjtRQUVaLG1CQUFjLEdBQWtCO1lBQ3JDLCtCQUErQjtZQUMvQixpQ0FBaUM7WUFDakMsa0NBQWtDO1NBQ25DLENBQUM7UUFFSyxlQUFVLEdBQUc7WUFDbEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsZUFB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QVU7UUFDaEUsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDNUIsQ0FBQztRQUNGLElBQUksaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU5QixVQUFVLENBQUMsUUFBUSxDQUNqQixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3ZCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFF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QUUsQ0FBQztRQUVoQyxNQUFNLFVBQVUsR0FBRztZQUNmLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTTtZQUN0RCxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVU7U0FDbkUsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUUxQyxPQUFPLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQztJQUN0QyxDQUFDOytHQXJ4QlksZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkF5RUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7ICByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IERFRkFVTFRfVElNRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90aW1lLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGcmVxdWVuY3lPYmplY3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZyZXF1ZW5jeS5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnJlcXVlbmN5U2VydmljZSB7XG4gIHB1YmxpYyBtb250aEFycmF5OiBBcnJheTxzdHJpbmc+ID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgcHVibGljIGRheU5hbWU6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgJ01vbmRheScsXG4gICAgJ1R1ZXNkYXknLFxuICAgICdXZWRuZXNkYXknLFxuICAgICdUaHVyc2RheScsXG4gICAgJ0ZyaWRheScsXG4gICAgJ1NhdHVyZGF5JyxcbiAgICAnU3VuZGF5JyxcbiAgXTsgLy8gZnVsbCBkYXkgbmFtZVxuXG4gIHB1YmxpYyBxdWFydGVybHlNb250aDogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICAnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLFxuICAgICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJyxcbiAgICAnTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInLFxuICBdO1xuXG4gIHB1YmxpYyBkYXRlQ29uZmlnID0ge1xuICAgIGZvcm1hdDogJ0REIE1NIFlZWVknLFxuICAgIHNob3dHb1RvQ3VycmVudDogZmFsc2UsXG4gIH07XG5cbiAgcHVibGljIGZyZXF1ZW5jeUluZm8gPSB7XG4gICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgIHBhdHRlcm46ICcnLFxuICAgIGNhc2U6ICcnLFxuICAgIGZhaWxlZEFmdGVyOiAwLFxuICAgIHdpbmRvdzogMCxcbiAgICB0aW1lSW4xMmhyOiAnJyxcbiAgICB0aW1lSW4yNEhyOiAnJyxcbiAgICBsaWZlY3ljbGVEZXRhaWxzOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICByZXBvcnRJZDogMCxcbiAgICBmYWlsZWRfdGltZV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgc3RhcnREYXRlOiAnJyxcbiAgfTtcblxuICBwdWJsaWMgZnJlcXVlbmN5RGV0YWlsczogb2JqZWN0ID0ge1xuICAgIHBhdHRlcm46ICcnLFxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHdpbmRvdzogMCxcbiAgICBmYWlsZWQ6IDAsXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxuICB9O1xuXG4gIHByaXZhdGUgZW52ITogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcbiAgKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHRpbWVGcm9tMTJoVG8yNGgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRpbWVfYXJyID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IG1lcmlkaWFuID0gdGltZV9hcnJbMV07XG4gICAgICBjb25zdCBocl9taW4gPSB0aW1lX2FyclswXS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xuICAgICAgY29uc3QgaHIgPSBocl9taW5bMF07XG4gICAgICBjb25zdCBtaW4gPSBocl9taW5bMV07XG5cbiAgICAgIGxldCByZXR1cm5fdGltZSA9ICcnO1xuXG4gICAgICBpZiAobWVyaWRpYW4/LnRvTG93ZXJDYXNlKCkgPT0gJ3BtJykge1xuICAgICAgICBpZiAoaHIgPT0gMTIpIHtcbiAgICAgICAgICByZXR1cm5fdGltZSA9IDEyICsgJzonICsgbWluICsgJzowMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaHIgPCAxMikge1xuICAgICAgICAgIHJldHVybl90aW1lID0gK2hyICsgMTIgKyAnOicgKyBtaW4gKyAnOjAwJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhyID09IDEyKSB7XG4gICAgICAgICAgcmV0dXJuX3RpbWUgPSAnMDA6JyArIG1pbiArICc6MDAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhyIDwgMTIpIHtcbiAgICAgICAgICByZXR1cm5fdGltZSA9IGhyICsgJzonICsgbWluICsgJzowMCc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVybl90aW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgdGltZUluMTIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBocjtcbiAgICAgIGxldCBtaW47XG4gICAgICBsZXQgbWVyaWRpYW47XG4gICAgICBpZiAodmFsdWUuc3BsaXQoJzonKVswXSA+PSAxMikge1xuICAgICAgICBociA9IHZhbHVlLnNwbGl0KCc6JylbMF0gPT09ICcxMicgPyAxMiA6IHZhbHVlLnNwbGl0KCc6JylbMF0gLSAxMjtcbiAgICAgICAgbWluID0gdmFsdWUuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgaWYgKG1pbi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgbWluID0gJzAnICsgbWluO1xuICAgICAgICB9XG4gICAgICAgIG1lcmlkaWFuID0gJ3BtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhyID0gdmFsdWUuc3BsaXQoJzonKVswXSA9PSAnMDAnID8gMTIgOiB2YWx1ZS5zcGxpdCgnOicpWzBdO1xuICAgICAgICBtaW4gPSB2YWx1ZS5zcGxpdCgnOicpWzFdO1xuICAgICAgICBpZiAobWluLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBtaW4gPSAnMCcgKyBtaW47XG4gICAgICAgIH1cbiAgICAgICAgbWVyaWRpYW4gPSAnYW0nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhyICsgJzonICsgbWluICsgJyAnICsgbWVyaWRpYW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBmcmFtZXdvcmtTdGFydERhdGUocm93OiBhbnkpIHtcbiAgICBsZXQgY2FsY3VsYXRlZERheTogbnVtYmVyID0gMDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShwYXJzZUludChyb3cuc3RhcnRfZGF0ZSkgKiAxMDAwKS5nZXREYXkoKTtcbiAgICBjb25zdCBnZXREYXRlID0gbmV3IERhdGUocGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpICogMTAwMCkuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKS5nZXREYXkoKTtcbiAgICBjb25zdCBzdGFydE1vbnRoID0gbmV3IERhdGUocGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpICogMTAwMCkuZ2V0TW9udGgoKTtcblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSA8IERhdGUubm93KCkgLyAxMDAwICYmXG4gICAgICAocm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IHdlZWsnIHx8XG4gICAgICAgIHJvdy5mcmVxdWVuY3lfdGVtcGxhdGUgPT09ICdldmVyeSAyIHdlZWtzJyB8fFxuICAgICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlID09PSAnZXZlcnkgMyB3ZWVrcycpXG4gICAgKSB7XG4gICAgICBsZXQgZGF5c1RvQmVBZGRlZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICBpZiAoKGN1cnJlbnREYXRlICsgaSkgJSA3ID09PSBzdGFydERhdGUpIHtcbiAgICAgICAgICBkYXlzVG9CZUFkZGVkID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdGltZXN0YW1wVG9CZUFkZGVkID0gZGF5c1RvQmVBZGRlZCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG4gICAgICBjYWxjdWxhdGVkRGF5ID0gbmV3IERhdGUoXG4gICAgICAgIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgdGltZXN0YW1wVG9CZUFkZGVkXG4gICAgICApLmdldFRpbWUoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpIDwgRGF0ZS5ub3coKSAvIDEwMDAgJiZcbiAgICAgICEoXG4gICAgICAgIHJvdy5mcmVxdWVuY3lfdGVtcGxhdGUgPT09ICdldmVyeSB3ZWVrJyB8fFxuICAgICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlID09PSAnZXZlcnkgMiB3ZWVrcycgfHxcbiAgICAgICAgcm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IDMgd2Vla3MnXG4gICAgICApICYmXG4gICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlICE9PSAnZXZlcnkgZGF5J1xuICAgICkge1xuICAgICAgY29uc3QgbW9tZW50VW5peCA9IG1vbWVudChcbiAgICAgICAgZ2V0RGF0ZSArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAnIDAwOjAwJyxcbiAgICAgICAgJ0RELU1NLVlZWVkgSEg6bW0nXG4gICAgICApLnVuaXgoKTtcbiAgICAgIGNhbGN1bGF0ZWREYXkgPSBtb21lbnRVbml4ICogMTAwMDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IGRheScgJiZcbiAgICAgIHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSA8IERhdGUubm93KCkgLyAxMDAwXG4gICAgKSB7XG4gICAgICBjYWxjdWxhdGVkRGF5ID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsY3VsYXRlZERheSA9IHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSAqIDEwMDA7XG4gICAgfVxuICAgIHJldHVybiBjYWxjdWxhdGVkRGF5IC8gMTAwMDtcbiAgfVxuXG4gIGZyYW1ld29ya0ZyZXF1ZW5jeShmcmVxdWVuY3k6IGFueSwgc3RhcnRfZGF0ZTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0X2RhdGUgKiAxMDAwKTtcbiAgICAgIGNvbnN0IGZpcnN0SGFsZk1vbnRoID0gWycxJywgJzInLCAnMycsICc0JywgJzUnLCAnNiddO1xuICAgICAgY29uc3Qgc2Vjb25kSGFsZk1vbnRoID0gWyc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddO1xuICAgICAgY29uc3QgZ2V0RGF5RGF0YSA9IHN0YXJ0RGF0ZS5nZXREYXkoKSA9PT0gMCA/IDcgOiBzdGFydERhdGUuZ2V0RGF5KCk7XG4gICAgICBjb25zdCBtb250aCA9IHN0YXJ0RGF0ZS5nZXRNb250aCgpO1xuICAgICAgbGV0IHF1YXJ0ZXJQYXR0ZXJuID0gJ34xLDQsNywxMH4wJztcbiAgICAgIHN3aXRjaCAobW9udGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHF1YXJ0ZXJQYXR0ZXJuID0gJ34xLDQsNywxMH4wJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBxdWFydGVyUGF0dGVybiA9ICd+Miw1LDgsMTF+MCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcXVhcnRlclBhdHRlcm4gPSAnfjMsNiw5LDEyfjAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gXTtcbiAgICAgIGxldCBmcmVxdWVuY3lfcGF0dGVybjtcblxuICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgICAvLyBAID0+IGRheSAoMSB0byA3KVxuICAgICAgLy8gIyA9PiBtb250aCAoMSB0byAxMilcbiAgICAgIC8vID8gPT4gbW9udGggJSAyID09IDAgPyBcIjIsNCw2LDgsMTAsMTJcIiA6IFwiMSwzLDUsNyw5LDExXCJcblxuICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IHdlZWsnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzJ+JyArIGdldERheURhdGEgKyAnfjB+MSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnb25lIHRpbWUnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnMH4nICtcbiAgICAgICAgICBzdGFydERhdGUuZ2V0RnVsbFllYXIoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICBzdGFydERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBkYXknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjEnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IGFsdGVybmF0ZSBkYXknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDEwIGRheXMnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjEwJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAyIHdlZWtzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcyficgKyBnZXREYXlEYXRhICsgJ34wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IGZvcnRuaWdodCcpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnMX4nICsgZ2V0RGF5RGF0YSArICd+MH4xNCc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgMyB3ZWVrcycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnMn4nICsgZ2V0RGF5RGF0YSArICd+MH4zJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBtb250aCcpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICczficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34xLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMn4wJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSA0NSBkYXlzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcxfjB+MH40NSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgYWx0ZXJuYXRlIG1vbnRoJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9XG4gICAgICAgICAgJzN+JyArXG4gICAgICAgICAgc3RhcnREYXRlLmdldERhdGUoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgJSAyID09IDBcbiAgICAgICAgICAgID8gJzIsNCw2LDgsMTAsMTInXG4gICAgICAgICAgICA6ICcxLDMsNSw3LDksMTEnKSArXG4gICAgICAgICAgJ34wJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBxdWFydGVyJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICc3ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgcXVhcnRlclBhdHRlcm47XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDEyMCBkYXlzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcxfjB+MH4xMjAnO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdoYWxmIHllYXJseScpIHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gZmlyc3RIYWxmTW9udGguaW5kZXhPZihcbiAgICAgICAgICAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluZGV4MiA9IHNlY29uZEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9XG4gICAgICAgICAgaW5kZXgxID4gLTFcbiAgICAgICAgICAgID8gJ34nICtcbiAgICAgICAgICAgICAgZmlyc3RIYWxmTW9udGhbaW5kZXgxXSArXG4gICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgIHNlY29uZEhhbGZNb250aFtpbmRleDFdICtcbiAgICAgICAgICAgICAgJ34wJ1xuICAgICAgICAgICAgOiAnficgK1xuICAgICAgICAgICAgICBmaXJzdEhhbGZNb250aFtpbmRleDJdICtcbiAgICAgICAgICAgICAgJywnICtcbiAgICAgICAgICAgICAgc2Vjb25kSGFsZk1vbnRoW2luZGV4Ml0gK1xuICAgICAgICAgICAgICAnfjAnO1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICczficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgcGF0dGVybjtcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICd5ZWFybHknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnNH4nICsgc3RhcnREYXRlLmdldERhdGUoKSArICd+JyArIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpICsgJ34xJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgMiB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjInO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAzIHllYXJzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9XG4gICAgICAgICAgJzR+JyArIHN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAnficgKyAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKSArICd+Myc7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDQgeWVhcnMnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnNH4nICsgc3RhcnREYXRlLmdldERhdGUoKSArICd+JyArIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpICsgJ340JztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgNSB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjUnO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAxMCB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjEwJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAndG8gYmUgZGVjaWRlZCBsYXRlcicpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJyc7XG4gICAgICB9XG4gICAgICAvLyB0aGlzLmVkaXREYXRhLmZyZXF1ZW5jeV9kZXRhaWxzID0gZnJlcXVlbmN5X3BhdHRlcm47XG5cbiAgICAgIHJldHVybiB7IGZyZXF1ZW5jeV9wYXR0ZXJuLCBjb250aW51b3VzX2ZhaWxlZF9kYXlzIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiB7IGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJywgY29udGludW91c19mYWlsZWRfZGF5czogMCB9O1xuICAgIH1cbiAgfVxuXG4gIHNob3J0SGFuZF9mcmVxQ2FsKGZyZXF1ZW5jeTogYW55LCBkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcj86IGFueSkge1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXG4gICAgXTtcbiAgICBsZXQgZnJlcXVlbmN5X2RldGFpbHM7XG4gICAgbGV0IGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAwO1xuICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgZGF0ZV92YWx1ZS5zZXRNb250aChcbiAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcbiAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgID8udmFsdWUgLSAxXG4gICAgICAgIDogbW9udGhcbiAgICApO1xuICAgIGlmICgheWVhcikge1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoeWVhcik7XG4gICAgfVxuICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShkYXkpO1xuICAgIGxldCBxdWFydGVyUGF0dGVybiA9ICd+MSw0LDcsMTB+MCc7XG4gICAgY29uc3QgZmlyc3RIYWxmTW9udGggPSBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2J107XG4gICAgY29uc3Qgc2Vjb25kSGFsZk1vbnRoID0gWyc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddO1xuICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMzpcbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgcXVhcnRlclBhdHRlcm4gPSAnfjEsNCw3LDEwfjAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgNzpcbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIHF1YXJ0ZXJQYXR0ZXJuID0gJ34yLDUsOCwxMX4wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDExOlxuICAgICAgICBxdWFydGVyUGF0dGVybiA9ICd+Myw2LDksMTJ+MCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBnZXREYXkgPSBkYXRlX3ZhbHVlLmdldERheSgpID09PSAwID8gNyA6IGRhdGVfdmFsdWUuZ2V0RGF5KCk7XG4gICAgc3dpdGNoIChmcmVxdWVuY3kpIHtcbiAgICAgIGNhc2UgJ2V2ZXJ5IHdlZWsnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcyficgKyBnZXREYXkgKyAnfjB+MSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvbmUgdGltZSc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnMH4nICtcbiAgICAgICAgICAnJyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAnficgK1xuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICBkYXRlX3ZhbHVlLmdldERhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSBkYXknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IGFsdGVybmF0ZSBkYXknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4yJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDEwIGRheXMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xMCc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSAyIHdlZWtzJzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnMn4nICsgZ2V0RGF5ICsgJ34wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgZm9ydG5pZ2h0JzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnMX4nICsgZ2V0RGF5ICsgJ34wfjE0JztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDMgd2Vla3MnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcyficgKyBnZXREYXkgKyAnfjB+Myc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSBtb250aCc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnM34nICsgZGF0ZV92YWx1ZS5nZXREYXRlKCkgKyAnfjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyfjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgNDUgZGF5cyc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzF+MH4wfjQ1JztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IGFsdGVybmF0ZSBtb250aCc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnM34nICtcbiAgICAgICAgICBkYXRlX3ZhbHVlLmdldERhdGUoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICUgMiA9PT0gMFxuICAgICAgICAgICAgPyAnMiw0LDYsOCwxMCwxMidcbiAgICAgICAgICAgIDogJzEsMyw1LDcsOSwxMScpICtcbiAgICAgICAgICAnfjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgcXVhcnRlcic6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzd+JyArIGRhdGVfdmFsdWUuZ2V0RGF0ZSgpICsgcXVhcnRlclBhdHRlcm47XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgMTIwIGRheXMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xMjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGFsZiB5ZWFybHknOlxuICAgICAgICBjb25zdCBpbmRleDEgPSBmaXJzdEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluZGV4MiA9IHNlY29uZEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPVxuICAgICAgICAgIGluZGV4MSA+IC0xXG4gICAgICAgICAgICA/ICd+JyArXG4gICAgICAgICAgICAgIGZpcnN0SGFsZk1vbnRoW2luZGV4MV0gK1xuICAgICAgICAgICAgICAnLCcgK1xuICAgICAgICAgICAgICBzZWNvbmRIYWxmTW9udGhbaW5kZXgxXSArXG4gICAgICAgICAgICAgICd+MCdcbiAgICAgICAgICAgIDogJ34nICtcbiAgICAgICAgICAgICAgZmlyc3RIYWxmTW9udGhbaW5kZXgyXSArXG4gICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgIHNlY29uZEhhbGZNb250aFtpbmRleDJdICtcbiAgICAgICAgICAgICAgJ34wJztcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnM34nICsgZGF0ZV92YWx1ZS5nZXREYXRlKCkgKyBwYXR0ZXJuO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FubnVhbCc6XG4gICAgICBjYXNlICd5ZWFybHknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDIgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjInO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDMgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDQgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDUgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDEwIHllYXJzJzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPVxuICAgICAgICAgICc0ficgK1xuICAgICAgICAgIGRhdGVfdmFsdWUuZ2V0RGF0ZSgpICtcbiAgICAgICAgICAnficgK1xuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34xMCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb25nb2luZyc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzEwfjB+MH4wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0byBiZSBkZWNpZGVkIGxhdGVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzV+MH4wfjAnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0dGVybjogZnJlcXVlbmN5X2RldGFpbHMsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBjb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgIH07XG4gIH1cblxuICBnZXRPbkNvbXBsZXRpb25PZlJlc3BvbnNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdyZXBvcnRzL29uQ29tcGxldGlvbk9mUmVwb3J0cycsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBjaGFuZ2VUaW1lWm9uZShkYXRlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IGludkRhdGUgPSBuZXcgRGF0ZShcbiAgICAgIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICB0aW1lWm9uZTogdGhpcy5hdXRoU2VydmljZT8udXNlckRldGFpbHM/LnRpbWV6b25lLFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBpbnZEYXRlO1xuICB9XG5cbiAgZ2V0UmVzcG9uc2liaWxpdHlMaXN0KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8YW55PihcbiAgICAgICAgdGhpcy5lbnYucmVzcG9uc2liaWxpdHlQb3N0ICsgJ21hbmFnZV9yZXNwb25zaWJpbGl0aWVzX3JlcG9ydHMnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMSkpO1xuICB9XG5cbiAgZ2V0UmVzcG9uc2liaWxpdGllc0NvdW50KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8YW55PihcbiAgICAgICAgdGhpcy5lbnYucmVzcG9uc2liaWxpdHlQb3N0ICsgJ21hbmFnZV9yZXNwb25zaWJpbGl0aWVzX3JlcG9ydHNfY291bnQnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMSkpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGN1cnJlbnREYXRlPy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcoY3VycmVudERhdGU/LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZT8uZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcbiAgfVxuICBcbiAgc2V0RnJlcXVlbmN5T2JqZWN0KGZyZXF1ZW5jeTogYW55KTogRnJlcXVlbmN5T2JqZWN0IHwgbnVsbCB7XG4gICAgY29uc3QgcmVwZWF0T3B0aW9ucyA9IHRoaXMucmVwZWF0T3B0aW9ucyhmcmVxdWVuY3kpO1xuICAgIGNvbnN0IGxpZmVjeWNsZURldGFpbHMgPSBmcmVxdWVuY3kubGlmZWN5Y2xlRGV0YWlscy5zcGxpdCgnfn4nKTtcbiAgICBjb25zdCBmcmVxdWVuY3lPYmplY3Q6IEZyZXF1ZW5jeU9iamVjdCA9IHtcbiAgICAgIHR5cGU6IGZyZXF1ZW5jeS5jYXNlLFxuICAgICAgc3RhcnRCZWZvcmU6IGZyZXF1ZW5jeS53aW5kb3csXG4gICAgICBlbmRBZnRlcjogZnJlcXVlbmN5LmZhaWxlZEFmdGVyLFxuICAgICAgYXV0b0RlYWN0aXZhdGU6IGZyZXF1ZW5jeS5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgICAgZGF5OiBmcmVxdWVuY3kuZGF5LCAvLyBob3cgdG8gYnJlYWsgZGF5ID9cbiAgICAgIHRpbWU6IGZyZXF1ZW5jeS50aW1lSW4yNEhyLFxuICAgICAgcmVwZWF0T3B0aW9uczoge1xuICAgICAgICBldmVyeTogZnJlcXVlbmN5LmV2ZXJ5LFxuICAgICAgICByZXBlYXRPbjogcmVwZWF0T3B0aW9ucyxcbiAgICAgICAgbGlmZWN5Y2xlOiB7XG4gICAgICAgICAgc3RhcnRGcm9tOiBtb21lbnQoZnJlcXVlbmN5LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgICAgIGVuZEJ5OmxpZmVjeWNsZURldGFpbHNbMF0gIT09ICcwMDAwLTAwLTAwJyA/IG1vbWVudChsaWZlY3ljbGVEZXRhaWxzWzBdICwgJ0RELU1NTU0tWVlZWScpLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuZEFmdGVyOiBsaWZlY3ljbGVEZXRhaWxzWzFdICE9PSAnMCcgPyBwYXJzZUludChsaWZlY3ljbGVEZXRhaWxzWzFdKSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmFuZG9tOiB0aGlzLmdldFJhbmRvbUZyZXF1ZW5jeShmcmVxdWVuY3kpLFxuICAgICAgb25Db21wbGV0ZToge30sIC8vVE9ETzogYWRkIG9uQ29tcGxldGVcbiAgICAgIG9uR29pbmc6IHRoaXMuZ2V0T25nb2luZyhmcmVxdWVuY3kpLFxuICAgIH0gIFxuICAgIGNvbnNvbGUubG9nKGZyZXF1ZW5jeU9iamVjdCxmcmVxdWVuY3ksICAnZnJlcXVlbmN5T2JqZWN0Jyk7XG4gICAgcmV0dXJuIGZyZXF1ZW5jeU9iamVjdDtcbiAgfSBcblxuICByZXBlYXRPcHRpb25zKGZyZXF1ZW5jeTogYW55KTogc3RyaW5nIHtcbiAgIGlmKGZyZXF1ZW5jeT8uc2VsZWN0ZWREYXk/Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB3ZWVrRGF5cyA9IFtdO1xuICAgICBmb3IobGV0IGkgPSAwOyBpIDwgNzsgaSArKykge1xuICAgICAgaWYoZnJlcXVlbmN5LnNlbGVjdGVkRGF5LmluY2x1ZGVzKGkgKyAxKSkge1xuICAgICAgICB3ZWVrRGF5cy5wdXNoKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2Vla0RheXMucHVzaCgwKTtcbiAgICAgIH1cbiAgICAgfVxuICAgICBjb25zb2xlLmxvZyh3ZWVrRGF5cywgJ3dlZWtEYXlzJywgd2Vla0RheXMuam9pbignJykpO1xuICAgICByZXR1cm4gd2Vla0RheXMuam9pbignJyk7XG4gICB9IGVsc2UgaWYoZnJlcXVlbmN5Py5zZWxlY3RlZE1vbnRoPy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbW9udGhzID0gWyBdO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCAxMjsgaSArKykge1xuICAgICAgaWYoZnJlcXVlbmN5Py5zZWxlY3RlZE1vbnRoPy5pbmNsdWRlcyhpKSkge1xuICAgICAgICBtb250aHMucHVzaCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vbnRocy5wdXNoKDApO1xuICAgICAgfVxuICAgfVxuICAgcmV0dXJuIG1vbnRocy5qb2luKCcnKTtcbiAgIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICAgfVxuICB9XG5cbiAgZ2V0T25nb2luZyhmcmVxdWVuY3k6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICByZW1pbmRlcnM6IGZyZXF1ZW5jeT8uc2VsZWN0ZWRUeXBlLFxuICAgICAgc3RhcnRPZjogZnJlcXVlbmN5Py5zZWxlY3RlZFR5cGUgPyAgWyd3ZWVrJywnbW9udGgnICwncXVhcnRlcicgLCdzZW1lc3RlcicgLCd5ZWFyJ11bZnJlcXVlbmN5Py5zZWxlY3RlZE9uZ29pbmdUeXBlIC0gMV0gOiAnJ1xuICAgIH1cbiAgfVxuICBnZXRSYW5kb21GcmVxdWVuY3koZnJlcXVlbmN5OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhmcmVxdWVuY3ksICdmcmVxdWVuY3knKTtcbiAgICByZXR1cm4ge1xuICAgICB0eXBlOiBbJ3dlZWtseScsICdtb250aGx5JywgJ3F1YXJ0ZXJseScsICd5ZWFybHknXVtmcmVxdWVuY3k/LnJhbmRvbVR5cGVTZWxlY3RlZF0sXG4gICAgIG9jY3VycmVuY2U6IGZyZXF1ZW5jeT8ucmFuZG9tSW5zdGFuY2VzXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRnJlcXVlbmN5UGF0dGVybihmcmVxdWVuY3k6IGFueSkge1xuICAgIGxldCBwYXR0ZXJuID0gJyc7XG4gICAgbGV0IHNlbGVjdGVkRGF5ID0gZnJlcXVlbmN5LmRheVxuICAgIHN3aXRjaCAoZnJlcXVlbmN5LnR5cGUpIHtcblxuICAgICAgY2FzZSAnb25lX3RpbWUnOlxuICAgICAgICBsZXQgZGF0ZV92YWx1ZSA9IGZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LnN0YXJ0RnJvbT8uc3BsaXQoJy0nKTtcblxuICAgICAgICBwYXR0ZXJuID1cbiAgICAgICAgICAnMH4nICtcbiAgICAgICAgICAnJyArXG4gICAgICAgICAgZGF0ZV92YWx1ZVswXSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoZGF0ZV92YWx1ZVsxXSkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZVsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYWlseSc6XG4gICAgICAgIHBhdHRlcm4gPSBgMX4wfjB+JHtmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8uZXZlcnl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3ZWVrbHknOlxuICAgICAgICBwYXR0ZXJuID0gYDJ+JHt0aGlzLmdldERheShmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8ucmVwZWF0T24pfX4wfiR7ZnJlcXVlbmN5LnJlcGVhdE9wdGlvbnM/LmV2ZXJ5fWA7XG4gICAgICAgIGJyZWFrOyAgIFxuICAgICAgY2FzZSAnbW9udGhseSc6XG4gICAgICAgIHBhdHRlcm4gPVxuICAgICAgICAgIGAzfiR7c2VsZWN0ZWREYXl9fiR7dGhpcy5nZXRNb250aChmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8ucmVwZWF0T24pfX4wYDtcbiAgICAgICAgYnJlYWs7XG4gICAgIFxuICAgICAgY2FzZSAncXVhcnRlcmx5JzpcbiAgICAgICAgcGF0dGVybiA9IGA3fiR7c2VsZWN0ZWREYXl9fiR7dGhpcy5nZXRNb250aChmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8ucmVwZWF0T24pfX4wYDtcbiAgICAgICAgYnJlYWs7XG4gICAgIFxuICAgICBjYXNlICdzZW1lc3Rlcic6XG4gICAgICBwYXR0ZXJuID0gYDl+JHtzZWxlY3RlZERheX1+JHt0aGlzLmdldE1vbnRoKGZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5yZXBlYXRPbil9fjBgO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFybHknOlxuICAgICAgICBwYXR0ZXJuID1cbiAgICAgICAgICBgNH4ke3NlbGVjdGVkRGF5fX4ke3RoaXMuZ2V0TW9udGgoZnJlcXVlbmN5LnJlcGVhdE9wdGlvbnM/LnJlcGVhdE9uKX1+MWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb25nb2luZyc6XG4gICAgICAgIGNvbnN0IHR5cGUgPSBbJ3dlZWsnLCAnbW9udGgnLCAncXVhcnRlcicsICdzZW1lc3RlcicsICd5ZWFyJ107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdHlwZS5pbmRleE9mKGZyZXF1ZW5jeS5vbkdvaW5nPy5zdGFydE9mKTtcbiAgICAgICAgcGF0dGVybiA9IGAxMH4ke2ZyZXF1ZW5jeS5vbkdvaW5nPy5yZW1pbmRlcnN9fiR7aW5kZXh9fjBgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhbmRvbSc6IFxuICAgICAgbGV0IHJhbmRvbVR5cGUgPSBbJ3dlZWtseScsICdtb250aGx5JywgJ3F1YXJ0ZXJseScsICd5ZWFybHknXTtcbiAgICAgIGxldCByYW5kb21JbmRleCA9IHJhbmRvbVR5cGUuaW5kZXhPZihmcmVxdWVuY3kucmFuZG9tLnR5cGUpO1xuICAgICAgcGF0dGVybiA9IGA4fiR7cmFuZG9tSW5kZXggKyAxfX4ke3JhbmRvbUluZGV4fX4ke2ZyZXF1ZW5jeS5yYW5kb20ub2NjdXJyZW5jZX1gO1xuICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXR0ZXJuID0gYDV+JHtmcmVxdWVuY3kucmFuZG9tSW5zdGFuY2VzfX4wfjBgO1xuICAgIH1cbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIGdldERheShyZXBlYXRPcHRpb25zOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXkgPSByZXBlYXRPcHRpb25zLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcbiAgICBjb25zdCBkYXlOYW1lID0gW107XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IDc7IGkgKyspIHtcbiAgICAgIGlmKGRheVtpXSA9PT0gMSkge1xuICAgICAgICBkYXlOYW1lLnB1c2goaSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF5TmFtZS5qb2luKCcsJyk7XG4gIH1cblxuICBnZXRNb250aChyZXBlYXRPcHRpb25zOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IG1vbnRoID0gcmVwZWF0T3B0aW9ucy5zcGxpdCgnJykubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBtb250aE5hbWUgPSBbXTtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCAxMjsgaSArKykge1xuICAgICAgICBpZihtb250aFtpXSA9PT0gMSkge1xuICAgICAgICAgIG1vbnRoTmFtZS5wdXNoKGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1vbnRoTmFtZS5qb2luKCcsJyk7XG4gIH1cbiAgICBcbiAgICBnZXRMaWZlY3ljbGVQYXR0ZXJuIChmcmVxdWVuY3k6IGFueSkge1xuICAgICAgbGV0IHBhdHRlcm4gPSBcIjAwMDAtMDAtMDB+fjBcIjtcbiAgICAgIGlmKCFmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uZW5kQnkgJiYgIWZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5lbmRBZnRlcikge1xuICAgICAgICByZXR1cm4gIHtcbiAgICAgICAgICBzdGFydEZyb206IG5ldyBEYXRlKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5zdGFydEZyb20pLmdldFRpbWUoKSAvIDEwMDAsXG4gICAgICAgICAgIHBhdHRlcm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5lbmRCeSkge1xuICAgICAgICByZXR1cm4gIHtcbiAgICAgICAgICBzdGFydEZyb206IG5ldyBEYXRlKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5zdGFydEZyb20pLmdldFRpbWUoKSAvIDEwMDAsXG4gICAgICAgICAgIHBhdHRlcm46IHRoaXMuZm9ybWF0RGF0ZVN0cmluZyhmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uZW5kQnkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uZW5kQWZ0ZXIpIHtcbiAgICAgICAgcmV0dXJuICB7XG4gICAgICAgICAgc3RhcnRGcm9tOiBuZXcgRGF0ZShmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uc3RhcnRGcm9tKS5nZXRUaW1lKCkgLyAxMDAwLFxuICAgICAgICAgICBwYXR0ZXJuOiBcIjAwMDAtMDAtMDB+flwiICsgZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LmVuZEFmdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0RnJvbTogbmV3IERhdGUoZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LnN0YXJ0RnJvbSkuZ2V0VGltZSgpIC8gMTAwMCxcbiAgICAgICAgcGF0dGVybjogXCIwMDAwLTAwLTAwfn4wXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAqIENvbnZlcnRzIGEgZGF0ZSBzdHJpbmcgaW4gXCJZWVlZLU1NLUREXCIgZm9ybWF0IHRvIFwiREQtTW9udGgtWVlZWX5+MFwiLlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVN0cmluZyAtIFRoZSBpbnB1dCBkYXRlIHN0cmluZyBpbiBcIllZWVktTU0tRERcIiBmb3JtYXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gXCJERC1Nb250aC1ZWVlZfn4wXCIgZm9ybWF0LlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZm9ybWF0RGF0ZVN0cmluZyhcIjIwMjUtMDMtMjdcIik7IC8vIFJldHVybnMgXCIyNy1NYXJjaC0yMDI1fn4wXCJcbiAqIGBgYFxuICovXG4gZm9ybWF0RGF0ZVN0cmluZyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gIFxuICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgXG4gIGNvbnN0IG1vbnRoTmFtZXMgPSBbXG4gICAgICBcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsXG4gICAgICBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXG4gIF07XG4gIGNvbnN0IG1vbnRoID0gbW9udGhOYW1lc1tkYXRlLmdldE1vbnRoKCldO1xuXG4gIHJldHVybiBgJHtkYXl9LSR7bW9udGh9LSR7eWVhcn1+fjBgO1xufVxuXG4gIH1cbiJdfQ==
|
|
819
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlcXVlbmN5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFHLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBTTlELE1BQU0sT0FBTyxnQkFBZ0I7SUFxRTNCLFlBQ1UsSUFBZ0IsRUFDaEIsV0FBd0IsRUFDcEIsTUFBdUI7UUFGM0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXRFM0IsZUFBVSxHQUFrQjtZQUNqQyxTQUFTO1lBQ1QsVUFBVTtZQUNWLE9BQU87WUFDUCxPQUFPO1lBQ1AsS0FBSztZQUNMLE1BQU07WUFDTixNQUFNO1lBQ04sUUFBUTtZQUNSLFdBQVc7WUFDWCxTQUFTO1lBQ1QsVUFBVTtZQUNWLFVBQVU7U0FDWCxDQUFDO1FBRUssWUFBTyxHQUFrQjtZQUM5QixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQyxDQUFDLGdCQUFnQjtRQUVaLG1CQUFjLEdBQWtCO1lBQ3JDLCtCQUErQjtZQUMvQixpQ0FBaUM7WUFDakMsa0NBQWtDO1NBQ25DLENBQUM7UUFFSyxlQUFVLEdBQUc7WUFDbEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsZUFB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QVU7UUFDaEUsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDNUIsQ0FBQztRQUNGLElBQUksaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU5QixVQUFVLENBQUMsUUFBUSxDQUNqQixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3ZCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFF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QUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoQyxNQUFNLFVBQVUsR0FBRztZQUNmLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTTtZQUN0RCxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVU7U0FDbkUsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUUxQyxPQUFPLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQztJQUN0QyxDQUFDOytHQTkwQlksZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkF5RUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7ICByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IERFRkFVTFRfVElNRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90aW1lLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGcmVxdWVuY3lPYmplY3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZyZXF1ZW5jeS5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnJlcXVlbmN5U2VydmljZSB7XG4gIHB1YmxpYyBtb250aEFycmF5OiBBcnJheTxzdHJpbmc+ID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgcHVibGljIGRheU5hbWU6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgJ01vbmRheScsXG4gICAgJ1R1ZXNkYXknLFxuICAgICdXZWRuZXNkYXknLFxuICAgICdUaHVyc2RheScsXG4gICAgJ0ZyaWRheScsXG4gICAgJ1NhdHVyZGF5JyxcbiAgICAnU3VuZGF5JyxcbiAgXTsgLy8gZnVsbCBkYXkgbmFtZVxuXG4gIHB1YmxpYyBxdWFydGVybHlNb250aDogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICAnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLFxuICAgICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJyxcbiAgICAnTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInLFxuICBdO1xuXG4gIHB1YmxpYyBkYXRlQ29uZmlnID0ge1xuICAgIGZvcm1hdDogJ0REIE1NIFlZWVknLFxuICAgIHNob3dHb1RvQ3VycmVudDogZmFsc2UsXG4gIH07XG5cbiAgcHVibGljIGZyZXF1ZW5jeUluZm8gPSB7XG4gICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgIHBhdHRlcm46ICcnLFxuICAgIGNhc2U6ICcnLFxuICAgIGZhaWxlZEFmdGVyOiAwLFxuICAgIHdpbmRvdzogMCxcbiAgICB0aW1lSW4xMmhyOiAnJyxcbiAgICB0aW1lSW4yNEhyOiAnJyxcbiAgICBsaWZlY3ljbGVEZXRhaWxzOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICByZXBvcnRJZDogMCxcbiAgICBmYWlsZWRfdGltZV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgc3RhcnREYXRlOiAnJyxcbiAgfTtcblxuICBwdWJsaWMgZnJlcXVlbmN5RGV0YWlsczogb2JqZWN0ID0ge1xuICAgIHBhdHRlcm46ICcnLFxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHdpbmRvdzogMCxcbiAgICBmYWlsZWQ6IDAsXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxuICB9O1xuXG4gIHByaXZhdGUgZW52ITogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcbiAgKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHRpbWVGcm9tMTJoVG8yNGgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRpbWVfYXJyID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IG1lcmlkaWFuID0gdGltZV9hcnJbMV07XG4gICAgICBjb25zdCBocl9taW4gPSB0aW1lX2FyclswXS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xuICAgICAgY29uc3QgaHIgPSBocl9taW5bMF07XG4gICAgICBjb25zdCBtaW4gPSBocl9taW5bMV07XG5cbiAgICAgIGxldCByZXR1cm5fdGltZSA9ICcnO1xuXG4gICAgICBpZiAobWVyaWRpYW4/LnRvTG93ZXJDYXNlKCkgPT0gJ3BtJykge1xuICAgICAgICBpZiAoaHIgPT0gMTIpIHtcbiAgICAgICAgICByZXR1cm5fdGltZSA9IDEyICsgJzonICsgbWluICsgJzowMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaHIgPCAxMikge1xuICAgICAgICAgIHJldHVybl90aW1lID0gK2hyICsgMTIgKyAnOicgKyBtaW4gKyAnOjAwJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhyID09IDEyKSB7XG4gICAgICAgICAgcmV0dXJuX3RpbWUgPSAnMDA6JyArIG1pbiArICc6MDAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhyIDwgMTIpIHtcbiAgICAgICAgICByZXR1cm5fdGltZSA9IGhyICsgJzonICsgbWluICsgJzowMCc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVybl90aW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgdGltZUluMTIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBocjtcbiAgICAgIGxldCBtaW47XG4gICAgICBsZXQgbWVyaWRpYW47XG4gICAgICBpZiAodmFsdWUuc3BsaXQoJzonKVswXSA+PSAxMikge1xuICAgICAgICBociA9IHZhbHVlLnNwbGl0KCc6JylbMF0gPT09ICcxMicgPyAxMiA6IHZhbHVlLnNwbGl0KCc6JylbMF0gLSAxMjtcbiAgICAgICAgbWluID0gdmFsdWUuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgaWYgKG1pbi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgbWluID0gJzAnICsgbWluO1xuICAgICAgICB9XG4gICAgICAgIG1lcmlkaWFuID0gJ3BtJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhyID0gdmFsdWUuc3BsaXQoJzonKVswXSA9PSAnMDAnID8gMTIgOiB2YWx1ZS5zcGxpdCgnOicpWzBdO1xuICAgICAgICBtaW4gPSB2YWx1ZS5zcGxpdCgnOicpWzFdO1xuICAgICAgICBpZiAobWluLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBtaW4gPSAnMCcgKyBtaW47XG4gICAgICAgIH1cbiAgICAgICAgbWVyaWRpYW4gPSAnYW0nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhyICsgJzonICsgbWluICsgJyAnICsgbWVyaWRpYW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBmcmFtZXdvcmtTdGFydERhdGUocm93OiBhbnkpIHtcbiAgICBsZXQgY2FsY3VsYXRlZERheTogbnVtYmVyID0gMDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShwYXJzZUludChyb3cuc3RhcnRfZGF0ZSkgKiAxMDAwKS5nZXREYXkoKTtcbiAgICBjb25zdCBnZXREYXRlID0gbmV3IERhdGUocGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpICogMTAwMCkuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKS5nZXREYXkoKTtcbiAgICBjb25zdCBzdGFydE1vbnRoID0gbmV3IERhdGUocGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpICogMTAwMCkuZ2V0TW9udGgoKTtcblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSA8IERhdGUubm93KCkgLyAxMDAwICYmXG4gICAgICAocm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IHdlZWsnIHx8XG4gICAgICAgIHJvdy5mcmVxdWVuY3lfdGVtcGxhdGUgPT09ICdldmVyeSAyIHdlZWtzJyB8fFxuICAgICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlID09PSAnZXZlcnkgMyB3ZWVrcycpXG4gICAgKSB7XG4gICAgICBsZXQgZGF5c1RvQmVBZGRlZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICBpZiAoKGN1cnJlbnREYXRlICsgaSkgJSA3ID09PSBzdGFydERhdGUpIHtcbiAgICAgICAgICBkYXlzVG9CZUFkZGVkID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdGltZXN0YW1wVG9CZUFkZGVkID0gZGF5c1RvQmVBZGRlZCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG4gICAgICBjYWxjdWxhdGVkRGF5ID0gbmV3IERhdGUoXG4gICAgICAgIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgdGltZXN0YW1wVG9CZUFkZGVkXG4gICAgICApLmdldFRpbWUoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGFyc2VJbnQocm93LnN0YXJ0X2RhdGUpIDwgRGF0ZS5ub3coKSAvIDEwMDAgJiZcbiAgICAgICEoXG4gICAgICAgIHJvdy5mcmVxdWVuY3lfdGVtcGxhdGUgPT09ICdldmVyeSB3ZWVrJyB8fFxuICAgICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlID09PSAnZXZlcnkgMiB3ZWVrcycgfHxcbiAgICAgICAgcm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IDMgd2Vla3MnXG4gICAgICApICYmXG4gICAgICByb3cuZnJlcXVlbmN5X3RlbXBsYXRlICE9PSAnZXZlcnkgZGF5J1xuICAgICkge1xuICAgICAgY29uc3QgbW9tZW50VW5peCA9IG1vbWVudChcbiAgICAgICAgZ2V0RGF0ZSArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAnIDAwOjAwJyxcbiAgICAgICAgJ0RELU1NLVlZWVkgSEg6bW0nXG4gICAgICApLnVuaXgoKTtcbiAgICAgIGNhbGN1bGF0ZWREYXkgPSBtb21lbnRVbml4ICogMTAwMDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcm93LmZyZXF1ZW5jeV90ZW1wbGF0ZSA9PT0gJ2V2ZXJ5IGRheScgJiZcbiAgICAgIHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSA8IERhdGUubm93KCkgLyAxMDAwXG4gICAgKSB7XG4gICAgICBjYWxjdWxhdGVkRGF5ID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsY3VsYXRlZERheSA9IHBhcnNlSW50KHJvdy5zdGFydF9kYXRlKSAqIDEwMDA7XG4gICAgfVxuICAgIHJldHVybiBjYWxjdWxhdGVkRGF5IC8gMTAwMDtcbiAgfVxuXG4gIGZyYW1ld29ya0ZyZXF1ZW5jeShmcmVxdWVuY3k6IGFueSwgc3RhcnRfZGF0ZTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0X2RhdGUgKiAxMDAwKTtcbiAgICAgIGNvbnN0IGZpcnN0SGFsZk1vbnRoID0gWycxJywgJzInLCAnMycsICc0JywgJzUnLCAnNiddO1xuICAgICAgY29uc3Qgc2Vjb25kSGFsZk1vbnRoID0gWyc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddO1xuICAgICAgY29uc3QgZ2V0RGF5RGF0YSA9IHN0YXJ0RGF0ZS5nZXREYXkoKSA9PT0gMCA/IDcgOiBzdGFydERhdGUuZ2V0RGF5KCk7XG4gICAgICBjb25zdCBtb250aCA9IHN0YXJ0RGF0ZS5nZXRNb250aCgpO1xuICAgICAgbGV0IHF1YXJ0ZXJQYXR0ZXJuID0gJ34xLDQsNywxMH4wJztcbiAgICAgIHN3aXRjaCAobW9udGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHF1YXJ0ZXJQYXR0ZXJuID0gJ34xLDQsNywxMH4wJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBxdWFydGVyUGF0dGVybiA9ICd+Miw1LDgsMTF+MCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcXVhcnRlclBhdHRlcm4gPSAnfjMsNiw5LDEyfjAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gXTtcbiAgICAgIGxldCBmcmVxdWVuY3lfcGF0dGVybjtcblxuICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgICAvLyBAID0+IGRheSAoMSB0byA3KVxuICAgICAgLy8gIyA9PiBtb250aCAoMSB0byAxMilcbiAgICAgIC8vID8gPT4gbW9udGggJSAyID09IDAgPyBcIjIsNCw2LDgsMTAsMTJcIiA6IFwiMSwzLDUsNyw5LDExXCJcblxuICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IHdlZWsnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzJ+JyArIGdldERheURhdGEgKyAnfjB+MSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnb25lIHRpbWUnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnMH4nICtcbiAgICAgICAgICBzdGFydERhdGUuZ2V0RnVsbFllYXIoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICBzdGFydERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBkYXknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjEnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IGFsdGVybmF0ZSBkYXknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDEwIGRheXMnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJzF+MH4wfjEwJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAyIHdlZWtzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcyficgKyBnZXREYXlEYXRhICsgJ34wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IGZvcnRuaWdodCcpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnMX4nICsgZ2V0RGF5RGF0YSArICd+MH4xNCc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgMyB3ZWVrcycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnMn4nICsgZ2V0RGF5RGF0YSArICd+MH4zJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBtb250aCcpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICczficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34xLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMn4wJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSA0NSBkYXlzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcxfjB+MH40NSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgYWx0ZXJuYXRlIG1vbnRoJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9XG4gICAgICAgICAgJzN+JyArXG4gICAgICAgICAgc3RhcnREYXRlLmdldERhdGUoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgJSAyID09IDBcbiAgICAgICAgICAgID8gJzIsNCw2LDgsMTAsMTInXG4gICAgICAgICAgICA6ICcxLDMsNSw3LDksMTEnKSArXG4gICAgICAgICAgJ34wJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSBxdWFydGVyJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICc3ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgcXVhcnRlclBhdHRlcm47XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDEyMCBkYXlzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICcxfjB+MH4xMjAnO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdoYWxmIHllYXJseScpIHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gZmlyc3RIYWxmTW9udGguaW5kZXhPZihcbiAgICAgICAgICAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluZGV4MiA9IHNlY29uZEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9XG4gICAgICAgICAgaW5kZXgxID4gLTFcbiAgICAgICAgICAgID8gJ34nICtcbiAgICAgICAgICAgICAgZmlyc3RIYWxmTW9udGhbaW5kZXgxXSArXG4gICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgIHNlY29uZEhhbGZNb250aFtpbmRleDFdICtcbiAgICAgICAgICAgICAgJ34wJ1xuICAgICAgICAgICAgOiAnficgK1xuICAgICAgICAgICAgICBmaXJzdEhhbGZNb250aFtpbmRleDJdICtcbiAgICAgICAgICAgICAgJywnICtcbiAgICAgICAgICAgICAgc2Vjb25kSGFsZk1vbnRoW2luZGV4Ml0gK1xuICAgICAgICAgICAgICAnfjAnO1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9ICczficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgcGF0dGVybjtcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDEwO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICd5ZWFybHknKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnNH4nICsgc3RhcnREYXRlLmdldERhdGUoKSArICd+JyArIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpICsgJ34xJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgMiB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjInO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAzIHllYXJzJykge1xuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybiA9XG4gICAgICAgICAgJzR+JyArIHN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAnficgKyAoc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxKSArICd+Myc7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ2V2ZXJ5IDQgeWVhcnMnKSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID1cbiAgICAgICAgICAnNH4nICsgc3RhcnREYXRlLmdldERhdGUoKSArICd+JyArIChzdGFydERhdGUuZ2V0TW9udGgoKSArIDEpICsgJ340JztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnZXZlcnkgNSB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjUnO1xuICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPT09ICdldmVyeSAxMCB5ZWFycycpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPVxuICAgICAgICAgICc0ficgKyBzdGFydERhdGUuZ2V0RGF0ZSgpICsgJ34nICsgKHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSkgKyAnfjEwJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAndG8gYmUgZGVjaWRlZCBsYXRlcicpIHtcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm4gPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuID0gJyc7XG4gICAgICB9XG4gICAgICAvLyB0aGlzLmVkaXREYXRhLmZyZXF1ZW5jeV9kZXRhaWxzID0gZnJlcXVlbmN5X3BhdHRlcm47XG5cbiAgICAgIHJldHVybiB7IGZyZXF1ZW5jeV9wYXR0ZXJuLCBjb250aW51b3VzX2ZhaWxlZF9kYXlzIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiB7IGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJywgY29udGludW91c19mYWlsZWRfZGF5czogMCB9O1xuICAgIH1cbiAgfVxuXG4gIHNob3J0SGFuZF9mcmVxQ2FsKGZyZXF1ZW5jeTogYW55LCBkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcj86IGFueSkge1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXG4gICAgXTtcbiAgICBsZXQgZnJlcXVlbmN5X2RldGFpbHM7XG4gICAgbGV0IGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAwO1xuICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgZGF0ZV92YWx1ZS5zZXRNb250aChcbiAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcbiAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgID8udmFsdWUgLSAxXG4gICAgICAgIDogbW9udGhcbiAgICApO1xuICAgIGlmICgheWVhcikge1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoeWVhcik7XG4gICAgfVxuICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShkYXkpO1xuICAgIGxldCBxdWFydGVyUGF0dGVybiA9ICd+MSw0LDcsMTB+MCc7XG4gICAgY29uc3QgZmlyc3RIYWxmTW9udGggPSBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2J107XG4gICAgY29uc3Qgc2Vjb25kSGFsZk1vbnRoID0gWyc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddO1xuICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMzpcbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgcXVhcnRlclBhdHRlcm4gPSAnfjEsNCw3LDEwfjAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgNzpcbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIHF1YXJ0ZXJQYXR0ZXJuID0gJ34yLDUsOCwxMX4wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDExOlxuICAgICAgICBxdWFydGVyUGF0dGVybiA9ICd+Myw2LDksMTJ+MCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBnZXREYXkgPSBkYXRlX3ZhbHVlLmdldERheSgpID09PSAwID8gNyA6IGRhdGVfdmFsdWUuZ2V0RGF5KCk7XG4gICAgc3dpdGNoIChmcmVxdWVuY3kpIHtcbiAgICAgIGNhc2UgJ2V2ZXJ5IHdlZWsnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcyficgKyBnZXREYXkgKyAnfjB+MSc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvbmUgdGltZSc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnMH4nICtcbiAgICAgICAgICAnJyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAnficgK1xuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICBkYXRlX3ZhbHVlLmdldERhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSBkYXknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IGFsdGVybmF0ZSBkYXknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4yJztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDEwIGRheXMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xMCc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxNTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSAyIHdlZWtzJzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnMn4nICsgZ2V0RGF5ICsgJ34wfjInO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgZm9ydG5pZ2h0JzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnMX4nICsgZ2V0RGF5ICsgJ34wfjE0JztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDMgd2Vla3MnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcyficgKyBnZXREYXkgKyAnfjB+Myc7XG4gICAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAxMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmVyeSBtb250aCc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnM34nICsgZGF0ZV92YWx1ZS5nZXREYXRlKCkgKyAnfjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyfjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgNDUgZGF5cyc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzF+MH4wfjQ1JztcbiAgICAgICAgY29udGludW91c19mYWlsZWRfZGF5cyA9IDE1O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IGFsdGVybmF0ZSBtb250aCc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID1cbiAgICAgICAgICAnM34nICtcbiAgICAgICAgICBkYXRlX3ZhbHVlLmdldERhdGUoKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICAoKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICUgMiA9PT0gMFxuICAgICAgICAgICAgPyAnMiw0LDYsOCwxMCwxMidcbiAgICAgICAgICAgIDogJzEsMyw1LDcsOSwxMScpICtcbiAgICAgICAgICAnfjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgcXVhcnRlcic6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzd+JyArIGRhdGVfdmFsdWUuZ2V0RGF0ZSgpICsgcXVhcnRlclBhdHRlcm47XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZlcnkgMTIwIGRheXMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9ICcxfjB+MH4xMjAnO1xuICAgICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMTU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGFsZiB5ZWFybHknOlxuICAgICAgICBjb25zdCBpbmRleDEgPSBmaXJzdEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluZGV4MiA9IHNlY29uZEhhbGZNb250aC5pbmRleE9mKFxuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPVxuICAgICAgICAgIGluZGV4MSA+IC0xXG4gICAgICAgICAgICA/ICd+JyArXG4gICAgICAgICAgICAgIGZpcnN0SGFsZk1vbnRoW2luZGV4MV0gK1xuICAgICAgICAgICAgICAnLCcgK1xuICAgICAgICAgICAgICBzZWNvbmRIYWxmTW9udGhbaW5kZXgxXSArXG4gICAgICAgICAgICAgICd+MCdcbiAgICAgICAgICAgIDogJ34nICtcbiAgICAgICAgICAgICAgZmlyc3RIYWxmTW9udGhbaW5kZXgyXSArXG4gICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgIHNlY29uZEhhbGZNb250aFtpbmRleDJdICtcbiAgICAgICAgICAgICAgJ34wJztcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPSAnM34nICsgZGF0ZV92YWx1ZS5nZXREYXRlKCkgKyBwYXR0ZXJuO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FubnVhbCc6XG4gICAgICBjYXNlICd5ZWFybHknOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDIgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjInO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDMgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDQgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDUgeWVhcnMnOlxuICAgICAgICBmcmVxdWVuY3lfZGV0YWlscyA9XG4gICAgICAgICAgJzR+JyArXG4gICAgICAgICAgZGF0ZV92YWx1ZS5nZXREYXRlKCkgK1xuICAgICAgICAgICd+JyArXG4gICAgICAgICAgKGRhdGVfdmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAnfjUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2ZXJ5IDEwIHllYXJzJzpcbiAgICAgICAgZnJlcXVlbmN5X2RldGFpbHMgPVxuICAgICAgICAgICc0ficgK1xuICAgICAgICAgIGRhdGVfdmFsdWUuZ2V0RGF0ZSgpICtcbiAgICAgICAgICAnficgK1xuICAgICAgICAgIChkYXRlX3ZhbHVlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgJ34xMCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb25nb2luZyc6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzEwfjB+MH4wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0byBiZSBkZWNpZGVkIGxhdGVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzID0gJzV+MH4wfjAnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0dGVybjogZnJlcXVlbmN5X2RldGFpbHMsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBjb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgIH07XG4gIH1cblxuICBnZXRPbkNvbXBsZXRpb25PZlJlc3BvbnNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdyZXBvcnRzL29uQ29tcGxldGlvbk9mUmVwb3J0cycsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBjaGFuZ2VUaW1lWm9uZShkYXRlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IGludkRhdGUgPSBuZXcgRGF0ZShcbiAgICAgIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICB0aW1lWm9uZTogdGhpcy5hdXRoU2VydmljZT8udXNlckRldGFpbHM/LnRpbWV6b25lLFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBpbnZEYXRlO1xuICB9XG5cbiAgZ2V0UmVzcG9uc2liaWxpdHlMaXN0KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8YW55PihcbiAgICAgICAgdGhpcy5lbnYucmVzcG9uc2liaWxpdHlQb3N0ICsgJ21hbmFnZV9yZXNwb25zaWJpbGl0aWVzX3JlcG9ydHMnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMSkpO1xuICB9XG5cbiAgZ2V0UmVzcG9uc2liaWxpdGllc0NvdW50KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8YW55PihcbiAgICAgICAgdGhpcy5lbnYucmVzcG9uc2liaWxpdHlQb3N0ICsgJ21hbmFnZV9yZXNwb25zaWJpbGl0aWVzX3JlcG9ydHNfY291bnQnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMSkpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGN1cnJlbnREYXRlPy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcoY3VycmVudERhdGU/LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZT8uZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGludG8gYSBzdGFuZGFyZGl6ZWQgRnJlcXVlbmN5T2JqZWN0IGZvcm1hdC5cbiAgICogXG4gICAqIEBwYXJhbSBmcmVxdWVuY3kgLSBUaGUgaW5wdXQgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAtIGNhc2U6IFRoZSB0eXBlIG9mIGZyZXF1ZW5jeSAoJ29uZV90aW1lJyB8ICdkYWlseScgfCAnd2Vla2x5JyB8ICdtb250aGx5JyB8ICdxdWFydGVybHknIHwgJ3NlbWVzdGVyJyB8ICd5ZWFybHknIHwgJ3JhbmRvbScgfCAnb25nb2luZycgfCAnb25fY29tcGxldGlvbl9vZicgfCAnYmlhbm51YWxseScpXG4gICAqIC0gd2luZG93OiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgdGhlIHRhc2sgY2FuIGJlIHN0YXJ0ZWRcbiAgICogLSBmYWlsZWRBZnRlcjogTnVtYmVyIG9mIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHRhc2sgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgICogLSBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBOdW1iZXIgb2YgZGF5cyBhZnRlciB3aGljaCB0aGUgdGFzayBpcyBhdXRvLWRlYWN0aXZhdGVkXG4gICAqIC0gZGF5OiBUaGUgZGF5IG9mIG9jY3VycmVuY2VcbiAgICogLSB0aW1lSW4yNEhyOiBUaW1lIGluIDI0LWhvdXIgZm9ybWF0XG4gICAqIC0gZXZlcnk6IEZyZXF1ZW5jeSBpbnRlcnZhbFxuICAgKiAtIHNlbGVjdGVkRGF5OiBBcnJheSBvZiBzZWxlY3RlZCBkYXlzIGZvciB3ZWVrbHkgZnJlcXVlbmN5ICgxLTcgcmVwcmVzZW50aW5nIE1vbmRheS1TdW5kYXkpXG4gICAqIC0gc2VsZWN0ZWRNb250aDogQXJyYXkgb2Ygc2VsZWN0ZWQgbW9udGhzICgwLTExIHJlcHJlc2VudGluZyBKYW51YXJ5LURlY2VtYmVyKVxuICAgKiAtIHN0YXJ0RnJvbTogVW5peCB0aW1lc3RhbXAgZm9yIHRoZSBzdGFydCBkYXRlXG4gICAqIC0gbGlmZWN5Y2xlRGV0YWlsczogU3RyaW5nIGluIGZvcm1hdCBcIllZWVktTU0tRER+fk5cIiB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXNcbiAgICogLSByYW5kb21UeXBlU2VsZWN0ZWQ6IEluZGV4IGZvciByYW5kb20gZnJlcXVlbmN5IHR5cGUgKDA6IHdlZWtseSwgMTogbW9udGhseSwgMjogcXVhcnRlcmx5LCAzOiB5ZWFybHkpXG4gICAqIC0gcmFuZG9tSW5zdGFuY2VzOiBOdW1iZXIgb2YgcmFuZG9tIG9jY3VycmVuY2VzXG4gICAqIC0gc2VsZWN0ZWRUeXBlOiBOdW1iZXIgb2YgcmVtaW5kZXJzIGZvciBvbmdvaW5nIGZyZXF1ZW5jeVxuICAgKiAtIHNlbGVjdGVkT25nb2luZ1R5cGU6IEluZGV4IGZvciBvbmdvaW5nIGZyZXF1ZW5jeSB0eXBlICgxOiB3ZWVrLCAyOiBtb250aCwgMzogcXVhcnRlciwgNDogc2VtZXN0ZXIsIDU6IHllYXIpXG4gICAqIFxuICAgKiBAcmV0dXJucyBBIEZyZXF1ZW5jeU9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICAgKiAtIHR5cGU6IEZyZXF1ZW5jeSB0eXBlXG4gICAqIC0gc3RhcnRCZWZvcmU6IERheXMgYmVmb3JlIHRhc2sgY2FuIHN0YXJ0XG4gICAqIC0gZW5kQWZ0ZXI6IERheXMgYWZ0ZXIgd2hpY2ggdGFzayBmYWlsc1xuICAgKiAtIGF1dG9EZWFjdGl2YXRlOiBEYXlzIGFmdGVyIHdoaWNoIHRhc2sgaXMgZGVhY3RpdmF0ZWRcbiAgICogLSBkYXk6IERheSBvZiBvY2N1cnJlbmNlXG4gICAqIC0gdGltZTogVGltZSBpbiAyNC1ob3VyIGZvcm1hdFxuICAgKiAtIHJlcGVhdE9wdGlvbnM6IHtcbiAgICogICAgIGV2ZXJ5OiBudW1iZXIsXG4gICAqICAgICByZXBlYXRPbjogc3RyaW5nIChiaW5hcnkgcmVwcmVzZW50YXRpb24gb2Ygc2VsZWN0ZWQgZGF5cy9tb250aHMpLFxuICAgKiAgICAgbGlmZWN5Y2xlOiB7XG4gICAqICAgICAgIHN0YXJ0RnJvbTogc3RyaW5nIChZWVlZLU1NLUREKSxcbiAgICogICAgICAgZW5kQnk/OiBzdHJpbmcgKFlZWVktTU0tREQpLFxuICAgKiAgICAgICBlbmRBZnRlcj86IG51bWJlclxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogLSByYW5kb20/OiB7IHR5cGU6IHN0cmluZywgb2NjdXJyZW5jZTogbnVtYmVyIH1cbiAgICogLSBvbkNvbXBsZXRlOiB7fVxuICAgKiAtIG9uR29pbmc6IHsgcmVtaW5kZXJzOiBudW1iZXIsIHN0YXJ0T2Y6ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAnc2VtZXN0ZXInIHwgJ3llYXInIH1cbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZnJlcXVlbmN5ID0ge1xuICAgKiAgIGNhc2U6ICd3ZWVrbHknLFxuICAgKiAgIHdpbmRvdzogMixcbiAgICogICBmYWlsZWRBZnRlcjogMSxcbiAgICogICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAzLFxuICAgKiAgIGRheTogMSxcbiAgICogICB0aW1lSW4yNEhyOiAnMDk6MDA6MDAnLFxuICAgKiAgIGV2ZXJ5OiAxLFxuICAgKiAgIHNlbGVjdGVkRGF5OiBbMSwgMywgNV0sIC8vIE1vbmRheSwgV2VkbmVzZGF5LCBGcmlkYXlcbiAgICogICBzdGFydEZyb206IDE2Nzg5MDAwMDAsXG4gICAqICAgbGlmZWN5Y2xlRGV0YWlsczogJzIwMjQtMTItMzF+fjEwJ1xuICAgKiB9O1xuICAgKiBjb25zdCByZXN1bHQgPSBzZXRGcmVxdWVuY3lPYmplY3QoZnJlcXVlbmN5KTtcbiAgICogYGBgXG4gICAqL1xuICBzZXRGcmVxdWVuY3lPYmplY3QoZnJlcXVlbmN5OiBhbnkpOiBGcmVxdWVuY3lPYmplY3QgfCBudWxsIHtcbiAgICBjb25zdCByZXBlYXRPcHRpb25zID0gdGhpcy5yZXBlYXRPcHRpb25zKGZyZXF1ZW5jeSk7XG4gICAgY29uc3QgbGlmZWN5Y2xlRGV0YWlscyA9IGZyZXF1ZW5jeS5saWZlY3ljbGVEZXRhaWxzLnNwbGl0KCd+ficpO1xuICAgIGNvbnN0IGZyZXF1ZW5jeU9iamVjdDogRnJlcXVlbmN5T2JqZWN0ID0ge1xuICAgICAgdHlwZTogZnJlcXVlbmN5LmNhc2UsXG4gICAgICBzdGFydEJlZm9yZTogZnJlcXVlbmN5LndpbmRvdyxcbiAgICAgIGVuZEFmdGVyOiBmcmVxdWVuY3kuZmFpbGVkQWZ0ZXIsXG4gICAgICBhdXRvRGVhY3RpdmF0ZTogZnJlcXVlbmN5LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXG4gICAgICBkYXk6IGZyZXF1ZW5jeS5kYXksIC8vIGhvdyB0byBicmVhayBkYXkgP1xuICAgICAgdGltZTogZnJlcXVlbmN5LnRpbWVJbjI0SHIsXG4gICAgICByZXBlYXRPcHRpb25zOiB7XG4gICAgICAgIGV2ZXJ5OiBmcmVxdWVuY3kuZXZlcnksXG4gICAgICAgIHJlcGVhdE9uOiByZXBlYXRPcHRpb25zLFxuICAgICAgICBsaWZlY3ljbGU6IHtcbiAgICAgICAgICBzdGFydEZyb206IG1vbWVudChmcmVxdWVuY3kuc3RhcnRGcm9tICogMTAwMCkuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICAgICAgZW5kQnk6bGlmZWN5Y2xlRGV0YWlsc1swXSAhPT0gJzAwMDAtMDAtMDAnID8gbW9tZW50KGxpZmVjeWNsZURldGFpbHNbMF0gLCAnREQtTU1NTS1ZWVlZJykuZm9ybWF0KCdZWVlZLU1NLUREJykgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5kQWZ0ZXI6IGxpZmVjeWNsZURldGFpbHNbMV0gIT09ICcwJyA/IHBhcnNlSW50KGxpZmVjeWNsZURldGFpbHNbMV0pIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByYW5kb206IHRoaXMuZ2V0UmFuZG9tRnJlcXVlbmN5KGZyZXF1ZW5jeSksXG4gICAgICBvbkNvbXBsZXRlOiB7fSwgLy9UT0RPOiBhZGQgb25Db21wbGV0ZVxuICAgICAgb25Hb2luZzogdGhpcy5nZXRPbmdvaW5nKGZyZXF1ZW5jeSksXG4gICAgfSAgXG4gICAgY29uc29sZS5sb2coZnJlcXVlbmN5T2JqZWN0LGZyZXF1ZW5jeSwgICdmcmVxdWVuY3lPYmplY3QnKTtcbiAgICByZXR1cm4gZnJlcXVlbmN5T2JqZWN0O1xuICB9IFxuXG4gIHJlcGVhdE9wdGlvbnMoZnJlcXVlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgaWYoZnJlcXVlbmN5Py5zZWxlY3RlZERheT8ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHdlZWtEYXlzID0gW107XG4gICAgIGZvcihsZXQgaSA9IDA7IGkgPCA3OyBpICsrKSB7XG4gICAgICBpZihmcmVxdWVuY3kuc2VsZWN0ZWREYXkuaW5jbHVkZXMoaSArIDEpKSB7XG4gICAgICAgIHdlZWtEYXlzLnB1c2goMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3ZWVrRGF5cy5wdXNoKDApO1xuICAgICAgfVxuICAgICB9XG4gICAgIGNvbnNvbGUubG9nKHdlZWtEYXlzLCAnd2Vla0RheXMnLCB3ZWVrRGF5cy5qb2luKCcnKSk7XG4gICAgIHJldHVybiB3ZWVrRGF5cy5qb2luKCcnKTtcbiAgIH0gZWxzZSBpZihmcmVxdWVuY3k/LnNlbGVjdGVkTW9udGg/Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBtb250aHMgPSBbIF07XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IDEyOyBpICsrKSB7XG4gICAgICBpZihmcmVxdWVuY3k/LnNlbGVjdGVkTW9udGg/LmluY2x1ZGVzKGkpKSB7XG4gICAgICAgIG1vbnRocy5wdXNoKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9udGhzLnB1c2goMCk7XG4gICAgICB9XG4gICB9XG4gICByZXR1cm4gbW9udGhzLmpvaW4oJycpO1xuICAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gICB9XG4gIH1cblxuICBnZXRPbmdvaW5nKGZyZXF1ZW5jeTogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbWluZGVyczogZnJlcXVlbmN5Py5zZWxlY3RlZFR5cGUsXG4gICAgICBzdGFydE9mOiBmcmVxdWVuY3k/LnNlbGVjdGVkVHlwZSA/ICBbJ3dlZWsnLCdtb250aCcgLCdxdWFydGVyJyAsJ3NlbWVzdGVyJyAsJ3llYXInXVtmcmVxdWVuY3k/LnNlbGVjdGVkT25nb2luZ1R5cGUgLSAxXSA6ICcnXG4gICAgfVxuICB9XG4gIGdldFJhbmRvbUZyZXF1ZW5jeShmcmVxdWVuY3k6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGZyZXF1ZW5jeSwgJ2ZyZXF1ZW5jeScpO1xuICAgIHJldHVybiB7XG4gICAgIHR5cGU6IFsnd2Vla2x5JywgJ21vbnRobHknLCAncXVhcnRlcmx5JywgJ3llYXJseSddW2ZyZXF1ZW5jeT8ucmFuZG9tVHlwZVNlbGVjdGVkXSxcbiAgICAgb2NjdXJyZW5jZTogZnJlcXVlbmN5Py5yYW5kb21JbnN0YW5jZXNcbiAgICB9XG4gIH1cblxuICBjcmVhdGVGcmVxdWVuY3lQYXR0ZXJuKGZyZXF1ZW5jeTogYW55KSB7XG4gICAgbGV0IHBhdHRlcm4gPSAnJztcbiAgICBsZXQgc2VsZWN0ZWREYXkgPSBmcmVxdWVuY3kuZGF5XG4gICAgc3dpdGNoIChmcmVxdWVuY3kudHlwZSkge1xuXG4gICAgICBjYXNlICdvbmVfdGltZSc6XG4gICAgICAgIGxldCBkYXRlX3ZhbHVlID0gZnJlcXVlbmN5LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uc3RhcnRGcm9tPy5zcGxpdCgnLScpO1xuXG4gICAgICAgIHBhdHRlcm4gPVxuICAgICAgICAgICcwficgK1xuICAgICAgICAgICcnICtcbiAgICAgICAgICBkYXRlX3ZhbHVlWzBdICtcbiAgICAgICAgICAnficgK1xuICAgICAgICAgIChkYXRlX3ZhbHVlWzFdKSArXG4gICAgICAgICAgJ34nICtcbiAgICAgICAgICBkYXRlX3ZhbHVlWzJdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhaWx5JzpcbiAgICAgICAgcGF0dGVybiA9IGAxfjB+MH4ke2ZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5ldmVyeX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWtseSc6XG4gICAgICAgIHBhdHRlcm4gPSBgMn4ke3RoaXMuZ2V0RGF5KGZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5yZXBlYXRPbil9fjB+JHtmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8uZXZlcnl9YDtcbiAgICAgICAgYnJlYWs7ICAgXG4gICAgICBjYXNlICdtb250aGx5JzpcbiAgICAgICAgcGF0dGVybiA9XG4gICAgICAgICAgYDN+JHtzZWxlY3RlZERheX1+JHt0aGlzLmdldE1vbnRoKGZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5yZXBlYXRPbil9fjBgO1xuICAgICAgICBicmVhaztcbiAgICAgXG4gICAgICBjYXNlICdxdWFydGVybHknOlxuICAgICAgICBwYXR0ZXJuID0gYDd+JHtzZWxlY3RlZERheX1+JHt0aGlzLmdldE1vbnRoKGZyZXF1ZW5jeS5yZXBlYXRPcHRpb25zPy5yZXBlYXRPbil9fjBgO1xuICAgICAgICBicmVhaztcbiAgICAgXG4gICAgIGNhc2UgJ3NlbWVzdGVyJzpcbiAgICAgIHBhdHRlcm4gPSBgOX4ke3NlbGVjdGVkRGF5fX4ke3RoaXMuZ2V0TW9udGgoZnJlcXVlbmN5LnJlcGVhdE9wdGlvbnM/LnJlcGVhdE9uKX1+MGA7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llYXJseSc6XG4gICAgICAgIHBhdHRlcm4gPVxuICAgICAgICAgIGA0fiR7c2VsZWN0ZWREYXl9fiR7dGhpcy5nZXRNb250aChmcmVxdWVuY3kucmVwZWF0T3B0aW9ucz8ucmVwZWF0T24pfX4xYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgICAgY29uc3QgdHlwZSA9IFsnd2VlaycsICdtb250aCcsICdxdWFydGVyJywgJ3NlbWVzdGVyJywgJ3llYXInXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0eXBlLmluZGV4T2YoZnJlcXVlbmN5Lm9uR29pbmc/LnN0YXJ0T2YpO1xuICAgICAgICBwYXR0ZXJuID0gYDEwfiR7ZnJlcXVlbmN5Lm9uR29pbmc/LnJlbWluZGVyc31+JHtpbmRleH1+MGA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmFuZG9tJzogXG4gICAgICBsZXQgcmFuZG9tVHlwZSA9IFsnd2Vla2x5JywgJ21vbnRobHknLCAncXVhcnRlcmx5JywgJ3llYXJseSddO1xuICAgICAgbGV0IHJhbmRvbUluZGV4ID0gcmFuZG9tVHlwZS5pbmRleE9mKGZyZXF1ZW5jeS5yYW5kb20udHlwZSk7XG4gICAgICBwYXR0ZXJuID0gYDh+JHtyYW5kb21JbmRleCArIDF9fiR7cmFuZG9tSW5kZXh9fiR7ZnJlcXVlbmN5LnJhbmRvbS5vY2N1cnJlbmNlfWA7XG4gICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhdHRlcm4gPSBgNX4ke2ZyZXF1ZW5jeS5yYW5kb21JbnN0YW5jZXN9fjB+MGA7XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbiAgZ2V0RGF5KHJlcGVhdE9wdGlvbnM6IHN0cmluZykge1xuICAgIGNvbnN0IGRheSA9IHJlcGVhdE9wdGlvbnMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xuICAgIGNvbnN0IGRheU5hbWUgPSBbXTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgNzsgaSArKykge1xuICAgICAgaWYoZGF5W2ldID09PSAxKSB7XG4gICAgICAgIGRheU5hbWUucHVzaChpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXlOYW1lLmpvaW4oJywnKTtcbiAgfVxuXG4gIGdldE1vbnRoKHJlcGVhdE9wdGlvbnM6IHN0cmluZykge1xuICAgICAgY29uc3QgbW9udGggPSByZXBlYXRPcHRpb25zLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcbiAgICAgIGNvbnN0IG1vbnRoTmFtZSA9IFtdO1xuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IDEyOyBpICsrKSB7XG4gICAgICAgIGlmKG1vbnRoW2ldID09PSAxKSB7XG4gICAgICAgICAgbW9udGhOYW1lLnB1c2goaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbW9udGhOYW1lLmpvaW4oJywnKTtcbiAgfVxuICAgIFxuICAgIGdldExpZmVjeWNsZVBhdHRlcm4gKGZyZXF1ZW5jeTogYW55KSB7XG4gICAgICBsZXQgcGF0dGVybiA9IFwiMDAwMC0wMC0wMH5+MFwiO1xuICAgICAgaWYoIWZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5lbmRCeSAmJiAhZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LmVuZEFmdGVyKSB7XG4gICAgICAgIHJldHVybiAge1xuICAgICAgICAgIHN0YXJ0RnJvbTogbmV3IERhdGUoZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LnN0YXJ0RnJvbSkuZ2V0VGltZSgpIC8gMTAwMCxcbiAgICAgICAgICAgcGF0dGVyblxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LmVuZEJ5KSB7XG4gICAgICAgIHJldHVybiAge1xuICAgICAgICAgIHN0YXJ0RnJvbTogbmV3IERhdGUoZnJlcXVlbmN5Py5yZXBlYXRPcHRpb25zPy5saWZlY3ljbGU/LnN0YXJ0RnJvbSkuZ2V0VGltZSgpIC8gMTAwMCxcbiAgICAgICAgICAgcGF0dGVybjogdGhpcy5mb3JtYXREYXRlU3RyaW5nKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5lbmRCeSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5lbmRBZnRlcikge1xuICAgICAgICByZXR1cm4gIHtcbiAgICAgICAgICBzdGFydEZyb206IG5ldyBEYXRlKGZyZXF1ZW5jeT8ucmVwZWF0T3B0aW9ucz8ubGlmZWN5Y2xlPy5zdGFydEZyb20pLmdldFRpbWUoKSAvIDEwMDAsXG4gICAgICAgICAgIHBhdHRlcm46IFwiMDAwMC0wMC0wMH5+XCIgKyBmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uZW5kQWZ0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRGcm9tOiBuZXcgRGF0ZShmcmVxdWVuY3k/LnJlcGVhdE9wdGlvbnM/LmxpZmVjeWNsZT8uc3RhcnRGcm9tKS5nZXRUaW1lKCkgLyAxMDAwLFxuICAgICAgICBwYXR0ZXJuOiBcIjAwMDAtMDAtMDB+fjBcIlxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICogQ29udmVydHMgYSBkYXRlIHN0cmluZyBpbiBcIllZWVktTU0tRERcIiBmb3JtYXQgdG8gXCJERC1Nb250aC1ZWVlZfn4wXCIuXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyaW5nIC0gVGhlIGlucHV0IGRhdGUgc3RyaW5nIGluIFwiWVlZWS1NTS1ERFwiIGZvcm1hdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiBcIkRELU1vbnRoLVlZWVl+fjBcIiBmb3JtYXQuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBmb3JtYXREYXRlU3RyaW5nKFwiMjAyNS0wMy0yN1wiKTsgLy8gUmV0dXJucyBcIjI3LU1hcmNoLTIwMjV+fjBcIlxuICogYGBgXG4gKi9cbiBmb3JtYXREYXRlU3RyaW5nKGRhdGVTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBcbiAgY29uc3QgbW9udGhOYW1lcyA9IFtcbiAgICAgIFwiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIixcbiAgICAgIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJcbiAgXTtcbiAgY29uc3QgbW9udGggPSBtb250aE5hbWVzW2RhdGUuZ2V0TW9udGgoKV07XG5cbiAgcmV0dXJuIGAke2RheX0tJHttb250aH0tJHt5ZWFyfX5+MGA7XG59XG5cbiAgfVxuIl19
|