@ng-zi/extensions-ag-grid
Version:
AgGrid Extension for Ag-grid
121 lines • 31.4 kB
JavaScript
import { _includes, _iterateObject, _values } from '@ag-grid-community/core';
import { PropertyKeys } from 'ag-grid-community';
export class Events {
}
export class ComponentUtil {
// all events
static { this.EVENTS = _values(new Events()); }
static { this.VUE_OMITTED_PROPERTY = 'AG-VUE-OMITTED-PROPERTY'; }
// events that are internal to AG Grid and should not be exposed to users via documentation or generated framework components
/** Exclude the following internal events from code generation to prevent exposing these events via framework components */
static { this.EXCLUDED_INTERNAL_EVENTS = [
Events.EVENT_SCROLLBAR_WIDTH_CHANGED,
Events.EVENT_CHECKBOX_CHANGED,
Events.EVENT_HEIGHT_SCALE_CHANGED,
Events.EVENT_BODY_HEIGHT_CHANGED,
Events.EVENT_COLUMN_CONTAINER_WIDTH_CHANGED,
Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,
Events.EVENT_SCROLL_VISIBILITY_CHANGED,
Events.EVENT_COLUMN_HOVER_CHANGED,
Events.EVENT_FLASH_CELLS,
Events.EVENT_PAGINATION_PIXEL_OFFSET_CHANGED,
Events.EVENT_DISPLAYED_ROWS_CHANGED,
Events.EVENT_LEFT_PINNED_WIDTH_CHANGED,
Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED,
Events.EVENT_ROW_CONTAINER_HEIGHT_CHANGED,
Events.EVENT_POPUP_TO_FRONT,
Events.EVENT_STORE_UPDATED,
Events.EVENT_COLUMN_PANEL_ITEM_DRAG_START,
Events.EVENT_COLUMN_PANEL_ITEM_DRAG_END,
Events.EVENT_FILL_START,
Events.EVENT_FILL_END,
Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_START,
Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_END,
Events.EVENT_FULL_WIDTH_ROW_FOCUSED,
Events.EVENT_HEADER_HEIGHT_CHANGED,
Events.EVENT_COLUMN_HEADER_HEIGHT_CHANGED,
Events.EVENT_CELL_FOCUS_CLEARED,
Events.EVENT_GRID_STYLES_CHANGED,
Events.EVENT_FILTER_DESTROYED,
Events.EVENT_ROW_DATA_UPDATE_STARTED,
Events.EVENT_ADVANCED_FILTER_ENABLED_CHANGED,
Events.EVENT_DATA_TYPES_INFERRED,
Events.EVENT_FIELD_VALUE_CHANGED,
Events.EVENT_FIELD_PICKER_VALUE_SELECTED,
Events.EVENT_SUPPRESS_COLUMN_MOVE_CHANGED,
Events.EVENT_SUPPRESS_MENU_HIDE_CHANGED,
Events.EVENT_SUPPRESS_FIELD_DOT_NOTATION,
Events.EVENT_ROW_COUNT_READY,
Events.EVENT_SIDE_BAR_UPDATED,
]; }
// events that are available for use by users of AG Grid and so should be documented
/** EVENTS that should be exposed via code generation for the framework components. */
static { this.PUBLIC_EVENTS = ComponentUtil.EVENTS.filter(e => !_includes(ComponentUtil.EXCLUDED_INTERNAL_EVENTS, e)); }
static getCallbackForEvent(eventName) {
if (!eventName || eventName.length < 2) {
return eventName;
}
return 'on' + eventName[0].toUpperCase() + eventName.substring(1);
}
// onXXX methods, based on the above events
static { this.EVENT_CALLBACKS = ComponentUtil.EVENTS.map(event => ComponentUtil.getCallbackForEvent(event)); }
static { this.STRING_PROPERTIES = PropertyKeys.STRING_PROPERTIES; }
static { this.OBJECT_PROPERTIES = PropertyKeys.OBJECT_PROPERTIES; }
static { this.ARRAY_PROPERTIES = PropertyKeys.ARRAY_PROPERTIES; }
static { this.NUMBER_PROPERTIES = PropertyKeys.NUMBER_PROPERTIES; }
static { this.BOOLEAN_PROPERTIES = PropertyKeys.BOOLEAN_PROPERTIES; }
static { this.FUNCTION_PROPERTIES = PropertyKeys.FUNCTION_PROPERTIES; }
static { this.ALL_PROPERTIES = PropertyKeys.ALL_PROPERTIES; }
static { this.ALL_PROPERTIES_AND_CALLBACKS = [...this.ALL_PROPERTIES, ...this.EVENT_CALLBACKS]; }
static { this.ALL_PROPERTIES_AND_CALLBACKS_SET = new Set(ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS); }
static getGridOptionKeys() {
// Vue does not have keys in prod so instead need to run through all the
// gridOptions checking for presence of a gridOption key.
return this.ALL_PROPERTIES_AND_CALLBACKS;
}
/** Combines component props / attributes with the provided gridOptions returning a new combined gridOptions object */
static combineAttributesAndGridOptions(gridOptions, component) {
// create empty grid options if none were passed
if (typeof gridOptions !== 'object') {
gridOptions = {};
}
// shallow copy (so we don't change the provided object)
const mergedOptions = { ...gridOptions };
const keys = ComponentUtil.getGridOptionKeys();
// Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions
keys.forEach(key => {
const value = component[key];
if (typeof value !== 'undefined' && value !== ComponentUtil.VUE_OMITTED_PROPERTY) {
mergedOptions[key] = value;
}
});
return mergedOptions;
}
static processOnChange(changes, api) {
if (!changes) {
return;
}
// Only process changes to properties that are part of the gridOptions
const gridChanges = {};
let hasChanges = false;
Object.keys(changes)
.filter((key) => ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS_SET.has(key))
.forEach((key) => {
gridChanges[key] = changes[key];
hasChanges = true;
});
if (!hasChanges) {
return;
}
api.updateGridOptions(gridChanges);
// copy gridChanges into an event for dispatch
const event = {
type: Events.EVENT_COMPONENT_STATE_CHANGED
};
_iterateObject(gridChanges, (key, value) => {
event[key] = value;
});
api.dispatchEvent(event);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9yZWZlcmVuY2UvYWctZ3JpZC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUtOLFlBQVksRUFDWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sT0FBTyxNQUFNO0NBaUlsQjtBQUVELE1BQU0sT0FBTyxhQUFhO0lBRXRCLGFBQWE7YUFDQyxXQUFNLEdBQWEsT0FBTyxDQUFNLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQzthQUU5Qyx5QkFBb0IsR0FBRyx5QkFBeUIsQ0FBQztJQUUvRCw2SEFBNkg7SUFDN0gsMkhBQTJIO2FBQzdHLDZCQUF3QixHQUFhO1FBQy9DLE1BQU0sQ0FBQyw2QkFBNkI7UUFDcEMsTUFBTSxDQUFDLHNCQUFzQjtRQUM3QixNQUFNLENBQUMsMEJBQTBCO1FBQ2pDLE1BQU0sQ0FBQyx5QkFBeUI7UUFDaEMsTUFBTSxDQUFDLG9DQUFvQztRQUMzQyxNQUFNLENBQUMscUNBQXFDO1FBQzVDLE1BQU0sQ0FBQywrQkFBK0I7UUFDdEMsTUFBTSxDQUFDLDBCQUEwQjtRQUNqQyxNQUFNLENBQUMsaUJBQWlCO1FBQ3hCLE1BQU0sQ0FBQyxxQ0FBcUM7UUFDNUMsTUFBTSxDQUFDLDRCQUE0QjtRQUNuQyxNQUFNLENBQUMsK0JBQStCO1FBQ3RDLE1BQU0sQ0FBQyxnQ0FBZ0M7UUFDdkMsTUFBTSxDQUFDLGtDQUFrQztRQUN6QyxNQUFNLENBQUMsb0JBQW9CO1FBQzNCLE1BQU0sQ0FBQyxtQkFBbUI7UUFDMUIsTUFBTSxDQUFDLGtDQUFrQztRQUN6QyxNQUFNLENBQUMsZ0NBQWdDO1FBQ3ZDLE1BQU0sQ0FBQyxnQkFBZ0I7UUFDdkIsTUFBTSxDQUFDLGNBQWM7UUFDckIsTUFBTSxDQUFDLHFDQUFxQztR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QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX2luY2x1ZGVzLCBfaXRlcmF0ZU9iamVjdCwgX3ZhbHVlcyB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcclxuaW1wb3J0IHtcclxuXHRXaXRob3V0R3JpZENvbW1vbixcclxuXHRHcmlkT3B0aW9ucyxcclxuXHRHcmlkQXBpLFxyXG5cdENvbXBvbmVudFN0YXRlQ2hhbmdlZEV2ZW50LFxyXG5cdFByb3BlcnR5S2V5c1xyXG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudHMge1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9FVkVSWVRISU5HX0NIQU5HRUQ6ICdjb2x1bW5FdmVyeXRoaW5nQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfTkVXX0NPTFVNTlNfTE9BREVEOiAnbmV3Q29sdW1uc0xvYWRlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX1BJVk9UX01PREVfQ0hBTkdFRDogJ2NvbHVtblBpdm90TW9kZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9ST1dfR1JPVVBfQ0hBTkdFRDogJ2NvbHVtblJvd0dyb3VwQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfRVhQQU5EX0NPTExBUFNFX0FMTDogJ2V4cGFuZE9yQ29sbGFwc2VBbGwnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9QSVZPVF9DSEFOR0VEOiAnY29sdW1uUGl2b3RDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9HUklEX0NPTFVNTlNfQ0hBTkdFRDogJ2dyaWRDb2x1bW5zQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX1ZBTFVFX0NIQU5HRUQ6ICdjb2x1bW5WYWx1ZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9NT1ZFRDogJ2NvbHVtbk1vdmVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fVklTSUJMRTogJ2NvbHVtblZpc2libGUnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9QSU5ORUQ6ICdjb2x1bW5QaW5uZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9HUk9VUF9PUEVORUQ6ICdjb2x1bW5Hcm91cE9wZW5lZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX1JFU0laRUQ6ICdjb2x1bW5SZXNpemVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ESVNQTEFZRURfQ09MVU1OU19DSEFOR0VEOiAnZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1NVUFBSRVNTX0NPTFVNTl9NT1ZFX0NIQU5HRUQ6ICdzdXBwcmVzc01vdmFibGVDb2x1bW5zJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9TVVBQUkVTU19NRU5VX0hJREVfQ0hBTkdFRDogJ3N1cHByZXNzTWVudUhpZGUnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1NVUFBSRVNTX0ZJRUxEX0RPVF9OT1RBVElPTjogJ3N1cHByZXNzRmllbGREb3ROb3RhdGlvbic7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfVklSVFVBTF9DT0xVTU5TX0NIQU5HRUQ6ICd2aXJ0dWFsQ29sdW1uc0NoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9IRUFERVJfTU9VU0VfT1ZFUjogJ2NvbHVtbkhlYWRlck1vdXNlT3Zlcic7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX0hFQURFUl9NT1VTRV9MRUFWRTogJ2NvbHVtbkhlYWRlck1vdXNlTGVhdmUnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9IRUFERVJfQ0xJQ0tFRDogJ2NvbHVtbkhlYWRlckNsaWNrZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9IRUFERVJfQ09OVEVYVF9NRU5VOiAnY29sdW1uSGVhZGVyQ29udGV4dE1lbnUnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0FTWU5DX1RSQU5TQUNUSU9OU19GTFVTSEVEOiAnYXN5bmNUcmFuc2FjdGlvbnNGbHVzaGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfR1JPVVBfT1BFTkVEOiAncm93R3JvdXBPcGVuZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1JPV19EQVRBX1VQREFURUQ6ICdyb3dEYXRhVXBkYXRlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUElOTkVEX1JPV19EQVRBX0NIQU5HRUQ6ICdwaW5uZWRSb3dEYXRhQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQ6ICdyYW5nZVNlbGVjdGlvbkNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NIQVJUX0NSRUFURUQ6ICdjaGFydENyZWF0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NIQVJUX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEOiAnY2hhcnRSYW5nZVNlbGVjdGlvbkNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NIQVJUX09QVElPTlNfQ0hBTkdFRDogJ2NoYXJ0T3B0aW9uc0NoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NIQVJUX0RFU1RST1lFRDogJ2NoYXJ0RGVzdHJveWVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9UT09MX1BBTkVMX1ZJU0lCTEVfQ0hBTkdFRDogJ3Rvb2xQYW5lbFZpc2libGVDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9UT09MX1BBTkVMX1NJWkVfQ0hBTkdFRDogJ3Rvb2xQYW5lbFNpemVDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fUEFORUxfSVRFTV9EUkFHX1NUQVJUOiAnY29sdW1uUGFuZWxJdGVtRHJhZ1N0YXJ0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fUEFORUxfSVRFTV9EUkFHX0VORDogJ2NvbHVtblBhbmVsSXRlbURyYWdFbmQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX01PREVMX1VQREFURUQ6ICdtb2RlbFVwZGF0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NVVF9TVEFSVDogJ2N1dFN0YXJ0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DVVRfRU5EOiAnY3V0RW5kJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9QQVNURV9TVEFSVDogJ3Bhc3RlU3RhcnQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1BBU1RFX0VORDogJ3Bhc3RlRW5kJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUxMX1NUQVJUOiAnZmlsbFN0YXJ0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUxMX0VORDogJ2ZpbGxFbmQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1JBTkdFX0RFTEVURV9TVEFSVDogJ3JhbmdlRGVsZXRlU3RhcnQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1JBTkdFX0RFTEVURV9FTkQ6ICdyYW5nZURlbGV0ZUVuZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfVU5ET19TVEFSVEVEOiAndW5kb1N0YXJ0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1VORE9fRU5ERUQ6ICd1bmRvRW5kZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1JFRE9fU1RBUlRFRDogJ3JlZG9TdGFydGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9SRURPX0VOREVEOiAncmVkb0VuZGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9LRVlfU0hPUlRDVVRfQ0hBTkdFRF9DRUxMX1NUQVJUOiAna2V5U2hvcnRjdXRDaGFuZ2VkQ2VsbFN0YXJ0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9LRVlfU0hPUlRDVVRfQ0hBTkdFRF9DRUxMX0VORDogJ2tleVNob3J0Y3V0Q2hhbmdlZENlbGxFbmQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfQ0xJQ0tFRDogJ2NlbGxDbGlja2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DRUxMX0RPVUJMRV9DTElDS0VEOiAnY2VsbERvdWJsZUNsaWNrZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfTU9VU0VfRE9XTjogJ2NlbGxNb3VzZURvd24nO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfQ09OVEVYVF9NRU5VOiAnY2VsbENvbnRleHRNZW51JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQ6ICdjZWxsVmFsdWVDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DRUxMX0VESVRfUkVRVUVTVDogJ2NlbGxFZGl0UmVxdWVzdCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQ6ICdyb3dWYWx1ZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfRk9DVVNFRDogJ2NlbGxGb2N1c2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DRUxMX0ZPQ1VTX0NMRUFSRUQ6ICdjZWxsRm9jdXNDbGVhcmVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GVUxMX1dJRFRIX1JPV19GT0NVU0VEOiAnZnVsbFdpZHRoUm93Rm9jdXNlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX1NFTEVDVEVEOiAncm93U2VsZWN0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1NFTEVDVElPTl9DSEFOR0VEOiAnc2VsZWN0aW9uQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfVE9PTFRJUF9TSE9XOiAndG9vbHRpcFNob3cnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1RPT0xUSVBfSElERTogJ3Rvb2x0aXBIaWRlJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DRUxMX0tFWV9ET1dOOiAnY2VsbEtleURvd24nO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfTU9VU0VfT1ZFUjogJ2NlbGxNb3VzZU92ZXInO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfTU9VU0VfT1VUOiAnY2VsbE1vdXNlT3V0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUxURVJfQ0hBTkdFRDogJ2ZpbHRlckNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0ZJTFRFUl9NT0RJRklFRDogJ2ZpbHRlck1vZGlmaWVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUxURVJfT1BFTkVEOiAnZmlsdGVyT3BlbmVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9BRFZBTkNFRF9GSUxURVJfQlVJTERFUl9WSVNJQkxFX0NIQU5HRUQ6ICdhZHZhbmNlZEZpbHRlckJ1aWxkZXJWaXNpYmxlQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfU09SVF9DSEFOR0VEOiAnc29ydENoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1ZJUlRVQUxfUk9XX1JFTU9WRUQ6ICd2aXJ0dWFsUm93UmVtb3ZlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX0NMSUNLRUQ6ICdyb3dDbGlja2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfRE9VQkxFX0NMSUNLRUQ6ICdyb3dEb3VibGVDbGlja2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9HUklEX1JFQURZOiAnZ3JpZFJlYWR5JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9HUklEX1BSRV9ERVNUUk9ZRUQ6ICdncmlkUHJlRGVzdHJveWVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9HUklEX1NJWkVfQ0hBTkdFRDogJ2dyaWRTaXplQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfVklFV1BPUlRfQ0hBTkdFRDogJ3ZpZXdwb3J0Q2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfU0NST0xMQkFSX1dJRFRIX0NIQU5HRUQ6ICdzY3JvbGxiYXJXaWR0aENoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0ZJUlNUX0RBVEFfUkVOREVSRUQ6ICdmaXJzdERhdGFSZW5kZXJlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfRFJBR19TVEFSVEVEOiAnZHJhZ1N0YXJ0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0RSQUdfU1RPUFBFRDogJ2RyYWdTdG9wcGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DSEVDS0JPWF9DSEFOR0VEOiAnY2hlY2tib3hDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfRURJVElOR19TVEFSVEVEOiAncm93RWRpdGluZ1N0YXJ0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQ6ICdyb3dFZGl0aW5nU3RvcHBlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQ6ICdjZWxsRWRpdGluZ1N0YXJ0ZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NFTExfRURJVElOR19TVE9QUEVEOiAnY2VsbEVkaXRpbmdTdG9wcGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9CT0RZX1NDUk9MTDogJ2JvZHlTY3JvbGwnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0JPRFlfU0NST0xMX0VORDogJ2JvZHlTY3JvbGxFbmQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0hFSUdIVF9TQ0FMRV9DSEFOR0VEOiAnaGVpZ2h0U2NhbGVDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9QQUdJTkFUSU9OX0NIQU5HRUQ6ICdwYWdpbmF0aW9uQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09NUE9ORU5UX1NUQVRFX0NIQU5HRUQ6ICdjb21wb25lbnRTdGF0ZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX1NUT1JFX1JFRlJFU0hFRDogJ3N0b3JlUmVmcmVzaGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9TVEFURV9VUERBVEVEOiAnc3RhdGVVcGRhdGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fTUVOVV9WSVNJQkxFX0NIQU5HRUQ6ICdjb2x1bW5NZW51VmlzaWJsZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0JPRFlfSEVJR0hUX0NIQU5HRUQ6ICdib2R5SGVpZ2h0Q2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX0NPTlRBSU5FUl9XSURUSF9DSEFOR0VEOiAnY29sdW1uQ29udGFpbmVyV2lkdGhDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ESVNQTEFZRURfQ09MVU1OU19XSURUSF9DSEFOR0VEOiAnZGlzcGxheWVkQ29sdW1uc1dpZHRoQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfU0NST0xMX1ZJU0lCSUxJVFlfQ0hBTkdFRDogJ3Njcm9sbFZpc2liaWxpdHlDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fSE9WRVJfQ0hBTkdFRDogJ2NvbHVtbkhvdmVyQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfRkxBU0hfQ0VMTFM6ICdmbGFzaENlbGxzJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9QQUdJTkFUSU9OX1BJWEVMX09GRlNFVF9DSEFOR0VEOiAncGFnaW5hdGlvblBpeGVsT2Zmc2V0Q2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfRElTUExBWUVEX1JPV1NfQ0hBTkdFRDogJ2Rpc3BsYXllZFJvd3NDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9MRUZUX1BJTk5FRF9XSURUSF9DSEFOR0VEOiAnbGVmdFBpbm5lZFdpZHRoQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUklHSFRfUElOTkVEX1dJRFRIX0NIQU5HRUQ6ICdyaWdodFBpbm5lZFdpZHRoQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX0NPTlRBSU5FUl9IRUlHSFRfQ0hBTkdFRDogJ3Jvd0NvbnRhaW5lckhlaWdodENoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0hFQURFUl9IRUlHSFRfQ0hBTkdFRDogJ2hlYWRlckhlaWdodENoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9IRUFERVJfSEVJR0hUX0NIQU5HRUQ6ICdjb2x1bW5IZWFkZXJIZWlnaHRDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfRFJBR19FTlRFUjogJ3Jvd0RyYWdFbnRlcic7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX0RSQUdfTU9WRTogJ3Jvd0RyYWdNb3ZlJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfRFJBR19MRUFWRTogJ3Jvd0RyYWdMZWF2ZSc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfUk9XX0RSQUdfRU5EOiAncm93RHJhZ0VuZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfR1JJRF9TVFlMRVNfQ0hBTkdFRDogJ2dyaWRTdHlsZXNDaGFuZ2VkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9QT1BVUF9UT19GUk9OVDogJ3BvcHVwVG9Gcm9udCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX1JPV19HUk9VUF9DSEFOR0VfUkVRVUVTVDogJ2NvbHVtblJvd0dyb3VwQ2hhbmdlUmVxdWVzdCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfQ09MVU1OX1BJVk9UX0NIQU5HRV9SRVFVRVNUOiAnY29sdW1uUGl2b3RDaGFuZ2VSZXF1ZXN0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9DT0xVTU5fVkFMVUVfQ0hBTkdFX1JFUVVFU1Q6ICdjb2x1bW5WYWx1ZUNoYW5nZVJlcXVlc3QnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0NPTFVNTl9BR0dfRlVOQ19DSEFOR0VfUkVRVUVTVDogJ2NvbHVtbkFnZ0Z1bmNDaGFuZ2VSZXF1ZXN0JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9TVE9SRV9VUERBVEVEOiAnc3RvcmVVcGRhdGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUxURVJfREVTVFJPWUVEOiAnZmlsdGVyRGVzdHJveWVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfREFUQV9VUERBVEVfU1RBUlRFRDogJ3Jvd0RhdGFVcGRhdGVTdGFydGVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9ST1dfQ09VTlRfUkVBRFk6ICdyb3dDb3VudFJlYWR5JztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9BRFZBTkNFRF9GSUxURVJfRU5BQkxFRF9DSEFOR0VEOiAnYWR2YW5jZWRGaWx0ZXJFbmFibGVkQ2hhbmdlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfREFUQV9UWVBFU19JTkZFUlJFRDogJ2RhdGFUeXBlc0luZmVycmVkJztcclxuICAgIHN0YXRpYyByZWFkb25seSBFVkVOVF9GSUVMRF9WQUxVRV9DSEFOR0VEOiAnZmllbGRWYWx1ZUNoYW5nZWQnO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IEVWRU5UX0ZJRUxEX1BJQ0tFUl9WQUxVRV9TRUxFQ1RFRDogJ2ZpZWxkUGlja2VyVmFsdWVTZWxlY3RlZCc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVZFTlRfU0lERV9CQVJfVVBEQVRFRDogJ3NpZGVCYXJVcGRhdGVkJztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFV0aWwge1xyXG5cclxuICAgIC8vIGFsbCBldmVudHNcclxuICAgIHB1YmxpYyBzdGF0aWMgRVZFTlRTOiBzdHJpbmdbXSA9IF92YWx1ZXM8YW55PihuZXcgRXZlbnRzKCkpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgVlVFX09NSVRURURfUFJPUEVSVFkgPSAnQUctVlVFLU9NSVRURUQtUFJPUEVSVFknO1xyXG5cclxuICAgIC8vIGV2ZW50cyB0aGF0IGFyZSBpbnRlcm5hbCB0byBBRyBHcmlkIGFuZCBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlcnMgdmlhIGRvY3VtZW50YXRpb24gb3IgZ2VuZXJhdGVkIGZyYW1ld29yayBjb21wb25lbnRzXHJcbiAgICAvKiogRXhjbHVkZSB0aGUgZm9sbG93aW5nIGludGVybmFsIGV2ZW50cyBmcm9tIGNvZGUgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGV4cG9zaW5nIHRoZXNlIGV2ZW50cyB2aWEgZnJhbWV3b3JrIGNvbXBvbmVudHMgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgRVhDTFVERURfSU5URVJOQUxfRVZFTlRTOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBFdmVudHMuRVZFTlRfU0NST0xMQkFSX1dJRFRIX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0NIRUNLQk9YX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0hFSUdIVF9TQ0FMRV9DSEFOR0VELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9CT0RZX0hFSUdIVF9DSEFOR0VELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9DT0xVTU5fQ09OVEFJTkVSX1dJRFRIX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0RJU1BMQVlFRF9DT0xVTU5TX1dJRFRIX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX1NDUk9MTF9WSVNJQklMSVRZX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0NPTFVNTl9IT1ZFUl9DSEFOR0VELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9GTEFTSF9DRUxMUyxcclxuICAgICAgICBFdmVudHMuRVZFTlRfUEFHSU5BVElPTl9QSVhFTF9PRkZTRVRfQ0hBTkdFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfRElTUExBWUVEX1JPV1NfQ0hBTkdFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfTEVGVF9QSU5ORURfV0lEVEhfQ0hBTkdFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfUklHSFRfUElOTkVEX1dJRFRIX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX1JPV19DT05UQUlORVJfSEVJR0hUX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX1BPUFVQX1RPX0ZST05ULFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9TVE9SRV9VUERBVEVELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9DT0xVTU5fUEFORUxfSVRFTV9EUkFHX1NUQVJULFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9DT0xVTU5fUEFORUxfSVRFTV9EUkFHX0VORCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfRklMTF9TVEFSVCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfRklMTF9FTkQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0tFWV9TSE9SVENVVF9DSEFOR0VEX0NFTExfU1RBUlQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0tFWV9TSE9SVENVVF9DSEFOR0VEX0NFTExfRU5ELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9GVUxMX1dJRFRIX1JPV19GT0NVU0VELFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9IRUFERVJfSEVJR0hUX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0NPTFVNTl9IRUFERVJfSEVJR0hUX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0NFTExfRk9DVVNfQ0xFQVJFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfR1JJRF9TVFlMRVNfQ0hBTkdFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfRklMVEVSX0RFU1RST1lFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfUk9XX0RBVEFfVVBEQVRFX1NUQVJURUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0FEVkFOQ0VEX0ZJTFRFUl9FTkFCTEVEX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0RBVEFfVFlQRVNfSU5GRVJSRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0ZJRUxEX1ZBTFVFX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX0ZJRUxEX1BJQ0tFUl9WQUxVRV9TRUxFQ1RFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfU1VQUFJFU1NfQ09MVU1OX01PVkVfQ0hBTkdFRCxcclxuICAgICAgICBFdmVudHMuRVZFTlRfU1VQUFJFU1NfTUVOVV9ISURFX0NIQU5HRUQsXHJcbiAgICAgICAgRXZlbnRzLkVWRU5UX1NVUFBSRVNTX0ZJRUxEX0RPVF9OT1RBVElPTixcclxuICAgICAgICBFdmVudHMuRVZFTlRfUk9XX0NPVU5UX1JFQURZLFxyXG4gICAgICAgIEV2ZW50cy5FVkVOVF9TSURFX0JBUl9VUERBVEVELFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBldmVudHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB1c2UgYnkgdXNlcnMgb2YgQUcgR3JpZCBhbmQgc28gc2hvdWxkIGJlIGRvY3VtZW50ZWRcclxuICAgIC8qKiBFVkVOVFMgdGhhdCBzaG91bGQgYmUgZXhwb3NlZCB2aWEgY29kZSBnZW5lcmF0aW9uIGZvciB0aGUgZnJhbWV3b3JrIGNvbXBvbmVudHMuICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBQVUJMSUNfRVZFTlRTOiBzdHJpbmdbXSA9IENvbXBvbmVudFV0aWwuRVZFTlRTLmZpbHRlcihlID0+ICFfaW5jbHVkZXMoQ29tcG9uZW50VXRpbC5FWENMVURFRF9JTlRFUk5BTF9FVkVOVFMsIGUpKTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENhbGxiYWNrRm9yRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZXZlbnROYW1lIHx8IGV2ZW50TmFtZS5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnb24nICsgZXZlbnROYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudE5hbWUuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG4gICAgLy8gb25YWFggbWV0aG9kcywgYmFzZWQgb24gdGhlIGFib3ZlIGV2ZW50c1xyXG4gICAgcHVibGljIHN0YXRpYyBFVkVOVF9DQUxMQkFDS1M6IHN0cmluZ1tdID0gQ29tcG9uZW50VXRpbC5FVkVOVFMubWFwKGV2ZW50ID0+IENvbXBvbmVudFV0aWwuZ2V0Q2FsbGJhY2tGb3JFdmVudChldmVudCkpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU1RSSU5HX1BST1BFUlRJRVMgPSBQcm9wZXJ0eUtleXMuU1RSSU5HX1BST1BFUlRJRVM7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9CSkVDVF9QUk9QRVJUSUVTID0gUHJvcGVydHlLZXlzLk9CSkVDVF9QUk9QRVJUSUVTO1xyXG4gICAgcHVibGljIHN0YXRpYyBBUlJBWV9QUk9QRVJUSUVTID0gUHJvcGVydHlLZXlzLkFSUkFZX1BST1BFUlRJRVM7XHJcbiAgICBwdWJsaWMgc3RhdGljIE5VTUJFUl9QUk9QRVJUSUVTID0gUHJvcGVydHlLZXlzLk5VTUJFUl9QUk9QRVJUSUVTO1xyXG4gICAgcHVibGljIHN0YXRpYyBCT09MRUFOX1BST1BFUlRJRVMgPSBQcm9wZXJ0eUtleXMuQk9PTEVBTl9QUk9QRVJUSUVTO1xyXG4gICAgcHVibGljIHN0YXRpYyBGVU5DVElPTl9QUk9QRVJUSUVTID0gUHJvcGVydHlLZXlzLkZVTkNUSU9OX1BST1BFUlRJRVM7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFMTF9QUk9QRVJUSUVTID0gUHJvcGVydHlLZXlzLkFMTF9QUk9QRVJUSUVTO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQUxMX1BST1BFUlRJRVNfQU5EX0NBTExCQUNLUyA9IFsuLi50aGlzLkFMTF9QUk9QRVJUSUVTLCAuLi50aGlzLkVWRU5UX0NBTExCQUNLU107XHJcbiAgICBwdWJsaWMgc3RhdGljIEFMTF9QUk9QRVJUSUVTX0FORF9DQUxMQkFDS1NfU0VUID0gbmV3IFNldChDb21wb25lbnRVdGlsLkFMTF9QUk9QRVJUSUVTX0FORF9DQUxMQkFDS1MpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0R3JpZE9wdGlvbktleXMoKSB7XHJcbiAgICAgICAgLy8gVnVlIGRvZXMgbm90IGhhdmUga2V5cyBpbiBwcm9kIHNvIGluc3RlYWQgbmVlZCB0byBydW4gdGhyb3VnaCBhbGwgdGhlXHJcbiAgICAgICAgLy8gZ3JpZE9wdGlvbnMgY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIGEgZ3JpZE9wdGlvbiBrZXkuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQUxMX1BST1BFUlRJRVNfQU5EX0NBTExCQUNLUztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tYmluZXMgY29tcG9uZW50IHByb3BzIC8gYXR0cmlidXRlcyB3aXRoIHRoZSBwcm92aWRlZCBncmlkT3B0aW9ucyByZXR1cm5pbmcgYSBuZXcgY29tYmluZWQgZ3JpZE9wdGlvbnMgb2JqZWN0ICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbWJpbmVBdHRyaWJ1dGVzQW5kR3JpZE9wdGlvbnMoZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zIHwgdW5kZWZpbmVkLCBjb21wb25lbnQ6IGFueSk6IEdyaWRPcHRpb25zIHtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGVtcHR5IGdyaWQgb3B0aW9ucyBpZiBub25lIHdlcmUgcGFzc2VkXHJcbiAgICAgICAgaWYgKHR5cGVvZiBncmlkT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZ3JpZE9wdGlvbnMgPSB7fSBhcyBHcmlkT3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2hhbGxvdyBjb3B5IChzbyB3ZSBkb24ndCBjaGFuZ2UgdGhlIHByb3ZpZGVkIG9iamVjdClcclxuICAgICAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gey4uLmdyaWRPcHRpb25zfSBhcyBhbnk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IENvbXBvbmVudFV0aWwuZ2V0R3JpZE9wdGlvbktleXMoKTtcclxuICAgICAgICAvLyBMb29wIHRocm91Z2ggY29tcG9uZW50IHByb3BzLCBpZiB0aGV5IGFyZSBub3QgdW5kZWZpbmVkIGFuZCBhIHZhbGlkIGdyaWRPcHRpb24gY29weSB0byBncmlkT3B0aW9uc1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXBvbmVudFtrZXldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gQ29tcG9uZW50VXRpbC5WVUVfT01JVFRFRF9QUk9QRVJUWSkge1xyXG4gICAgICAgICAgICAgICAgbWVyZ2VkT3B0aW9uc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBtZXJnZWRPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc09uQ2hhbmdlKGNoYW5nZXM6IGFueSwgYXBpOiBHcmlkQXBpKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgZ3JpZE9wdGlvbnNcclxuICAgICAgICBjb25zdCBncmlkQ2hhbmdlczogYW55ID0ge307XHJcbiAgICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICBPYmplY3Qua2V5cyhjaGFuZ2VzKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IENvbXBvbmVudFV0aWwuQUxMX1BST1BFUlRJRVNfQU5EX0NBTExCQUNLU19TRVQuaGFzKGtleSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGdyaWRDaGFuZ2VzW2tleV0gPSBjaGFuZ2VzW2tleV1cclxuICAgICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXNDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFwaS51cGRhdGVHcmlkT3B0aW9ucyhncmlkQ2hhbmdlcyk7XHJcblxyXG4gICAgICAgIC8vIGNvcHkgZ3JpZENoYW5nZXMgaW50byBhbiBldmVudCBmb3IgZGlzcGF0Y2hcclxuICAgICAgICBjb25zdCBldmVudDogV2l0aG91dEdyaWRDb21tb248Q29tcG9uZW50U3RhdGVDaGFuZ2VkRXZlbnQ+ID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBFdmVudHMuRVZFTlRfQ09NUE9ORU5UX1NUQVRFX0NIQU5HRURcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBfaXRlcmF0ZU9iamVjdChncmlkQ2hhbmdlcywgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIChldmVudCBhcyBhbnkpW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYXBpLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==