123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/script/frameWork/compment/Fundation.js';
- var __require = nodeEnv ? function (request) {
- return cc.require(request);
- } : function (request) {
- return __quick_compile_project__.require(request, __filename);
- };
- function __define (exports, require, module) {
- if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
- cc._RF.push(module, 'd6b68Nm4pVPo75JXou2zZ8L', 'Fundation');
- // script/frameWork/compment/Fundation.ts
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.copyToClipboardForWeb = exports.fastRemoveIndex = exports.sortedLastIndex = exports.sortedIndex = exports.insertionSort = exports.onceArgCall = exports.onceCall = exports.MaxValueOf = exports.CreateIntEnum = exports.CreateObjectKeyAsValueMap = void 0;
- //#region ******************************** 辅助函数 ********************************
- function CreateObjectKeyAsValueMap(obj) {
- var keys = Object.keys(obj);
- var ret = Object.create(null);
- keys.forEach(function (key) {
- ret[key] = key;
- });
- keys = undefined;
- return ret;
- }
- exports.CreateObjectKeyAsValueMap = CreateObjectKeyAsValueMap;
- function CreateIntEnum(states, stateVal) {
- if (stateVal === void 0) { stateVal = 1; }
- var ret = Object.create(null);
- states.forEach(function (state) {
- ret[state] = stateVal;
- stateVal = stateVal + 1;
- });
- return ret;
- }
- exports.CreateIntEnum = CreateIntEnum;
- function MaxValueOf(intEnum) {
- var init = false;
- var maxVal = 0;
- for (var k in intEnum) {
- if (!init) {
- maxVal = intEnum[k];
- }
- else {
- maxVal = (intEnum[k] > maxVal) ? intEnum[k] : maxVal;
- }
- }
- return maxVal;
- }
- exports.MaxValueOf = MaxValueOf;
- function onceCall(cb, cnt) {
- if (cnt === void 0) { cnt = 1; }
- return function () {
- if (cnt <= 0) {
- return;
- }
- ;
- --cnt;
- if (cnt === 0) {
- cb();
- }
- };
- }
- exports.onceCall = onceCall;
- function onceArgCall(cb, cnt) {
- return function (p) {
- if (cnt <= 0) {
- return;
- }
- ;
- --cnt;
- if (cnt === 0) {
- cb(p);
- }
- };
- }
- exports.onceArgCall = onceArgCall;
- //#endregion
- /**
- * 尾插入排序(从小到大)
- * @param list
- * @param compare
- * @returns
- */
- function insertionSort(list, compare) {
- for (var length = list.length, i = 1; i < length; i++) {
- var j = void 0, value = list[i];
- for (j = i - 1; j >= 0; j--) {
- if (compare(list[j], value) <= 0)
- break;
- list[j + 1] = list[j];
- }
- list[j + 1] = value;
- }
- return list;
- }
- exports.insertionSort = insertionSort;
- /**
- * 已排好序(从小到大)的数组,获得 value 应该排在哪个位置(有相同值的情况下,排最左边)
- * @param list
- * @param value
- * @param compare
- * @returns
- */
- function sortedIndex(list, value, compare) {
- var low = 0, high = list.length;
- while (low < high) {
- var mid = (low + high) >>> 1;
- if (compare(list[mid], value) < 0)
- low = mid + 1;
- else
- high = mid;
- }
- return low;
- }
- exports.sortedIndex = sortedIndex;
- /**
- * 已排好序(从小到大)的数组,获得 value 应该排在哪个位置(有相同值的情况下,排最右边)
- * @param list
- * @param value
- * @param compare
- * @returns
- */
- function sortedLastIndex(list, value, compare) {
- var low = 0, high = list.length;
- while (low < high) {
- var mid = (low + high) >>> 1;
- if (compare(list[mid], value) <= 0)
- low = mid + 1;
- else
- high = mid;
- }
- return high;
- }
- exports.sortedLastIndex = sortedLastIndex;
- /**
- * 快速删除数组元素(不保证删除后的顺序)
- * @param arr
- * @param idx
- */
- function fastRemoveIndex(arr, idx) {
- if (idx >= 0 && idx < arr.length) {
- arr[idx] = arr[arr.length - 1];
- arr.length--;
- }
- }
- exports.fastRemoveIndex = fastRemoveIndex;
- /**
- * 拷贝内容到剪切板
- * @param copyStr 内容
- */
- function copyToClipboardForWeb(copyStr, callback) {
- var el = document.createElement('textarea');
- el.value = copyStr;
- // Prevent keyboard from showing on mobile
- el.setAttribute('readonly', '');
- //el.style.contain = 'strict';
- el.style.position = 'absolute';
- el.style.left = '-9999px';
- el.style.fontSize = '12pt'; // Prevent zooming on iOS
- var selection = getSelection();
- var originalRange;
- if (selection.rangeCount > 0) {
- originalRange = selection.getRangeAt(0);
- }
- document.body.appendChild(el);
- el.select();
- // Explicit selection workaround for iOS
- el.selectionStart = 0;
- el.selectionEnd = copyStr.length;
- var isSuccess = false;
- try {
- isSuccess = document.execCommand('copy');
- }
- catch (err) {
- isSuccess = false;
- }
- finally {
- document.body.removeChild(el);
- if (originalRange) {
- selection.removeAllRanges();
- selection.addRange(originalRange);
- }
- }
- /** 返回结果 */
- if (isSuccess) {
- callback();
- }
- else {
- callback(new Error("执行剪切板拷贝命令出错"));
- }
- }
- exports.copyToClipboardForWeb = copyToClipboardForWeb;
- cc._RF.pop();
- }
- if (nodeEnv) {
- __define(__module.exports, __require, __module);
- }
- else {
- __quick_compile_project__.registerModuleFunc(__filename, function () {
- __define(__module.exports, __require, __module);
- });
- }
- })();
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvZnJhbWVXb3JrL2NvbXBtZW50L0Z1bmRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHlCQUF5QixDQUFtQixHQUFNO0lBQzlELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSSxHQUFHLEdBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUc7UUFDWixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUNqQixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFSRCw4REFRQztBQUVELFNBQWdCLGFBQWEsQ0FBbUIsTUFBZ0IsRUFBRSxRQUFvQjtJQUFwQix5QkFBQSxFQUFBLFlBQW9CO0lBQ2xGLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7UUFDaEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN0QixRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQVBELHNDQU9DO0FBSUQsU0FBZ0IsVUFBVSxDQUFtQixPQUFnQztJQUN6RSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7SUFDakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7UUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE1BQU0sR0FBRyxPQUFPLENB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UUFDMUIsYUFBYSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0M7SUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFWix3Q0FBd0M7SUFDeEMsRUFBRSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDdEIsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRWpDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixJQUFJO1FBQ0EsU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUM7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNWLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDckI7WUFBUztRQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksYUFBYSxFQUFFO1lBQ2YsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckM7S0FDSjtJQUVELFdBQVc7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNYLFFBQVEsRUFBRSxDQUFDO0tBQ2Q7U0FBTTtRQUNILFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0tBQ3JDO0FBQ0wsQ0FBQztBQTNDRCxzREEyQ0MiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJcblxuLy8jcmVnaW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIOexu+Wei+WjsOaYjiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuZXhwb3J0IHR5cGUgQ2FsbGJhY2s8VCA9IGFueT4gPSAoZXJyOiBFcnJvciB8IG51bGwsIGRhdGE6IFQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUID0gdW5rbm93bj4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IHR5cGUgT2JqZWN0S2V5QXNWYWx1ZTxUPiA9IHsgcmVhZG9ubHkgW0sgaW4ga2V5b2YgVF06IEs7IH1cbmV4cG9ydCB0eXBlIEtleUFycmF5QXNWYWx1ZTxUIGV4dGVuZHMgc3RyaW5nPiA9IHsgcmVhZG9ubHkgW1YgaW4gVF06IFY7IH1cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIOmUgOavgeaOpeWPo1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElEaXNwb3NlIHtcbiAgICBEaXNwb3NlKCk6IHZvaWQ7XG59XG5cbi8qKiDoh6rliqjplIDmr4HpmYTnnYDlr7nosaEgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpc3Bvc2VBdHRhY2hUYXJnZXQge1xuICAgIEF1dG9EaXNwb3NlKHRvRGlzcG9zZTogSURpc3Bvc2UpOiB2b2lkO1xufVxuXG4vLyNyZWdpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog6L6F5Yqp5Ye95pWwICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlT2JqZWN0S2V5QXNWYWx1ZU1hcDxUIGV4dGVuZHMgT2JqZWN0PihvYmo6IFQpOiBPYmplY3RLZXlBc1ZhbHVlPFQ+IHtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbGV0IHJldDogT2JqZWN0S2V5QXNWYWx1ZTxUPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJldFtrZXldID0ga2V5O1xuICAgIH0pXG4gICAga2V5cyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlSW50RW51bTxUIGV4dGVuZHMgc3RyaW5nPihzdGF0ZXM6IEFycmF5PFQ+LCBzdGF0ZVZhbDogbnVtYmVyID0gMSk6IHsgW1YgaW4gVF06IG51bWJlciB9IHtcbiAgICBsZXQgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBzdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICAgIHJldFtzdGF0ZV0gPSBzdGF0ZVZhbDtcbiAgICAgICAgc3RhdGVWYWwgPSBzdGF0ZVZhbCArIDE7XG4gICAgfSlcbiAgICByZXR1cm4gcmV0O1xufVxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIE1heFZhbHVlT2Y8VCBleHRlbmRzIHN0cmluZz4oaW50RW51bTogeyBbazogc3RyaW5nXTogbnVtYmVyIH0pIHtcbiAgICBsZXQgaW5pdCA9IGZhbHNlO1xuICAgIGxldCBtYXhWYWwgPSAwO1xuICAgIGZvciAobGV0IGsgaW4gaW50RW51bSkge1xuICAgICAgICBpZiAoIWluaXQpIHtcbiAgICAgICAgICAgIG1heFZhbCA9IGludEVudW1ba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXhWYWwgPSAoaW50RW51bVtrXSA+IG1heFZhbCkgPyBpbnRFbnVtW2tdIDogbWF4VmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXhWYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmNlQ2FsbChjYjogKCkgPT4gdm9pZCwgY250OiBudW1iZXIgPSAxKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKGNudCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIC0tY250O1xuICAgICAgICBpZiAoY250ID09PSAwKSB7XG4gICAgICAgICAgICBjYigpXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25jZUFyZ0NhbGw8VD4oY2I6IChwOiBUKSA9PiB2b2lkLCBjbnQ6IG51bWJlcikge1xuICAgIHJldHVybiAocDogVCkgPT4ge1xuICAgICAgICBpZiAoY250IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgLS1jbnQ7XG4gICAgICAgIGlmIChjbnQgPT09IDApIHtcbiAgICAgICAgICAgIGNiKHApXG4gICAgICAgIH1cbiAgICB9XG59XG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiDlsL7mj5LlhaXmjpLluo/vvIjku47lsI/liLDlpKfvvIlcbiAqIEBwYXJhbSBsaXN0IFxuICogQHBhcmFtIGNvbXBhcmUgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydGlvblNvcnQ8VD4obGlzdDogVFtdLCBjb21wYXJlOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgbGVuZ3RoID0gbGlzdC5sZW5ndGgsIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGosIHZhbHVlOiBUID0gbGlzdFtpXVxuICAgICAgICBmb3IgKGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGxpc3Rbal0sIHZhbHVlKSA8PSAwKSBicmVha1xuICAgICAgICAgICAgbGlzdFtqICsgMV0gPSBsaXN0W2pdXG4gICAgICAgIH1cbiAgICAgICAgbGlzdFtqICsgMV0gPSB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gbGlzdFxufVxuXG4vKipcbiAqIOW3suaOkuWlveW6jyjku47lsI/liLDlpKcp55qE5pWw57uE77yM6I635b6XIHZhbHVlIOW6lOivpeaOkuWcqOWTquS4quS9jee9ru+8iOacieebuOWQjOWAvOeahOaDheWGteS4i++8jOaOkuacgOW3pui+ue+8iVxuICogQHBhcmFtIGxpc3QgXG4gKiBAcGFyYW0gdmFsdWUgXG4gKiBAcGFyYW0gY29tcGFyZSBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydGVkSW5kZXg8VCwgVj4obGlzdDogVFtdLCB2YWx1ZTogViwgY29tcGFyZTogKGE6IFQsIGI6IFYpID0+IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaXN0Lmxlbmd0aFxuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgIGxldCBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDFcbiAgICAgICAgaWYgKGNvbXBhcmUobGlzdFttaWRdLCB2YWx1ZSkgPCAwKSBsb3cgPSBtaWQgKyAxXG4gICAgICAgIGVsc2UgaGlnaCA9IG1pZFxuICAgIH1cbiAgICByZXR1cm4gbG93XG59XG5cbi8qKlxuICog5bey5o6S5aW95bqPKOS7juWwj+WIsOWkpynnmoTmlbDnu4TvvIzojrflvpcgdmFsdWUg5bqU6K+l5o6S5Zyo5ZOq5Liq5L2N572u77yI5pyJ55u45ZCM5YC855qE5oOF5Ya15LiL77yM5o6S5pyA5Y+z6L6577yJXG4gKiBAcGFyYW0gbGlzdCBcbiAqIEBwYXJhbSB2YWx1ZSBcbiAqIEBwYXJhbSBjb21wYXJlIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXg8VD4obGlzdDogVFtdLCB2YWx1ZTogVCwgY29tcGFyZTogKGE6IFQsIGI6IFQpID0+IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaXN0Lmxlbmd0aFxuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgIGxldCBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDFcbiAgICAgICAgaWYgKGNvbXBhcmUobGlzdFttaWRdLCB2YWx1ZSkgPD0gMCkgbG93ID0gbWlkICsgMVxuICAgICAgICBlbHNlIGhpZ2ggPSBtaWRcbiAgICB9XG4gICAgcmV0dXJuIGhpZ2hcbn1cblxuLyoqXG4gKiDlv6vpgJ/liKDpmaTmlbDnu4TlhYPntKDvvIjkuI3kv53or4HliKDpmaTlkI7nmoTpobrluo/vvIlcbiAqIEBwYXJhbSBhcnIgXG4gKiBAcGFyYW0gaWR4IFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFzdFJlbW92ZUluZGV4KGFycjogYW55W10sIGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgYXJyW2lkeF0gPSBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgICAgICBhcnIubGVuZ3RoLS07XG4gICAgfVxufVxuXG4vKipcbiAqIOaLt+i0neWGheWuueWIsOWJquWIh+adv1xuICogQHBhcmFtIGNvcHlTdHIg5YaF5a65XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmRGb3JXZWIoY29weVN0cjogc3RyaW5nLCBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGVsLnZhbHVlID0gY29weVN0cjtcblxuICAgIC8vIFByZXZlbnQga2V5Ym9hcmQgZnJvbSBzaG93aW5nIG9uIG1vYmlsZVxuICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gICAgLy9lbC5zdHlsZS5jb250YWluID0gJ3N0cmljdCc7XG4gICAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgZWwuc3R5bGUuZm9udFNpemUgPSAnMTJwdCc7IC8vIFByZXZlbnQgem9vbWluZyBvbiBpT1NcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbigpITtcbiAgICBsZXQgb3JpZ2luYWxSYW5nZTtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICAgIG9yaWdpbmFsUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgICBlbC5zZWxlY3QoKTtcblxuICAgIC8vIEV4cGxpY2l0IHNlbGVjdGlvbiB3b3JrYXJvdW5kIGZvciBpT1NcbiAgICBlbC5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgZWwuc2VsZWN0aW9uRW5kID0gY29weVN0ci5sZW5ndGg7XG5cbiAgICBsZXQgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgIGlmIChvcmlnaW5hbFJhbmdlKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uob3JpZ2luYWxSYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiog6L+U5Zue57uT5p6cICovXG4gICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIuaJp+ihjOWJquWIh+adv+aLt+i0neWRveS7pOWHuumUmVwiKSlcbiAgICB9XG59Il19
|