ngx-ntk-query-builder
Version:
Angular query builder
116 lines • 16.3 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
export class OperatorsService {
constructor(translate) {
this.translate = translate;
this.INPUT_TYPE_STRING = 'string';
this.INPUT_TYPE_INTEGER = 'integer';
this.INPUT_TYPE_DOUBLE = 'double';
this.INPUT_TYPE_TIME = 'time';
this.INPUT_TYPE_DATE = 'date';
this.INPUT_TYPE_SELECT = 'select';
this.INPUT_TYPE_BOOLEAN = 'boolean';
this.INPUT_TYPE_MULTI_SELECT = 'multi_select';
this.NULLABLE_OPERATORS = ['is_null', 'is_not_null'];
this.EMPTY_OPERATORS = ['is_empty', 'is_not_empty'];
this.MULTI_SELECT_OPERATORS = ['in', 'not_in'];
this.defaultOperator = 'equal';
this.operatorsMap = {
string: ['equal', 'not_equal', 'contains', 'not_contains', 'begins_with', 'not_begins_with', 'ends_with', 'not_ends_with'],
integer: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],
double: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],
time: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],
date: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],
select: ['equal', 'not_equal', ...this.MULTI_SELECT_OPERATORS],
boolean: ['equal'],
};
this.operatorsDisplayNames = {
equal: 'querybuilder.equal',
not_equal: 'querybuilder.not_equal',
contains: 'querybuilder.contains',
not_contains: 'querybuilder.not_contains',
begins_with: 'querybuilder.begins_with',
not_begins_with: 'querybuilder.not_begins_with',
ends_with: 'querybuilder.ends_with',
not_ends_with: 'querybuilder.not_ends_with',
greater: 'querybuilder.greater',
greater_or_equal: 'querybuilder.greater_or_equal',
less: 'querybuilder.less',
less_or_equal: 'querybuilder.less_or_equal',
is_null: 'querybuilder.is_null',
is_not_null: 'querybuilder.is_not_null',
is_empty: 'querybuilder.is_empty',
is_not_empty: 'querybuilder.is_not_empty',
in: 'querybuilder.in',
not_in: 'querybuilder.not_in'
};
this.operatorsDisplayNames___old = {
equal: 'Equals',
not_equal: 'Does not equal',
contains: 'Contains',
not_contains: 'Does not contain',
begins_with: 'Begins with',
not_begins_with: 'Does not begins with',
ends_with: 'Ends with',
not_ends_with: 'Does not end with',
greater: 'Greater than',
greater_or_equal: 'Greater than or equal',
less: 'Less than',
less_or_equal: 'Less than or equal',
is_null: 'Is null',
is_not_null: 'Is not null',
is_empty: 'Is empty',
is_not_empty: 'Is not empty',
in: 'In',
not_in: 'Not in'
};
}
getOperators(rule, fieldMap) {
if (!this.getAvailableTypes().includes(rule.type)) {
console.error('Type of rule is not valid. Please use one of the following types: ' + this.getAvailableTypes().join(', '));
}
let operators = this.operatorsMap[rule.type];
// allow nullable
if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.nullableOperators) {
operators = [...operators, ...this.NULLABLE_OPERATORS];
}
// allow empty
if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.emptyOperators) {
operators = [...operators, ...this.EMPTY_OPERATORS];
}
return operators;
}
getDefaultOperator() {
return this.defaultOperator;
}
getOperatorsWithoutInput() {
return [...this.NULLABLE_OPERATORS, ...this.EMPTY_OPERATORS];
}
getOperatorDisplayName(operator) {
if (this.operatorsDisplayNames[operator]) {
return this.operatorsDisplayNames[operator];
}
return operator;
}
getAvailableTypes() {
return [
this.INPUT_TYPE_STRING,
this.INPUT_TYPE_INTEGER,
this.INPUT_TYPE_DOUBLE,
this.INPUT_TYPE_TIME,
this.INPUT_TYPE_DATE,
this.INPUT_TYPE_SELECT,
this.INPUT_TYPE_BOOLEAN
];
}
}
OperatorsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
OperatorsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbnRrLXF1ZXJ5LWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy9vcGVyYXRvcnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPM0MsTUFBTSxPQUFPLGdCQUFnQjtJQW9FM0IsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFsRXRDLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDL0Isc0JBQWlCLEdBQUcsUUFBUSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxTQUFTLENBQUM7UUFFL0IsNEJBQXVCLEdBQUcsY0FBYyxDQUFDO1FBRXpDLHVCQUFrQixHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELG9CQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0MsMkJBQXNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEMsb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFFMUIsaUJBQVksR0FBZ0M7WUFDM0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO1lBQzFILE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7WUFDdkYsTUFBTSxF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LENBQUMsY0FBYyxFQUFFO1lBQ2pGLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsa0JBQWtCO1NBQ3hCLENBQUM7SUFDSixDQUFDOzs4R0FySFUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyRmllbGRNYXAsIFF1ZXJ5UnVsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbmd4LW50ay1xdWVyeS1idWlsZGVyLmludGVyZmFjZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3BlcmF0b3JzU2VydmljZSB7XHJcblxyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfU1RSSU5HID0gJ3N0cmluZyc7XHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9JTlRFR0VSID0gJ2ludGVnZXInO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfRE9VQkxFID0gJ2RvdWJsZSc7XHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9USU1FID0gJ3RpbWUnO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfREFURSA9ICdkYXRlJztcclxuICByZWFkb25seSBJTlBVVF9UWVBFX1NFTEVDVCA9ICdzZWxlY3QnO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfQk9PTEVBTiA9ICdib29sZWFuJztcclxuXHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9NVUxUSV9TRUxFQ1QgPSAnbXVsdGlfc2VsZWN0JztcclxuXHJcbiAgcmVhZG9ubHkgTlVMTEFCTEVfT1BFUkFUT1JTID0gWydpc19udWxsJywgJ2lzX25vdF9udWxsJ107XHJcbiAgcmVhZG9ubHkgRU1QVFlfT1BFUkFUT1JTID0gWydpc19lbXB0eScsICdpc19ub3RfZW1wdHknXTtcclxuICByZWFkb25seSBNVUxUSV9TRUxFQ1RfT1BFUkFUT1JTID0gWydpbicsICdub3RfaW4nXTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0T3BlcmF0b3IgPSAnZXF1YWwnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdG9yc01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xyXG4gICAgc3RyaW5nOiBbJ2VxdWFsJywgJ25vdF9lcXVhbCcsICdjb250YWlucycsICdub3RfY29udGFpbnMnLCAnYmVnaW5zX3dpdGgnLCAnbm90X2JlZ2luc193aXRoJywgJ2VuZHNfd2l0aCcsICdub3RfZW5kc193aXRoJ10sXHJcbiAgICBpbnRlZ2VyOiBbJ2VxdWFsJywgJ25vdF9lcXVhbCcsICdncmVhdGVyJywgJ2dyZWF0ZXJfb3JfZXF1YWwnLCAnbGVzcycsICdsZXNzX29yX2VxdWFsJ10sXHJcbiAgICBkb3VibGU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIHRpbWU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIGRhdGU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIHNlbGVjdDogWydlcXVhbCcsICdub3RfZXF1YWwnLCAuLi50aGlzLk1VTFRJX1NFTEVDVF9PUEVSQVRPUlNdLFxyXG4gICAgYm9vbGVhbjogWydlcXVhbCddLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0b3JzRGlzcGxheU5hbWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZXF1YWw6ICdxdWVyeWJ1aWxkZXIuZXF1YWwnLFxyXG4gICAgbm90X2VxdWFsOiAncXVlcnlidWlsZGVyLm5vdF9lcXVhbCcsXHJcbiAgICBjb250YWluczogJ3F1ZXJ5YnVpbGRlci5jb250YWlucycsXHJcbiAgICBub3RfY29udGFpbnM6ICdxdWVyeWJ1aWxkZXIubm90X2NvbnRhaW5zJyxcclxuICAgIGJlZ2luc193aXRoOiAncXVlcnlidWlsZGVyLmJlZ2luc193aXRoJyxcclxuICAgIG5vdF9iZWdpbnNfd2l0aDogJ3F1ZXJ5YnVpbGRlci5ub3RfYmVnaW5zX3dpdGgnLFxyXG4gICAgZW5kc193aXRoOiAncXVlcnlidWlsZGVyLmVuZHNfd2l0aCcsXHJcbiAgICBub3RfZW5kc193aXRoOiAncXVlcnlidWlsZGVyLm5vdF9lbmRzX3dpdGgnLFxyXG4gICAgZ3JlYXRlcjogJ3F1ZXJ5YnVpbGRlci5ncmVhdGVyJyxcclxuICAgIGdyZWF0ZXJfb3JfZXF1YWw6ICdxdWVyeWJ1aWxkZXIuZ3JlYXRlcl9vcl9lcXVhbCcsXHJcbiAgICBsZXNzOiAncXVlcnlidWlsZGVyLmxlc3MnLFxyXG4gICAgbGVzc19vcl9lcXVhbDogJ3F1ZXJ5YnVpbGRlci5sZXNzX29yX2VxdWFsJyxcclxuICAgIGlzX251bGw6ICdxdWVyeWJ1aWxkZXIuaXNfbnVsbCcsXHJcbiAgICBpc19ub3RfbnVsbDogJ3F1ZXJ5YnVpbGRlci5pc19ub3RfbnVsbCcsXHJcbiAgICBpc19lbXB0eTogJ3F1ZXJ5YnVpbGRlci5pc19lbXB0eScsXHJcbiAgICBpc19ub3RfZW1wdHk6ICdxdWVyeWJ1aWxkZXIuaXNfbm90X2VtcHR5JyxcclxuICAgIGluOiAncXVlcnlidWlsZGVyLmluJyxcclxuICAgIG5vdF9pbjogJ3F1ZXJ5YnVpbGRlci5ub3RfaW4nXHJcbiAgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdG9yc0Rpc3BsYXlOYW1lc19fX29sZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGVxdWFsOiAnRXF1YWxzJyxcclxuICAgIG5vdF9lcXVhbDogJ0RvZXMgbm90IGVxdWFsJyxcclxuICAgIGNvbnRhaW5zOiAnQ29udGFpbnMnLFxyXG4gICAgbm90X2NvbnRhaW5zOiAnRG9lcyBub3QgY29udGFpbicsXHJcbiAgICBiZWdpbnNfd2l0aDogJ0JlZ2lucyB3aXRoJyxcclxuICAgIG5vdF9iZWdpbnNfd2l0aDogJ0RvZXMgbm90IGJlZ2lucyB3aXRoJyxcclxuICAgIGVuZHNfd2l0aDogJ0VuZHMgd2l0aCcsXHJcbiAgICBub3RfZW5kc193aXRoOiAnRG9lcyBub3QgZW5kIHdpdGgnLFxyXG4gICAgZ3JlYXRlcjogJ0dyZWF0ZXIgdGhhbicsXHJcbiAgICBncmVhdGVyX29yX2VxdWFsOiAnR3JlYXRlciB0aGFuIG9yIGVxdWFsJyxcclxuICAgIGxlc3M6ICdMZXNzIHRoYW4nLFxyXG4gICAgbGVzc19vcl9lcXVhbDogJ0xlc3MgdGhhbiBvciBlcXVhbCcsXHJcbiAgICBpc19udWxsOiAnSXMgbnVsbCcsXHJcbiAgICBpc19ub3RfbnVsbDogJ0lzIG5vdCBudWxsJyxcclxuICAgIGlzX2VtcHR5OiAnSXMgZW1wdHknLFxyXG4gICAgaXNfbm90X2VtcHR5OiAnSXMgbm90IGVtcHR5JyxcclxuICAgIGluOiAnSW4nLFxyXG4gICAgbm90X2luOiAnTm90IGluJ1xyXG4gIH07XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JzKHJ1bGU6IFF1ZXJ5UnVsZSwgZmllbGRNYXA6IFF1ZXJ5QnVpbGRlckZpZWxkTWFwKTogc3RyaW5nW10ge1xyXG5cclxuICAgIGlmICghdGhpcy5nZXRBdmFpbGFibGVUeXBlcygpLmluY2x1ZGVzKHJ1bGUudHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVHlwZSBvZiBydWxlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczogJyArIHRoaXMuZ2V0QXZhaWxhYmxlVHlwZXMoKS5qb2luKCcsICcpKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnNNYXBbcnVsZS50eXBlXTtcclxuXHJcbiAgICAvLyBhbGxvdyBudWxsYWJsZVxyXG4gICAgaWYgKGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzICYmIGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzLm51bGxhYmxlT3BlcmF0b3JzKSB7XHJcbiAgICAgIG9wZXJhdG9ycyA9IFsuLi5vcGVyYXRvcnMsIC4uLnRoaXMuTlVMTEFCTEVfT1BFUkFUT1JTXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhbGxvdyBlbXB0eVxyXG4gICAgaWYgKGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzICYmIGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzLmVtcHR5T3BlcmF0b3JzKSB7XHJcbiAgICAgIG9wZXJhdG9ycyA9IFsuLi5vcGVyYXRvcnMsIC4uLnRoaXMuRU1QVFlfT1BFUkFUT1JTXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3BlcmF0b3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdE9wZXJhdG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3BlcmF0b3I7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRvcnNXaXRob3V0SW5wdXQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLk5VTExBQkxFX09QRVJBVE9SUywgLi4udGhpcy5FTVBUWV9PUEVSQVRPUlNdO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JEaXNwbGF5TmFtZShvcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLm9wZXJhdG9yc0Rpc3BsYXlOYW1lc1tvcGVyYXRvcl0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzRGlzcGxheU5hbWVzW29wZXJhdG9yXTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcGVyYXRvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX1NUUklORyxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX0lOVEVHRVIsXHJcbiAgICAgIHRoaXMuSU5QVVRfVFlQRV9ET1VCTEUsXHJcbiAgICAgIHRoaXMuSU5QVVRfVFlQRV9USU1FLFxyXG4gICAgICB0aGlzLklOUFVUX1RZUEVfREFURSxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX1NFTEVDVCxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX0JPT0xFQU5cclxuICAgIF07XHJcbiAgfVxyXG59XHJcbiJdfQ==