nxt-color-picker 17.0.0 → 18.0.0
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/color-picker/color-picker.component.mjs +5 -5
- package/esm2022/lib/color-picker.directive.mjs +4 -4
- package/esm2022/lib/color-picker.module.mjs +4 -4
- package/esm2022/lib/color-picker.service.mjs +4 -4
- package/esm2022/lib/slider.directive.mjs +4 -4
- package/esm2022/lib/text.directive.mjs +4 -4
- package/esm2022/util/color.mjs +1 -1
- package/esm2022/util/helpers.mjs +1 -1
- package/fesm2022/nxt-color-picker.mjs +20 -20
- package/fesm2022/nxt-color-picker.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -631,12 +631,12 @@ export class ColorPickerComponent {
|
|
|
631
631
|
formatAlpha(a) {
|
|
632
632
|
return a?.toFixed(2).replace(/\.?0+$/, '');
|
|
633
633
|
}
|
|
634
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
635
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: ColorPickerComponent, selector: "nxt-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[nxtText]", inputs: ["rg", "nxtText"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[nxtSlider]", inputs: ["rgX", "rgY", "nxtSlider"], outputs: ["dragEnd", "dragStart", "newValue"] }] }); }
|
|
634
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ColorPickerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
635
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ColorPickerComponent, selector: "nxt-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,#0000,#000),linear-gradient(to right,#fff,#fff0);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,#000,#fff)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[nxtText]", inputs: ["rg", "nxtText"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[nxtSlider]", inputs: ["rgX", "rgY", "nxtSlider"], outputs: ["dragEnd", "dragStart", "newValue"] }] }); }
|
|
636
636
|
}
|
|
637
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
637
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
638
638
|
type: Component,
|
|
639
|
-
args: [{ selector: 'nxt-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
|
|
639
|
+
args: [{ selector: 'nxt-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,#0000,#000),linear-gradient(to right,#fff,#fff0);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,#000,#fff)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
|
|
640
640
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ColorPickerService }], propDecorators: { onCancel: [{
|
|
641
641
|
type: HostListener,
|
|
642
642
|
args: ['document:keyup.esc', ['$event']]
|
|
@@ -650,4 +650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
|
|
|
650
650
|
type: HostListener,
|
|
651
651
|
args: ['document:focusin', ['$event']]
|
|
652
652
|
}] } });
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBYyxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNU4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQWlELGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFhLE1BQU0sb0JBQW9CLENBQUE7QUFDNUssT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBZSxlQUFlLEVBQWlCLGlCQUFpQixFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBOzs7Ozs7QUFHdEw7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUU3QixZQUNZLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLE9BQTJC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LFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgY215a1RvUmdiLCBkZW5vcm1hbGl6ZUNNWUssIGRlbm9ybWFsaXplSFNMQSwgZGVub3JtYWxpemVSR0JBLCBmb3JtYXRDbXlrLCBmb3JtYXRPdXRwdXQsIGhzbGFUb0hzdmEsIGhzdmFUb0hzbGEsIGhzdmFUb1JnYmEsIHJnYmFUb0NteWssIHJnYmFUb0hleCwgcmdiYVRvSHN2YSwgc3RyaW5nVG9DbXlrLCBzdHJpbmdUb0hzdmEgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yJ1xyXG5pbXBvcnQgeyBvcGFxdWVTbGlkZXJMaWdodCwgdHJhbnNwYXJlbnRTbGlkZXJMaWdodCB9IGZyb20gJy4uLy4uL3V0aWwvY29udHJhc3QnXHJcbmltcG9ydCB7IENteWssIEhzbGEsIEhzdmEsIFJnYmEgfSBmcm9tICcuLi8uLi91dGlsL2Zvcm1hdHMnXHJcbmltcG9ydCB7IENvbG9yTW9kZUludGVybmFsLCBjb21wb3NlZFBhdGgsIEN1cnNvckV2ZW50LCBEaWFsb2dDb25maWcsIERpcmVjdGl2ZUNhbGxiYWNrcywgcGFyc2VDb2xvck1vZGUsIHNpemVUb1N0cmluZywgU2xpZGVyUG9zaXRpb24sIFRleHRFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwvaGVscGVycydcclxuaW1wb3J0IHsgQWxwaGFDaGFubmVsLCBBbHBoYUNoYW5uZWxFbnVtLCBBbHBoYUVuYWJsZWRGb3JtYXRzLCBDb2xvckZvcm1hdCwgQ29sb3JGb3JtYXRFbnVtLCBEaWFsb2dEaXNwbGF5LCBEaWFsb2dEaXNwbGF5RW51bSwgT3V0cHV0Rm9ybWF0LCBPdXRwdXRGb3JtYXRFbnVtIH0gZnJvbSAnLi4vLi4vdXRpbC90eXBlcydcclxuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItcGlja2VyLnNlcnZpY2UnXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWNvbG9yLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIHJlYWRvbmx5IGNvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWxcclxuXHJcbiAgICBwcml2YXRlIGhzdmE/OiBIc3ZhXHJcbiAgICBwcml2YXRlIGNteWs/OiBDbXlrXHJcblxyXG4gICAgcHJpdmF0ZSBjbXlrQ29sb3IgPSAnJ1xyXG4gICAgcHJpdmF0ZSBvdXRwdXRDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGluaXRpYWxDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGZhbGxiYWNrQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBwcml2YXRlIHNsaWRlckg/OiBudW1iZXJcclxuXHJcbiAgICBwcml2YXRlIGRpYWxvZ0lucHV0RmllbGRzOiBDb2xvckZvcm1hdFtdID0gW1xyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5oZXgsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLnJnYmEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmhzbGEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgIF1cclxuXHJcbiAgICBwcml2YXRlIGNhbGxiYWNrcz86IERpcmVjdGl2ZUNhbGxiYWNrc1xyXG5cclxuICAgIHNob3cgPSBmYWxzZVxyXG5cclxuICAgIGZvcm1hdDogQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaGV4XHJcbiAgICBzbGlkZXI/OiBTbGlkZXJQb3NpdGlvblxyXG5cclxuICAgIGhleFRleHQ/OiBzdHJpbmdcclxuICAgIGhleEFscGhhPzogbnVtYmVyXHJcblxyXG4gICAgY215a1RleHQ/OiBDbXlrXHJcbiAgICBoc2xhVGV4dD86IEhzbGFcclxuICAgIHJnYmFUZXh0PzogUmdiYVxyXG5cclxuICAgIHNlbGVjdGVkQ29sb3IgPSAnJ1xyXG4gICAgaHVlU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuICAgIGFscGhhU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBzdlNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIGh1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIHZhbHVlU2xpZGVyTGlnaHQgPSBmYWxzZVxyXG4gICAgYWxwaGFTbGlkZXJMaWdodCA9IGZhbHNlXHJcblxyXG4gICAgd2lkdGg/OiBzdHJpbmdcclxuICAgIGhlaWdodD86IHN0cmluZ1xyXG5cclxuICAgIG1vZGU6IENvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWwuY29sb3JcclxuXHJcbiAgICBjbXlrRW5hYmxlZCA9IGZhbHNlXHJcbiAgICBhbHBoYUNoYW5uZWw6IEFscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbEVudW0uZW5hYmxlZFxyXG4gICAgb3V0cHV0Rm9ybWF0OiBPdXRwdXRGb3JtYXQgPSBPdXRwdXRGb3JtYXRFbnVtLmF1dG9cclxuXHJcbiAgICBkaXNhYmxlSW5wdXQgPSBmYWxzZVxyXG4gICAgZGlhbG9nRGlzcGxheT86IERpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICBpZ25vcmVkRWxlbWVudHM/OiBhbnlbXVxyXG5cclxuICAgIHNhdmVDbGlja091dHNpZGUgPSBmYWxzZVxyXG4gICAgY2xvc2VDbGlja091dHNpZGUgPSBmYWxzZVxyXG5cclxuICAgIG9rQnV0dG9uID0gZmFsc2VcclxuXHJcbiAgICBjYW5jZWxCdXR0b24gPSBmYWxzZVxyXG5cclxuICAgIHByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2VcclxuICAgIHByZXNldENvbG9ycz86IHN0cmluZ1tdXHJcbiAgICBtYXhQcmVzZXRDb2xvcnM/OiBudW1iZXJcclxuXHJcbiAgICBwcmVzZXRDb2xvcnNFZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IENvbG9yUGlja2VyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2MnLCBbJyRldmVudCddKVxyXG4gICAgb25DYW5jZWwoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgdHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvclNlbGVjdENhbmNlbGVkKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwLmVudGVyJywgWyckZXZlbnQnXSlcclxuICAgIG9uQWNjZXB0KGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmb2N1c2luJywgWyckZXZlbnQnXSlcclxuICAgIG9uRm9jdXNDaGFuZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IG5ldyBTZXQoY29tcG9zZWRQYXRoKGV2ZW50KSlcclxuICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSB0aGlzLmlnbm9yZWRFbGVtZW50cz8uZmluZChlbCA9PiBwYXRoLmhhcyhlbCkpXHJcblxyXG4gICAgICAgIGlmICghaW50ZXJzZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNhdmVDbGlja091dHNpZGUgJiYgdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyID0gbmV3IFNsaWRlclBvc2l0aW9uKDAsIDAsIDAsIDApXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNteWtFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0ucmdiYSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0RW51bS5yZ2JhXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhzbGEpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaHNsYVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKClcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7IH1cclxuXHJcbiAgICBvcGVuRGlhbG9nKGNvbG9yOiBhbnksIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb2xvcihjb2xvcilcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoY29sb3IsIGVtaXQpXHJcblxyXG4gICAgICAgIHRoaXMub3BlbkNvbG9yUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGlhbG9nKGNvbmZpZzogRGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29uZmlnLmNvbG9yKVxyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBwYXJzZUNvbG9yTW9kZShjb25maWcubW9kZSlcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBjb25maWcuY2FsbGJhY2tzXHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gY29uZmlnLmRpc2FibGVJbnB1dFxyXG5cclxuICAgICAgICB0aGlzLmNteWtFbmFibGVkID0gY29uZmlnLmNteWtFbmFibGVkXHJcbiAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBjb25maWcuYWxwaGFDaGFubmVsXHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSBjb25maWcub3V0cHV0Rm9ybWF0XHJcbiAgICAgICAgdGhpcy5kaWFsb2dEaXNwbGF5ID0gY29uZmlnLmRpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICAgICAgdGhpcy5pZ25vcmVkRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgIC4uLmNvbmZpZy5pZ25vcmVkRWxlbWVudHMgPz8gW10sXHJcbiAgICAgICAgICAgIHRoaXMuZWxSZWYgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICBjb25maWcuZWxlbWVudFJlZiAmJiBjb25maWcuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgXS5maWx0ZXIoZSA9PiAhIWUpXHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5zYXZlQ2xpY2tPdXRzaWRlXHJcbiAgICAgICAgdGhpcy5jbG9zZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5jbG9zZUNsaWNrT3V0c2lkZVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gc2l6ZVRvU3RyaW5nKGNvbmZpZy53aWR0aClcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHNpemVUb1N0cmluZyhjb25maWcuaGVpZ2h0KVxyXG5cclxuICAgICAgICB0aGlzLm9rQnV0dG9uID0gY29uZmlnLm9rQnV0dG9uXHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gY29uZmlnLmNhbmNlbEJ1dHRvblxyXG5cclxuICAgICAgICB0aGlzLmZhbGxiYWNrQ29sb3IgPSBjb25maWcuZmFsbGJhY2tDb2xvciB8fCAnI2ZmZidcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQcmVzZXRDb25maWcoY29uZmlnLnByZXNldExhYmVsLCBjb25maWcucHJlc2V0Q29sb3JzKVxyXG5cclxuICAgICAgICB0aGlzLm1heFByZXNldENvbG9ycyA9IGNvbmZpZy5tYXhQcmVzZXRDb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnNFZGl0YWJsZSA9IGNvbmZpZy5wcmVzZXRDb2xvcnNFZGl0YWJsZVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhleCAmJlxyXG4gICAgICAgICAgICBjb25maWcuYWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbEVudW0uYWx3YXlzICYmIGNvbmZpZy5hbHBoYUNoYW5uZWwgIT0gQWxwaGFDaGFubmVsRW51bS5mb3JjZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBBbHBoYUNoYW5uZWxFbnVtLmRpc2FibGVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxDb2xvcihjb2xvcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcmVzZXRDb25maWcocHJlc2V0TGFiZWw6IGJvb2xlYW4gfCBzdHJpbmcsIHByZXNldENvbG9ycz86IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRMYWJlbCA9IHByZXNldExhYmVsXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSBwcmVzZXRDb2xvcnNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvckZyb21TdHJpbmcodmFsdWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBsZXQgaHN2YSA9IHN0cmluZ1RvSHN2YSh2YWx1ZSwgdHJ1ZSlcclxuICAgICAgICBsZXQgY215ayA9IHN0cmluZ1RvQ215ayh2YWx1ZSwgdHJ1ZSlcclxuXHJcbiAgICAgICAgaWYgKCghaHN2YSAmJiAhdGhpcy5oc3ZhKSAmJiAoIWNteWsgJiYgIXRoaXMuY215aykpIHtcclxuICAgICAgICAgICAgaHN2YSA9IHN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsIHRydWUpXHJcbiAgICAgICAgICAgIGNteWsgPSBzdHJpbmdUb0NteWsodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhzdmEgfHwgY215aykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsRW51bS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgICAgICAgICAgaHN2YS5hID0gMVxyXG4gICAgICAgICAgICAgICAgaWYgKGNteWspXHJcbiAgICAgICAgICAgICAgICAgICAgY215ay5hID0gMVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSBoc3ZhXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IGNteWtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YT8uaFxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcihlbWl0LCB1cGRhdGUsIChjbXlrICYmIHRoaXMuY215a0VuYWJsZWQpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdUb1JnYmEodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGhzdmEgPSBzdHJpbmdUb0hzdmEodmFsdWUsIHRydWUpXHJcbiAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPdXRwdXQoaHN2YSwgT3V0cHV0Rm9ybWF0RW51bS5yZ2JhLCBBbHBoYUNoYW5uZWxFbnVtLmVuYWJsZWQpXHJcblxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdFbmQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ0VuZCh7IHNsaWRlciwgY29sb3I6IHRoaXMub3V0cHV0Q29sb3IgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ1N0YXJ0KHsgc2xpZGVyLCBjb2xvcjogdGhpcy5vdXRwdXRDb2xvciB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZvcm1hdFRvZ2dsZShjaGFuZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUZvcm1hdHMgPSB0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aCAtICh0aGlzLmNteWtFbmFibGVkID8gMCA6IDEpXHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRGb3JtYXQgPSAoKCh0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmluZGV4T2YodGhpcy5mb3JtYXQpICsgY2hhbmdlKSAlXHJcbiAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHMpICsgYXZhaWxhYmxlRm9ybWF0cykgJSBhdmFpbGFibGVGb3JtYXRzXHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tuZXh0Rm9ybWF0XVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sb3JDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCdyZ1gnIGluIHZhbHVlICYmICdyZ1knIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gdmFsdWUucyAvIHZhbHVlLnJnWFxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdZXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdsaWdodG5lc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnc2F0dXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8ucyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkh1ZUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhPy5oXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhPy5oLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCd2JyBpbiB2YWx1ZSAmJiAncmdYJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdYXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BbHBoYUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8uYSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkhleElucHV0KHZhbHVlPzogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWVbMF0gIT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkSGV4ID0gL14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2lcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRIZXgudGVzdCh2YWx1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2hvcnQgaGV4XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlLnN1YnN0cmluZygxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjICsgYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSGV4IHdpdGhvdXQgYWxwaGFcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gNyAmJiB0aGlzLmFscGhhQ2hhbm5lbCA9PSBBbHBoYUNoYW5uZWxFbnVtLmZvcmNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICgodGhpcy5oc3ZhPy5hIHx8IDApICogMjU1KS50b1N0cmluZygxNilcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2hleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWRJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCByZ2JhID0gdGhpcy5oc3ZhID8gaHN2YVRvUmdiYSh0aGlzLmhzdmEpIDogbmV3IFJnYmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJnYmEuciA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdyZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLnIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVlSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmIgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnYmx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEuYixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdyZWVuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmcgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnZ3JlZW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLmcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25IdWVJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5oID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmgsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25WYWx1ZUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSB0aGlzLmhzdmEgfHwgbmV3IEhzdmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEudixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkFscGhhSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHRoaXMuaHN2YSB8fCBuZXcgSHN2YSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5hLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTGlnaHRuZXNzSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgaHNsYSA9IHRoaXMuaHN2YSA/IGhzdmFUb0hzbGEodGhpcy5oc3ZhKSA6IG5ldyBIc2xhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBoc2xhLmwgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSBoc2xhVG9Ic3ZhKGhzbGEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnbGlnaHRuZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaHNsYS5sLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2F0dXJhdGlvbklucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9Ic2xhKHRoaXMuaHN2YSkgOiBuZXcgSHNsYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaHNsYS5zID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHNsYVRvSHN2YShoc2xhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3NhdHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBoc2xhLnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DeWFuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IHRoaXMuY215ayB8fCBuZXcgQ215aygwLCAwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNteWsuYyA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnY3lhbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWFnZW50YUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLm0gPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ21hZ2VudGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsubSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblllbGxvd0lucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLnkgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3llbGxvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay55LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmxhY2tJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ay5rID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdibGFjaycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5rLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5wcmVzZXRDb2xvcnM/LmZpbHRlcigoY29sb3IpID0+IChjb2xvciA9PSB2YWx1ZSkpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNldENvbG9ycyA9IHRoaXMucHJlc2V0Q29sb3JzPy5jb25jYXQodmFsdWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVQcmVzZXRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSB0aGlzLnByZXNldENvbG9ycz8uZmlsdGVyKChjb2xvcikgPT4gKGNvbG9yICE9IHZhbHVlKSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbG9yIHBpY2tlciBkaWFsb2cgc3RhdHVzXHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQodHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQoZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2RSZWZbJ2Rlc3Ryb3llZCddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ29sb3JQaWNrZXIoZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUsIGNteWtJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcbiAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gQ29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gMFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGFzdE91dHB1dCA9IHRoaXMub3V0cHV0Q29sb3JcclxuXHJcbiAgICAgICAgY29uc3QgaHNsYSA9IGhzdmFUb0hzbGEodGhpcy5oc3ZhKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAoIWNteWtJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrID0gcmdiYVRvQ215ayhoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKGNteWtUb1JnYih0aGlzLmNteWspKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHVlID0gbmV3IEhzdmEodGhpcy5zbGlkZXJIIHx8IHRoaXMuaHN2YS5oLCAxLCAxLCAxLCB0cnVlKVxyXG5cclxuICAgICAgICBjb25zdCByZ2JhID0gaHN2YVRvUmdiYSh0aGlzLmhzdmEpXHJcblxyXG4gICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oc2xhVGV4dCA9IGRlbm9ybWFsaXplSFNMQShoc2xhKVxyXG4gICAgICAgICAgICB0aGlzLnJnYmFUZXh0ID0gZGVub3JtYWxpemVSR0JBKHJnYmEpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrVGV4dCA9IGRlbm9ybWFsaXplQ01ZSyh0aGlzLmNteWspXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93SGV4OCA9IHRoaXMuYWxwaGFDaGFubmVsID09PSBBbHBoYUNoYW5uZWxFbnVtLmFsd2F5c1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oZXhUZXh0ID0gcmdiYVRvSGV4KHJnYmEsIGFsbG93SGV4OClcclxuICAgICAgICAgICAgdGhpcy5oZXhBbHBoYSA9IHRoaXMucmdiYVRleHQuYVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0uYXV0byAmJiB0aGlzLmhzdmEuYSA8IDEgJiYgIUFscGhhRW5hYmxlZEZvcm1hdHMuaGFzKHRoaXMuZm9ybWF0KSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuaHN2YS5hIDwgMSA/IENvbG9yRm9ybWF0RW51bS5yZ2JhIDogQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHN2YVRyYW5zcGFyZW50ID0gbmV3IEhzdmEoXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5oLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEucyxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnYsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5ub3JtYWxpemVkXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBjb25zdCBoc3ZhRnVsbCA9IG5ldyBIc3ZhKFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEuaCxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnMsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS52LFxyXG4gICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEubm9ybWFsaXplZFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5odWVTbGlkZXJDb2xvciA9IGZvcm1hdE91dHB1dChodWUsICdhdXRvJywgJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLmFscGhhU2xpZGVyQ29sb3IgPSAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAnICsgZm9ybWF0T3V0cHV0KGhzdmFUcmFuc3BhcmVudCwgJ2F1dG8nLCAnZm9yY2VkJykgKyAnIDAlLCAnICsgZm9ybWF0T3V0cHV0KGhzdmFGdWxsLCAnYXV0bycsICdkaXNhYmxlZCcpICsgJyAxMDAlKSdcclxuXHJcbiAgICAgICAgdGhpcy5zdlNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQocmdiYSlcclxuICAgICAgICB0aGlzLmh1ZVNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQoaHN2YVRvUmdiYShodWUpKVxyXG4gICAgICAgIHRoaXMudmFsdWVTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXHJcbiAgICAgICAgdGhpcy5hbHBoYVNsaWRlckxpZ2h0ID0gdHJhbnNwYXJlbnRTbGlkZXJMaWdodChyZ2JhKVxyXG5cclxuICAgICAgICB0aGlzLm91dHB1dENvbG9yID0gZm9ybWF0T3V0cHV0KHRoaXMuaHN2YSwgdGhpcy5vdXRwdXRGb3JtYXQsIHRoaXMuYWxwaGFDaGFubmVsKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIE91dHB1dEZvcm1hdEVudW0ucmdiYSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ICE9PSBDb2xvckZvcm1hdEVudW0uY215aykge1xyXG4gICAgICAgICAgICB0aGlzLmNteWtDb2xvciA9ICcnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSBmb3JtYXRDbXlrKHRoaXMuY215aywgdGhpcy5hbHBoYUNoYW5uZWwpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNsaWRlciA9IG5ldyBTbGlkZXJQb3NpdGlvbihcclxuICAgICAgICAgICAgKHRoaXMuc2xpZGVySCB8fCB0aGlzLmhzdmEuaCksXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zLFxyXG4gICAgICAgICAgICAoMSAtIHRoaXMuaHN2YS52KSxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLmFcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChlbWl0ICYmIGxhc3RPdXRwdXQgIT0gdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxsKG46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkobikuZmlsbCgxKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdEFscGhhKGE/OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gYT8udG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgJycpXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICB2aXNpYmlsaXR5OiAhc2hvdyA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCB8fCAnJyxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCB8fCAnJ1xyXG4gICAgfVwiXHJcbiAgICAqbmdJZj1cInNob3dcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJkaWFsb2dEaXNwbGF5ID09ICdwb3B1cCdcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19hcnJvd1wiPjwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zdlwiXHJcbiAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICBbcmdZXT1cIjFcIlxyXG4gICAgICAgIChuZXdWYWx1ZSk9XCJvbkNvbG9yQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxyXG4gICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnc2F0dXJhdGlvbi1saWdodG5lc3MnKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBodWVTbGlkZXJDb2xvciB8fCAnJ1xyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3IgY29sb3ItcGlja2VyX19jdXJzb3ItLXN2XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0Jzogc3ZTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgdG9wOiAoc2xpZGVyPy52IHx8IDApICogMTAwICsgJyUnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8ucyB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2NvbnRyb2xzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWQtY29sb3JcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgIH1cIj48YnV0dG9uICpuZ0lmPVwicHJlc2V0Q29sb3JzRWRpdGFibGUgJiYgIShtYXhQcmVzZXRDb2xvcnMgJiYgKHByZXNldENvbG9ycz8ubGVuZ3RoIHx8IDApID49IG1heFByZXNldENvbG9ycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgY29sb3IgdG8gcHJlc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi10aXRsZT1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uYWRkLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fYWRkLXNlbGVjdGVkLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFByZXNldENvbG9yKHNlbGVjdGVkQ29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19oYXZcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0taHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ2h1ZScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnaHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogaHVlU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoc2xpZGVyPy5oIHx8IDApICogMTAwICsgJyUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLXZhbHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgndmFsdWUnKVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3ZhbHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogdmFsdWVTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICgxIC0gKHNsaWRlcj8udiB8fCAwKSkgKiAxMDAgKyAnJSdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0tYWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgICAgICAgICBbcmdYXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdhbHBoYScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnYWxwaGEnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2xpZGVyLS1hbHBoYS1iZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGFscGhhU2xpZGVyQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogYWxwaGFTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8uYSB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZUlucHV0ICYmIChtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yIHx8IG1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGU7IGVsc2UgZm9ybWF0U3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Vjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoaHNsYVRleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybWF0U3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2hzbGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMzYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjM2MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5oPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5IPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LnM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25TYXR1cmF0aW9uSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5TPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25MaWdodG5lc3NJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRBbHBoYShoc2xhVGV4dD8uYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JnYmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5yPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uUmVkSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5SPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIyNTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/Lmc/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25HcmVlbklucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Rzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5iPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQmx1ZUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgIT0gJ2Rpc2FibGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhzbGFUZXh0Py5hKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY215aydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LmM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25DeWFuSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5DPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lm0/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25NYWdlbnRhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5NPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lnk/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25ZZWxsb3dJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8uaz8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsYWNrSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5LPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoY215a1RleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhleFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uSGV4SW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkhleElucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SGV4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCA9PSAnZm9yY2VkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhleEFscGhhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGUtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9ybWF0VG9nZ2xlKDEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtdHlwZS1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb3JtYXRUb2dnbGUoLTEpXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXNldExhYmVsXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZXRMYWJlbCA9PT0gdHJ1ZTsgZWxzZSBzdHJpbmdMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5wcmVzZXQtY29sb3JzXCI+UHJlc2V0IGNvbG9yczwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdHJpbmdMYWJlbD57eyBwcmVzZXRMYWJlbCB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3Igb2YgcHJlc2V0Q29sb3JzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0cmluZ1RvUmdiYShjb2xvcikgYXMgcmdiYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtLWZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JhIHx8ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjxidXR0b24gKm5nSWY9XCJwcmVzZXRDb2xvcnNFZGl0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLnJlbW92ZS1jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3JlbW92ZS1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUHJlc2V0Q29sb3IoY29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgZmlsbCg1MClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9rQnV0dG9uIHx8IGNhbmNlbEJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2J1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuY2VsQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9rQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24ub2tcIj5PSzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBYyxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNU4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQWlELGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFhLE1BQU0sb0JBQW9CLENBQUE7QUFDNUssT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBZSxlQUFlLEVBQWlCLGlCQUFpQixFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBOzs7Ozs7QUFHdEw7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUU3QixZQUNZLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLE9BQTJC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WTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzdDLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IGNteWtUb1JnYiwgZGVub3JtYWxpemVDTVlLLCBkZW5vcm1hbGl6ZUhTTEEsIGRlbm9ybWFsaXplUkdCQSwgZm9ybWF0Q215aywgZm9ybWF0T3V0cHV0LCBoc2xhVG9Ic3ZhLCBoc3ZhVG9Ic2xhLCBoc3ZhVG9SZ2JhLCByZ2JhVG9DbXlrLCByZ2JhVG9IZXgsIHJnYmFUb0hzdmEsIHN0cmluZ1RvQ215aywgc3RyaW5nVG9Ic3ZhIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2xvcidcclxuaW1wb3J0IHsgb3BhcXVlU2xpZGVyTGlnaHQsIHRyYW5zcGFyZW50U2xpZGVyTGlnaHQgfSBmcm9tICcuLi8uLi91dGlsL2NvbnRyYXN0J1xyXG5pbXBvcnQgeyBDbXlrLCBIc2xhLCBIc3ZhLCBSZ2JhIH0gZnJvbSAnLi4vLi4vdXRpbC9mb3JtYXRzJ1xyXG5pbXBvcnQgeyBDb2xvck1vZGVJbnRlcm5hbCwgY29tcG9zZWRQYXRoLCBDdXJzb3JFdmVudCwgRGlhbG9nQ29uZmlnLCBEaXJlY3RpdmVDYWxsYmFja3MsIHBhcnNlQ29sb3JNb2RlLCBzaXplVG9TdHJpbmcsIFNsaWRlclBvc2l0aW9uLCBUZXh0RXZlbnQgfSBmcm9tICcuLi8uLi91dGlsL2hlbHBlcnMnXHJcbmltcG9ydCB7IEFscGhhQ2hhbm5lbCwgQWxwaGFDaGFubmVsRW51bSwgQWxwaGFFbmFibGVkRm9ybWF0cywgQ29sb3JGb3JtYXQsIENvbG9yRm9ybWF0RW51bSwgRGlhbG9nRGlzcGxheSwgRGlhbG9nRGlzcGxheUVudW0sIE91dHB1dEZvcm1hdCwgT3V0cHV0Rm9ybWF0RW51bSB9IGZyb20gJy4uLy4uL3V0aWwvdHlwZXMnXHJcbmltcG9ydCB7IENvbG9yUGlja2VyU2VydmljZSB9IGZyb20gJy4uL2NvbG9yLXBpY2tlci5zZXJ2aWNlJ1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ254dC1jb2xvci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuXHJcbiAgICByZWFkb25seSBjb2xvck1vZGVJbnRlcm5hbCA9IENvbG9yTW9kZUludGVybmFsXHJcblxyXG4gICAgcHJpdmF0ZSBoc3ZhPzogSHN2YVxyXG4gICAgcHJpdmF0ZSBjbXlrPzogQ215a1xyXG5cclxuICAgIHByaXZhdGUgY215a0NvbG9yID0gJydcclxuICAgIHByaXZhdGUgb3V0cHV0Q29sb3IgPSAnJ1xyXG4gICAgcHJpdmF0ZSBpbml0aWFsQ29sb3IgPSAnJ1xyXG4gICAgcHJpdmF0ZSBmYWxsYmFja0NvbG9yPzogc3RyaW5nXHJcblxyXG4gICAgcHJpdmF0ZSBzbGlkZXJIPzogbnVtYmVyXHJcblxyXG4gICAgcHJpdmF0ZSBkaWFsb2dJbnB1dEZpZWxkczogQ29sb3JGb3JtYXRbXSA9IFtcclxuICAgICAgICBDb2xvckZvcm1hdEVudW0uaGV4LFxyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5yZ2JhLFxyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5oc2xhLFxyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5jbXlrXHJcbiAgICBdXHJcblxyXG4gICAgcHJpdmF0ZSBjYWxsYmFja3M/OiBEaXJlY3RpdmVDYWxsYmFja3NcclxuXHJcbiAgICBzaG93ID0gZmFsc2VcclxuXHJcbiAgICBmb3JtYXQ6IENvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgc2xpZGVyPzogU2xpZGVyUG9zaXRpb25cclxuXHJcbiAgICBoZXhUZXh0Pzogc3RyaW5nXHJcbiAgICBoZXhBbHBoYT86IG51bWJlclxyXG5cclxuICAgIGNteWtUZXh0PzogQ215a1xyXG4gICAgaHNsYVRleHQ/OiBIc2xhXHJcbiAgICByZ2JhVGV4dD86IFJnYmFcclxuXHJcbiAgICBzZWxlY3RlZENvbG9yID0gJydcclxuICAgIGh1ZVNsaWRlckNvbG9yPzogc3RyaW5nXHJcbiAgICBhbHBoYVNsaWRlckNvbG9yPzogc3RyaW5nXHJcblxyXG4gICAgc3ZTbGlkZXJMaWdodCA9IGZhbHNlXHJcbiAgICBodWVTbGlkZXJMaWdodCA9IGZhbHNlXHJcbiAgICB2YWx1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIGFscGhhU2xpZGVyTGlnaHQgPSBmYWxzZVxyXG5cclxuICAgIHdpZHRoPzogc3RyaW5nXHJcbiAgICBoZWlnaHQ/OiBzdHJpbmdcclxuXHJcbiAgICBtb2RlOiBDb2xvck1vZGVJbnRlcm5hbCA9IENvbG9yTW9kZUludGVybmFsLmNvbG9yXHJcblxyXG4gICAgY215a0VuYWJsZWQgPSBmYWxzZVxyXG4gICAgYWxwaGFDaGFubmVsOiBBbHBoYUNoYW5uZWwgPSBBbHBoYUNoYW5uZWxFbnVtLmVuYWJsZWRcclxuICAgIG91dHB1dEZvcm1hdDogT3V0cHV0Rm9ybWF0ID0gT3V0cHV0Rm9ybWF0RW51bS5hdXRvXHJcblxyXG4gICAgZGlzYWJsZUlucHV0ID0gZmFsc2VcclxuICAgIGRpYWxvZ0Rpc3BsYXk/OiBEaWFsb2dEaXNwbGF5XHJcblxyXG4gICAgaWdub3JlZEVsZW1lbnRzPzogYW55W11cclxuXHJcbiAgICBzYXZlQ2xpY2tPdXRzaWRlID0gZmFsc2VcclxuICAgIGNsb3NlQ2xpY2tPdXRzaWRlID0gZmFsc2VcclxuXHJcbiAgICBva0J1dHRvbiA9IGZhbHNlXHJcblxyXG4gICAgY2FuY2VsQnV0dG9uID0gZmFsc2VcclxuXHJcbiAgICBwcmVzZXRMYWJlbDogYm9vbGVhbiB8IHN0cmluZyA9IGZhbHNlXHJcbiAgICBwcmVzZXRDb2xvcnM/OiBzdHJpbmdbXVxyXG4gICAgbWF4UHJlc2V0Q29sb3JzPzogbnVtYmVyXHJcblxyXG4gICAgcHJlc2V0Q29sb3JzRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBDb2xvclBpY2tlclNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZXNjJywgWyckZXZlbnQnXSlcclxuICAgIG9uQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsQ29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIHRydWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RDYW5jZWxlZCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgICBvbkFjY2VwdChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdyAmJiB0aGlzLmRpYWxvZ0Rpc3BsYXkgPT0gRGlhbG9nRGlzcGxheUVudW0ucG9wdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Zm9jdXNpbicsIFsnJGV2ZW50J10pXHJcbiAgICBvbkZvY3VzQ2hhbmdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgRm9jdXNFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBuZXcgU2V0KGNvbXBvc2VkUGF0aChldmVudCkpXHJcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0ID0gdGhpcy5pZ25vcmVkRWxlbWVudHM/LmZpbmQoZWwgPT4gcGF0aC5oYXMoZWwpKVxyXG5cclxuICAgICAgICBpZiAoIWludGVyc2VjdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2F2ZUNsaWNrT3V0c2lkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dENvbG9yICYmIHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNteWtFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbG9zZUNsaWNrT3V0c2lkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zYXZlQ2xpY2tPdXRzaWRlICYmIHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNsaWRlciA9IG5ldyBTbGlkZXJQb3NpdGlvbigwLCAwLCAwLCAwKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0RW51bS5jbXlrXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLnJnYmEpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdEVudW0ucmdiYVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT0gT3V0cHV0Rm9ybWF0RW51bS5oc2xhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmhzbGFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0RW51bS5oZXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub3BlbkRpYWxvZyh0aGlzLmluaXRpYWxDb2xvciwgZmFsc2UpXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpXHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkgeyB9XHJcblxyXG4gICAgb3BlbkRpYWxvZyhjb2xvcjogYW55LCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5zZXRBY3RpdmUodGhpcylcclxuXHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29sb3IpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGNvbG9yLCBlbWl0KVxyXG5cclxuICAgICAgICB0aGlzLm9wZW5Db2xvclBpY2tlcigpXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZUNvbG9yUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cERpYWxvZyhjb25maWc6IERpYWxvZ0NvbmZpZykge1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbENvbG9yKGNvbmZpZy5jb2xvcilcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlID0gcGFyc2VDb2xvck1vZGUoY29uZmlnLm1vZGUpXHJcblxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzID0gY29uZmlnLmNhbGxiYWNrc1xyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVJbnB1dCA9IGNvbmZpZy5kaXNhYmxlSW5wdXRcclxuXHJcbiAgICAgICAgdGhpcy5jbXlrRW5hYmxlZCA9IGNvbmZpZy5jbXlrRW5hYmxlZFxyXG4gICAgICAgIHRoaXMuYWxwaGFDaGFubmVsID0gY29uZmlnLmFscGhhQ2hhbm5lbFxyXG4gICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gY29uZmlnLm91dHB1dEZvcm1hdFxyXG4gICAgICAgIHRoaXMuZGlhbG9nRGlzcGxheSA9IGNvbmZpZy5kaWFsb2dEaXNwbGF5XHJcblxyXG4gICAgICAgIHRoaXMuaWdub3JlZEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAuLi5jb25maWcuaWdub3JlZEVsZW1lbnRzID8/IFtdLFxyXG4gICAgICAgICAgICB0aGlzLmVsUmVmICYmIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICAgICAgY29uZmlnLmVsZW1lbnRSZWYgJiYgY29uZmlnLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgIF0uZmlsdGVyKGUgPT4gISFlKVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVDbGlja091dHNpZGUgPSBjb25maWcuc2F2ZUNsaWNrT3V0c2lkZVxyXG4gICAgICAgIHRoaXMuY2xvc2VDbGlja091dHNpZGUgPSBjb25maWcuY2xvc2VDbGlja091dHNpZGVcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHNpemVUb1N0cmluZyhjb25maWcud2lkdGgpXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBzaXplVG9TdHJpbmcoY29uZmlnLmhlaWdodClcclxuXHJcbiAgICAgICAgdGhpcy5va0J1dHRvbiA9IGNvbmZpZy5va0J1dHRvblxyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGNvbmZpZy5jYW5jZWxCdXR0b25cclxuXHJcbiAgICAgICAgdGhpcy5mYWxsYmFja0NvbG9yID0gY29uZmlnLmZhbGxiYWNrQ29sb3IgfHwgJyNmZmYnXHJcblxyXG4gICAgICAgIHRoaXMuc2V0UHJlc2V0Q29uZmlnKGNvbmZpZy5wcmVzZXRMYWJlbCwgY29uZmlnLnByZXNldENvbG9ycylcclxuXHJcbiAgICAgICAgdGhpcy5tYXhQcmVzZXRDb2xvcnMgPSBjb25maWcubWF4UHJlc2V0Q29sb3JzXHJcblxyXG4gICAgICAgIHRoaXMucHJlc2V0Q29sb3JzRWRpdGFibGUgPSBjb25maWcucHJlc2V0Q29sb3JzRWRpdGFibGVcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5vdXRwdXRGb3JtYXQgPT0gT3V0cHV0Rm9ybWF0RW51bS5oZXggJiZcclxuICAgICAgICAgICAgY29uZmlnLmFscGhhQ2hhbm5lbCAhPSBBbHBoYUNoYW5uZWxFbnVtLmFsd2F5cyAmJiBjb25maWcuYWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbEVudW0uZm9yY2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFDaGFubmVsID0gQWxwaGFDaGFubmVsRW51bS5kaXNhYmxlZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsQ29sb3IoY29sb3I6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gY29sb3JcclxuICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgZmFsc2UsIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UHJlc2V0Q29uZmlnKHByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nLCBwcmVzZXRDb2xvcnM/OiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMucHJlc2V0TGFiZWwgPSBwcmVzZXRMYWJlbFxyXG4gICAgICAgIHRoaXMucHJlc2V0Q29sb3JzID0gcHJlc2V0Q29sb3JzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29sb3JGcm9tU3RyaW5nKHZhbHVlOiBzdHJpbmcsIGVtaXQ6IGJvb2xlYW4gPSB0cnVlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IGhzdmEgPSBzdHJpbmdUb0hzdmEodmFsdWUsIHRydWUpXHJcbiAgICAgICAgbGV0IGNteWsgPSBzdHJpbmdUb0NteWsodmFsdWUsIHRydWUpXHJcblxyXG4gICAgICAgIGlmICgoIWhzdmEgJiYgIXRoaXMuaHN2YSkgJiYgKCFjbXlrICYmICF0aGlzLmNteWspKSB7XHJcbiAgICAgICAgICAgIGhzdmEgPSBzdHJpbmdUb0hzdmEodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxyXG4gICAgICAgICAgICBjbXlrID0gc3RyaW5nVG9DbXlrKHRoaXMuZmFsbGJhY2tDb2xvciwgdHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoc3ZhIHx8IGNteWspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWxwaGFDaGFubmVsID09IEFscGhhQ2hhbm5lbEVudW0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoc3ZhKVxyXG4gICAgICAgICAgICAgICAgICAgIGhzdmEuYSA9IDFcclxuICAgICAgICAgICAgICAgIGlmIChjbXlrKVxyXG4gICAgICAgICAgICAgICAgICAgIGNteWsuYSA9IDFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHN2YVxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSBjbXlrXHJcblxyXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmE/LmhcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoZW1pdCwgdXBkYXRlLCAoY215ayAmJiB0aGlzLmNteWtFbmFibGVkKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RyaW5nVG9SZ2JhKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBoc3ZhID0gc3RyaW5nVG9Ic3ZhKHZhbHVlLCB0cnVlKVxyXG4gICAgICAgIGlmIChoc3ZhKVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T3V0cHV0KGhzdmEsIE91dHB1dEZvcm1hdEVudW0ucmdiYSwgQWxwaGFDaGFubmVsRW51bS5lbmFibGVkKVxyXG5cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnRW5kKHNsaWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckRyYWdFbmQoeyBzbGlkZXIsIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZ1N0YXJ0KHNsaWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckRyYWdTdGFydCh7IHNsaWRlciwgY29sb3I6IHRoaXMub3V0cHV0Q29sb3IgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtYXRUb2dnbGUoY2hhbmdlOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBhdmFpbGFibGVGb3JtYXRzID0gdGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5sZW5ndGggLSAodGhpcy5jbXlrRW5hYmxlZCA/IDAgOiAxKVxyXG5cclxuICAgICAgICBjb25zdCBuZXh0Rm9ybWF0ID0gKCgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KSArIGNoYW5nZSkgJVxyXG4gICAgICAgICAgICBhdmFpbGFibGVGb3JtYXRzKSArIGF2YWlsYWJsZUZvcm1hdHMpICUgYXZhaWxhYmxlRm9ybWF0c1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbbmV4dEZvcm1hdF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNvbG9yQ2hhbmdlKHZhbHVlOiBDdXJzb3JFdmVudCkge1xyXG4gICAgICAgIGlmICgncmdYJyBpbiB2YWx1ZSAmJiAncmdZJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEucyA9IHZhbHVlLnMgLyB2YWx1ZS5yZ1hcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS52ID0gdmFsdWUudiAvIHZhbHVlLnJnWVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnbGlnaHRuZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhPy52LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlcjogJ3NhdHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25IdWVDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCd2JyBpbiB2YWx1ZSAmJiAncmdYJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLmggPSB2YWx1ZS52IC8gdmFsdWUucmdYXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YT8uaFxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlcjogJ2h1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8uaCxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBDdXJzb3JFdmVudCkge1xyXG4gICAgICAgIGlmICgndicgaW4gdmFsdWUgJiYgJ3JnWCcgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaHN2YSlcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS52ID0gdmFsdWUudiAvIHZhbHVlLnJnWFxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlcjogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhPy52LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWxwaGFDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCd2JyBpbiB2YWx1ZSAmJiAncmdYJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLmEgPSB2YWx1ZS52IC8gdmFsdWUucmdYXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnYWxwaGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LmEsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25IZXhJbnB1dCh2YWx1ZT86IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlWzBdICE9ICcjJykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAnIycgKyB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZEhleCA9IC9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHZhbGlkSGV4LnRlc3QodmFsdWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNob3J0IGhleFxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnIycgKyB2YWx1ZS5zdWJzdHJpbmcoMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYyArIGMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEhleCB3aXRob3V0IGFscGhhXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDcgJiYgdGhpcy5hbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsRW51bS5mb3JjZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAoKHRoaXMuaHN2YT8uYSB8fCAwKSAqIDI1NSkudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodmFsdWUsIHRydWUsIGZhbHNlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdoZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVkSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLnIgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAncmVkJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmdiYS5yLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1ZUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYmEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkgOiBuZXcgUmdiYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgcmdiYS5iID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gcmdiYVRvSHN2YShyZ2JhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2JsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLmIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25HcmVlbklucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYmEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkgOiBuZXcgUmdiYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgcmdiYS5nID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gcmdiYVRvSHN2YShyZ2JhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2dyZWVuJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmdiYS5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSHVlSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHRoaXMuaHN2YSB8fCBuZXcgSHN2YSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2h1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5oLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVmFsdWVJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS52ID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BbHBoYUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSB0aGlzLmhzdmEgfHwgbmV3IEhzdmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLmEgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnYWxwaGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEuYSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkxpZ2h0bmVzc0lucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9Ic2xhKHRoaXMuaHN2YSkgOiBuZXcgSHNsYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaHNsYS5sID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHNsYVRvSHN2YShoc2xhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2xpZ2h0bmVzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGhzbGEubCxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNhdHVyYXRpb25JbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCBoc2xhID0gdGhpcy5oc3ZhID8gaHN2YVRvSHNsYSh0aGlzLmhzdmEpIDogbmV3IEhzbGEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIGhzbGEucyA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YSA9IGhzbGFUb0hzdmEoaHNsYSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdzYXR1cmF0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaHNsYS5zLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ3lhbklucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLmMgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2N5YW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsuYyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1hZ2VudGFJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ay5tID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdtYWdlbnRhJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbXlrLm0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25ZZWxsb3dJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ay55ID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICd5ZWxsb3cnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsueSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkJsYWNrSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IHRoaXMuY215ayB8fCBuZXcgQ215aygwLCAwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNteWsuayA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnYmxhY2snLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsuayxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkFkZFByZXNldENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJlc2V0Q29sb3JzPy5maWx0ZXIoKGNvbG9yKSA9PiAoY29sb3IgPT0gdmFsdWUpKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSB0aGlzLnByZXNldENvbG9ycz8uY29uY2F0KHZhbHVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMucHJlc2V0Q29sb3JzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucHJlc2V0Q29sb3JzID0gdGhpcy5wcmVzZXRDb2xvcnM/LmZpbHRlcigoY29sb3IpID0+IChjb2xvciAhPSB2YWx1ZSkpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMucHJlc2V0Q29sb3JzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQcml2YXRlIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBjb2xvciBwaWNrZXIgZGlhbG9nIHN0YXR1c1xyXG5cclxuICAgIHByaXZhdGUgb3BlbkNvbG9yUGlja2VyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zaG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3RhdGVDaGFuZ2VkKHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZUNvbG9yUGlja2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3RhdGVDaGFuZ2VkKGZhbHNlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNkUmVmWydkZXN0cm95ZWQnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbG9yUGlja2VyKGVtaXQ6IGJvb2xlYW4gPSB0cnVlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjbXlrSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuaHN2YSA9IHRoaXMuaHN2YSB8fCBuZXcgSHN2YSgwLCAwLCAwLCAwLCB0cnVlKVxyXG4gICAgICAgIHRoaXMuY215ayA9IHRoaXMuY215ayB8fCBuZXcgQ215aygwLCAwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlID09IENvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhzdmEucyA9IDBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RPdXRwdXQgPSB0aGlzLm91dHB1dENvbG9yXHJcblxyXG4gICAgICAgIGNvbnN0IGhzbGEgPSBoc3ZhVG9Ic2xhKHRoaXMuaHN2YSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgaWYgKCFjbXlrSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ayA9IHJnYmFUb0NteWsoaHN2YVRvUmdiYSh0aGlzLmhzdmEpKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gcmdiYVRvSHN2YShjbXlrVG9SZ2IodGhpcy5jbXlrKSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGh1ZSA9IG5ldyBIc3ZhKHRoaXMuc2xpZGVySCB8fCB0aGlzLmhzdmEuaCwgMSwgMSwgMSwgdHJ1ZSlcclxuXHJcbiAgICAgICAgY29uc3QgcmdiYSA9IGhzdmFUb1JnYmEodGhpcy5oc3ZhKVxyXG5cclxuICAgICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHNsYVRleHQgPSBkZW5vcm1hbGl6ZUhTTEEoaHNsYSlcclxuICAgICAgICAgICAgdGhpcy5yZ2JhVGV4dCA9IGRlbm9ybWFsaXplUkdCQShyZ2JhKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215a1RleHQgPSBkZW5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhbGxvd0hleDggPSB0aGlzLmFscGhhQ2hhbm5lbCA9PT0gQWxwaGFDaGFubmVsRW51bS5hbHdheXNcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGV4VGV4dCA9IHJnYmFUb0hleChyZ2JhLCBhbGxvd0hleDgpXHJcbiAgICAgICAgICAgIHRoaXMuaGV4QWxwaGEgPSB0aGlzLnJnYmFUZXh0LmFcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmF1dG8gJiYgdGhpcy5oc3ZhLmEgPCAxICYmICFBbHBoYUVuYWJsZWRGb3JtYXRzLmhhcyh0aGlzLmZvcm1hdCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLmhzdmEuYSA8IDEgPyBDb2xvckZvcm1hdEVudW0ucmdiYSA6IENvbG9yRm9ybWF0RW51bS5oZXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhzdmFUcmFuc3BhcmVudCA9IG5ldyBIc3ZhKFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEuaCxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnMsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS52LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEubm9ybWFsaXplZFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgY29uc3QgaHN2YUZ1bGwgPSBuZXcgSHN2YShcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLmgsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEudixcclxuICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLm5vcm1hbGl6ZWRcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIHRoaXMuaHVlU2xpZGVyQ29sb3IgPSBmb3JtYXRPdXRwdXQoaHVlLCAnYXV0bycsICdkaXNhYmxlZCcpXHJcbiAgICAgICAgdGhpcy5hbHBoYVNsaWRlckNvbG9yID0gJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgJyArIGZvcm1hdE91dHB1dChoc3ZhVHJhbnNwYXJlbnQsICdhdXRvJywgJ2ZvcmNlZCcpICsgJyAwJSwgJyArIGZvcm1hdE91dHB1dChoc3ZhRnVsbCwgJ2F1dG8nLCAnZGlzYWJsZWQnKSArICcgMTAwJSknXHJcblxyXG4gICAgICAgIHRoaXMuc3ZTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXHJcbiAgICAgICAgdGhpcy5odWVTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KGhzdmFUb1JnYmEoaHVlKSlcclxuICAgICAgICB0aGlzLnZhbHVlU2xpZGVyTGlnaHQgPSBvcGFxdWVTbGlkZXJMaWdodChyZ2JhKVxyXG4gICAgICAgIHRoaXMuYWxwaGFTbGlkZXJMaWdodCA9IHRyYW5zcGFyZW50U2xpZGVyTGlnaHQocmdiYSlcclxuXHJcbiAgICAgICAgdGhpcy5vdXRwdXRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIHRoaXMub3V0cHV0Rm9ybWF0LCB0aGlzLmFscGhhQ2hhbm5lbClcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSBmb3JtYXRPdXRwdXQodGhpcy5oc3ZhLCBPdXRwdXRGb3JtYXRFbnVtLnJnYmEpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCAhPT0gQ29sb3JGb3JtYXRFbnVtLmNteWspIHtcclxuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSAnJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY215a0NvbG9yID0gZm9ybWF0Q215ayh0aGlzLmNteWssIHRoaXMuYWxwaGFDaGFubmVsKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zbGlkZXIgPSBuZXcgU2xpZGVyUG9zaXRpb24oXHJcbiAgICAgICAgICAgICh0aGlzLnNsaWRlckggfHwgdGhpcy5oc3ZhLmgpLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEucyxcclxuICAgICAgICAgICAgKDEgLSB0aGlzLmhzdmEudiksXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5hXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZW1pdCAmJiBsYXN0T3V0cHV0ICE9IHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcilcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsbChuOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFycmF5KG4pLmZpbGwoMSlcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXRBbHBoYShhPzogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGE/LnRvRml4ZWQoMikucmVwbGFjZSgvXFwuPzArJC8sICcnKVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogIXNob3cgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyxcclxuICAgICAgICB3aWR0aDogd2lkdGggfHwgJycsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgJydcclxuICAgIH1cIlxyXG4gICAgKm5nSWY9XCJzaG93XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZGlhbG9nRGlzcGxheSA9PSAncG9wdXAnXCJcclxuICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fYXJyb3dcIj48L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcclxuICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc3ZcIlxyXG4gICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgIFtyZ1hdPVwiMVwiXHJcbiAgICAgICAgW3JnWV09XCIxXCJcclxuICAgICAgICAobmV3VmFsdWUpPVwib25Db2xvckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdzYXR1cmF0aW9uLWxpZ2h0bmVzcycpXCJcclxuICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaHVlU2xpZGVyQ29sb3IgfHwgJydcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yIGNvbG9yLXBpY2tlcl9fY3Vyc29yLS1zdlwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IHN2U2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHRvcDogKHNsaWRlcj8udiB8fCAwKSAqIDEwMCArICclJyxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IChzbGlkZXI/LnMgfHwgMCkgKiAxMDAgKyAnJSdcclxuICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jb250cm9sc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NlbGVjdGVkLWNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8ICcnXHJcbiAgICAgICAgICAgICAgICB9XCI+PGJ1dHRvbiAqbmdJZj1cInByZXNldENvbG9yc0VkaXRhYmxlICYmICEobWF4UHJlc2V0Q29sb3JzICYmIChwcmVzZXRDb2xvcnM/Lmxlbmd0aCB8fCAwKSA+PSBtYXhQcmVzZXRDb2xvcnMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIGNvbG9yIHRvIHByZXNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLmFkZC1jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19hZGQtc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZC0tbGlnaHQnOiBhbHBoYVNsaWRlckxpZ2h0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRQcmVzZXRDb2xvcihzZWxlY3RlZENvbG9yKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyelwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L2J1dHRvbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faGF2XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLWh1ZVwiXHJcbiAgICAgICAgICAgICAgICBueHRTbGlkZXJcclxuICAgICAgICAgICAgICAgIFtyZ1hdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25IdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdodWUnKVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ2h1ZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IGh1ZVNsaWRlckxpZ2h0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8uaCB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2xpZGVyIGNvbG9yLXBpY2tlcl9fc2xpZGVyLS12YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBueHRTbGlkZXJcclxuICAgICAgICAgICAgICAgIFtyZ1hdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ3ZhbHVlJylcIlxyXG4gICAgICAgICAgICAgICAgKGRyYWdFbmQpPVwib25EcmFnRW5kKCd2YWx1ZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IHZhbHVlU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoMSAtIChzbGlkZXI/LnYgfHwgMCkpICogMTAwICsgJyUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLWFscGhhXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgnYWxwaGEnKVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ2FscGhhJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlci0tYWxwaGEtYmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBhbHBoYVNsaWRlckNvbG9yIHx8ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IChzbGlkZXI/LmEgfHwgMCkgKiAxMDAgKyAnJSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWRpc2FibGVJbnB1dCAmJiAobW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5jb2xvciB8fCBtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZSlcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZHNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlOyBlbHNlIGZvcm1hdFN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5sPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25WYWx1ZUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgIT0gJ2Rpc2FibGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhzbGFUZXh0Py5hKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zvcm1hdFN3aXRjaD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZvcm1hdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoc2xhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjM2MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIzNjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8uaD8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5zPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uU2F0dXJhdGlvbklucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Uzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5sPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uTGlnaHRuZXNzSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5MPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoaHNsYVRleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyZ2JhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIyNTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZ2JhVGV4dD8ucj8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblJlZElucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Ujwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5nPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uR3JlZW5JbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIyNTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZ2JhVGV4dD8uYj8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsdWVJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRBbHBoYShoc2xhVGV4dD8uYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NteWsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py5jPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQ3lhbklucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py5tPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uTWFnZW50YUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+TTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py55Py50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uWWVsbG93SW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5ZPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lms/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25CbGFja0lucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Szwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgIT0gJ2Rpc2FibGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGNteWtUZXh0Py5hKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoZXhUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkhleElucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25IZXhJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkhleDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgPT0gJ2ZvcmNlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRBbHBoYShoZXhBbHBoYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5jb2xvclwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC10eXBlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC10eXBlLWFycm93XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZvcm1hdFRvZ2dsZSgxKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGUtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9ybWF0VG9nZ2xlKC0xKVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXNldENvbG9ycz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmVzZXRMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2V0TGFiZWwgPT09IHRydWU7IGVsc2Ugc3RyaW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIucHJlc2V0LWNvbG9yc1wiPlByZXNldCBjb2xvcnM8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RyaW5nTGFiZWw+e3sgcHJlc2V0TGFiZWwgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXNldENvbG9ycz8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbG9yIG9mIHByZXNldENvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdHJpbmdUb1JnYmEoY29sb3IpIGFzIHJnYmFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q29sb3JGcm9tU3RyaW5nKGNvbG9yKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbS1maWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmdiYSB8fCAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj48YnV0dG9uICpuZ0lmPVwicHJlc2V0Q29sb3JzRWRpdGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVtb3ZlIENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLXRpdGxlPVwiQEBueHQtY29sb3ItcGlja2VyLmJ1dHRvbi5yZW1vdmUtY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19yZW1vdmUtc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZVByZXNldENvbG9yKGNvbG9yKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpIG9mIGZpbGwoNTApXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgKm5nSWY9XCJva0J1dHRvbiB8fCBjYW5jZWxCdXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19idXR0b25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhbmNlbEJ1dHRvblwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLmNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJva0J1dHRvblwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLm9rXCI+T0s8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|