@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
214 lines • 25.9 kB
JavaScript
/**
* Wizard navigation information class.
*/
export class WizardNavigationInformation {
/**
* Initializes a new instance of the WizardNavigationInformation class.
*
* @param wizard the wizard component instance.
*/
constructor(wizard, wizardBuilder) {
/**
* The history of navigation of stage and step.
*/
this.history = [];
/**
* The initialization state.
*/
this.initialized = false;
this.wizard = wizard;
this.wizardBuilder = wizardBuilder;
}
/**
* Gets the navigation history data.
*/
get navigationHistory() {
return this.history;
}
/**
* Gets the prior navigation set.
*/
get priorSet() {
const length = this.history.length;
if (length < 2) {
return { stage: WizardNavigationInformation.NoStageNoStep, step: WizardNavigationInformation.NoStageNoStep };
}
return this.history[length - 2];
}
/**
* Gets the current navigation set.
*/
get currentSet() {
const length = this.history.length;
if (length === 0) {
return { stage: WizardNavigationInformation.NoStageNoStep, step: WizardNavigationInformation.NoStageNoStep };
}
return this.history[length - 1];
}
/**
* Gets if it was Next button click.
*/
get wasNext() {
const prior = this.priorSet;
if (prior.stage === WizardNavigationInformation.NoStageNoStep) {
return false;
}
const current = this.currentSet;
if (current.stage === WizardNavigationInformation.NoStageNoStep) {
return false;
}
if (current.stage === prior.stage) {
return current.step === prior.step + 1;
}
if (current.stage === prior.stage + 1) {
const priorLastStep = this.wizard.stages[prior.stage].steps.length - 1;
return current.step === 0 && prior.step === priorLastStep;
}
return false;
}
/**
* Gets if it was Back button click.
*/
get wasBack() {
const prior = this.priorSet;
if (prior.stage === WizardNavigationInformation.NoStageNoStep) {
return false;
}
const current = this.currentSet;
if (current.stage === WizardNavigationInformation.NoStageNoStep) {
return false;
}
if (current.stage === prior.stage) {
return current.step === prior.step - 1;
}
if (current.stage === prior.stage - 1) {
const currentLastStep = this.wizard.stages[current.stage].steps.length - 1;
return current.step === currentLastStep && prior.step === 0;
}
return false;
}
/**
* Gets if it's on the last step of current stage.
*/
get onLastStepOfStage() {
const current = this.currentSet;
return current.step === (this.wizard.stages[current.stage].steps.length - 1);
}
/**
* Gets if it's on the last stage.
*/
get onLastStage() {
const current = this.currentSet;
return this.wizard.stages.length - 1 === current.stage;
}
/**
* Gets if it's on last steps of last stage.
*/
get onLastStepOfLastStage() {
return this.onLastStage && this.onLastStepOfStage;
}
/**
* Set and start new history.
*
* @param set the new navigation set.
*/
resetHistory(set = null) {
this.initialized = true;
this.history = [];
if (set) {
this.history.push(set);
}
}
/**
* Push new navigation set to the history.
*
* @param set the new navigation set.
*/
pushHistory(set) {
if (!this.initialized
|| !set
|| MsftSme.isNullOrUndefined(set.stage)
|| MsftSme.isNullOrUndefined(set.step)
|| set.stage === WizardNavigationInformation.NoStageNoStep
|| set.step === WizardNavigationInformation.NoStageNoStep) {
return false;
}
const current = this.currentSet;
if (set.stage === current.stage && set.step === current.step) {
return false;
}
this.history.push(set);
return true;
}
/**
* Check how many times visited including current set.
* (it shows '1' if this is the first time visit.)
*
* @param set current set.
*/
checkHistory(set = null) {
if (!set) {
set = this.currentSet;
}
const list = this.history.filter(history => history.stage === set.stage && history.step === set.step);
if (list && list.length > 0) {
return list.length;
}
return 0;
}
/**
* Creates a new WizardStep, and adds it to the specified WizardStage.
* If the specified WizardStage does not exist, it will be created.
*
* @param stepName - The name for the new WizardStep.
* @param stepComponentType - The componentType for the new WizardStep.
* @param stageName - The name of the WizardStage in which this new WizardStep should be added.
*/
addStepInStage(stepName, stepComponentType, stageName) {
this.wizardBuilder.addStepInStage(stepName, stepComponentType, stageName);
}
/**
* Creates a new WizardStep, and adds it to the specified WizardStage at the specified index.
* If the specified WizardStage does not exist, it will be created.
*
* @param stepName - The name for the new WizardStep.
* @param stepComponentType - The componentType for the new WizardStep.
* @param stageName - The name of the WizardStage in which this new WizardStep should be added.
* @param index - The step index to insert step (will increase index of existing step at given index by 1 if any)
*/
addStepInStageByIndex(stepName, stepComponentType, stageName, index) {
this.wizardBuilder.addStepInStageByIndex(stepName, stepComponentType, stageName, index);
}
/**
* Removes WizardStep at specified index in specified stage.
* If the specified stage or index does not exist, false will be returned.
*
* @param stageName - The name of the Wizard stage in which to remove the step.
* @param index - The step index to be removed (will decrease indices of proceeding steps)
* @returns - True if step is removed successfully, false otherwise.
*/
removeStepInStageByIndex(stageName, index) {
return this.wizardBuilder.removeStepInStageByIndex(stageName, index);
}
/**
* Creates a new WizardStage at the specified index.
*
* @param stageName - The Name for the new WizardStage
* @param index - The stage index to insert stage (will increase index of existing stage at given index by 1 if any)
*/
addStageByIndex(stageName, index) {
this.wizardBuilder.addStageByIndex(stageName, index);
}
/**
* Clears all steps from given stage.
* If the specified stage does not exist, false will be returned.
*
* @param stageName - The name of the Wizard stage to clear steps from.
* @returns - True if stage is cleared successfully, false otherwise.
*/
clearStage(stageName) {
return this.wizardBuilder.clearStage(stageName);
}
}
WizardNavigationInformation.NoStageNoStep = -1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLW5hdmlnYXRpb24taW5mb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy93aXphcmQvd2l6YXJkLW5hdmlnYXRpb24taW5mb3JtYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBZXBDOzs7O09BSUc7SUFDSCxZQUFZLE1BQWlDLEVBQUUsYUFBcUM7UUFmcEY7O1dBRUc7UUFDSyxZQUFPLEdBQTBCLEVBQUUsQ0FBQztRQUU1Qzs7V0FFRztRQUNLLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBUXhCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDWixPQUFPLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDaEg7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixD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QUMvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O0FBbFBzQix5Q0FBYSxHQUFHLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBXaXphcmRCdWlsZGVySW50ZXJmYWNlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLWJ1aWxkZXItaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1uYXZpZ2F0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25TZXQgfSBmcm9tICcuL21vZGVscy93aXphcmQtbmF2aWdhdGlvbi1zZXQnO1xyXG5cclxuLyoqXHJcbiAqIFdpemFyZCBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uIGNsYXNzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbiB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5vU3RhZ2VOb1N0ZXAgPSAtMTtcclxuICAgIHByaXZhdGUgd2l6YXJkOiBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlO1xyXG4gICAgcHJpdmF0ZSB3aXphcmRCdWlsZGVyOiBXaXphcmRCdWlsZGVySW50ZXJmYWNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhpc3Rvcnkgb2YgbmF2aWdhdGlvbiBvZiBzdGFnZSBhbmQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoaXN0b3J5OiBXaXphcmROYXZpZ2F0aW9uU2V0W10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbiBjbGFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gd2l6YXJkIHRoZSB3aXphcmQgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcih3aXphcmQ6IFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2UsIHdpemFyZEJ1aWxkZXI6IFdpemFyZEJ1aWxkZXJJbnRlcmZhY2UpIHtcclxuICAgICAgICB0aGlzLndpemFyZCA9IHdpemFyZDtcclxuICAgICAgICB0aGlzLndpemFyZEJ1aWxkZXIgPSB3aXphcmRCdWlsZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmF2aWdhdGlvbiBoaXN0b3J5IGRhdGEuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgbmF2aWdhdGlvbkhpc3RvcnkoKTogV2l6YXJkTmF2aWdhdGlvblNldFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJpb3IgbmF2aWdhdGlvbiBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcHJpb3JTZXQoKTogV2l6YXJkTmF2aWdhdGlvblNldCB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5oaXN0b3J5Lmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICByZXR1cm4geyBzdGFnZTogV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLk5vU3RhZ2VOb1N0ZXAsIHN0ZXA6IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbi5Ob1N0YWdlTm9TdGVwIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5W2xlbmd0aCAtIDJdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U2V0KCk6IFdpemFyZE5hdmlnYXRpb25TZXQge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaGlzdG9yeS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBzdGFnZTogV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLk5vU3RhZ2VOb1N0ZXAsIHN0ZXA6IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbi5Ob1N0YWdlTm9TdGVwIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5W2xlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpZiBpdCB3YXMgTmV4dCBidXR0b24gY2xpY2suXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgd2FzTmV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwcmlvciA9IHRoaXMucHJpb3JTZXQ7XHJcbiAgICAgICAgaWYgKHByaW9yLnN0YWdlID09PSBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb24uTm9TdGFnZU5vU3RlcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U2V0O1xyXG4gICAgICAgIGlmIChjdXJyZW50LnN0YWdlID09PSBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb24uTm9TdGFnZU5vU3RlcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5zdGFnZSA9PT0gcHJpb3Iuc3RhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQuc3RlcCA9PT0gcHJpb3Iuc3RlcCArIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5zdGFnZSA9PT0gcHJpb3Iuc3RhZ2UgKyAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByaW9yTGFzdFN0ZXAgPSB0aGlzLndpemFyZC5zdGFnZXNbcHJpb3Iuc3RhZ2VdLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnN0ZXAgPT09IDAgJiYgcHJpb3Iuc3RlcCA9PT0gcHJpb3JMYXN0U3RlcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaWYgaXQgd2FzIEJhY2sgYnV0dG9uIGNsaWNrLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHdhc0JhY2soKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcHJpb3IgPSB0aGlzLnByaW9yU2V0O1xyXG4gICAgICAgIGlmIChwcmlvci5zdGFnZSA9PT0gV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLk5vU3RhZ2VOb1N0ZXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudFNldDtcclxuICAgICAgICBpZiAoY3VycmVudC5zdGFnZSA9PT0gV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLk5vU3RhZ2VOb1N0ZXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnQuc3RhZ2UgPT09IHByaW9yLnN0YWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnN0ZXAgPT09IHByaW9yLnN0ZXAgLSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnQuc3RhZ2UgPT09IHByaW9yLnN0YWdlIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGFzdFN0ZXAgPSB0aGlzLndpemFyZC5zdGFnZXNbY3VycmVudC5zdGFnZV0uc3RlcHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQuc3RlcCA9PT0gY3VycmVudExhc3RTdGVwICYmIHByaW9yLnN0ZXAgPT09IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGlmIGl0J3Mgb24gdGhlIGxhc3Qgc3RlcCBvZiBjdXJyZW50IHN0YWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZlN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTZXQ7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuc3RlcCA9PT0gKHRoaXMud2l6YXJkLnN0YWdlc1tjdXJyZW50LnN0YWdlXS5zdGVwcy5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaWYgaXQncyBvbiB0aGUgbGFzdCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBvbkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U2V0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZC5zdGFnZXMubGVuZ3RoIC0gMSA9PT0gY3VycmVudC5zdGFnZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaWYgaXQncyBvbiBsYXN0IHN0ZXBzIG9mIGxhc3Qgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mTGFzdFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uTGFzdFN0YWdlICYmIHRoaXMub25MYXN0U3RlcE9mU3RhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYW5kIHN0YXJ0IG5ldyBoaXN0b3J5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXQgdGhlIG5ldyBuYXZpZ2F0aW9uIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2V0SGlzdG9yeShzZXQ6IFdpemFyZE5hdmlnYXRpb25TZXQgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107XHJcbiAgICAgICAgaWYgKHNldCkge1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChzZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1c2ggbmV3IG5hdmlnYXRpb24gc2V0IHRvIHRoZSBoaXN0b3J5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXQgdGhlIG5ldyBuYXZpZ2F0aW9uIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHB1c2hIaXN0b3J5KHNldDogV2l6YXJkTmF2aWdhdGlvblNldCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZFxyXG4gICAgICAgICAgICB8fCAhc2V0XHJcbiAgICAgICAgICAgIHx8IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoc2V0LnN0YWdlKVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNldC5zdGVwKVxyXG4gICAgICAgICAgICB8fCBzZXQuc3RhZ2UgPT09IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbi5Ob1N0YWdlTm9TdGVwXHJcbiAgICAgICAgICAgIHx8IHNldC5zdGVwID09PSBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb24uTm9TdGFnZU5vU3RlcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U2V0O1xyXG4gICAgICAgIGlmIChzZXQuc3RhZ2UgPT09IGN1cnJlbnQuc3RhZ2UgJiYgc2V0LnN0ZXAgPT09IGN1cnJlbnQuc3RlcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChzZXQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaG93IG1hbnkgdGltZXMgdmlzaXRlZCBpbmNsdWRpbmcgY3VycmVudCBzZXQuXHJcbiAgICAgKiAoaXQgc2hvd3MgJzEnIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdmlzaXQuKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXQgY3VycmVudCBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGVja0hpc3Rvcnkoc2V0OiBXaXphcmROYXZpZ2F0aW9uU2V0ID0gbnVsbCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCFzZXQpIHtcclxuICAgICAgICAgICAgc2V0ID0gdGhpcy5jdXJyZW50U2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuaGlzdG9yeS5maWx0ZXIoaGlzdG9yeSA9PiBoaXN0b3J5LnN0YWdlID09PSBzZXQuc3RhZ2UgJiYgaGlzdG9yeS5zdGVwID09PSBzZXQuc3RlcCk7XHJcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXaXphcmRTdGVwLCBhbmQgYWRkcyBpdCB0byB0aGUgc3BlY2lmaWVkIFdpemFyZFN0YWdlLlxyXG4gICAgICogSWYgdGhlIHNwZWNpZmllZCBXaXphcmRTdGFnZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwTmFtZSAtIFRoZSBuYW1lIGZvciB0aGUgbmV3IFdpemFyZFN0ZXAuXHJcbiAgICAgKiBAcGFyYW0gc3RlcENvbXBvbmVudFR5cGUgLSBUaGUgY29tcG9uZW50VHlwZSBmb3IgdGhlIG5ldyBXaXphcmRTdGVwLlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmRTdGFnZSBpbiB3aGljaCB0aGlzIG5ldyBXaXphcmRTdGVwIHNob3VsZCBiZSBhZGRlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFN0ZXBJblN0YWdlKHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXBDb21wb25lbnRUeXBlOiBUeXBlPGFueT4sIHN0YWdlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53aXphcmRCdWlsZGVyLmFkZFN0ZXBJblN0YWdlKHN0ZXBOYW1lLCBzdGVwQ29tcG9uZW50VHlwZSwgc3RhZ2VOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgV2l6YXJkU3RlcCwgYW5kIGFkZHMgaXQgdG8gdGhlIHNwZWNpZmllZCBXaXphcmRTdGFnZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxyXG4gICAgICogSWYgdGhlIHNwZWNpZmllZCBXaXphcmRTdGFnZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwTmFtZSAtIFRoZSBuYW1lIGZvciB0aGUgbmV3IFdpemFyZFN0ZXAuXHJcbiAgICAgKiBAcGFyYW0gc3RlcENvbXBvbmVudFR5cGUgLSBUaGUgY29tcG9uZW50VHlwZSBmb3IgdGhlIG5ldyBXaXphcmRTdGVwLlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmRTdGFnZSBpbiB3aGljaCB0aGlzIG5ldyBXaXphcmRTdGVwIHNob3VsZCBiZSBhZGRlZC5cclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBzdGVwIGluZGV4IHRvIGluc2VydCBzdGVwICh3aWxsIGluY3JlYXNlIGluZGV4IG9mIGV4aXN0aW5nIHN0ZXAgYXQgZ2l2ZW4gaW5kZXggYnkgMSBpZiBhbnkpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRTdGVwSW5TdGFnZUJ5SW5kZXgoc3RlcE5hbWU6IHN0cmluZywgc3RlcENvbXBvbmVudFR5cGU6IFR5cGU8YW55Piwgc3RhZ2VOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLndpemFyZEJ1aWxkZXIuYWRkU3RlcEluU3RhZ2VCeUluZGV4KHN0ZXBOYW1lLCBzdGVwQ29tcG9uZW50VHlwZSwgc3RhZ2VOYW1lLCBpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIFdpemFyZFN0ZXAgYXQgc3BlY2lmaWVkIGluZGV4IGluIHNwZWNpZmllZCBzdGFnZS5cclxuICAgICAqIElmIHRoZSBzcGVjaWZpZWQgc3RhZ2Ugb3IgaW5kZXggZG9lcyBub3QgZXhpc3QsIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmQgc3RhZ2UgaW4gd2hpY2ggdG8gcmVtb3ZlIHRoZSBzdGVwLlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIHN0ZXAgaW5kZXggdG8gYmUgcmVtb3ZlZCAod2lsbCBkZWNyZWFzZSBpbmRpY2VzIG9mIHByb2NlZWRpbmcgc3RlcHMpXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgaWYgc3RlcCBpcyByZW1vdmVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICAgcHVibGljIHJlbW92ZVN0ZXBJblN0YWdlQnlJbmRleChzdGFnZU5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZEJ1aWxkZXIucmVtb3ZlU3RlcEluU3RhZ2VCeUluZGV4KHN0YWdlTmFtZSwgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXaXphcmRTdGFnZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGFnZU5hbWUgLSBUaGUgTmFtZSBmb3IgdGhlIG5ldyBXaXphcmRTdGFnZVxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIHN0YWdlIGluZGV4IHRvIGluc2VydCBzdGFnZSAod2lsbCBpbmNyZWFzZSBpbmRleCBvZiBleGlzdGluZyBzdGFnZSBhdCBnaXZlbiBpbmRleCBieSAxIGlmIGFueSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFN0YWdlQnlJbmRleChzdGFnZU5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMud2l6YXJkQnVpbGRlci5hZGRTdGFnZUJ5SW5kZXgoc3RhZ2VOYW1lLCBpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIHN0ZXBzIGZyb20gZ2l2ZW4gc3RhZ2UuXHJcbiAgICAgKiBJZiB0aGUgc3BlY2lmaWVkIHN0YWdlIGRvZXMgbm90IGV4aXN0LCBmYWxzZSB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGFnZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgV2l6YXJkIHN0YWdlIHRvIGNsZWFyIHN0ZXBzIGZyb20uXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgaWYgc3RhZ2UgaXMgY2xlYXJlZCBzdWNjZXNzZnVsbHksIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXphcmRCdWlsZGVyLmNsZWFyU3RhZ2Uoc3RhZ2VOYW1lKTtcclxuICAgIH1cclxufVxyXG4iXX0=