dcl-ui-toolkit
Version:
A collection of UI helpers to make it easier to build a Decentraland scene using the SDK 7.
131 lines • 23.2 kB
JavaScript
import { Color4 } from '@dcl/sdk/math';
import ReactEcs, { UiEntity } from '@dcl/sdk/react-ecs';
import { UIObject } from '../UIObject';
import { getImageAtlasMapping } from '../../utils/imageUtils';
import { AtlasTheme, sourcesComponentsCoordinates } from '../../constants/resources';
export var BarStyles;
(function (BarStyles) {
BarStyles["ROUNDBLACK"] = "roundBlack";
BarStyles["ROUNDWHITE"] = "roundWhite";
BarStyles["ROUNDSILVER"] = "roundSilver";
BarStyles["ROUNDGOLD"] = "roundGold";
BarStyles["SQUAREBLACK"] = "squareBlack";
BarStyles["SQUAREWHITE"] = "squareWhite";
BarStyles["SQUARESILVER"] = "squareSilver";
BarStyles["SQUAREGOLD"] = "squareGold";
})(BarStyles || (BarStyles = {}));
const progressBarInitialConfig = {
startHidden: true,
value: 0,
scale: 1,
color: Color4.Red(),
xOffset: -30,
yOffset: 60,
style: BarStyles.ROUNDSILVER,
};
export class ProgressBar extends UIObject {
constructor({ startHidden = progressBarInitialConfig.startHidden, value = progressBarInitialConfig.value, scale = progressBarInitialConfig.scale, color = progressBarInitialConfig.color, xOffset = progressBarInitialConfig.xOffset, yOffset = progressBarInitialConfig.yOffset, style = progressBarInitialConfig.style, }) {
super({ startHidden });
this.scale = scale;
this.color = color;
this.xOffset = xOffset;
this.yOffset = yOffset;
this.style = style;
this._value = value;
this._valueMax = 1;
this._valueMin = 0;
this._valueChangeStep = 0.1;
this.barElement = {
uiTransform: {
positionType: 'absolute',
},
};
this.backgroundElement = {
uiTransform: {
width: '100%',
height: '100%',
},
uiBackground: {
textureMode: 'stretch',
texture: {
src: AtlasTheme.ATLAS_PATH_LIGHT,
},
},
};
this.processElement = {
uiTransform: {
positionType: 'absolute',
},
uiBackground: {
textureMode: 'stretch',
texture: {
src: AtlasTheme.ATLAS_PATH_LIGHT,
},
},
};
}
read() {
return this._value;
}
set(amount) {
this._setValueInRange(amount);
}
increase(amount) {
this._setValueInRange(this._value + (amount ? amount : this._valueChangeStep));
}
decrease(amount) {
this._setValueInRange(this._value - (amount ? amount : this._valueChangeStep));
}
render(key) {
this._width = 128 * this.scale;
this._height = 32 * this.scale;
const isNotDefaultBorders = this.style === BarStyles.ROUNDWHITE ||
this.style === BarStyles.ROUNDBLACK ||
this.style === BarStyles.SQUAREWHITE ||
this.style === BarStyles.SQUAREBLACK;
this._progressPaddingTop = (isNotDefaultBorders ? 3 : 2) * this.scale;
this._progressPaddingBottom = (isNotDefaultBorders ? 3 : 4) * this.scale;
this._progressPaddingLeft = (isNotDefaultBorders ? 3 : 2) * this.scale;
this._progressPaddingRight = (isNotDefaultBorders ? 3 : 2) * this.scale;
this._progressHeight = this._height - this._progressPaddingTop - this._progressPaddingBottom;
const { sourceWidth: progressSourceWidth, ...progressSourcesComponentsCoordinates } = sourcesComponentsCoordinates.buttons[this.style.startsWith('round') ? 'roundWhite' : 'squareWhite'];
return (ReactEcs.createElement(UiEntity, { key: key, ...this.barElement, uiTransform: {
...this.barElement.uiTransform,
display: this.visible ? 'flex' : 'none',
position: { bottom: this.yOffset, right: this.xOffset * -1 },
width: this._width,
height: this._height,
} },
ReactEcs.createElement(UiEntity, { ...this.backgroundElement, uiBackground: {
...this.backgroundElement.uiBackground,
uvs: getImageAtlasMapping({
...sourcesComponentsCoordinates.buttons[this.style],
atlasHeight: sourcesComponentsCoordinates.atlasHeight,
atlasWidth: sourcesComponentsCoordinates.atlasWidth,
}),
} }),
ReactEcs.createElement(UiEntity, { ...this.processElement, uiTransform: {
...this.processElement.uiTransform,
width: this._width * this._value - this._progressPaddingLeft - this._progressPaddingRight,
height: this._progressHeight,
position: {
top: this._progressPaddingTop,
left: this._progressPaddingLeft,
},
}, uiBackground: {
...this.processElement.uiBackground,
color: this.color,
uvs: getImageAtlasMapping({
...progressSourcesComponentsCoordinates,
sourceWidth: progressSourceWidth * this._value,
atlasHeight: sourcesComponentsCoordinates.atlasHeight,
atlasWidth: sourcesComponentsCoordinates.atlasWidth,
}),
} })));
}
_setValueInRange(value) {
this._value =
value > this._valueMax ? this._valueMax : value < this._valueMin ? this._valueMin : value;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdWktZW50aXRpZXMvUHJvZ3Jlc3NCYXIvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdEMsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUd2RCxPQUFPLEVBQUUsUUFBUSxFQUFrQixNQUFNLGFBQWEsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFrQnBGLE1BQU0sQ0FBTixJQUFZLFNBU1g7QUFURCxXQUFZLFNBQVM7SUFDbkIsc0NBQXlCLENBQUE7SUFDekIsc0NBQXlCLENBQUE7SUFDekIsd0NBQTJCLENBQUE7SUFDM0Isb0NBQXVCLENBQUE7SUFDdkIsd0NBQTJCLENBQUE7SUFDM0Isd0NBQTJCLENBQUE7SUFDM0IsMENBQTZCLENBQUE7SUFDN0Isc0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQVRXLFNBQVMsS0FBVCxTQUFTLFFBU3BCO0FBV0QsTUFBTSx3QkFBd0IsR0FBZ0M7SUFDNUQsV0FBVyxFQUFFLElBQUk7SUFDakIsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFO0lBQ25CLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDWixPQUFPLEVBQUUsRUFBRTtJQUNYLEtBQUssRUFBRSxTQUFTLENBQUMsV0FBVztDQUNwQixDQUFBO0FBY1YsTUFBTSxPQUFPLFdBQVksU0FBUSxRQUFRO0lBMEJ2QyxZQUFZLEVBQ1YsV0FBVyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsRUFDbEQsS0FBSyxHQUFHLHdCQUF3QixDQUFDLEtB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QUFDLFdBQVc7d0JBQ3JELFVBQVUsRUFBRSw0QkFBNEIsQ0FBQyxVQUFVO3FCQUNwRCxDQUFDO2lCQUNILEdBQ0QsQ0FDTyxDQUNaLENBQUE7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLENBQUMsTUFBTTtZQUNULEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQzdGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgUmVhY3RFY3MsIHsgVWlFbnRpdHkgfSBmcm9tICdAZGNsL3Nkay9yZWFjdC1lY3MnXG5pbXBvcnQgeyBFbnRpdHlQcm9wVHlwZXMgfSBmcm9tICdAZGNsL3JlYWN0LWVjcy9kaXN0L2NvbXBvbmVudHMvdHlwZXMnXG5cbmltcG9ydCB7IFVJT2JqZWN0LCBVSU9iamVjdENvbmZpZyB9IGZyb20gJy4uL1VJT2JqZWN0J1xuXG5pbXBvcnQgeyBnZXRJbWFnZUF0bGFzTWFwcGluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2ltYWdlVXRpbHMnXG5cbmltcG9ydCB7IEF0bGFzVGhlbWUsIHNvdXJjZXNDb21wb25lbnRzQ29vcmRpbmF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcmVzb3VyY2VzJ1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0JhckJhckVsZW1lbnQgPSBPbWl0PEVudGl0eVByb3BUeXBlcywgJ3VpVHJhbnNmb3JtJz4gJiB7XG4gIHVpVHJhbnNmb3JtPzogT21pdDxcbiAgICBOb25OdWxsYWJsZTxFbnRpdHlQcm9wVHlwZXNbJ3VpVHJhbnNmb3JtJ10+LFxuICAgICdkaXNwbGF5JyB8ICdwb3NpdGlvbicgfCAnd2lkdGgnIHwgJ2hlaWdodCdcbiAgPlxufVxuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0JhckJhY2tncm91bmRFbGVtZW50ID0gT21pdDxFbnRpdHlQcm9wVHlwZXMsICd1aUJhY2tncm91bmQnPiAmIHtcbiAgdWlCYWNrZ3JvdW5kPzogT21pdDxOb25OdWxsYWJsZTxFbnRpdHlQcm9wVHlwZXNbJ3VpQmFja2dyb3VuZCddPiwgJ3V2cyc+XG59XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQmFyUHJvY2Vzc0VsZW1lbnQgPSBPbWl0PEVudGl0eVByb3BUeXBlcywgJ3VpVHJhbnNmb3JtJyB8ICd1aUJhY2tncm91bmQnPiAmIHtcbiAgdWlUcmFuc2Zvcm0/OiBPbWl0PE5vbk51bGxhYmxlPEVudGl0eVByb3BUeXBlc1sndWlUcmFuc2Zvcm0nXT4sICdwb3NpdGlvbicgfCAnd2lkdGgnIHwgJ2hlaWdodCc+XG4gIHVpQmFja2dyb3VuZD86IE9taXQ8Tm9uTnVsbGFibGU8RW50aXR5UHJvcFR5cGVzWyd1aUJhY2tncm91bmQnXT4sICdjb2xvcicgfCAndXZzJz5cbn1cblxuZXhwb3J0IGVudW0gQmFyU3R5bGVzIHtcbiAgUk9VTkRCTEFDSyA9IGByb3VuZEJsYWNrYCxcbiAgUk9VTkRXSElURSA9IGByb3VuZFdoaXRlYCxcbiAgUk9VTkRTSUxWRVIgPSBgcm91bmRTaWx2ZXJgLFxuICBST1VOREdPTEQgPSBgcm91bmRHb2xkYCxcbiAgU1FVQVJFQkxBQ0sgPSBgc3F1YXJlQmxhY2tgLFxuICBTUVVBUkVXSElURSA9IGBzcXVhcmVXaGl0ZWAsXG4gIFNRVUFSRVNJTFZFUiA9IGBzcXVhcmVTaWx2ZXJgLFxuICBTUVVBUkVHT0xEID0gYHNxdWFyZUdvbGRgLFxufVxuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0JhckNvbmZpZyA9IFVJT2JqZWN0Q29uZmlnICYge1xuICB2YWx1ZTogbnVtYmVyXG4gIHNjYWxlPzogbnVtYmVyXG4gIGNvbG9yPzogQ29sb3I0XG4gIHhPZmZzZXQ/OiBudW1iZXJcbiAgeU9mZnNldD86IG51bWJlclxuICBzdHlsZT86IEJhclN0eWxlc1xufVxuXG5jb25zdCBwcm9ncmVzc0JhckluaXRpYWxDb25maWc6IFJlcXVpcmVkPFByb2dyZXNzQmFyQ29uZmlnPiA9IHtcbiAgc3RhcnRIaWRkZW46IHRydWUsXG4gIHZhbHVlOiAwLFxuICBzY2FsZTogMSxcbiAgY29sb3I6IENvbG9yNC5SZWQoKSxcbiAgeE9mZnNldDogLTMwLFxuICB5T2Zmc2V0OiA2MCxcbiAgc3R5bGU6IEJhclN0eWxlcy5ST1VORFNJTFZFUixcbn0gYXMgY29uc3RcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGNvbG9yZWQgYmFyIHRoYXQgY2FuIGJlIGZpbGxlZCB1cCBhbmQgdXBkYXRlZCB0byBkaWZmZXJlbnQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXJ0SGlkZGVuPXRydWVdIHN0YXJ0aW5nIGhpZGRlblxuICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSBzdGFydGluZyB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFt4T2Zmc2V0PS0zMF0gb2Zmc2V0IG9uIFhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeU9mZnNldD02MF0gb2Zmc2V0IG9uIFlcbiAqIEBwYXJhbSB7Q29sb3I0fSBbZmlsbENvbG9yPUNvbG9yNC5SZWQoKV0gY29sb3Igb2YgdGhlIGJhclxuICogQHBhcmFtIHtCYXJTdHlsZXN9IFtzdHlsZT1CYXJTdHlsZXMuUk9VTkRTSUxWRVJdIG1hcmdpbiBzdHlsZSBvZiB0aGUgYmFyLCBmcm9tIHRoZSBCYXJTdHlsZXMgZW51bVxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xXSBtdWx0aXBsaWVyIGZvciB0aGUgc2l6ZSBvZiB0aGUgYmFyLiAxID0gMTI4IHggMzJcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhciBleHRlbmRzIFVJT2JqZWN0IHtcbiAgcHVibGljIGJhckVsZW1lbnQ6IFByb2dyZXNzQmFyQmFyRWxlbWVudFxuICBwdWJsaWMgYmFja2dyb3VuZEVsZW1lbnQ6IFByb2dyZXNzQmFyQmFja2dyb3VuZEVsZW1lbnRcbiAgcHVibGljIHByb2Nlc3NFbGVtZW50OiBQcm9ncmVzc0JhclByb2Nlc3NFbGVtZW50XG5cbiAgcHVibGljIHNjYWxlOiBudW1iZXJcbiAgcHVibGljIHhPZmZzZXQ6IG51bWJlclxuICBwdWJsaWMgeU9mZnNldDogbnVtYmVyXG4gIHB1YmxpYyBjb2xvcjogQ29sb3I0XG4gIHB1YmxpYyBzdHlsZTogQmFyU3R5bGVzXG5cbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlTWF4OiBudW1iZXJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWVNaW46IG51bWJlclxuICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZUNoYW5nZVN0ZXA6IG51bWJlclxuXG4gIHByaXZhdGUgX3dpZHRoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWRcblxuICBwcml2YXRlIF9wcm9ncmVzc0hlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3Byb2dyZXNzUGFkZGluZ1RvcDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3Byb2dyZXNzUGFkZGluZ0JvdHRvbTogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3Byb2dyZXNzUGFkZGluZ0xlZnQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9wcm9ncmVzc1BhZGRpbmdSaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXJ0SGlkZGVuID0gcHJvZ3Jlc3NCYXJJbml0aWFsQ29uZmlnLnN0YXJ0SGlkZGVuLFxuICAgIHZhbHVlID0gcHJvZ3Jlc3NCYXJJbml0aWFsQ29uZmlnLnZhbHVlLFxuICAgIHNjYWxlID0gcHJvZ3Jlc3NCYXJJbml0aWFsQ29uZmlnLnNjYWxlLFxuICAgIGNvbG9yID0gcHJvZ3Jlc3NCYXJJbml0aWFsQ29uZmlnLmNvbG9yLFxuICAgIHhPZmZzZXQgPSBwcm9ncmVzc0JhckluaXRpYWxDb25maWcueE9mZnNldCxcbiAgICB5T2Zmc2V0ID0gcHJvZ3Jlc3NCYXJJbml0aWFsQ29uZmlnLnlPZmZzZXQsXG4gICAgc3R5bGUgPSBwcm9ncmVzc0JhckluaXRpYWxDb25maWcuc3R5bGUsXG4gIH06IFByb2dyZXNzQmFyQ29uZmlnKSB7XG4gICAgc3VwZXIoeyBzdGFydEhpZGRlbiB9KVxuXG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlXG4gICAgdGhpcy5jb2xvciA9IGNvbG9yXG4gICAgdGhpcy54T2Zmc2V0ID0geE9mZnNldFxuICAgIHRoaXMueU9mZnNldCA9IHlPZmZzZXRcbiAgICB0aGlzLnN0eWxlID0gc3R5bGVcblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVcblxuICAgIHRoaXMuX3ZhbHVlTWF4ID0gMVxuICAgIHRoaXMuX3ZhbHVlTWluID0gMFxuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlU3RlcCA9IDAuMVxuXG4gICAgdGhpcy5iYXJFbGVtZW50ID0ge1xuICAgICAgdWlUcmFuc2Zvcm06IHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICB0aGlzLmJhY2tncm91bmRFbGVtZW50ID0ge1xuICAgICAgdWlUcmFuc2Zvcm06IHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB9LFxuICAgICAgdWlCYWNrZ3JvdW5kOiB7XG4gICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICBzcmM6IEF0bGFzVGhlbWUuQVRMQVNfUEFUSF9MSUdIVCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzRWxlbWVudCA9IHtcbiAgICAgIHVpVHJhbnNmb3JtOiB7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIH0sXG4gICAgICB1aUJhY2tncm91bmQ6IHtcbiAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgIHNyYzogQXRsYXNUaGVtZS5BVExBU19QQVRIX0xJR0hULFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiYXJcbiAgICogICogQHJldHVybiB7bnVtYmVyfSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYmFyLCBhcyBhIHZhbHVlIGZyb20gMCB0byAxXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJhcidzIHZhbHVlIHRvIGEgc3BlY2lmaWMgYW1vdW50LCByZWdhcmRsZXNzIG9mIHdoYXQgaXQgd2FzIGJlZm9yZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBOZXcgdmFsdWUgZm9yIHRoZSBiYXIsIGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKi9cbiAgcHVibGljIHNldChhbW91bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3NldFZhbHVlSW5SYW5nZShhbW91bnQpXG4gIH1cblxuICAvKipcbiAgICogSW5jcmVhc2UgdGhlIHZhbHVlIG9uIHRoZSBiYXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50PTAuMV0gSG93IG11Y2ggdG8gaW5jcmVhc2UgdGhlIGJhciwgdXAgdG8gYSBtYXhpbXVtIG9mIDEuIEJ5IGRlZmF1bHQsIGl0IGluY3JlYXNlcyBieSAwLjFcbiAgICpcbiAgICovXG4gIHB1YmxpYyBpbmNyZWFzZShhbW91bnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRWYWx1ZUluUmFuZ2UodGhpcy5fdmFsdWUgKyAoYW1vdW50ID8gYW1vdW50IDogdGhpcy5fdmFsdWVDaGFuZ2VTdGVwKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyZWFzZSB0aGUgdmFsdWUgb24gdGhlIGJhci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFthbW91bnQ9MC4xXSBIb3cgbXVjaCB0byBkZWNyZWFzZSB0aGUgYmFyLCBkb3duIHRvIGEgbWluaW11bSBvZiAwLiBCeSBkZWZhdWx0LCBpdCBkZWNyZWFzZXMgYnkgMC4xXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZGVjcmVhc2UoYW1vdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0VmFsdWVJblJhbmdlKHRoaXMuX3ZhbHVlIC0gKGFtb3VudCA/IGFtb3VudCA6IHRoaXMuX3ZhbHVlQ2hhbmdlU3RlcCkpXG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKGtleT86IHN0cmluZyk6IFJlYWN0RWNzLkpTWC5FbGVtZW50IHtcbiAgICB0aGlzLl93aWR0aCA9IDEyOCAqIHRoaXMuc2NhbGVcbiAgICB0aGlzLl9oZWlnaHQgPSAzMiAqIHRoaXMuc2NhbGVcblxuICAgIGNvbnN0IGlzTm90RGVmYXVsdEJvcmRlcnMgPVxuICAgICAgdGhpcy5zdHlsZSA9PT0gQmFyU3R5bGVzLlJPVU5EV0hJVEUgfHxcbiAgICAgIHRoaXMuc3R5bGUgPT09IEJhclN0eWxlcy5ST1VOREJMQUNLIHx8XG4gICAgICB0aGlzLnN0eWxlID09PSBCYXJTdHlsZXMuU1FVQVJFV0hJVEUgfHxcbiAgICAgIHRoaXMuc3R5bGUgPT09IEJhclN0eWxlcy5TUVVBUkVCTEFDS1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NQYWRkaW5nVG9wID0gKGlzTm90RGVmYXVsdEJvcmRlcnMgPyAzIDogMikgKiB0aGlzLnNjYWxlXG4gICAgdGhpcy5fcHJvZ3Jlc3NQYWRkaW5nQm90dG9tID0gKGlzTm90RGVmYXVsdEJvcmRlcnMgPyAzIDogNCkgKiB0aGlzLnNjYWxlXG4gICAgdGhpcy5fcHJvZ3Jlc3NQYWRkaW5nTGVmdCA9IChpc05vdERlZmF1bHRCb3JkZXJzID8gMyA6IDIpICogdGhpcy5zY2FsZVxuICAgIHRoaXMuX3Byb2dyZXNzUGFkZGluZ1JpZ2h0ID0gKGlzTm90RGVmYXVsdEJvcmRlcnMgPyAzIDogMikgKiB0aGlzLnNjYWxlXG4gICAgdGhpcy5fcHJvZ3Jlc3NIZWlnaHQgPSB0aGlzLl9oZWlnaHQgLSB0aGlzLl9wcm9ncmVzc1BhZGRpbmdUb3AgLSB0aGlzLl9wcm9ncmVzc1BhZGRpbmdCb3R0b21cblxuICAgIGNvbnN0IHsgc291cmNlV2lkdGg6IHByb2dyZXNzU291cmNlV2lkdGgsIC4uLnByb2dyZXNzU291cmNlc0NvbXBvbmVudHNDb29yZGluYXRlcyB9ID0gc291cmNlc0NvbXBvbmVudHNDb29yZGluYXRlcy5idXR0b25zW1xuICAgICAgdGhpcy5zdHlsZS5zdGFydHNXaXRoKCdyb3VuZCcpID8gJ3JvdW5kV2hpdGUnIDogJ3NxdWFyZVdoaXRlJ1xuICAgIF07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFVpRW50aXR5XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB7Li4udGhpcy5iYXJFbGVtZW50fVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIC4uLnRoaXMuYmFyRWxlbWVudC51aVRyYW5zZm9ybSxcbiAgICAgICAgICBkaXNwbGF5OiB0aGlzLnZpc2libGUgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgcG9zaXRpb246IHsgYm90dG9tOiB0aGlzLnlPZmZzZXQsIHJpZ2h0OiB0aGlzLnhPZmZzZXQgKiAtMSB9LFxuICAgICAgICAgIHdpZHRoOiB0aGlzLl93aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2hlaWdodCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgey4uLnRoaXMuYmFja2dyb3VuZEVsZW1lbnR9XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAuLi50aGlzLmJhY2tncm91bmRFbGVtZW50LnVpQmFja2dyb3VuZCxcbiAgICAgICAgICAgIHV2czogZ2V0SW1hZ2VBdGxhc01hcHBpbmcoe1xuICAgICAgICAgICAgICAuLi5zb3VyY2VzQ29tcG9uZW50c0Nvb3JkaW5hdGVzLmJ1dHRvbnNbdGhpcy5zdHlsZV0sXG4gICAgICAgICAgICAgIGF0bGFzSGVpZ2h0OiBzb3VyY2VzQ29tcG9uZW50c0Nvb3JkaW5hdGVzLmF0bGFzSGVpZ2h0LFxuICAgICAgICAgICAgICBhdGxhc1dpZHRoOiBzb3VyY2VzQ29tcG9uZW50c0Nvb3JkaW5hdGVzLmF0bGFzV2lkdGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB7Li4udGhpcy5wcm9jZXNzRWxlbWVudH1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgLi4udGhpcy5wcm9jZXNzRWxlbWVudC51aVRyYW5zZm9ybSxcbiAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICB0aGlzLl93aWR0aCAqIHRoaXMuX3ZhbHVlIC0gdGhpcy5fcHJvZ3Jlc3NQYWRkaW5nTGVmdCAtIHRoaXMuX3Byb2dyZXNzUGFkZGluZ1JpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9wcm9ncmVzc0hlaWdodCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHRvcDogdGhpcy5fcHJvZ3Jlc3NQYWRkaW5nVG9wLFxuICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9wcm9ncmVzc1BhZGRpbmdMZWZ0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgLi4udGhpcy5wcm9jZXNzRWxlbWVudC51aUJhY2tncm91bmQsXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgICAgIHV2czogZ2V0SW1hZ2VBdGxhc01hcHBpbmcoe1xuICAgICAgICAgICAgICAuLi5wcm9ncmVzc1NvdXJjZXNDb21wb25lbnRzQ29vcmRpbmF0ZXMsXG4gICAgICAgICAgICAgIHNvdXJjZVdpZHRoOiBwcm9ncmVzc1NvdXJjZVdpZHRoICogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICAgIGF0bGFzSGVpZ2h0OiBzb3VyY2VzQ29tcG9uZW50c0Nvb3JkaW5hdGVzLmF0bGFzSGVpZ2h0LFxuICAgICAgICAgICAgICBhdGxhc1dpZHRoOiBzb3VyY2VzQ29tcG9uZW50c0Nvb3JkaW5hdGVzLmF0bGFzV2lkdGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9VaUVudGl0eT5cbiAgICApXG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID1cbiAgICAgIHZhbHVlID4gdGhpcy5fdmFsdWVNYXggPyB0aGlzLl92YWx1ZU1heCA6IHZhbHVlIDwgdGhpcy5fdmFsdWVNaW4gPyB0aGlzLl92YWx1ZU1pbiA6IHZhbHVlXG4gIH1cbn1cbiJdfQ==