@magic-xpa/utils
Version:
magic utils package
287 lines • 23.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { StorageAttribute } from "./enums";
/// <summary>
/// type checking for enum 'StorageAttribute'
/// </summary>
var
/// <summary>
/// type checking for enum 'StorageAttribute'
/// </summary>
StorageAttributeCheck = /** @class */ (function () {
function StorageAttributeCheck() {
}
/// <summary>
/// is the both types belong to the same inner data types
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/// <summary>
/// is the both types belong to the same inner data types
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
StorageAttributeCheck.isTheSameType =
/// <summary>
/// is the both types belong to the same inner data types
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
function (type1, type2) {
return type1 === type2 || (StorageAttributeCheck.isTypeNumeric(type1) && StorageAttributeCheck.isTypeNumeric(type2)) || (StorageAttributeCheck.isTypeLogical(type1) && StorageAttributeCheck.isTypeLogical(type2)) || (StorageAttributeCheck.IsTypeAlphaOrUnicode(type1) && StorageAttributeCheck.IsTypeAlphaOrUnicode(type2)) || (StorageAttributeCheck.isTypeBlob(type1) && StorageAttributeCheck.isTypeBlob(type2)) || (StorageAttributeCheck.isTypeDotNet(type1) && StorageAttributeCheck.isTypeDotNet(type2));
};
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.isTypeBlob = /**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR;
};
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.isTypeAlpha = /**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.ALPHA || type === StorageAttribute.MEMO;
};
/// <summary>
/// is the both types belong to the NUMERIC inner type
/// </summary>
/// <summary>
/// is the both types belong to the NUMERIC inner type
/// </summary>
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.isTypeNumeric =
/// <summary>
/// is the both types belong to the NUMERIC inner type
/// </summary>
/**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.DATE || type === StorageAttribute.TIME || type === StorageAttribute.NUMERIC;
};
/// <summary>
/// is the both types belong to the LOGICAL inner type
/// </summary>
/// <summary>
/// is the both types belong to the LOGICAL inner type
/// </summary>
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.isTypeLogical =
/// <summary>
/// is the both types belong to the LOGICAL inner type
/// </summary>
/**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.BOOLEAN;
};
/// <summary>
/// is the type is DOTNET
/// </summary>
/// <summary>
/// is the type is DOTNET
/// </summary>
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.isTypeDotNet =
/// <summary>
/// is the type is DOTNET
/// </summary>
/**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.DOTNET;
};
/// <summary>
/// is the type ALPHA or UNICODE
/// </summary>
/// <param name = "type">data type</param>
/// <summary>
/// is the type ALPHA or UNICODE
/// </summary>
/// <param name = "type">data type</param>
/**
* @param {?} type
* @return {?}
*/
StorageAttributeCheck.IsTypeAlphaOrUnicode =
/// <summary>
/// is the type ALPHA or UNICODE
/// </summary>
/// <param name = "type">data type</param>
/**
* @param {?} type
* @return {?}
*/
function (type) {
return type === StorageAttribute.ALPHA || type === StorageAttribute.UNICODE;
};
/// <summary>
/// is the inner type ALPHA or UNICODE
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/// <summary>
/// is the inner type ALPHA or UNICODE
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
StorageAttributeCheck.StorageFldAlphaOrUnicode =
/// <summary>
/// is the inner type ALPHA or UNICODE
/// </summary>
/// <param name = "type1">data type</param>
/// <param name = "type2">data type</param>
/**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
function (type1, type2) {
return StorageAttributeCheck.IsTypeAlphaOrUnicode(type1) && StorageAttributeCheck.IsTypeAlphaOrUnicode(type2);
};
/**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob = /**
* @param {?} type1
* @param {?} type2
* @return {?}
*/
function (type1, type2) {
/** @type {?} */
var type1AlphaOrUnicode = StorageAttributeCheck.IsTypeAlphaOrUnicode(type1);
/** @type {?} */
var type2AlphaOrUnicode = StorageAttributeCheck.IsTypeAlphaOrUnicode(type2);
if (type1AlphaOrUnicode && type2AlphaOrUnicode) {
return true;
}
else {
/** @type {?} */
var type1Blob = type1 === StorageAttribute.BLOB;
/** @type {?} */
var type2Blob = type2 === StorageAttribute.BLOB;
return ((type1AlphaOrUnicode && type2Blob) || (type2AlphaOrUnicode && type1Blob));
}
};
/// <summary>
/// Check if types are compatible or not.
/// </summary>
/// <param name="sourceAttribute"></param>
/// <param name="destinationAttribute"></param>
/// <returns></returns>
/// <summary>
/// Check if types are compatible or not.
/// </summary>
/// <param name="sourceAttribute"></param>
/// <param name="destinationAttribute"></param>
/// <returns></returns>
/**
* @param {?} sourceAttribute
* @param {?} destinationAttribute
* @return {?}
*/
StorageAttributeCheck.IsTypeCompatibile =
/// <summary>
/// Check if types are compatible or not.
/// </summary>
/// <param name="sourceAttribute"></param>
/// <param name="destinationAttribute"></param>
/// <returns></returns>
/**
* @param {?} sourceAttribute
* @param {?} destinationAttribute
* @return {?}
*/
function (sourceAttribute, destinationAttribute) {
/** @type {?} */
var isTypeCompatible = false;
switch (sourceAttribute) {
case StorageAttribute.ALPHA:
case StorageAttribute.UNICODE:
if (destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE ||
destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME ||
destinationAttribute === StorageAttribute.NUMERIC) {
isTypeCompatible = true;
}
break;
case StorageAttribute.NUMERIC:
if (destinationAttribute === StorageAttribute.NUMERIC || destinationAttribute === StorageAttribute.ALPHA ||
destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.BOOLEAN ||
destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME) {
isTypeCompatible = true;
}
break;
case StorageAttribute.BOOLEAN:
{
if (destinationAttribute === StorageAttribute.BOOLEAN || destinationAttribute === StorageAttribute.ALPHA ||
destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.NUMERIC) {
isTypeCompatible = true;
}
}
break;
case StorageAttribute.DATE:
case StorageAttribute.TIME:
if (destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE ||
destinationAttribute === StorageAttribute.NUMERIC || destinationAttribute === StorageAttribute.BOOLEAN ||
destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME) {
isTypeCompatible = true;
}
break;
case StorageAttribute.BLOB:
if (destinationAttribute === StorageAttribute.BLOB) {
isTypeCompatible = true;
}
break;
}
return isTypeCompatible;
};
return StorageAttributeCheck;
}());
/// <summary>
/// type checking for enum 'StorageAttribute'
/// </summary>
export { StorageAttributeCheck };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUF0dHJpYnV0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYWdpYy14cGEvdXRpbHMvIiwic291cmNlcyI6WyJzcmMvU3RvcmFnZUF0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFDOzs7O0FBS3pDOzs7OztJQTBIRTtJQUNBLENBQUM7SUExSEQsYUFBYTtJQUNiLHlEQUF5RDtJQUN6RCxjQUFjO0lBQ2QsMkNBQTJDO0lBQzNDLDJDQUEyQzs7Ozs7Ozs7Ozs7SUFDcEMsbUNBQWE7Ozs7Ozs7Ozs7O0lBQXBCLFVBQXFCLEtBQXVCLEVBQUUsS0FBdUI7UUFDbkUsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JmLENBQUM7Ozs7O0lBRU0sZ0NBQVU7Ozs7SUFBakIsVUFBa0IsSUFBc0I7UUFDdEMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFL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RSxDQUFDLENBQUMsb0JBQW9CLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxJQUFJLG9CQUFvQixLQUFLLGdCQUFnQixDQUFDLE9BQU87b0JBQ3RHLG9CQUFvQixLQUFLLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxvQkFBb0IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO29CQUN0RyxvQkFBb0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELEtBQUssQ0FBQztZQUNSLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELEtBQUssQ0FBQztRQUNWLENBQUM7UUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUlILDRCQUFDO0FBQUQsQ0FBQyxBQTVIRCxJQTRIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSBcIi4vZW51bXNcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIHR5cGUgY2hlY2tpbmcgZm9yIGVudW0gJ1N0b3JhZ2VBdHRyaWJ1dGUnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBTdG9yYWdlQXR0cmlidXRlQ2hlY2sge1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIGJvdGggdHlwZXMgYmVsb25nIHRvIHRoZSBzYW1lIGlubmVyIGRhdGEgdHlwZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZTFcIj5kYXRhIHR5cGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZTJcIj5kYXRhIHR5cGU8L3BhcmFtPlxyXG4gIHN0YXRpYyBpc1RoZVNhbWVUeXBlKHR5cGUxOiBTdG9yYWdlQXR0cmlidXRlLCB0eXBlMjogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUxID09PSB0eXBlMiB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZU51bWVyaWModHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVOdW1lcmljKHR5cGUyKSkgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTG9naWNhbCh0eXBlMikpIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMikpIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlQmxvYih0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IodHlwZTIpKSB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZURvdE5ldCh0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZURvdE5ldCh0eXBlMikpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzVHlwZUJsb2IodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzVHlwZUFscGhhKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIGJvdGggdHlwZXMgYmVsb25nIHRvIHRoZSBOVU1FUklDIGlubmVyIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBpc1R5cGVOdW1lcmljKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIGJvdGggdHlwZXMgYmVsb25nIHRvIHRoZSBMT0dJQ0FMIGlubmVyIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBpc1R5cGVMb2dpY2FsKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSB0eXBlIGlzIERPVE5FVFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGlzVHlwZURvdE5ldCh0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSB0eXBlIEFMUEhBIG9yIFVOSUNPREVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPmRhdGEgdHlwZTwvcGFyYW0+XHJcbiAgc3RhdGljIElzVHlwZUFscGhhT3JVbmljb2RlKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIGlubmVyIHR5cGUgQUxQSEEgb3IgVU5JQ09ERVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlMVwiPmRhdGEgdHlwZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlMlwiPmRhdGEgdHlwZTwvcGFyYW0+XHJcbiAgc3RhdGljIFN0b3JhZ2VGbGRBbHBoYU9yVW5pY29kZSh0eXBlMTogU3RvcmFnZUF0dHJpYnV0ZSwgdHlwZTI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYih0eXBlMTogU3RvcmFnZUF0dHJpYnV0ZSwgdHlwZTI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIGxldCB0eXBlMUFscGhhT3JVbmljb2RlOiBib29sZWFuID0gU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUxKTtcclxuICAgIGxldCB0eXBlMkFscGhhT3JVbmljb2RlOiBib29sZWFuID0gU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUyKTtcclxuXHJcbiAgICBpZiAodHlwZTFBbHBoYU9yVW5pY29kZSAmJiB0eXBlMkFscGhhT3JVbmljb2RlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB0eXBlMUJsb2I6IGJvb2xlYW4gPSB0eXBlMSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CO1xyXG4gICAgICBsZXQgdHlwZTJCbG9iOiBib29sZWFuID0gdHlwZTIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjtcclxuICAgICAgcmV0dXJuICgodHlwZTFBbHBoYU9yVW5pY29kZSAmJiB0eXBlMkJsb2IpIHx8ICh0eXBlMkFscGhhT3JVbmljb2RlICYmIHR5cGUxQmxvYikpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2hlY2sgaWYgdHlwZXMgYXJlIGNvbXBhdGlibGUgb3Igbm90LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlQXR0cmlidXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZXN0aW5hdGlvbkF0dHJpYnV0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgSXNUeXBlQ29tcGF0aWJpbGUoc291cmNlQXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlLCBkZXN0aW5hdGlvbkF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzVHlwZUNvbXBhdGlibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKHNvdXJjZUF0dHJpYnV0ZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUgfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgICAgIGlzVHlwZUNvbXBhdGlibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4gfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSkge1xyXG4gICAgICAgICAgaXNUeXBlQ29tcGF0aWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46IHtcclxuICAgICAgICBpZiAoZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKSB7XHJcbiAgICAgICAgICBpc1R5cGVDb21wYXRpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4gfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSkge1xyXG4gICAgICAgICAgaXNUeXBlQ29tcGF0aWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBpZiAoZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgICAgaXNUeXBlQ29tcGF0aWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVHlwZUNvbXBhdGlibGU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcbn1cclxuIl19