UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

208 lines (207 loc) 25.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export class DataUtils { /** * @param {?} key * @param {?} dataObj * @return {?} */ static getDataArrayValue(key, dataObj) { let /** @type {?} */ result = null; if (key.indexOf("[") >= 0 && key.indexOf("]") >= 0) { let /** @type {?} */ baseArrayKey = key.substring(key.indexOf("["), 0); if (Array.isArray(dataObj[baseArrayKey])) { try { let /** @type {?} */ baseArray = dataObj[baseArrayKey]; let /** @type {?} */ nextKey = key.substring(key.indexOf("[")); let /** @type {?} */ objIndexString = nextKey.substring(nextKey.lastIndexOf("[") + 1, nextKey.lastIndexOf("]")); let /** @type {?} */ objIndex = parseInt(objIndexString); if (objIndex < baseArray.length) { result = baseArray[objIndex]; } } catch (/** @type {?} */ err) { } } } return result; } /** * @param {?} key * @param {?} dataObj * @param {?} value * @return {?} */ static setDataArrayValue(key, dataObj, value) { if (key.indexOf("[") >= 0 && key.indexOf("]") >= 0) { let /** @type {?} */ baseArrayKey = key.substring(key.indexOf("["), 0); if (Array.isArray(dataObj[baseArrayKey])) { try { let /** @type {?} */ baseArray = dataObj[baseArrayKey]; let /** @type {?} */ nextKey = key.substring(key.indexOf("[")); let /** @type {?} */ objIndexString = nextKey.substring(nextKey.lastIndexOf("[") + 1, nextKey.lastIndexOf("]")); let /** @type {?} */ objIndex = parseInt(objIndexString); if (objIndex < baseArray.length) { baseArray[objIndex] = value; } } catch (/** @type {?} */ err) { } } } } /** * @param {?} fromDataObj * @param {?} toDataObj * @param {?=} overwriteOldValues * @param {?=} resetOldValues * @return {?} */ static copyDataValues(fromDataObj, toDataObj, overwriteOldValues = true, resetOldValues = false) { if (toDataObj === null || typeof toDataObj !== 'object') { return; } if (resetOldValues) { for (let /** @type {?} */ propKey in toDataObj) { if (Object.prototype.hasOwnProperty.call(toDataObj, propKey)) { // Delete old values delete toDataObj[propKey]; } } } if (fromDataObj === null || typeof fromDataObj !== 'object') { // No values to be copied return; } for (let /** @type {?} */ propKey in fromDataObj) { if (!overwriteOldValues && typeof toDataObj[propKey] !== 'undefined') { // In this case we don't care that "toDataObj" has own "propKey" or not. // So, if it contains "propKey" regardless the property ownership, // we'll NOT overwrite this field value. continue; } // We'll copy all properties in "fromDataObj" regardless its property ownership. toDataObj[propKey] = fromDataObj[propKey]; } } /** * @param {?} key * @param {?} dataObj * @return {?} */ static getDataValue(key, dataObj) { if (key === null || typeof key === 'undefined' || dataObj === null || typeof dataObj === 'undefined') { return null; } let /** @type {?} */ result = null; if (key.indexOf(".") > 0) { let /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { let /** @type {?} */ firstKey = splitKeys[0]; let /** @type {?} */ firstValue = dataObj[firstKey]; if (firstKey.indexOf("[") >= 0 && firstKey.indexOf("]") >= 0) { firstValue = this.getDataArrayValue(firstKey, dataObj); } if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { let /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); return this.getDataValue(secondKey, firstValue); // recursive beware looping } } } } } else { if (key.indexOf("[") >= 0 && key.indexOf("]") >= 0) { result = this.getDataArrayValue(key, dataObj); } else { result = dataObj[key]; } } if (result != null && typeof result !== 'undefined') { return result; } return null; } /** * @param {?} key * @param {?} dataObj * @param {?} value * @return {?} */ static setDataValue(key, dataObj, value) { if (key === null || typeof key === 'undefined' || value === null || typeof value === 'undefined' || dataObj === null || typeof dataObj === 'undefined') { return dataObj; } if (key.indexOf(".") > 0) { let /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { let /** @type {?} */ firstKey = splitKeys[0]; let /** @type {?} */ firstValue = dataObj[firstKey]; if (firstKey.indexOf("[") >= 0 && firstKey.indexOf("]") >= 0) { firstValue = this.getDataArrayValue(firstKey, dataObj); } if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { let /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); this.setDataValue(secondKey, firstValue, value); // recursive beware looping } } } } } else { if (key.indexOf("[") >= 0 && key.indexOf("]") >= 0) { this.setDataArrayValue(key, dataObj, value); } else { dataObj[key] = value; } } return dataObj; } /** * @param {?} key * @param {?} dataObj * @return {?} */ static containsDataKey(key, dataObj) { if (key === null || typeof key === 'undefined' || dataObj === null || typeof dataObj === 'undefined') { return false; } let /** @type {?} */ result = null; if (key.indexOf(".") > 0) { let /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { let /** @type {?} */ firstKey = splitKeys[0]; let /** @type {?} */ firstValue = dataObj[firstKey]; if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { let /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); return this.containsDataKey(secondKey, firstValue); // recursive beware looping } } } else { if (typeof firstValue !== 'undefined') { return true; } } } } else { if (typeof dataObj[key] !== 'undefined') { return true; } } return false; } } ; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvc2hhcmUvdXRpbHMvRGF0YVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxNQUFNOzs7Ozs7SUFFSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLE9BQVk7UUFDeEQscUJBQUksTUFBTSxHQUFRLElBQUksQ0FBQztRQUV2QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQscUJBQUksWUFBWSxHQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDO29CQUNILHFCQUFJLFNBQVMsR0FBVSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdDLHFCQUFJLE9BQU8sR0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFdEQscUJBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMvRixxQkFBSSxRQUFRLEdBQVcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUNoRCxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFD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QUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixxQkFBSSxTQUFTLEdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBRXhFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzt5QkFDcEQ7cUJBQ0Y7aUJBQ0Y7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sRUFBRSxDQUFDLENBQUMsT0FBTyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsTUFBTSxDQUFDLElBQUksQ0FBQztxQkFDYjtpQkFDRjthQUNGO1NBQ0Y7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLEVBQUUsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQzs7Q0FFaEI7QUFBQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIERhdGFVdGlscyB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0YUFycmF5VmFsdWUoa2V5OiBzdHJpbmcsIGRhdGFPYmo6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdDogYW55ID0gbnVsbDtcblxuICAgIGlmIChrZXkuaW5kZXhPZihcIltcIikgPj0gMCAmJiBrZXkuaW5kZXhPZihcIl1cIikgPj0gMCkge1xuICAgICAgbGV0IGJhc2VBcnJheUtleTogc3RyaW5nID0ga2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZihcIltcIiksIDApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YU9ialtiYXNlQXJyYXlLZXldKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBiYXNlQXJyYXk6IGFueVtdID0gZGF0YU9ialtiYXNlQXJyYXlLZXldO1xuICAgICAgICAgIGxldCBuZXh0S2V5OiBzdHJpbmcgPSBrZXkuc3Vic3RyaW5nKGtleS5pbmRleE9mKFwiW1wiKSk7XG5cbiAgICAgICAgICBsZXQgb2JqSW5kZXhTdHJpbmcgPSBuZXh0S2V5LnN1YnN0cmluZyhuZXh0S2V5Lmxhc3RJbmRleE9mKFwiW1wiKSArIDEsIG5leHRLZXkubGFzdEluZGV4T2YoXCJdXCIpKTtcbiAgICAgICAgICBsZXQgb2JqSW5kZXg6IG51bWJlciA9IHBhcnNlSW50KG9iakluZGV4U3RyaW5nKTtcbiAgICAgICAgICBpZiAob2JqSW5kZXggPCBiYXNlQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBiYXNlQXJyYXlbb2JqSW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0RGF0YUFycmF5VmFsdWUoa2V5OiBzdHJpbmcsIGRhdGFPYmo6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmIChrZXkuaW5kZXhPZihcIltcIikgPj0gMCAmJiBrZXkuaW5kZXhPZihcIl1cIikgPj0gMCkge1xuICAgICAgbGV0IGJhc2VBcnJheUtleTogc3RyaW5nID0ga2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZihcIltcIiksIDApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YU9ialtiYXNlQXJyYXlLZXldKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBiYXNlQXJyYXk6IGFueVtdID0gZGF0YU9ialtiYXNlQXJyYXlLZXldO1xuICAgICAgICAgIGxldCBuZXh0S2V5OiBzdHJpbmcgPSBrZXkuc3Vic3RyaW5nKGtleS5pbmRleE9mKFwiW1wiKSk7XG5cbiAgICAgICAgICBsZXQgb2JqSW5kZXhTdHJpbmcgPSBuZXh0S2V5LnN1YnN0cmluZyhuZXh0S2V5Lmxhc3RJbmRleE9mKFwiW1wiKSArIDEsIG5leHRLZXkubGFzdEluZGV4T2YoXCJdXCIpKTtcbiAgICAgICAgICBsZXQgb2JqSW5kZXg6IG51bWJlciA9IHBhcnNlSW50KG9iakluZGV4U3RyaW5nKTtcbiAgICAgICAgICBpZiAob2JqSW5kZXggPCBiYXNlQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBiYXNlQXJyYXlbb2JqSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29weURhdGFWYWx1ZXMoZnJvbURhdGFPYmo6IGFueSwgdG9EYXRhT2JqOiBhbnksIG92ZXJ3cml0ZU9sZFZhbHVlczogYm9vbGVhbiA9IHRydWUsIHJlc2V0T2xkVmFsdWVzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodG9EYXRhT2JqID09PSBudWxsIHx8IHR5cGVvZiB0b0RhdGFPYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHJlc2V0T2xkVmFsdWVzKSB7XG4gICAgICBmb3IgKGxldCBwcm9wS2V5IGluIHRvRGF0YU9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRvRGF0YU9iaiwgcHJvcEtleSkpIHtcbiAgICAgICAgICAvLyBEZWxldGUgb2xkIHZhbHVlc1xuICAgICAgICAgIGRlbGV0ZSB0b0RhdGFPYmpbcHJvcEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJvbURhdGFPYmogPT09IG51bGwgfHwgdHlwZW9mIGZyb21EYXRhT2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy8gTm8gdmFsdWVzIHRvIGJlIGNvcGllZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IHByb3BLZXkgaW4gZnJvbURhdGFPYmopIHtcbiAgICAgIGlmICghb3ZlcndyaXRlT2xkVmFsdWVzICYmIHR5cGVvZiB0b0RhdGFPYmpbcHJvcEtleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRvbid0IGNhcmUgdGhhdCBcInRvRGF0YU9ialwiIGhhcyBvd24gXCJwcm9wS2V5XCIgb3Igbm90LlxuICAgICAgICAgIC8vIFNvLCBpZiBpdCBjb250YWlucyBcInByb3BLZXlcIiByZWdhcmRsZXNzIHRoZSBwcm9wZXJ0eSBvd25lcnNoaXAsXG4gICAgICAgICAgLy8gd2UnbGwgTk9UIG92ZXJ3cml0ZSB0aGlzIGZpZWxkIHZhbHVlLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSdsbCBjb3B5IGFsbCBwcm9wZXJ0aWVzIGluIFwiZnJvbURhdGFPYmpcIiByZWdhcmRsZXNzIGl0cyBwcm9wZXJ0eSBvd25lcnNoaXAuXG4gICAgICB0b0RhdGFPYmpbcHJvcEtleV0gPSBmcm9tRGF0YU9ialtwcm9wS2V5XTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldERhdGFWYWx1ZShrZXk6IHN0cmluZywgZGF0YU9iajogYW55KTogYW55IHtcbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGRhdGFPYmogPT09IG51bGwgfHwgdHlwZW9mIGRhdGFPYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmIChrZXkuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICBsZXQgc3BsaXRLZXlzOiBzdHJpbmdbXSA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAoc3BsaXRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGZpcnN0S2V5OiBzdHJpbmcgPSBzcGxpdEtleXNbMF07XG4gICAgICAgIGxldCBmaXJzdFZhbHVlOiBhbnkgPSBkYXRhT2JqW2ZpcnN0S2V5XTtcbiAgICAgICAgaWYgKGZpcnN0S2V5LmluZGV4T2YoXCJbXCIpID49IDAgJiYgZmlyc3RLZXkuaW5kZXhPZihcIl1cIikgPj0gMCkge1xuICAgICAgICAgIGZpcnN0VmFsdWUgPSB0aGlzLmdldERhdGFBcnJheVZhbHVlKGZpcnN0S2V5LCBkYXRhT2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGZpcnN0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHNwbGl0S2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGxldCBzZWNvbmRLZXk6IHN0cmluZyA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoXCIuXCIpICsgMSwga2V5Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVZhbHVlKHNlY29uZEtleSwgZmlyc3RWYWx1ZSk7IC8vIHJlY3Vyc2l2ZSBiZXdhcmUgbG9vcGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJbXCIpID49IDAgJiYga2V5LmluZGV4T2YoXCJdXCIpID49IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5nZXREYXRhQXJyYXlWYWx1ZShrZXksIGRhdGFPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZGF0YU9ialtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0RGF0YVZhbHVlKGtleTogc3RyaW5nLCBkYXRhT2JqOiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBkYXRhT2JqID09PSBudWxsIHx8IHR5cGVvZiBkYXRhT2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRhdGFPYmo7XG4gICAgfVxuXG4gICAgaWYgKGtleS5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgIGxldCBzcGxpdEtleXM6IHN0cmluZ1tdID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZmlyc3RLZXk6IHN0cmluZyA9IHNwbGl0S2V5c1swXTtcbiAgICAgICAgbGV0IGZpcnN0VmFsdWU6IGFueSA9IGRhdGFPYmpbZmlyc3RLZXldO1xuICAgICAgICBpZiAoZmlyc3RLZXkuaW5kZXhPZihcIltcIikgPj0gMCAmJiBmaXJzdEtleS5pbmRleE9mKFwiXVwiKSA+PSAwKSB7XG4gICAgICAgICAgZmlyc3RWYWx1ZSA9IHRoaXMuZ2V0RGF0YUFycmF5VmFsdWUoZmlyc3RLZXksIGRhdGFPYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgZmlyc3RWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoc3BsaXRLZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgbGV0IHNlY29uZEtleTogc3RyaW5nID0ga2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZihcIi5cIikgKyAxLCBrZXkubGVuZ3RoKTtcblxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShzZWNvbmRLZXksIGZpcnN0VmFsdWUsIHZhbHVlKTsgLy8gcmVjdXJzaXZlIGJld2FyZSBsb29waW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIltcIikgPj0gMCAmJiBrZXkuaW5kZXhPZihcIl1cIikgPj0gMCkge1xuICAgICAgICB0aGlzLnNldERhdGFBcnJheVZhbHVlKGtleSwgZGF0YU9iaiwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9ialtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFPYmo7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbnRhaW5zRGF0YUtleShrZXk6IHN0cmluZywgZGF0YU9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBkYXRhT2JqID09PSBudWxsIHx8IHR5cGVvZiBkYXRhT2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgaWYgKGtleS5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgIGxldCBzcGxpdEtleXM6IHN0cmluZ1tdID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZmlyc3RLZXk6IHN0cmluZyA9IHNwbGl0S2V5c1swXTtcbiAgICAgICAgbGV0IGZpcnN0VmFsdWU6IGFueSA9IGRhdGFPYmpbZmlyc3RLZXldO1xuXG4gICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGZpcnN0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHNwbGl0S2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGxldCBzZWNvbmRLZXk6IHN0cmluZyA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoXCIuXCIpICsgMSwga2V5Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnNEYXRhS2V5KHNlY29uZEtleSwgZmlyc3RWYWx1ZSk7IC8vIHJlY3Vyc2l2ZSBiZXdhcmUgbG9vcGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhT2JqW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiJdfQ==