UNPKG

@magic-xpa/utils

Version:

magic utils package

213 lines (212 loc) • 20.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { StorageAttribute } from "./enums"; var 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> /** * @param {?} type1 * @param {?} type2 * @return {?} */ StorageAttributeCheck.isTheSameType = /** * @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> /** * @param {?} type * @return {?} */ StorageAttributeCheck.isTypeNumeric = /** * @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> /** * @param {?} type * @return {?} */ StorageAttributeCheck.isTypeLogical = /** * @param {?} type * @return {?} */ function (type) { return type === StorageAttribute.BOOLEAN; }; /// <summary> /// is the type is DOTNET /// </summary> /** * @param {?} type * @return {?} */ StorageAttributeCheck.isTypeDotNet = /** * @param {?} type * @return {?} */ function (type) { return type === StorageAttribute.DOTNET; }; /// <summary> /// is the type ALPHA or UNICODE /// </summary> /// <param name = "type">data type</param> /** * @param {?} type * @return {?} */ StorageAttributeCheck.IsTypeAlphaOrUnicode = /** * @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> /** * @param {?} type1 * @param {?} type2 * @return {?} */ StorageAttributeCheck.StorageFldAlphaOrUnicode = /** * @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> /** * @param {?} sourceAttribute * @param {?} destinationAttribute * @return {?} */ StorageAttributeCheck.IsTypeCompatibile = /** * @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; }()); export { StorageAttributeCheck }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUF0dHJpYnV0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYWdpYy14cGEvdXRpbHMvIiwic291cmNlcyI6WyJzcmMvU3RvcmFnZUF0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBS3pDLElBQUE7SUEwSEU7S0FDQztJQTFIRCxhQUFhO0lBQ2IseURBQXlEO0lBQ3pELGNBQWM7SUFDZCwyQ0FBMkM7SUFDM0MsMkNBQTJDOzs7Ozs7SUFDcEMsbUNBQWE7Ozs7O0lBQXBCLFVBQXFCLEtBQXVCLEVBQUUsS0FBdUI7UUFDbkUsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3BmOzs7OztJQUVNLGdDQUFVOzs7O0lBQWpCLFVBQWtCLElBQXNCO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7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QixDQUFDLE9BQU8sSUFBSSxvQkFBb0IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO29CQUN0RyxvQkFBb0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lCQUN6QjtnQkFDRCxLQUFLLENBQUM7WUFDUixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ25ELGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDekI7Z0JBQ0QsS0FBSyxDQUFDO1NBQ1Q7UUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUM7S0FDekI7Z0NBN0hIO0lBaUlDLENBQUE7QUE1SEQsaUNBNEhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlfSBmcm9tIFwiLi9lbnVtc1wiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gdHlwZSBjaGVja2luZyBmb3IgZW51bSAnU3RvcmFnZUF0dHJpYnV0ZSdcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayB7XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgYm90aCB0eXBlcyBiZWxvbmcgdG8gdGhlIHNhbWUgaW5uZXIgZGF0YSB0eXBlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlMVwiPmRhdGEgdHlwZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlMlwiPmRhdGEgdHlwZTwvcGFyYW0+XHJcbiAgc3RhdGljIGlzVGhlU2FtZVR5cGUodHlwZTE6IFN0b3JhZ2VBdHRyaWJ1dGUsIHR5cGUyOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZTEgPT09IHR5cGUyIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTnVtZXJpYyh0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZU51bWVyaWModHlwZTIpKSB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHR5cGUyKSkgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUyKSkgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVCbG9iKHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlQmxvYih0eXBlMikpIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlRG90TmV0KHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlRG90TmV0KHR5cGUyKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNUeXBlQmxvYih0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNUeXBlQWxwaGEodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgYm90aCB0eXBlcyBiZWxvbmcgdG8gdGhlIE5VTUVSSUMgaW5uZXIgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGlzVHlwZU51bWVyaWModHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgYm90aCB0eXBlcyBiZWxvbmcgdG8gdGhlIExPR0lDQUwgaW5uZXIgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGlzVHlwZUxvZ2ljYWwodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIHR5cGUgaXMgRE9UTkVUXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgaXNUeXBlRG90TmV0KHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaXMgdGhlIHR5cGUgQUxQSEEgb3IgVU5JQ09ERVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+ZGF0YSB0eXBlPC9wYXJhbT5cclxuICBzdGF0aWMgSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgaW5uZXIgdHlwZSBBTFBIQSBvciBVTklDT0RFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGUxXCI+ZGF0YSB0eXBlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGUyXCI+ZGF0YSB0eXBlPC9wYXJhbT5cclxuICBzdGF0aWMgU3RvcmFnZUZsZEFscGhhT3JVbmljb2RlKHR5cGUxOiBTdG9yYWdlQXR0cmlidXRlLCB0eXBlMjogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTdG9yYWdlRmxkQWxwaGFVbmljb2RlT3JCbG9iKHR5cGUxOiBTdG9yYWdlQXR0cmlidXRlLCB0eXBlMjogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHR5cGUxQWxwaGFPclVuaWNvZGU6IGJvb2xlYW4gPSBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTEpO1xyXG4gICAgbGV0IHR5cGUyQWxwaGFPclVuaWNvZGU6IGJvb2xlYW4gPSBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTIpO1xyXG5cclxuICAgIGlmICh0eXBlMUFscGhhT3JVbmljb2RlICYmIHR5cGUyQWxwaGFPclVuaWNvZGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHR5cGUxQmxvYjogYm9vbGVhbiA9IHR5cGUxID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0I7XHJcbiAgICAgIGxldCB0eXBlMkJsb2I6IGJvb2xlYW4gPSB0eXBlMiA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CO1xyXG4gICAgICByZXR1cm4gKCh0eXBlMUFscGhhT3JVbmljb2RlICYmIHR5cGUyQmxvYikgfHwgKHR5cGUyQWxwaGFPclVuaWNvZGUgJiYgdHlwZTFCbG9iKSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDaGVjayBpZiB0eXBlcyBhcmUgY29tcGF0aWJsZSBvciBub3QuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VBdHRyaWJ1dGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlc3RpbmF0aW9uQXR0cmlidXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBJc1R5cGVDb21wYXRpYmlsZShzb3VyY2VBdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGRlc3RpbmF0aW9uQXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUeXBlQ29tcGF0aWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHN3aXRjaCAoc291cmNlQXR0cmlidXRlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQykge1xyXG4gICAgICAgICAgaXNUeXBlQ29tcGF0aWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSB7XHJcbiAgICAgICAgICBpc1R5cGVDb21wYXRpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgICAgIGlzVHlwZUNvbXBhdGlibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSB7XHJcbiAgICAgICAgICBpc1R5cGVDb21wYXRpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgICBpc1R5cGVDb21wYXRpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNUeXBlQ29tcGF0aWJsZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxufVxyXG4iXX0=