Files
DocumentServer-v-9.2.0/sdkjs/cell/model/ConditionalFormatting.js
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

3271 lines
141 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function (window, undefined) {
/*
* Import
* -----------------------------------------------------------------------------
*/
var FT_Common = AscFonts.FT_Common;
var CellValueType = AscCommon.CellValueType;
var EIconSetType = Asc.EIconSetType;
var asc_error = Asc.c_oAscError.ID;
/**
* Отвечает за условное форматирование
* -----------------------------------------------------------------------------
*
* @constructor
* @memberOf Asc
*/
function CConditionalFormatting() {
this.pivot = false;
this.ranges = null;
this.aRules = [];
return this;
}
CConditionalFormatting.prototype.setSqRef = function (sqRef) {
this.ranges = AscCommonExcel.g_oRangeCache.getRangesFromSqRef(sqRef);
};
CConditionalFormatting.prototype.isValid = function () {
//todo more checks
return this.ranges && this.ranges.length > 0;
};
CConditionalFormatting.prototype.initRules = function () {
for (var i = 0; i < this.aRules.length; ++i) {
this.aRules[i].updateConditionalFormatting(this);
}
};
//todo need another approach
function CConditionalFormattingFormulaParent(ws, rule, isDefName) {
this.ws = ws;
this.rule = rule;
this.isDefName = isDefName;
}
CConditionalFormattingFormulaParent.prototype.onFormulaEvent = function (type, eventData) {
if (AscCommon.c_oNotifyParentType.IsDefName === type && this.isDefName) {
return {bbox: this.rule.getBBox(), ranges: this.rule.ranges};
} else if (AscCommon.c_oNotifyParentType.Change === type) {
this.ws.setDirtyConditionalFormatting(new AscCommonExcel.MultiplyRange(this.rule.ranges));
}
};
CConditionalFormattingFormulaParent.prototype.clone = function () {
return new CConditionalFormattingFormulaParent(this.ws, this.rule, this.isDefName);
};
function CConditionalFormattingRule() {
this.aboveAverage = true;
this.activePresent = false;
this.bottom = false;
this.dxf = null;
this.equalAverage = false;
this.id = AscCommon.g_oIdCounter.Get_NewId();
this.operator = null;
this.percent = false;
this.priority = null;
this.rank = null;
this.stdDev = null;
this.stopIfTrue = false;
this.text = null;
this.timePeriod = null;
this.type = null;
this.aRuleElements = [];
// from CConditionalFormatting
// Combined all the rules into one array to sort the priorities,
// so they transferred these properties to the rule
this.pivot = false;
this.ranges = null;
this.isLock = null;
return this;
}
CConditionalFormattingRule.prototype.Get_Id = function () {
return this.id;
};
CConditionalFormattingRule.prototype.getType = function () {
return AscCommonExcel.UndoRedoDataTypes.CFDataInner;
};
CConditionalFormattingRule.prototype.clone = function () {
var i, res = new CConditionalFormattingRule();
res.aboveAverage = this.aboveAverage;
res.bottom = this.bottom;
if (this.dxf) {
res.dxf = this.dxf.clone();
}
res.equalAverage = this.equalAverage;
res.operator = this.operator;
res.percent = this.percent;
res.priority = this.priority;
res.rank = this.rank;
res.stdDev = this.stdDev;
res.stopIfTrue = this.stopIfTrue;
res.text = this.text;
res.timePeriod = this.timePeriod;
res.type = this.type;
res.updateConditionalFormatting(this);
for (i = 0; i < this.aRuleElements.length; ++i) {
res.aRuleElements.push(this.aRuleElements[i].clone());
}
return res;
};
CConditionalFormattingRule.prototype.combineRangesToSingle = function () {
let ranges = this.ranges;
if (!ranges || !ranges.length) {
return null;
}
if (ranges.length === 1) {
return ranges[0];
}
// Sort ranges by position
let sortedRanges = ranges.slice().sort(function(a, b) {
// First compare by rows
if (a.r1 !== b.r1) {
return a.r1 - b.r1;
}
// Then by columns if rows are equal
return a.c1 - b.c1;
});
let result = sortedRanges[0].clone();
let canCombine = true;
for (let i = 1; i < sortedRanges.length; i++) {
let current = sortedRanges[i];
// Check if ranges can be combined horizontally (same rows)
if (current.r1 === result.r1 && current.r2 === result.r2 && current.c1 <= result.c2 + 1) {
// Extend range horizontally
result.c2 = Math.max(result.c2, current.c2);
continue;
}
// Check if ranges can be combined vertically (same columns)
if (current.c1 === result.c1 && current.c2 === result.c2 && current.r1 <= result.r2 + 1) {
// Extend range vertically
result.r2 = Math.max(result.r2, current.r2);
continue;
}
// Cannot combine - ranges are not continuous
canCombine = false;
break;
}
if (canCombine) {
this.ranges = [result];
}
};
CConditionalFormattingRule.prototype.merge = function (oRule) {
if (this.aboveAverage === true) {
this.aboveAverage = oRule.aboveAverage;
}
if (this.activePresent === false) {
this.activePresent = oRule.activePresent;
}
if (this.bottom === false) {
this.bottom = oRule.bottom;
}
//TODO merge
if (this.dxf === null) {
this.dxf = oRule.dxf;
}
if (this.equalAverage === false) {
this.equalAverage = oRule.equalAverage;
}
if (this.operator === null) {
this.operator = oRule.operator;
}
if (this.percent === false) {
this.percent = oRule.percent;
}
if (this.priority === null) {
this.priority = oRule.priority;
}
if (this.rank === null) {
this.rank = oRule.rank;
}
if (this.stdDev === null) {
this.stdDev = oRule.stdDev;
}
if (this.stopIfTrue === false) {
this.stopIfTrue = oRule.stopIfTrue;
}
if (this.text === null) {
this.text = oRule.text;
}
if (this.timePeriod === null) {
this.timePeriod = oRule.timePeriod;
}
if (this.type === null) {
this.type = oRule.type;
}
if (this.aRuleElements && this.aRuleElements.length === 0) {
this.aRuleElements = oRule.aRuleElements;
} else if (this.aRuleElements && oRule.aRuleElements && this.aRuleElements.length === oRule.aRuleElements.length) {
for (var i = 0; i < this.aRuleElements.length; i++) {
this.aRuleElements[i].merge(oRule.aRuleElements[i]);
}
}
//this.aRuleElements = [];
if (this.pivot === false) {
this.pivot = oRule.pivot;
}
if (this.ranges === null) {
this.ranges = oRule.ranges;
}
if (this.isLock === null) {
this.isLock = oRule.isLock;
}
};
CConditionalFormattingRule.prototype.recalcInterfaceFormula = function (ws, toInterface) {
for (var i = 0; i < this.aRuleElements.length; i++) {
this.aRuleElements[i].recalcFormula && this.aRuleElements[i].recalcFormula(ws, toInterface);
}
};
CConditionalFormattingRule.prototype.Write_ToBinary2 = function (writer) {
//for wrapper
//writer.WriteLong(this.getObjectType());
writer.WriteBool(this.aboveAverage);
writer.WriteBool(this.activePresent);
writer.WriteBool(this.bottom);
if (null != this.dxf) {
var dxf = this.dxf;
writer.WriteBool(true);
var oBinaryStylesTableWriter = new AscCommonExcel.BinaryStylesTableWriter(writer);
oBinaryStylesTableWriter.bs.WriteItem(0, function () {
oBinaryStylesTableWriter.WriteDxf(dxf);
});
} else {
writer.WriteBool(false);
}
writer.WriteBool(this.equalAverage);
if (null != this.operator) {
writer.WriteBool(true);
writer.WriteLong(this.operator);
} else {
writer.WriteBool(false);
}
writer.WriteBool(this.percent);
if (null != this.priority) {
writer.WriteBool(true);
writer.WriteLong(this.priority);
} else {
writer.WriteBool(false);
}
if (null != this.rank) {
writer.WriteBool(true);
writer.WriteLong(this.rank);
} else {
writer.WriteBool(false);
}
if (null != this.stdDev) {
writer.WriteBool(true);
writer.WriteLong(this.stdDev);
} else {
writer.WriteBool(false);
}
writer.WriteBool(this.stopIfTrue);
if (null != this.text) {
writer.WriteBool(true);
writer.WriteString2(this.text);
} else {
writer.WriteBool(false);
}
if (null != this.timePeriod) {
writer.WriteBool(true);
writer.WriteString2(this.timePeriod);
} else {
writer.WriteBool(false);
}
if (null != this.type) {
writer.WriteBool(true);
writer.WriteLong(this.type);
} else {
writer.WriteBool(false);
}
var i;
if (null != this.aRuleElements) {
writer.WriteBool(true);
writer.WriteLong(this.aRuleElements.length);
for (i = 0; i < this.aRuleElements.length; i++) {
writer.WriteLong(this.aRuleElements[i].type);
this.aRuleElements[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
writer.WriteBool(this.pivot);
if (null != this.ranges) {
writer.WriteBool(true);
writer.WriteLong(this.ranges.length);
for (i = 0; i < this.ranges.length; i++) {
writer.WriteLong(this.ranges[i].r1);
writer.WriteLong(this.ranges[i].c1);
writer.WriteLong(this.ranges[i].r2);
writer.WriteLong(this.ranges[i].c2);
}
} else {
writer.WriteBool(false);
}
};
CConditionalFormattingRule.prototype.Read_FromBinary2 = function (reader) {
this.aboveAverage = reader.GetBool();
this.activePresent = reader.GetBool();
this.bottom = reader.GetBool();
var length, i;
if (reader.GetBool()) {
var api_sheet = Asc['editor'];
var wb = api_sheet.wbModel;
var bsr = new AscCommonExcel.Binary_StylesTableReader(reader, wb);
var bcr = new AscCommon.Binary_CommonReader(reader);
var oDxf = new AscCommonExcel.CellXfs();
reader.GetUChar();
length = reader.GetULongLE();
bcr.Read1(length, function (t, l) {
return bsr.ReadDxf(t, l, oDxf);
});
this.dxf = oDxf;
}
this.equalAverage = reader.GetBool();
if (reader.GetBool()) {
this.operator = reader.GetLong();
}
this.percent = reader.GetBool();
if (reader.GetBool()) {
this.priority = reader.GetLong();
}
if (reader.GetBool()) {
this.rank = reader.GetLong();
}
if (reader.GetBool()) {
this.stdDev = reader.GetLong();
}
this.stopIfTrue = reader.GetBool();
if (reader.GetBool()) {
this.text = reader.GetString2();
}
if (reader.GetBool()) {
this.timePeriod = reader.GetString2();
}
if (reader.GetBool()) {
this.type = reader.GetLong();
}
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aRuleElements) {
this.aRuleElements = [];
}
var type = reader.GetLong();
var elem;
switch (type) {
case Asc.ECfType.colorScale:
elem = new CColorScale();
break;
case Asc.ECfType.dataBar:
elem = new CDataBar();
break;
case Asc.ECfType.iconSet:
elem = new CIconSet();
break;
default:
elem = new CFormulaCF();
break;
//TODO ?CFormulaCF
}
elem.Read_FromBinary2(reader);
this.aRuleElements.push(elem);
}
}
this.pivot = reader.GetBool();
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.ranges) {
this.ranges = [];
}
var r1 = reader.GetLong();
var c1 = reader.GetLong();
var r2 = reader.GetLong();
var c2 = reader.GetLong();
this.ranges.push(new Asc.Range(c1, r1, c2, r2));
}
}
};
CConditionalFormattingRule.prototype.set = function (val, addToHistory, ws) {
this.aboveAverage = this.checkProperty(this.aboveAverage, val.aboveAverage, AscCH.historyitem_CFRule_SetAboveAverage, ws, addToHistory);
this.activePresent = this.checkProperty(this.activePresent, val.activePresent, AscCH.historyitem_CFRule_SetActivePresent, ws, addToHistory);
this.bottom = this.checkProperty(this.bottom, val.bottom, AscCH.historyitem_CFRule_SetBottom, ws, addToHistory);
this.equalAverage = this.checkProperty(this.equalAverage, val.equalAverage, AscCH.historyitem_CFRule_SetEqualAverage, ws, addToHistory);
this.operator = this.checkProperty(this.operator, val.operator, AscCH.historyitem_CFRule_SetOperator, ws, addToHistory);
this.percent = this.checkProperty(this.percent, val.percent, AscCH.historyitem_CFRule_SetPercent, ws, addToHistory);
this.priority = this.checkProperty(this.priority, val.priority, AscCH.historyitem_CFRule_SetPriority, ws, addToHistory);
this.rank = this.checkProperty(this.rank, val.rank, AscCH.historyitem_CFRule_SetRank, ws, addToHistory);
this.stdDev = this.checkProperty(this.stdDev, val.stdDev, AscCH.historyitem_CFRule_SetStdDev, ws, addToHistory);
this.stopIfTrue = this.checkProperty(this.stopIfTrue, val.stopIfTrue, AscCH.historyitem_CFRule_SetStopIfTrue, ws, addToHistory);
this.text = this.checkProperty(this.text, val.text, AscCH.historyitem_CFRule_SetText, ws, addToHistory);
this.timePeriod = this.checkProperty(this.timePeriod, val.timePeriod, AscCH.historyitem_CFRule_SetTimePeriod, ws, addToHistory);
this.type = this.checkProperty(this.type, val.type, AscCH.historyitem_CFRule_SetType, ws, addToHistory);
this.pivot = this.checkProperty(this.pivot, val.pivot, AscCH.historyitem_CFRule_SetPivot, ws, addToHistory);
var compareElements = function (_elem1, _elem2) {
if (_elem1.length === _elem2.length) {
for (var i = 0; i < _elem1.length; i++) {
if (!_elem1[i].isEqual(_elem2[i])) {
return false;
}
}
return true;
}
return false;
};
if (!compareElements(this.aRuleElements, val.aRuleElements)) {
if (addToHistory) {
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetRuleElements,
ws.getId(), this.getUnionRange(), new AscCommonExcel.UndoRedoData_CF(this.id, this.aRuleElements, val.aRuleElements));
}
this.aRuleElements = val.aRuleElements;
}
if ((this.dxf && val.dxf && !this.dxf.isEqual(val.dxf)) || (this.dxf && !val.dxf) || (!this.dxf && val.dxf)) {
var elem = val.dxf ? val.dxf.clone() : null;
if (addToHistory) {
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetDxf,
ws.getId(), this.getUnionRange(), new AscCommonExcel.UndoRedoData_CF(this.id, this.dxf, elem));
}
this.dxf = elem;
}
if (this.ranges && val.ranges && !compareElements(this.ranges, val.ranges)) {
this.setLocation(val.ranges, ws, true);
}
};
CConditionalFormattingRule.prototype.setLocation = function (location, ws, addToHistory) {
if (addToHistory && !History.TurnOffHistory) {
var getUndoRedoRange = function (_ranges) {
var needRanges = [];
for (var i = 0; i < _ranges.length; i++) {
needRanges.push(new AscCommonExcel.UndoRedoData_BBox(_ranges[i]));
}
return needRanges;
};
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetRanges,
ws.getId(), this.getUnionRange(location), new AscCommonExcel.UndoRedoData_CF(this.id, getUndoRedoRange(this.ranges), getUndoRedoRange(location)));
}
this.ranges = location;
if (ws) {
ws.cleanConditionalFormattingRangeIterator();
}
};
CConditionalFormattingRule.prototype.checkProperty = function (propOld, propNew, type, ws, addToHistory) {
if (propOld !== propNew) {
if (addToHistory) {
History.Add(AscCommonExcel.g_oUndoRedoCF, type, ws.getId(), this.getUnionRange(),
new AscCommonExcel.UndoRedoData_CF(this.id, propOld, propNew));
}
return propNew;
}
return propOld;
};
CConditionalFormattingRule.prototype.setOffset = function (offset, range, ws, addToHistory) {
var newRanges = [];
var isChange = false;
var _setDiff = function (_range) {
//TODO объединть в одну функцию с dataValidation(.shift)
var _newRanges, _offset, tempRange, intersection, otherPart, diff;
if (range && range.getType() === Asc.c_oAscSelectionType.RangeCells) {
if (offset.row !== 0) {
//c_oAscInsertOptions.InsertCellsAndShiftDown
tempRange = new Asc.Range(range.c1, range.r1, range.c2, AscCommon.gc_nMaxRow0);
intersection = tempRange.intersection(_range);
if (intersection) {
diff = range.r2 - range.r1 + 1;
_newRanges = [];
//добавляем сдвинутую часть диапазона
_newRanges.push(intersection);
_offset = new AscCommon.CellBase(offset.row > 0 ? diff : -diff, 0);
otherPart = _newRanges[0].difference(_range);
_newRanges[0].setOffset(_offset);
//исключаем сдвинутую часть из диапазона
_newRanges = _newRanges.concat(otherPart);
}
} else if (offset.col !== 0) {
//c_oAscInsertOptions.InsertCellsAndShiftRight
tempRange = new Asc.Range(range.c1, range.r1, AscCommon.gc_nMaxCol0, range.r2);
intersection = tempRange.intersection(_range);
if (intersection) {
diff = range.c2 - range.c1 + 1;
_newRanges = [];
//добавляем сдвинутую часть диапазона
_newRanges.push(intersection);
_offset = new AscCommon.CellBase(0, offset.col > 0 ? diff : -diff, 0);
otherPart = _newRanges[0].difference(_range);
_newRanges[0].setOffset(_offset);
//исключаем сдвинутую часть из диапазона
_newRanges = _newRanges.concat(otherPart);
}
}
}
return _newRanges;
};
for (var i = 0; i < this.ranges.length; i++) {
var newRange = this.ranges[i].clone();
if (range.isIntersectForShift(newRange, offset)) {
if (newRange.forShift(range, offset)) {
if (ws.autoFilters.isAddTotalRow && newRange.containsRange(this.ranges[i])) {
newRange = this.ranges[i].clone();
} else {
isChange = true;
}
}
newRanges.push(newRange);
} else {
if (ws.autoFilters.isAddTotalRow && newRange.containsRange(this.ranges[i])) {
newRange = this.ranges[i].clone();
} else {
var changedRanges = _setDiff(this.ranges[i]);
if (changedRanges) {
newRanges = newRanges.concat(changedRanges);
isChange = true;
} else {
newRanges = newRanges.concat(this.ranges[i].clone());
}
}
}
}
if (isChange) {
this.setLocation(newRanges, ws, addToHistory);
if (ws) {
ws.setDirtyConditionalFormatting(new AscCommonExcel.MultiplyRange(newRanges))
}
}
};
CConditionalFormattingRule.prototype.updateFormulas = function (ws) {
if (this.aRuleElements && this.aRuleElements.length) {
for (let i = 0; i < this.aRuleElements.length; i++) {
let _formula = this.aRuleElements[i] && this.aRuleElements[i]._f && this.aRuleElements[i].getFormula && this.aRuleElements[i].getFormula(ws);
if (_formula && _formula.Formula && this.aRuleElements[i] && this.aRuleElements[i].Text && this.aRuleElements[i].Text !== _formula.Formula) {
this.aRuleElements[i].Text = this.aRuleElements[i].getFormulaStr();
}
}
}
};
CConditionalFormattingRule.prototype.getUnionRange = function (opt_ranges) {
var res = null;
var _getUnionRanges = function (_ranges) {
if (!_ranges) {
return null;
}
var _res = null;
for (var i = 0; i < _ranges.length; i++) {
if (!_res) {
_res = _ranges[i].clone();
} else {
_res.union2(_ranges[i]);
}
}
return _res;
};
if (opt_ranges) {
res = _getUnionRanges(opt_ranges);
}
if (this.ranges) {
var tempRange = _getUnionRanges(this.ranges);
if (tempRange) {
if (res) {
res.union2(tempRange)
} else {
res = tempRange;
}
}
}
return res;
};
CConditionalFormattingRule.prototype.getTimePeriod = function () {
var start, end;
var now = new Asc.cDate();
now.setUTCHours(0, 0, 0, 0);
switch (this.timePeriod) {
case AscCommonExcel.ST_TimePeriod.last7Days:
now.setUTCDate(now.getUTCDate() + 1);
end = now.getExcelDate();
now.setUTCDate(now.getUTCDate() - 7);
start = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.lastMonth:
now.setUTCDate(1);
end = now.getExcelDate();
now.setUTCMonth(now.getUTCMonth() - 1);
start = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.thisMonth:
now.setUTCDate(1);
start = now.getExcelDate();
now.setUTCMonth(now.getUTCMonth() + 1);
end = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.nextMonth:
now.setUTCDate(1);
now.setUTCMonth(now.getUTCMonth() + 1);
start = now.getExcelDate();
now.setUTCMonth(now.getUTCMonth() + 1);
end = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.lastWeek:
now.setUTCDate(now.getUTCDate() - now.getUTCDay());
end = now.getExcelDate();
now.setUTCDate(now.getUTCDate() - 7);
start = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.thisWeek:
now.setUTCDate(now.getUTCDate() - now.getUTCDay());
start = now.getExcelDate();
now.setUTCDate(now.getUTCDate() + 7);
end = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.nextWeek:
now.setUTCDate(now.getUTCDate() - now.getUTCDay() + 7);
start = now.getExcelDate();
now.setUTCDate(now.getUTCDate() + 7);
end = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.yesterday:
end = now.getExcelDate();
now.setUTCDate(now.getUTCDate() - 1);
start = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.today:
start = now.getExcelDate();
now.setUTCDate(now.getUTCDate() + 1);
end = now.getExcelDate();
break;
case AscCommonExcel.ST_TimePeriod.tomorrow:
now.setUTCDate(now.getUTCDate() + 1);
start = now.getExcelDate();
now.setUTCDate(now.getUTCDate() + 1);
end = now.getExcelDate();
break;
}
return {start: start, end: end};
};
CConditionalFormattingRule.prototype.getValueCellIs = function (ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw) {
var res;
if (null !== this.text) {
res = new AscCommonExcel.cString(this.text);
} else if (this.aRuleElements[0] && (this.type === Asc.ECfType.notContainsText || this.type === Asc.ECfType.containsText)) {
//ms see on bool result of first formula
//formula1/formula2: true/false -> true, false/true -> false, false/false -> false
res = this.aRuleElements[0].getValue(ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw);
} else if (this.aRuleElements[1]) {
res = this.aRuleElements[1].getValue(ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw);
}
return res;
};
CConditionalFormattingRule.prototype.getFormulaCellIs = function (opt_getFirstRule) {
return null === this.text && this.aRuleElements[opt_getFirstRule ? 0 : 1];
};
CConditionalFormattingRule.prototype.cellIs = function (operator, cell, v1, v2) {
if (operator === AscCommonExcel.ECfOperator.Operator_beginsWith ||
operator === AscCommonExcel.ECfOperator.Operator_endsWith ||
operator === AscCommonExcel.ECfOperator.Operator_containsText ||
operator === AscCommonExcel.ECfOperator.Operator_notContains) {
//ms see on bool result of first formula
//formula1/formula2: true/false -> true, false/true -> false, false/false -> false
if (v1 && v1.tocBool) {
let boolVal = v1.tocBool();
if (boolVal && (boolVal.value === false || boolVal.value === true)){
return boolVal.value;
}
}
return this._cellIsText(operator, cell, v1);
} else {
return this._cellIsNumber(operator, cell, v1, v2);
}
};
CConditionalFormattingRule.prototype._cellIsText = function (operator, cell, v1) {
if (!v1 || AscCommonExcel.cElementType.empty === v1.type) {
v1 = new AscCommonExcel.cString("");
}
if (AscCommonExcel.ECfOperator.Operator_notContains === operator) {
return !this._cellIsText(AscCommonExcel.ECfOperator.Operator_containsText, cell, v1);
}
var cellType = cell ? cell.type : null;
if (cellType === CellValueType.Error || AscCommonExcel.cElementType.error === v1.type) {
return false;
}
var res = false;
var cellVal = cell ? cell.getValueWithoutFormat().toLowerCase() : "";
var v1Val = v1.toLocaleString().toLowerCase();
switch (operator) {
case AscCommonExcel.ECfOperator.Operator_beginsWith:
case AscCommonExcel.ECfOperator.Operator_endsWith:
if (AscCommonExcel.cElementType.string === v1.type && (cellType === CellValueType.String || "" === v1Val)) {
if (AscCommonExcel.ECfOperator.Operator_beginsWith === operator) {
res = cellVal.startsWith(v1Val);
} else {
res = cellVal.endsWith(v1Val);
}
} else {
res = false;
}
break;
case AscCommonExcel.ECfOperator.Operator_containsText:
if ("" === cellVal) {
res = false;
} else {
res = -1 !== cellVal.indexOf(v1Val);
}
break;
}
return res;
};
CConditionalFormattingRule.prototype._cellIsNumber = function (operator, cell, v1, v2) {
if (!v1 || AscCommonExcel.cElementType.empty === v1.type) {
v1 = new AscCommonExcel.cNumber(0);
}
if ((cell && cell.type === CellValueType.Error) || AscCommonExcel.cElementType.error === v1.type) {
return false;
}
var cellVal;
var res = false;
switch (operator) {
case AscCommonExcel.ECfOperator.Operator_equal:
if (AscCommonExcel.cElementType.number === v1.type) {
if (!cell || cell.isNullTextString()) {
res = 0 === v1.getValue();
} else if (cell.type === CellValueType.Number) {
res = cell.getNumberValue() === v1.getValue();
} else {
res = false;
}
} else if (AscCommonExcel.cElementType.string === v1.type) {
if (!cell || cell.isNullTextString()) {
res = "" === v1.getValue().toLowerCase();
} else if (cell.type === CellValueType.String) {
cellVal = cell.getValueWithoutFormat().toLowerCase();
res = cellVal === v1.getValue().toLowerCase();
} else {
res = false;
}
} else if (AscCommonExcel.cElementType.bool === v1.type) {
if (cell && cell.type === CellValueType.Bool) {
res = cell.getBoolValue() === v1.toBool();
} else {
res = false;
}
}
break;
case AscCommonExcel.ECfOperator.Operator_notEqual:
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_equal, cell, v1);
break;
case AscCommonExcel.ECfOperator.Operator_greaterThan:
if (AscCommonExcel.cElementType.number === v1.type) {
if (!cell || cell.isNullTextString()) {
res = 0 > v1.getValue();
} else if (cell.type === CellValueType.Number) {
res = cell.getNumberValue() > v1.getValue();
} else {
res = true;
}
} else if (AscCommonExcel.cElementType.string === v1.type) {
if (!cell || cell.isNullTextString()) {
res = "" > v1.getValue().toLowerCase();
} else if (cell.type === CellValueType.Number) {
res = false;
} else if (cell.type === CellValueType.String) {
cellVal = cell.getValueWithoutFormat().toLowerCase();
//todo Excel uses different string compare function
res = cellVal > v1.getValue().toLowerCase();
} else if (cell.type === CellValueType.Bool) {
res = true;
}
} else if (AscCommonExcel.cElementType.bool === v1.type) {
if (cell && cell.type === CellValueType.Bool) {
res = cell.getBoolValue() > v1.toBool();
} else {
res = false;
}
}
break;
case AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual:
res = this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThan, cell, v1) ||
this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_equal, cell, v1);
break;
case AscCommonExcel.ECfOperator.Operator_lessThan:
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual, cell, v1);
break;
case AscCommonExcel.ECfOperator.Operator_lessThanOrEqual:
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThan, cell, v1);
break;
case AscCommonExcel.ECfOperator.Operator_between:
res = this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual, cell, v1) &&
this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_lessThanOrEqual, cell, v2);
break;
case AscCommonExcel.ECfOperator.Operator_notBetween:
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_between, cell, v1, v2);
break;
}
return res;
};
CConditionalFormattingRule.prototype.getAverage = function (val, average, stdDev) {
var res = false;
if (this.stdDev && stdDev) {
average += ((this.aboveAverage ? 1 : -1) * this.stdDev) * stdDev;
}
if (this.aboveAverage) {
res = val > average;
} else {
res = val < average;
}
res = res || (this.equalAverage && val == average);
return res;
};
CConditionalFormattingRule.prototype.hasStdDev = function () {
return null !== this.stdDev;
};
CConditionalFormattingRule.prototype.updateConditionalFormatting = function (cf) {
var i;
this.pivot = cf.pivot;
if (cf.ranges) {
this.ranges = [];
for (i = 0; i < cf.ranges.length; ++i) {
this.ranges.push(cf.ranges[i].clone());
}
}
};
CConditionalFormattingRule.prototype.getBBox = function () {
var bbox = null;
if (this.ranges && this.ranges.length > 0) {
bbox = this.ranges[0].clone();
for (var i = 1; i < this.ranges.length; ++i) {
bbox.union2(this.ranges[i]);
}
}
return bbox;
};
CConditionalFormattingRule.prototype.containsIntoRange = function (range) {
var res = null;
if (this.ranges && this.ranges.length > 0) {
res = true;
for (var i = 0; i < this.ranges.length; ++i) {
if (!range.containsRange(this.ranges[i])) {
res = false;
break;
}
}
}
return res;
};
CConditionalFormattingRule.prototype.containsIntoRange = function (range) {
var res = null;
if (this.ranges && this.ranges.length > 0) {
res = true;
for (var i = 0; i < this.ranges.length; ++i) {
if (!range.containsRange(this.ranges[i])) {
res = false;
break;
}
}
}
return res;
};
CConditionalFormattingRule.prototype.getIntersections = function (range) {
var res = [];
if (this.ranges) {
for (var i = 0; i < this.ranges.length; ++i) {
var intersection = this.ranges[i].intersection(range);
if (intersection) {
res.push(intersection);
}
}
}
return res.length ? res : null;
};
CConditionalFormattingRule.prototype.getIndexRule = function (values, ws, value) {
var valueCFVO;
var aCFVOs = this._getCFVOs();
var bReverse = this.aRuleElements && this.aRuleElements[0] && this.aRuleElements[0].Reverse;
for (var i = aCFVOs.length - 1; i >= 0; --i) {
valueCFVO = this._getValue(values, aCFVOs[i], ws);
if (value > valueCFVO || (aCFVOs[i].Gte && value === valueCFVO)) {
return bReverse ? aCFVOs.length - 1 - i : i;
}
}
return 0;
};
CConditionalFormattingRule.prototype.getMin = function (values, ws) {
var aCFVOs = this._getCFVOs();
var oCFVO = (aCFVOs && 0 < aCFVOs.length) ? aCFVOs[0] : null;
return this._getValue(values, oCFVO, ws);
};
CConditionalFormattingRule.prototype.getMid = function (values, ws) {
var aCFVOs = this._getCFVOs();
var oCFVO = (aCFVOs && 2 < aCFVOs.length) ? aCFVOs[1] : null;
return this._getValue(values, oCFVO, ws);
};
CConditionalFormattingRule.prototype.getMax = function (values, ws) {
var aCFVOs = this._getCFVOs();
var oCFVO = (aCFVOs && 2 === aCFVOs.length) ? aCFVOs[1] : ((aCFVOs && 2 < aCFVOs.length) ? aCFVOs[2] : null);
return this._getValue(values, oCFVO, ws);
};
CConditionalFormattingRule.prototype._getCFVOs = function () {
var oRuleElement = this.aRuleElements[0];
return oRuleElement && oRuleElement.aCFVOs;
};
CConditionalFormattingRule.prototype._getValue = function (values, oCFVO, ws) {
var res, min;
if (oCFVO) {
if (oCFVO.Val) {
res = 0;
if (null === oCFVO.formula) {
oCFVO.formulaParent = new CConditionalFormattingFormulaParent(ws, this, false);
oCFVO.formula = new CFormulaCF();
oCFVO.formula.Text = oCFVO.Val;
}
var calcRes = oCFVO.formula.getValue(ws, oCFVO.formulaParent, null, null, true);
if (calcRes && calcRes.tocNumber) {
calcRes = calcRes.tocNumber();
if (calcRes && calcRes.toNumber) {
res = calcRes.toNumber();
}
}
}
switch (oCFVO.Type) {
case AscCommonExcel.ECfvoType.Minimum:
res = AscCommonExcel.getArrayMin(values);
break;
case AscCommonExcel.ECfvoType.Maximum:
res = AscCommonExcel.getArrayMax(values);
break;
case AscCommonExcel.ECfvoType.Number:
break;
case AscCommonExcel.ECfvoType.Percent:
min = AscCommonExcel.getArrayMin(values);
res = min + (AscCommonExcel.getArrayMax(values) - min) * res / 100;
break;
case AscCommonExcel.ECfvoType.Percentile:
res = AscCommonExcel.getPercentile(values, res / 100.0);
if (AscCommonExcel.cElementType.number === res.type) {
res = res.getValue();
} else {
res = AscCommonExcel.getArrayMin(values);
}
break;
case AscCommonExcel.ECfvoType.Formula:
break;
case AscCommonExcel.ECfvoType.AutoMin:
res = Math.min(0, AscCommonExcel.getArrayMin(values));
break;
case AscCommonExcel.ECfvoType.AutoMax:
res = Math.max(0, AscCommonExcel.getArrayMax(values));
break;
default:
res = -Number.MAX_VALUE;
break;
}
}
return res;
};
CConditionalFormattingRule.prototype.applyPreset = function (presetId) {
var presetType = presetId[0];
var styleIndex = presetId[1];
var elem;
switch (presetType) {
case Asc.c_oAscCFRuleTypeSettings.dataBar:
elem = new CDataBar();
elem.applyPreset(styleIndex);
this.type = Asc.ECfType.dataBar;
break;
case Asc.c_oAscCFRuleTypeSettings.colorScale:
elem = new CColorScale();
elem.applyPreset(styleIndex);
this.type = Asc.ECfType.colorScale;
break;
case Asc.c_oAscCFRuleTypeSettings.icons:
elem = new CIconSet();
elem.applyPreset(styleIndex);
this.type = Asc.ECfType.iconSet;
break;
}
if (elem) {
this.aRuleElements.push(elem);
}
};
CConditionalFormattingRule.prototype.asc_getType = function () {
return this.type;
};
CConditionalFormattingRule.prototype.asc_getDxf = function () {
return this.dxf;
};
CConditionalFormattingRule.prototype.asc_getLocation = function () {
var arrResult = [];
var t = this;
if (this.ranges) {
var wb = Asc['editor'].wbModel;
var isActive = true, sheet;
for (var i = 0; i < wb.aWorksheets.length; i++) {
if (i !== wb.nActive) {
if (wb.aWorksheets[i].getCFRuleById(t.id)) {
isActive = false;
}
if (!isActive) {
sheet = wb.aWorksheets[i];
return true;
}
}
}
this.ranges.forEach(function (item) {
arrResult.push((sheet ? sheet.sName + "!" : "") + item.getAbsName());
});
}
return [isActive, "=" + arrResult.join(AscCommon.FormulaSeparators.functionArgumentSeparator)];
};
CConditionalFormattingRule.prototype.asc_getContainsText = function () {
if (null !== this.text) {
return this.text;
}
var ruleElement = this.aRuleElements[1];
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.Text : null;
};
CConditionalFormattingRule.prototype.asc_getTimePeriod = function () {
return this.timePeriod;
};
CConditionalFormattingRule.prototype.asc_getOperator = function () {
return this.operator;
};
CConditionalFormattingRule.prototype.asc_getPriority = function () {
return this.priority;
};
CConditionalFormattingRule.prototype.asc_getRank = function () {
return this.rank;
};
CConditionalFormattingRule.prototype.asc_getBottom = function () {
return this.bottom;
};
CConditionalFormattingRule.prototype.asc_getPercent = function () {
return this.percent;
};
CConditionalFormattingRule.prototype.asc_getAboveAverage = function () {
return this.aboveAverage;
};
CConditionalFormattingRule.prototype.asc_getEqualAverage = function () {
return this.equalAverage;
};
CConditionalFormattingRule.prototype.asc_getStdDev = function () {
return this.stdDev;
};
CConditionalFormattingRule.prototype.asc_getStopIfTrue = function () {
return this.stopIfTrue;
};
CConditionalFormattingRule.prototype.asc_getText = function () {
return this.text;
};
CConditionalFormattingRule.prototype.asc_getValue1 = function () {
var ruleElement = this.aRuleElements[0];
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.getFormulaStr(true) : null;
};
CConditionalFormattingRule.prototype.asc_getValue2 = function () {
var ruleElement = this.aRuleElements[1];
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.getFormulaStr(true) : null;
};
CConditionalFormattingRule.prototype.asc_getColorScaleOrDataBarOrIconSetRule = function () {
if ((Asc.ECfType.dataBar === this.type || Asc.ECfType.iconSet === this.type ||
Asc.ECfType.colorScale === this.type) && 1 === this.aRuleElements.length) {
var res = this.aRuleElements[0];
if (res && this.type === res.type) {
return res;
}
}
return null;
};
CConditionalFormattingRule.prototype.asc_getId = function () {
return this.id;
};
CConditionalFormattingRule.prototype.asc_getIsLock = function () {
return this.isLock;
};
CConditionalFormattingRule.prototype.asc_getPreview = function (id, text) {
var api_sheet = Asc['editor'];
var res;
if (Asc.ECfType.colorScale === this.type && 1 === this.aRuleElements.length) {
res = this.aRuleElements[0].asc_getPreview(api_sheet, id, text);
} else if (Asc.ECfType.dataBar === this.type && 1 === this.aRuleElements.length) {
res = this.aRuleElements[0].asc_getPreview(api_sheet, id);
} else if (Asc.ECfType.iconSet === this.type && 1 === this.aRuleElements.length) {
res = this.aRuleElements[0].asc_getPreview(api_sheet, id);
} else {
if (this.dxf) {
res = this.dxf.asc_getPreview2(api_sheet, id, text);
} else {
var tempXfs = new AscCommonExcel.CellXfs();
res = tempXfs.asc_getPreview2(api_sheet, id, text);
}
}
return res;
};
CConditionalFormattingRule.prototype.asc_setType = function (val) {
this.type = val;
this._cleanAfterChangeType();
var formula = this.getFormulaByType(this.text);
if (formula) {
this.aRuleElements = [];
this.aRuleElements[0] = new CFormulaCF();
this.aRuleElements[0].Text = formula;
}
};
CConditionalFormattingRule.prototype._cleanAfterChangeType = function () {
switch (this.type) {
case Asc.ECfType.notContainsErrors:
case Asc.ECfType.containsErrors:
case Asc.ECfType.notContainsBlanks:
case Asc.ECfType.containsBlanks:
case Asc.ECfType.timePeriod:
this.aRuleElements = [];
this.percent = null;
this.text = null;
this.rank = null;
break;
case Asc.ECfType.colorScale:
this.dxf = null;
break;
}
if (this.type !== Asc.ECfType.top10) {
this.rank = null;
}
};
CConditionalFormattingRule.prototype.asc_setDxf = function (val) {
this.dxf = val;
};
CConditionalFormattingRule.prototype.asc_setLocation = function (val) {
let t = this;
if (val) {
if (val[0] === "=") {
val = val.slice(1);
}
this.ranges = [];
let wb = Asc.editor && Asc.editor.wbModel;
let _ranges;
if (wb) {
let ws = wb.getActiveWs();
_ranges = AscCommonExcel.getRangeByRef(val, ws, true);
}
if (_ranges) {
for (let i = 0; i < _ranges.length; i++) {
if (_ranges[i].bbox) {
t.ranges.push(_ranges[i].bbox);
}
}
}
}
};
CConditionalFormattingRule.prototype.asc_setContainsText = function (val) {
if (val[0] === "=") {
val = val.slice(1);
//генерируем массив
this.aRuleElements = [];
this.aRuleElements[0] = new CFormulaCF();
this.aRuleElements[0].Text = this.getFormulaByType(val, true);
this.aRuleElements[1] = new CFormulaCF();
this.aRuleElements[1].Text = val;
this.text = null;
} else {
this.aRuleElements = [];
this.aRuleElements[0] = new CFormulaCF();
this.aRuleElements[0].Text = this.getFormulaByType(val);
this.text = val;
}
};
CConditionalFormattingRule.prototype.getFormulaByType = function (val, isFormulaVal) {
var t = this;
var _generateTimePeriodFunction = function () {
switch (t.timePeriod) {
case AscCommonExcel.ST_TimePeriod.yesterday:
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()-1";
break;
case AscCommonExcel.ST_TimePeriod.today:
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()";
break;
case AscCommonExcel.ST_TimePeriod.tomorrow:
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()+1";
break;
case AscCommonExcel.ST_TimePeriod.last7Days:
res = "AND(TODAY()-FLOOR(" + firstCellInRange + ",1)<=6,FLOOR(" + firstCellInRange + ",1)<=TODAY())";
break;
case AscCommonExcel.ST_TimePeriod.lastWeek:
res = "AND(TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)<(WEEKDAY(TODAY())+7))";
break;
case AscCommonExcel.ST_TimePeriod.thisWeek:
res = "AND(TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()<=7-WEEKDAY(TODAY()))";
break;
case AscCommonExcel.ST_TimePeriod.nextWeek:
res = "AND(ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()<(15-WEEKDAY(TODAY())))";
break;
case AscCommonExcel.ST_TimePeriod.lastMonth:
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(EDATE(TODAY(),0-1)),YEAR(" + firstCellInRange + ")=YEAR(EDATE(TODAY(),0-1)))";
break;
case AscCommonExcel.ST_TimePeriod.thisMonth:
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(TODAY()),YEAR(" + firstCellInRange + ")=YEAR(TODAY()))";
break;
case AscCommonExcel.ST_TimePeriod.nextMonth:
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(EDATE(TODAY(),0+1)),YEAR(" + firstCellInRange + ")=YEAR(EDATE(TODAY(),0+1)))";
break;
}
};
var res = null;
var range;
if (val !== null && val !== undefined && !isFormulaVal) {
val = addQuotes(val);
}
if (this.ranges && this.ranges[0]) {
range = this.ranges[0];
} else {
var api_sheet = Asc['editor'];
var wb = api_sheet.wbModel;
var sheet = wb.getActiveWs();
range = sheet && sheet.selectionRange && sheet.selectionRange.ranges && sheet.selectionRange.ranges[0];
}
if (range) {
var firstCellInRange = new Asc.Range(range.c1, range.r1, range.c1, range.r1);
AscCommonExcel.executeInR1C1Mode(false, function () {
firstCellInRange = firstCellInRange.getName();
});
switch (this.type) {
case Asc.ECfType.notContainsText:
if (val !== null && val !== undefined) {
res = "ISERROR(SEARCH(" + val + "," + firstCellInRange + "))";
}
break;
case Asc.ECfType.containsText:
if (val !== null && val !== undefined) {
res = "NOT(ISERROR(SEARCH(" + val + "," + firstCellInRange + ")))";
}
break;
case Asc.ECfType.endsWith:
if (val !== null && val !== undefined) {
res = "RIGHT(" + firstCellInRange + ",LEN(" + val + "))" + "=" + val;
}
break;
case Asc.ECfType.beginsWith:
if (val !== null && val !== undefined) {
res = "LEFT(" + firstCellInRange + ",LEN(" + val + "))" + "=" + val;
}
break;
case Asc.ECfType.notContainsErrors:
res = "NOT(ISERROR(" + firstCellInRange + "))";
break;
case Asc.ECfType.containsErrors:
res = "ISERROR(" + firstCellInRange + ")";
break;
case Asc.ECfType.notContainsBlanks:
res = "LEN(TRIM(" + firstCellInRange + "))>0";
break;
case Asc.ECfType.containsBlanks:
res = "LEN(TRIM(" + firstCellInRange + "))=0";
break;
case Asc.ECfType.timePeriod:
res = _generateTimePeriodFunction();
break;
}
}
return res;
};
CConditionalFormattingRule.prototype.asc_setTimePeriod = function (val) {
this.timePeriod = val;
var formula = this.getFormulaByType();
if (formula) {
this.aRuleElements = [];
this.aRuleElements[0] = new CFormulaCF();
this.aRuleElements[0].Text = formula;
}
};
CConditionalFormattingRule.prototype.asc_setOperator = function (val) {
this.operator = val;
};
CConditionalFormattingRule.prototype.asc_setPriority = function (val) {
this.priority = val;
};
CConditionalFormattingRule.prototype.asc_setRank = function (val) {
this.rank = val;
};
CConditionalFormattingRule.prototype.asc_setBottom = function (val) {
this.bottom = val;
};
CConditionalFormattingRule.prototype.asc_setPercent = function (val) {
this.percent = val;
};
CConditionalFormattingRule.prototype.asc_setAboveAverage = function (val) {
this.aboveAverage = val;
};
CConditionalFormattingRule.prototype.asc_setEqualAverage = function (val) {
this.equalAverage = val;
};
CConditionalFormattingRule.prototype.asc_setStdDev = function (val) {
this.stdDev = val;
};
CConditionalFormattingRule.prototype.asc_setStopIfTrue = function (val) {
this.stopIfTrue = val;
};
CConditionalFormattingRule.prototype.asc_setText = function (val) {
this.text = val;
};
CConditionalFormattingRule.prototype.asc_setValue1 = function (val) {
//чищу всегда, поскольку от интерфейса всегда заново выставляются оба значения
this.aRuleElements = [];
val = correctFromInterface(val);
this.aRuleElements[0] = new CFormulaCF();
this.aRuleElements[0].Text = val;
};
CConditionalFormattingRule.prototype.asc_setValue2 = function (val) {
if (!this.aRuleElements) {
this.aRuleElements = [];
}
val = correctFromInterface(val);
this.aRuleElements[1] = new CFormulaCF();
this.aRuleElements[1].Text = val;
};
CConditionalFormattingRule.prototype.asc_setColorScaleOrDataBarOrIconSetRule = function (val) {
this.aRuleElements = [];
this.aRuleElements.push(val);
};
CConditionalFormattingRule.prototype.asc_checkScope = function (type, tableId) {
var sheet, range;
var api_sheet = Asc['editor'];
var wb = api_sheet.wbModel;
switch (type) {
case Asc.c_oAscSelectionForCFType.selection:
sheet = wb.getActiveWs();
// ToDo multiselect
range = sheet.selectionRange.getLast();
break;
case Asc.c_oAscSelectionForCFType.worksheet:
break;
case Asc.c_oAscSelectionForCFType.table:
var oTable;
if (tableId) {
oTable = wb.getTableByName(tableId, true);
if (oTable) {
sheet = wb.aWorksheets[oTable.index];
range = oTable.table.Ref;
}
} else {
//this table
sheet = wb.getActiveWs();
var thisTableIndex = sheet.autoFilters.searchRangeInTableParts(sheet.selectionRange.getLast());
if (thisTableIndex >= 0) {
range = sheet.TableParts[thisTableIndex].Ref;
} else {
sheet = null;
}
}
break;
case Asc.c_oAscSelectionForCFType.pivot:
sheet = wb.getActiveWs();
var _activeCell = sheet.selectionRange.activeCell;
var _pivot = sheet.getPivotTable(_activeCell.col, _activeCell.row);
if (_pivot) {
range = _pivot.location && _pivot.location.ref;
}
if (!range) {
sheet = null;
}
break;
}
if (range) {
var multiplyRange = new AscCommonExcel.MultiplyRange(this.ranges);
if (multiplyRange.isIntersect(range)) {
return true;
}
}
return false;
};
CConditionalFormattingRule.sStartLockCFId = 'cfrule_';
function CColorScale() {
this.aCFVOs = [];
this.aColors = [];
return this;
}
CColorScale.prototype.type = Asc.ECfType.colorScale;
CColorScale.prototype.clone = function () {
var i, res = new CColorScale();
for (i = 0; i < this.aCFVOs.length; ++i) {
res.aCFVOs.push(this.aCFVOs[i].clone());
}
for (i = 0; i < this.aColors.length; ++i) {
res.aColors.push(this.aColors[i].clone());
}
return res;
};
CColorScale.prototype.merge = function (obj) {
if (this.aCFVOs.length === 0) {
this.aCFVOs = obj.aCFVOs;
} else if (this.aCFVOs.length === obj.aCFVOs.length) {
for (var i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].merge(obj.aCFVOs[i]);
}
}
if (this.aColors && this.aColors.length === 0) {
this.aColors = obj.aColors;
} else if (this.aColors && obj.aColors && this.aColors.length === obj.aColors.length) {
for (var i = 0; i < this.aColors.length; i++) {
//TODO
//this.aCFVOs[i].merge(obj.aCFVOs[i]);
}
}
};
CColorScale.prototype.applyPreset = function (styleIndex) {
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.colorScale][styleIndex];
for (var i = 0; i < presetStyles.length; i++) {
var formatValueObject = new CConditionalFormatValueObject();
formatValueObject.Type = presetStyles[i][0] ? presetStyles[i][0] : null;
formatValueObject.Val = presetStyles[i][1] ? presetStyles[i][1] + "" : null;
var colorObject = new AscCommonExcel.RgbColor(presetStyles[i][2] ? presetStyles[i][2] : 0);
this.aCFVOs.push(formatValueObject);
this.aColors.push(colorObject);
}
};
CColorScale.prototype.Write_ToBinary2 = function (writer) {
//CConditionalFormatValueObject
var i;
if (null != this.aCFVOs) {
writer.WriteBool(true);
writer.WriteLong(this.aCFVOs.length);
for (i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
//rgbcolor,...
if (null != this.aColors) {
writer.WriteBool(true);
writer.WriteLong(this.aColors.length);
for (i = 0; i < this.aColors.length; i++) {
writer.WriteLong(this.aColors[i].getType());
this.aColors[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
};
CColorScale.prototype.Read_FromBinary2 = function (reader) {
var i, length, elem;
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aCFVOs) {
this.aCFVOs = [];
}
elem = new CConditionalFormatValueObject();
elem.Read_FromBinary2(reader);
this.aCFVOs.push(elem);
}
}
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aColors) {
this.aColors = [];
}
//TODO colors!!!
var type = reader.GetLong();
switch (type) {
case AscCommonExcel.UndoRedoDataTypes.RgbColor:
elem = new AscCommonExcel.RgbColor();
break;
case AscCommonExcel.UndoRedoDataTypes.ThemeColor:
elem = new AscCommonExcel.ThemeColor();
break;
}
if (null != elem.Read_FromBinary2) {
elem.Read_FromBinary2(reader);
} else if (null != elem.Read_FromBinary2AndReplace) {
elem = elem.Read_FromBinary2AndReplace(reader);
}
this.aColors.push(elem);
}
}
};
CColorScale.prototype.asc_getCFVOs = function () {
return this.aCFVOs;
};
CColorScale.prototype.asc_getColors = function () {
var res = [];
for (var i = 0; i < this.aColors.length; ++i) {
res.push(Asc.colorObjToAscColor(this.aColors[i]));
}
return res;
};
CColorScale.prototype.asc_getPreview = function (api, id) {
return AscCommonExcel.drawGradientPreview(id, api.wb, this.aColors);
};
CColorScale.prototype.asc_setCFVOs = function (val) {
this.aCFVOs = val;
};
CColorScale.prototype.asc_setColors = function (val) {
var newArr = [];
for (var i = 0; i < val.length; ++i) {
if (this.aColors[i] && this.aColors[i].getR() === val[i].asc_getR() && this.aColors[i].getG() === val[i].asc_getG() && this.aColors[i].getB() === val[i].asc_getB()) {
newArr.push(this.aColors[i]);
} else {
newArr.push(AscCommonExcel.CorrectAscColor(val[i]));
}
}
this.aColors = newArr;
};
CColorScale.prototype.isEqual = function (elem) {
if ((elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) || (!elem.aCFVOs && !this.aCFVOs)) {
var i;
if (elem.aCFVOs) {
for (i = 0; i < elem.aCFVOs.length; i++) {
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
return false;
}
}
}
if ((elem.aColors && elem.aColors.length === this.aColors.length) || (!elem.aColors && !this.aColors)) {
if (elem.aColors) {
for (i = 0; i < elem.aColors.length; i++) {
if (!elem.aColors[i].isEqual(this.aColors[i])) {
return false;
}
}
}
return true;
}
}
return false;
};
CColorScale.prototype.getType = function () {
return window['AscCommonExcel'].UndoRedoDataTypes.ColorScale;
};
function CDataBar() {
this.MaxLength = 90;
this.MinLength = 10;
this.ShowValue = true;
this.AxisPosition = AscCommonExcel.EDataBarAxisPosition.automatic;
this.Gradient = true;
this.Direction = AscCommonExcel.EDataBarDirection.context;
this.NegativeBarColorSameAsPositive = false;
this.NegativeBarBorderColorSameAsPositive = true;
this.aCFVOs = [];
this.Color = null;
this.NegativeColor = null;
this.BorderColor = null;
this.NegativeBorderColor = null;
this.AxisColor = null;
return this;
}
CDataBar.prototype.type = Asc.ECfType.dataBar;
CDataBar.prototype.clone = function () {
var i, res = new CDataBar();
res.MaxLength = this.MaxLength;
res.MinLength = this.MinLength;
res.ShowValue = this.ShowValue;
res.AxisPosition = this.AxisPosition;
res.Gradient = this.Gradient;
res.Direction = this.Direction;
res.NegativeBarColorSameAsPositive = this.NegativeBarColorSameAsPositive;
res.NegativeBarBorderColorSameAsPositive = this.NegativeBarBorderColorSameAsPositive;
for (i = 0; i < this.aCFVOs.length; ++i) {
res.aCFVOs.push(this.aCFVOs[i].clone());
}
if (this.Color) {
res.Color = this.Color.clone();
}
if (this.NegativeColor) {
res.NegativeColor = this.NegativeColor.clone();
}
if (this.BorderColor) {
res.BorderColor = this.BorderColor.clone();
}
if (this.NegativeBorderColor) {
res.NegativeBorderColor = this.NegativeBorderColor.clone();
}
if (this.AxisColor) {
res.AxisColor = this.AxisColor.clone();
}
return res;
};
CDataBar.prototype.merge = function (obj) {
//сравниваю по дефолтовым величинам
if (this.MaxLength === 90) {
this.MaxLength = obj.MaxLength;
}
if (this.MinLength === 10) {
this.MinLength = obj.MinLength;
}
if (this.ShowValue === true) {
this.ShowValue = obj.ShowValue;
}
if (this.AxisPosition === AscCommonExcel.EDataBarAxisPosition.automatic) {
this.AxisPosition = obj.AxisPosition;
}
if (this.Gradient === true) {
this.Gradient = obj.Gradient;
}
if (this.Direction === AscCommonExcel.EDataBarDirection.context) {
this.Direction = obj.Direction;
}
if (this.NegativeBarColorSameAsPositive === false) {
this.NegativeBarColorSameAsPositive = obj.NegativeBarColorSameAsPositive;
}
if (this.NegativeBarBorderColorSameAsPositive === true) {
this.NegativeBarBorderColorSameAsPositive = obj.NegativeBarBorderColorSameAsPositive;
}
if (this.aCFVOs.length === 0) {
this.aCFVOs = obj.aCFVOs;
} else if (this.aCFVOs.length === obj.aCFVOs.length) {
for (var i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].merge(obj.aCFVOs[i]);
}
}
if (this.Color === null) {
this.Color = obj.Color;
}
if (this.NegativeColor === null) {
this.NegativeColor = obj.NegativeColor;
}
if (this.BorderColor === null) {
this.BorderColor = obj.BorderColor;
}
if (this.NegativeBorderColor === null) {
this.NegativeBorderColor = obj.NegativeBorderColor;
}
if (this.AxisColor === null) {
this.AxisColor = obj.AxisColor;
}
};
CDataBar.prototype.isEqual = function (elem) {
var _compareColors = function (_color1, _color2) {
if (!_color1 && !_color2) {
return true;
}
if (_color1 && _color2 && _color1.isEqual(_color2)) {
return true;
}
return false;
};
if (this.MaxLength === elem.MaxLength && this.MinLength === elem.MinLength &&
this.ShowValue === elem.ShowValue && this.AxisPosition === elem.AxisPosition &&
this.Gradient === elem.Gradient && this.Direction === elem.Direction &&
this.NegativeBarColorSameAsPositive === elem.NegativeBarColorSameAsPositive &&
this.NegativeBarBorderColorSameAsPositive === elem.NegativeBarBorderColorSameAsPositive) {
if (elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) {
var i;
for (i = 0; i < elem.aCFVOs.length; i++) {
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
return false;
}
}
if (_compareColors(this.Color, elem.Color) && _compareColors(this.NegativeColor, elem.NegativeColor) &&
_compareColors(this.BorderColor, elem.BorderColor) &&
_compareColors(this.NegativeBorderColor, elem.NegativeBorderColor) &&
_compareColors(this.AxisColor, elem.AxisColor)) {
return true;
}
}
}
return false;
};
CDataBar.prototype.applyPreset = function (styleIndex) {
var _generateRgbColor = function (_color) {
if (_color === undefined || _color === null) {
return null;
}
return new AscCommonExcel.RgbColor(_color);
};
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.dataBar][styleIndex];
this.AxisColor = _generateRgbColor(presetStyles[0]);
this.AxisPosition = 0;
this.BorderColor = _generateRgbColor(presetStyles[1]);
this.Color = _generateRgbColor(presetStyles[2]);
this.Direction = 0;
this.Gradient = presetStyles[3];
this.MaxLength = 100;
this.MinLength = 0;
this.NegativeBarBorderColorSameAsPositive = false;
this.NegativeBarColorSameAsPositive = false;
this.NegativeBorderColor = _generateRgbColor(presetStyles[4]);
this.NegativeColor = _generateRgbColor(presetStyles[5]);
this.ShowValue = true;
var formatValueObject1 = new CConditionalFormatValueObject();
formatValueObject1.Type = AscCommonExcel.ECfvoType.AutoMin;
this.aCFVOs.push(formatValueObject1);
var formatValueObject2 = new CConditionalFormatValueObject();
formatValueObject2.Type = AscCommonExcel.ECfvoType.AutoMax;
this.aCFVOs.push(formatValueObject2);
};
CDataBar.prototype.Write_ToBinary2 = function (writer) {
if (null != this.MaxLength) {
writer.WriteBool(true);
writer.WriteLong(this.MaxLength);
} else {
writer.WriteBool(false);
}
if (null != this.MinLength) {
writer.WriteBool(true);
writer.WriteLong(this.MinLength);
} else {
writer.WriteBool(false);
}
if (null != this.ShowValue) {
writer.WriteBool(true);
writer.WriteBool(this.ShowValue);
} else {
writer.WriteBool(false);
}
if (null != this.AxisPosition) {
writer.WriteBool(true);
writer.WriteLong(this.AxisPosition);
} else {
writer.WriteBool(false);
}
if (null != this.Gradient) {
writer.WriteBool(true);
writer.WriteBool(this.Gradient);
} else {
writer.WriteBool(false);
}
if (null != this.Direction) {
writer.WriteBool(true);
writer.WriteLong(this.Direction);
} else {
writer.WriteBool(false);
}
if (null != this.NegativeBarColorSameAsPositive) {
writer.WriteBool(true);
writer.WriteBool(this.NegativeBarColorSameAsPositive);
} else {
writer.WriteBool(false);
}
if (null != this.NegativeBarBorderColorSameAsPositive) {
writer.WriteBool(true);
writer.WriteBool(this.NegativeBarBorderColorSameAsPositive);
} else {
writer.WriteBool(false);
}
//CConditionalFormatValueObject
if (null != this.aCFVOs) {
writer.WriteBool(true);
writer.WriteLong(this.aCFVOs.length);
for (var i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
if (null != this.Color) {
writer.WriteBool(true);
writer.WriteLong(this.Color.getType());
this.Color.Write_ToBinary2(writer);
} else {
writer.WriteBool(false);
}
if (null != this.NegativeColor) {
writer.WriteBool(true);
writer.WriteLong(this.NegativeColor.getType());
this.NegativeColor.Write_ToBinary2(writer);
} else {
writer.WriteBool(false);
}
if (null != this.BorderColor) {
writer.WriteBool(true);
writer.WriteLong(this.BorderColor.getType());
this.BorderColor.Write_ToBinary2(writer);
} else {
writer.WriteBool(false);
}
if (null != this.NegativeBorderColor) {
writer.WriteBool(true);
writer.WriteLong(this.NegativeBorderColor.getType());
this.NegativeBorderColor.Write_ToBinary2(writer);
} else {
writer.WriteBool(false);
}
if (null != this.AxisColor) {
writer.WriteBool(true);
writer.WriteLong(this.AxisColor.getType());
this.AxisColor.Write_ToBinary2(writer);
} else {
writer.WriteBool(false);
}
};
CDataBar.prototype.Read_FromBinary2 = function (reader) {
if (reader.GetBool()) {
this.MaxLength = reader.GetLong();
}
if (reader.GetBool()) {
this.MinLength = reader.GetLong();
}
if (reader.GetBool()) {
this.ShowValue = reader.GetBool();
}
if (reader.GetBool()) {
this.AxisPosition = reader.GetLong();
}
if (reader.GetBool()) {
this.Gradient = reader.GetBool();
}
if (reader.GetBool()) {
this.Direction = reader.GetLong();
}
if (reader.GetBool()) {
this.NegativeBarColorSameAsPositive = reader.GetBool();
}
if (reader.GetBool()) {
this.NegativeBarBorderColorSameAsPositive = reader.GetBool();
}
var i, length, type, elem;
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aCFVOs) {
this.aCFVOs = [];
}
elem = new CConditionalFormatValueObject();
elem.Read_FromBinary2(reader);
this.aCFVOs.push(elem);
}
}
var readColor = function () {
var type = reader.GetLong();
var _color;
switch (type) {
case AscCommonExcel.UndoRedoDataTypes.RgbColor:
_color = new AscCommonExcel.RgbColor();
break;
case AscCommonExcel.UndoRedoDataTypes.ThemeColor:
_color = new AscCommonExcel.ThemeColor();
break;
}
if (null != _color.Read_FromBinary2) {
_color.Read_FromBinary2(reader);
} else if (null != _color.Read_FromBinary2AndReplace) {
_color = _color.Read_FromBinary2AndReplace(reader);
}
return _color;
};
if (reader.GetBool()) {
this.Color = readColor();
}
if (reader.GetBool()) {
this.NegativeColor = readColor();
}
if (reader.GetBool()) {
this.BorderColor = readColor();
}
if (reader.GetBool()) {
this.NegativeBorderColor = readColor();
}
if (reader.GetBool()) {
this.AxisColor = readColor();
}
};
CDataBar.prototype.asc_setInterfaceDefault = function () {
//ms всегда создаёт правило с такими настройками, хотя в документации други дефолтовые значения
//дёргаем этот метод при создании нового правила из интерфейса
this.MinLength = 0;
this.MaxLength = 100;
};
CDataBar.prototype.asc_getPreview = function (api, id) {
var color = this.Color;
var aColors = [];
var isReverse = this.Direction === AscCommonExcel.EDataBarDirection.rightToLeft;
if (color) {
if (this.Gradient) {
var endColor = getDataBarGradientColor(color);
if (isReverse) {
aColors = [endColor, color];
} else {
aColors = [color, endColor];
}
} else {
aColors = [color];
}
}
AscCommonExcel.drawGradientPreview(id, api.wb, aColors, new AscCommon.CColor(202, 202, 202)/*this.settings.cells.defaultState.border*/, this.BorderColor, isReverse ? -0.75 : 0.75, 2);
};
CDataBar.prototype.asc_getShowValue = function () {
return this.ShowValue;
};
CDataBar.prototype.asc_getAxisPosition = function () {
//TODO после открытия менять значения для условного формтирования без ext
if (this.AxisPosition === AscCommonExcel.EDataBarAxisPosition.automatic && !this.AxisColor) {
this.AxisPosition = AscCommonExcel.EDataBarAxisPosition.none;
}
return this.AxisPosition;
};
CDataBar.prototype.asc_getGradient = function () {
return this.Gradient;
};
CDataBar.prototype.asc_getDirection = function () {
return this.Direction;
};
CDataBar.prototype.asc_getNegativeBarColorSameAsPositive = function () {
//TODO после открытия менять значения для условного формтирования без ext
//в старом формате эта опция не используется
//буду ориентироваться что если не задан NegativeColor, то эта опция выставляется в true
if (!this.NegativeColor) {
this.NegativeBarColorSameAsPositive = true;
}
return this.NegativeBarColorSameAsPositive;
};
CDataBar.prototype.asc_getNegativeBarBorderColorSameAsPositive = function () {
return this.NegativeBarBorderColorSameAsPositive;
};
CDataBar.prototype.asc_getCFVOs = function () {
return this.aCFVOs;
};
CDataBar.prototype.asc_getColor = function () {
return this.Color ? Asc.colorObjToAscColor(this.Color) : null;
};
CDataBar.prototype.asc_getNegativeColor = function () {
return this.NegativeColor ? Asc.colorObjToAscColor(this.NegativeColor) : null;
};
CDataBar.prototype.asc_getBorderColor = function () {
return this.BorderColor ? Asc.colorObjToAscColor(this.BorderColor) : null;
};
CDataBar.prototype.asc_getNegativeBorderColor = function () {
return this.NegativeBorderColor ? Asc.colorObjToAscColor(this.NegativeBorderColor) : null;
};
CDataBar.prototype.asc_getAxisColor = function () {
return this.AxisColor ? Asc.colorObjToAscColor(this.AxisColor) : null;
};
CDataBar.prototype.asc_setShowValue = function (val) {
this.ShowValue = val;
};
CDataBar.prototype.asc_setAxisPosition = function (val) {
this.AxisPosition = val;
};
CDataBar.prototype.asc_setGradient = function (val) {
this.Gradient = val;
};
CDataBar.prototype.asc_setDirection = function (val) {
this.Direction = val;
};
CDataBar.prototype.asc_setNegativeBarColorSameAsPositive = function (val) {
this.NegativeBarColorSameAsPositive = val;
};
CDataBar.prototype.asc_setNegativeBarBorderColorSameAsPositive = function (val) {
this.NegativeBarBorderColorSameAsPositive = val;
};
CDataBar.prototype.asc_setCFVOs = function (val) {
this.aCFVOs = val;
};
CDataBar.prototype.asc_setColor = function (val) {
this.Color = AscCommonExcel.CorrectAscColor(val);
};
CDataBar.prototype.asc_setNegativeColor = function (val) {
this.NegativeColor = AscCommonExcel.CorrectAscColor(val);
};
CDataBar.prototype.asc_setBorderColor = function (val) {
this.BorderColor = AscCommonExcel.CorrectAscColor(val);
if (val === null) {
this.asc_setNegativeBorderColor(val);
}
};
CDataBar.prototype.asc_setNegativeBorderColor = function (val) {
this.NegativeBorderColor = AscCommonExcel.CorrectAscColor(val);
};
CDataBar.prototype.asc_setAxisColor = function (val) {
this.AxisColor = AscCommonExcel.CorrectAscColor(val);
};
CDataBar.prototype.getType = function () {
return window['AscCommonExcel'].UndoRedoDataTypes.DataBar;
};
function CFormulaCF() {
this.Text = null;
this._f = null;
return this;
}
CFormulaCF.prototype.getType = function () {
return AscCommonExcel.UndoRedoDataTypes.CFormulaCF;
};
CFormulaCF.prototype.clone = function () {
var res = new CFormulaCF();
res.Text = this.Text;
return res;
};
CFormulaCF.prototype.Write_ToBinary2 = function (writer) {
if (null != this.Text) {
writer.WriteBool(true);
writer.WriteString2(this.Text);
} else {
writer.WriteBool(false);
}
};
CFormulaCF.prototype.Read_FromBinary2 = function (reader) {
if (reader.GetBool()) {
this.Text = reader.GetString2();
}
};
CFormulaCF.prototype.isEqual = function (val) {
return val.Text === this.Text;
};
CFormulaCF.prototype.init = function (ws, opt_parent) {
if (!this._f) {
this._f = new AscCommonExcel.parserFormula(this.Text, opt_parent, ws);
this._f.parse();
if (opt_parent) {
//todo realize removeDependencies
this._f.buildDependencies();
}
}
};
CFormulaCF.prototype.recalcFormula = function (ws, toInterface) {
var f = new AscCommonExcel.parserFormula(this.Text, null, ws);
if (f.parse(!toInterface)) {
this.Text = toInterface ? f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true) : f.assemble();
}
};
CFormulaCF.prototype.getFormula = function (ws, opt_parent) {
this.init(ws, opt_parent);
return this._f;
};
CFormulaCF.prototype.getValue = function (ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw) {
this.init(ws, opt_parent);
var res = this._f.calculate(null, opt_bbox, opt_offset);
if (!opt_returnRaw) {
res = this._f.simplifyRefType(res);
}
return res;
};
CFormulaCF.prototype.asc_getText = function () {
return this.Text;
};
CFormulaCF.prototype.asc_setText = function (val) {
this.Text = val;
};
CFormulaCF.prototype.isExtended = function () {
//if ((m_arrFormula[i].IsInit()) && m_arrFormula[i]->isExtended())
//TODO в x2t условие, которое в нашем случае не получится использовать, мы не храним этот флаг
//m_arrFormula[i]->isExtended() -> return (m_sNodeName == L"xm:f");
return true;
};
CFormulaCF.prototype.getFormulaStr = function (needBuild) {
var res = null;
if (this._f) {
res = this._f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
} else if (needBuild) {
var oWB = Asc.editor && Asc.editor.wbModel;
if (oWB) {
var ws = oWB.getActiveWs();
if (ws) {
var _f = new AscCommonExcel.parserFormula(this.Text, null, ws);
_f.parse(true, true);
res = _f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
}
}
}
return res ? res : this.Text;
};
function CIconSet() {
this.IconSet = EIconSetType.Traffic3Lights1;
this.Percent = true;
this.Reverse = false;
this.ShowValue = true;
this.aCFVOs = [];
this.aIconSets = [];
return this;
}
CIconSet.prototype.type = Asc.ECfType.iconSet;
CIconSet.prototype.clone = function () {
var i, res = new CIconSet();
res.IconSet = this.IconSet;
res.Percent = this.Percent;
res.Reverse = this.Reverse;
res.ShowValue = this.ShowValue;
if (this.aCFVOs) {
for (i = 0; i < this.aCFVOs.length; ++i) {
res.aCFVOs.push(this.aCFVOs[i].clone());
}
}
if (this.aIconSets) {
for (i = 0; i < this.aIconSets.length; ++i) {
res.aIconSets.push(this.aIconSets[i].clone());
}
}
return res;
};
CIconSet.prototype.merge = function (obj) {
//сравниваю по дефолтовым величинам
if (this.IconSet === EIconSetType.Traffic3Lights1) {
this.IconSet = obj.IconSet;
}
if (this.Percent === true) {
this.Percent = obj.Percent;
}
if (this.Reverse === false) {
this.Reverse = obj.Reverse;
}
if (this.ShowValue === true) {
this.ShowValue = obj.ShowValue;
}
if (this.aCFVOs && this.aCFVOs.length === 0) {
this.aCFVOs = obj.aCFVOs;
} else if (this.aCFVOs && obj.aCFVOs && this.aCFVOs.length === obj.aCFVOs.length) {
for (var i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].merge(obj.aCFVOs[i]);
}
}
if (this.aIconSets.length === 0) {
this.aIconSets = obj.aIconSets;
} else if (this.aIconSets.length === obj.aIconSets.length) {
for (var i = 0; i < this.aIconSets.length; i++) {
this.aIconSets[i].merge(obj.aIconSets[i]);
}
}
};
CIconSet.prototype.isEqual = function (elem) {
if (this.IconSet === elem.IconSet && this.Percent === elem.Percent && this.Reverse === elem.Reverse &&
this.ShowValue === elem.ShowValue) {
if ((elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) || (!elem.aCFVOs && !this.aCFVOs)) {
var i;
if (elem.aCFVOs) {
for (i = 0; i < elem.aCFVOs.length; i++) {
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
return false;
}
}
}
if (elem.aIconSets && elem.aIconSets.length === this.aIconSets.length) {
for (i = 0; i < elem.aIconSets.length; i++) {
if (!elem.aIconSets[i].isEqual(this.aIconSets[i])) {
return false;
}
}
return true;
} else if (!elem.aIconSets && !this.aIconSets) {
return true;
}
}
}
return false;
};
CIconSet.prototype.applyPreset = function (styleIndex) {
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.icons][styleIndex];
this.IconSet = styleIndex;
for (var i = 0; i < presetStyles.length; i++) {
var formatValueObject = new CConditionalFormatValueObject();
formatValueObject.Type = presetStyles[i][0];
formatValueObject.Val = presetStyles[i][1];
if (presetStyles[i][2]) {
formatValueObject.formula = new CFormulaCF();
formatValueObject.formula.Text = presetStyles[i][2];
}
this.aCFVOs.push(formatValueObject);
}
};
CIconSet.prototype.Write_ToBinary2 = function (writer) {
if (null != this.IconSet) {
writer.WriteBool(true);
writer.WriteLong(this.IconSet);
} else {
writer.WriteBool(false);
}
if (null != this.Percent) {
writer.WriteBool(true);
writer.WriteBool(this.Percent);
} else {
writer.WriteBool(false);
}
if (null != this.Reverse) {
writer.WriteBool(true);
writer.WriteBool(this.Reverse);
} else {
writer.WriteBool(false);
}
if (null != this.ShowValue) {
writer.WriteBool(true);
writer.WriteBool(this.ShowValue);
} else {
writer.WriteBool(false);
}
//CConditionalFormatValueObject
var i;
if (null != this.aCFVOs) {
writer.WriteBool(true);
writer.WriteLong(this.aCFVOs.length);
for (i = 0; i < this.aCFVOs.length; i++) {
this.aCFVOs[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
//new AscCommonExcel.CConditionalFormatIconSet()
if (null != this.aIconSets) {
writer.WriteBool(true);
writer.WriteLong(this.aIconSets.length);
for (i = 0; i < this.aIconSets.length; i++) {
this.aIconSets[i].Write_ToBinary2(writer);
}
} else {
writer.WriteBool(false);
}
};
CIconSet.prototype.Read_FromBinary2 = function (reader) {
if (reader.GetBool()) {
this.IconSet = reader.GetLong();
}
if (reader.GetBool()) {
this.Percent = reader.GetBool();
}
if (reader.GetBool()) {
this.Reverse = reader.GetBool();
}
if (reader.GetBool()) {
this.ShowValue = reader.GetBool();
}
var i, length, elem;
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aCFVOs) {
this.aCFVOs = [];
}
elem = new CConditionalFormatValueObject();
elem.Read_FromBinary2(reader);
this.aCFVOs.push(elem);
}
}
if (reader.GetBool()) {
length = reader.GetULong();
for (i = 0; i < length; ++i) {
if (!this.aIconSets) {
this.aIconSets = [];
}
elem = new CConditionalFormatIconSet();
elem.Read_FromBinary2(reader);
this.aIconSets.push(elem);
}
}
};
CIconSet.prototype.asc_getPreview = function (api, id) {
var i, aIconImgs = [];
if (!this.Reverse) {
for (i = this.aCFVOs.length - 1; i >= 0; i--) {
aIconImgs.push(getCFIcon(this, i));
}
} else {
for (i = 0; i < this.aCFVOs.length; i++) {
aIconImgs.push(getCFIcon(this, i));
}
}
AscCommonExcel.drawIconSetPreview(id, api.wb, aIconImgs);
};
CIconSet.prototype.asc_getIconSet = function () {
return this.IconSet;
};
CIconSet.prototype.asc_getReverse = function () {
return this.Reverse;
};
CIconSet.prototype.asc_getShowValue = function () {
return this.ShowValue;
};
CIconSet.prototype.asc_getCFVOs = function () {
return this.aCFVOs;
};
CIconSet.prototype.asc_getIconSets = function () {
return this.aIconSets;
};
CIconSet.prototype.asc_setIconSet = function (val) {
this.IconSet = val;
};
CIconSet.prototype.asc_setReverse = function (val) {
this.Reverse = val;
};
CIconSet.prototype.asc_setShowValue = function (val) {
this.ShowValue = val;
};
CIconSet.prototype.asc_setCFVOs = function (val) {
this.aCFVOs = val;
};
CIconSet.prototype.asc_setIconSets = function (val) {
this.aIconSets = val == null ? [] : val;
};
CIconSet.prototype.getType = function () {
return window['AscCommonExcel'].UndoRedoDataTypes.IconSet;
};
function CConditionalFormatValueObject() {
this.Gte = true;
this.Type = null;
this.Val = null;
this.formulaParent = null;
this.formula = null;
return this;
}
CConditionalFormatValueObject.prototype.clone = function () {
var res = new CConditionalFormatValueObject();
res.Gte = this.Gte;
res.Type = this.Type;
res.Val = this.Val;
res.formulaParent = this.formulaParent ? this.formulaParent.clone() : null;
res.formula = this.formula ? this.formula.clone() : null;
return res;
};
CConditionalFormatValueObject.prototype.merge = function (obj) {
//сравниваю по дефолтовым величинам
if (this.Gte === true) {
this.Gte = obj.Gte;
}
if (obj.Type !== null) {
this.Type = obj.Type;
}
if (this.Val === null) {
this.Val = obj.Val;
}
if (this.formulaParent === null) {
this.formulaParent = obj.formulaParent;
}
if (this.formula === null) {
this.formula = obj.formula;
}
};
CConditionalFormatValueObject.prototype.Write_ToBinary2 = function (writer) {
if (null != this.Gte) {
writer.WriteBool(true);
writer.WriteBool(this.Gte);
} else {
writer.WriteBool(false);
}
if (null != this.Type) {
writer.WriteBool(true);
writer.WriteLong(this.Type);
} else {
writer.WriteBool(false);
}
if (null != this.Val) {
writer.WriteBool(true);
writer.WriteString2(this.Val);
} else {
writer.WriteBool(false);
}
};
CConditionalFormatValueObject.prototype.Read_FromBinary2 = function (reader) {
if (reader.GetBool()) {
this.Gte = reader.GetBool();
}
if (reader.GetBool()) {
this.Type = reader.GetLong();
}
if (reader.GetBool()) {
this.Val = reader.GetString2();
}
};
CConditionalFormatValueObject.prototype.asc_getGte = function () {
return this.Gte;
};
CConditionalFormatValueObject.prototype.asc_getType = function () {
return this.Type;
};
CConditionalFormatValueObject.prototype.asc_getVal = function () {
return !isNumeric(this.Val) ? "=" + this.Val : this.Val;
};
CConditionalFormatValueObject.prototype.asc_setGte = function (val) {
this.Gte = val;
};
CConditionalFormatValueObject.prototype.asc_setType = function (val) {
this.Type = val;
};
CConditionalFormatValueObject.prototype.asc_setVal = function (val) {
val = correctFromInterface(val);
this.Val = (val !== undefined && val !== null) ? val + "" : val;
};
CConditionalFormatValueObject.prototype.isEqual = function (elem) {
if (this.Gte === elem.Gte && this.Type === elem.Type && this.Val === elem.Val && this.Type === elem.Type) {
return true;
}
return false;
};
function CConditionalFormatIconSet() {
this.IconSet = null;
this.IconId = null;
return this;
}
CConditionalFormatIconSet.prototype.clone = function () {
var res = new CConditionalFormatIconSet();
res.IconSet = this.IconSet;
res.IconId = this.IconId;
return res;
};
CConditionalFormatIconSet.prototype.merge = function (obj) {
//сравниваю по дефолтовым величинам
if (this.IconSet === null) {
this.IconSet = obj.IconSet;
}
if (this.IconId === null) {
this.IconId = obj.IconId;
}
};
CConditionalFormatIconSet.prototype.isEqual = function (val) {
return this.IconSet === val.IconSet && this.IconId === val.IconId;
};
CConditionalFormatIconSet.prototype.Write_ToBinary2 = function (writer) {
if (null != this.IconSet) {
writer.WriteBool(true);
writer.WriteLong(this.IconSet);
} else {
writer.WriteBool(false);
}
if (null != this.IconId) {
writer.WriteBool(true);
writer.WriteLong(this.IconId);
} else {
writer.WriteBool(false);
}
};
CConditionalFormatIconSet.prototype.Read_FromBinary2 = function (reader) {
if (reader.GetBool()) {
this.IconSet = reader.GetLong();
}
if (reader.GetBool()) {
this.IconId = reader.GetLong();
}
};
CConditionalFormatIconSet.prototype.asc_getIconSet = function () {
return this.IconSet;
};
CConditionalFormatIconSet.prototype.asc_getIconId = function () {
return this.IconId;
};
CConditionalFormatIconSet.prototype.asc_getIndex = function () {
return this.IconId;
};
CConditionalFormatIconSet.prototype.asc_setIconSet = function (val) {
this.IconSet = val;
};
CConditionalFormatIconSet.prototype.asc_setIconId = function (val) {
this.IconId = val;
};
CConditionalFormatIconSet.prototype.asc_setIndex = function (val) {
this.IconId = val;
};
function CGradient(c1, c2) {
this.MaxColorIndex = 512;
this.base_shift = 8;
this.c1 = c1;
this.c2 = c2;
this.min = this.max = 0;
this.koef = null;
this.r1 = this.r2 = 0;
this.g1 = this.g2 = 0;
this.b1 = this.b2 = 0;
return this;
}
CGradient.prototype.init = function (min, max) {
var distance = max - min;
this.min = min;
this.max = max;
this.koef = distance ? this.MaxColorIndex / (2.0 * distance) : 0;
this.r1 = this.c1.getR();
this.g1 = this.c1.getG();
this.b1 = this.c1.getB();
this.r2 = this.c2.getR();
this.g2 = this.c2.getG();
this.b2 = this.c2.getB();
};
CGradient.prototype.calculateColor = function (indexColor) {
indexColor = ((indexColor - this.min) * this.koef) >> 0;
var r = (this.r1 + ((FT_Common.IntToUInt(this.r2 - this.r1) * indexColor) >> this.base_shift)) & 0xFF;
var g = (this.g1 + ((FT_Common.IntToUInt(this.g2 - this.g1) * indexColor) >> this.base_shift)) & 0xFF;
var b = (this.b1 + ((FT_Common.IntToUInt(this.b2 - this.b1) * indexColor) >> this.base_shift)) & 0xFF;
//console.log("index=" + indexColor + ": r=" + r + " g=" + g + " b=" + b);
return new AscCommonExcel.RgbColor((r << 16) + (g << 8) + b);
};
CGradient.prototype.getMinColor = function () {
return new AscCommonExcel.RgbColor((this.r1 << 16) + (this.g1 << 8) + this.b1);
};
CGradient.prototype.getMaxColor = function () {
return new AscCommonExcel.RgbColor((this.r2 << 16) + (this.g2 << 8) + this.b2);
};
function isValidDataRefCf(type, props) {
var i;
var ws;
var checkFormulaStack = function (_f) {
if (!_f) {
return null;
}
var stack = _f.outStack;
if (stack && stack.length) {
//если идут фрифметические операции, использования диапазонов внутри формул - ошибки на это нет
//поэтому я проверяю на одиночный диапазон
if (stack.length === 1 && (stack[0].type === AscCommonExcel.cElementType.cellsRange ||
stack[0].type === AscCommonExcel.cElementType.cellsRange3D)) {
return asc_error.NotSingleReferenceCannotUsed;
}
if (type === Asc.ECfType.colorScale || type === Asc.ECfType.dataBar || type === Asc.ECfType.iconSet) {
for (var i = 0; i < stack.length; i++) {
if (stack[i]) {
//допускаются только абсолютные ссылки
if (stack[i].type === AscCommonExcel.cElementType.cellsRange ||
stack[i].type === AscCommonExcel.cElementType.cellsRange3D ||
stack[i].type === AscCommonExcel.cElementType.cell ||
stack[i].type === AscCommonExcel.cElementType.cell3D) {
//ссылки должны быть только абсолютные
var _range = stack[i].getRange();
if (_range.bbox) {
_range = _range.bbox;
}
var isAbsRow1 = _range.isAbsRow(_range.refType1);
var isAbsCol1 = _range.isAbsCol(_range.refType1);
var isAbsRow2 = _range.isAbsRow(_range.refType2);
var isAbsCol2 = _range.isAbsCol(_range.refType2);
if (!isAbsRow1 || !isAbsCol1 || !isAbsRow2 || !isAbsCol2) {
return asc_error.CannotUseRelativeReference;
}
}
}
}
}
}
return null;
};
var _parseResultArg;
var _doParseFormula = function (sFormula) {
_parseResultArg = null;
if (!(typeof sFormula === "string" && sFormula.length > 0)) {
return;
}
if (!ws) {
var oWB = Asc.editor && Asc.editor.wbModel;
if (!oWB) {
return;
}
ws = oWB.getWorksheet(0);
}
if (sFormula.charAt(0) === '=') {
sFormula = sFormula.slice(1);
}
var _formulaParsed = new AscCommonExcel.parserFormula(sFormula, null, ws);
_parseResultArg = new AscCommonExcel.ParseResult([], []);
_formulaParsed.parse(true, true, _parseResultArg, true);
return _formulaParsed;
};
var _checkValue = function (_val, _type, _isNumeric) {
var fParser, _error;
switch (_type) {
case AscCommonExcel.ECfvoType.Formula:
if (_isNumeric) {
} else if (_val && _val[0] !== "=") {
_val = '"' + _val + '"';
} else {
fParser = _doParseFormula(_val);
if (_parseResultArg && _parseResultArg.error) {
return _parseResultArg.error;
}
//если внутри диапазон - проверяем его
_error = fParser && checkFormulaStack(fParser);
if (_error !== null) {
return _error;
}
}
break;
case AscCommonExcel.ECfvoType.Number:
if (_isNumeric) {
} else if (_val && _val[0] !== "=") {
_val = '"' + _val + '"';
} else {
fParser = _doParseFormula(_val);
if (_parseResultArg && _parseResultArg.error) {
return _parseResultArg.error;
}
//если внутри диапазон - проверяем его
_error = fParser && checkFormulaStack(fParser);
if (_error !== null) {
return _error;
}
}
break;
case AscCommonExcel.ECfvoType.Percent:
if (_isNumeric) {
if (_val < 0 && _val > 100) {
//is not valid precentile
return asc_error.NotValidPercentage;
}
} else if (_val && _val[0] !== "=") {
_val = '"' + _val + '"';
} else {
fParser = _doParseFormula(_val);
if (_parseResultArg && _parseResultArg.error) {
return _parseResultArg.error;
}
//если внутри диапазон - проверяем его
_error = fParser && checkFormulaStack(fParser);
if (_error !== null) {
return _error;
}
}
break;
case AscCommonExcel.ECfvoType.Percentile:
//в случае с индивидуальное проверкой Percentile - выдаём только 2 ошибки
if (_isNumeric) {
if (_val < 0 && _val > 100) {
//is not valid precentile
return asc_error.NotValidPercentile;
}
} else {
return asc_error.CannotAddConditionalFormatting;
}
break;
}
return null;
};
var compareRefs = function (_prevVal, _prevType, _prevNum, _val, _type, _isNum) {
//далее сравниваем ближайшие значения с одним типом, предыдущее должно быть меньше следующего
//в databar ошибка для подобного сравнения не возникает
//для iconSet сравниваем числа для типов Number/Percent/Percentile - должны идти по убыванию, сраниваем только соседние
if (_prevNum && _isNum) {
if (_isNum && _prevNum) {
_val = parseFloat(_val);
_prevVal = parseFloat(_prevVal);
}
if (type === Asc.ECfType.colorScale) {
if (_prevType === _type && type !== AscCommonExcel.ECfvoType.Formula && _prevVal > _val) {
return asc_error.ValueMustBeGreaterThen;
}
} else if (type === Asc.ECfType.iconSet) {
if (_prevType !== AscCommonExcel.ECfvoType.Formula && type !== AscCommonExcel.ECfvoType.Formula &&
_val < _prevVal) {
return asc_error.IconDataRangesOverlap;
}
}
}
return null;
};
//value, type
var prevType, prevVal, prevNum;
var nError;
var _isNumeric;
for (i = 0; i < props.length; i++) {
if (undefined !== props[i][1] && type !== Asc.ECfType.top10) {
_isNumeric = isNumeric(props[i][0]);
nError = _checkValue(props[i][0], props[i][1], _isNumeric);
if (nError !== null) {
return [nError, i];
}
if (prevType === undefined) {
prevType = props[i][1];
prevVal = props[i][0];
prevNum = _isNumeric;
} else {
if (!(i === 1 && type === Asc.ECfType.iconSet)) {
nError = compareRefs(prevVal, prevType, prevNum, props[i][0], props[i][1], _isNumeric);
}
if (nError !== null) {
return [nError, i];
}
prevType = props[i][1];
prevVal = props[i][0];
prevNum = _isNumeric;
}
} else {
//в этом случае должны быть следующие типы
if (type === Asc.ECfType.expression) {
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
if (nError !== null) {
return [nError, i];
}
} else if (type === Asc.ECfType.cellIs) {
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
if (nError !== null) {
return [nError, i];
}
} else if (type === Asc.ECfType.containsText) {
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
if (nError !== null) {
return [nError, i];
}
} else if (type === Asc.ECfType.top10) {
_isNumeric = isNumeric(props[i][0]);
var isPrecent = props[i][1];
if (!_isNumeric) {
return [asc_error.ErrorTop10Between, i];
} else if (!isPrecent && (props[i][0] < 0 || props[i][0] > 1000)) {
return [asc_error.ErrorTop10Between, i];
} else if (isPrecent && (props[i][0] < 0 || props[i][0] > 100)) {
return [asc_error.ErrorTop10Between, i];
}
}
}
}
}
function correctFromInterface(val) {
let _isNumeric = isNumeric(val);
if (!_isNumeric) {
let isDate;
let isFormula;
if (val[0] === "=") {
val = val.slice(1);
isFormula = true;
} else {
isDate = AscCommon.g_oFormatParser.parseDate(val, AscCommon.g_oDefaultCultureInfo);
}
//храним число
if (isDate) {
val = isDate.value;
return val;
}
if (!isFormula) {
val = addQuotes(val);
} else {
let oWB = Asc.editor && Asc.editor.wbModel;
if (oWB) {
let ws = oWB.getActiveWs();
if (ws) {
let _f = new AscCommonExcel.parserFormula(val, null, ws);
_f.parse(true, true);
val = _f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
}
}
}
}
return val;
}
function addQuotes(val) {
var _res;
if (val[0] === '"') {
_res = val.replace(/\"/g, "\"\"");
_res = "\"" + _res + "\"";
} else {
_res = "\"" + val + "\"";
}
return _res;
}
var isNumeric = function (_val) {
return !isNaN(parseFloat(_val)) && isFinite(_val);
};
var cDefIconSize = 16;
var cDefIconFont = 11;
var fullIconArray = ["data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMTVMMC41IDhINVYxSDEwVjhIMTQuNUw3LjUgMTVaIiBmaWxsPSIjRkYxMTExIi8+CjxwYXRoIGQ9Ik0xMCA4LjVIMTMuMjkyOUw3LjUgMTQuMjkyOUwxLjcwNzExIDguNUg1SDUuNVY4VjEuNUg5LjVWOFY4LjVIMTBaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNSA4LjVMOCAxNS41TDggMTFMMSAxMUwxIDZMOCA2TDggMS41TDE1IDguNVoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTguNSA2TDguNSAyLjcwNzExTDE0LjI5MjkgOC41TDguNSAxNC4yOTI5TDguNSAxMUw4LjUgMTAuNUw4IDEwLjVMMS41IDEwLjVMMS41IDYuNUw4IDYuNUw4LjUgNi41TDguNSA2WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMUwxNC41IDhMMTAgOFYxNUw1IDE1TDUgOEwwLjUgOEw3LjUgMVoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTUgNy41TDEuNzA3MTEgNy41TDcuNSAxLjcwNzExTDEzLjI5MjkgNy41TDEwIDcuNUg5LjVWOFYxNC41TDUuNSAxNC41TDUuNSA4VjcuNUg1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuNSAxNUwwLjUgOEg1VjFIMTBWOEgxNC41TDcuNSAxNVoiIGZpbGw9IiM1MDUwNTAiLz48L3N2Zz4=',
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNSA4LjVMOCAxNS41TDggMTFMMSAxMUwxIDZMOCA2TDggMS41TDE1IDguNVoiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTguNSA2TDguNSAyLjcwNzExTDE0LjI5MjkgOC41TDguNSAxNC4yOTI5TDguNSAxMUw4LjUgMTAuNUw4IDEwLjVMMS41IDEwLjVMMS41IDYuNUw4IDYuNUw4LjUgNi41TDguNSA2WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMUwxNC41IDhMMTAgOFYxNUw1IDE1TDUgOEwwLjUgOEw3LjUgMVoiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTUgNy41TDEuNzA3MTEgNy41TDcuNSAxLjcwNzExTDEzLjI5MjkgNy41TDEwIDcuNUg5LjVWOFYxNC41TDUuNSAxNC41TDUuNSA4VjcuNUg1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjRkYxMTExIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iOCIgeT0iMSIgd2lkdGg9IjkuODk5NSIgaGVpZ2h0PSI5Ljg5OTUiIHJ4PSIyIiB0cmFuc2Zvcm09InJvdGF0ZSg0NSA4IDEpIiBmaWxsPSIjRkYxMTExIi8+CjxyZWN0IHg9IjgiIHk9IjEuNzA3MTEiIHdpZHRoPSI4Ljg5OTUiIGhlaWdodD0iOC44OTk1IiByeD0iMS41IiB0cmFuc2Zvcm09InJvdGF0ZSg0NSA4IDEuNzA3MTEpIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMTVIMTVMOCAxTDEgMTVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik04IDIuMTE4MDNMMTQuMTkxIDE0LjVIMS44MDkwMkw4IDIuMTE4MDNaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk5OTkgNy45OTk5NkMxNC45OTk5IDExLjg2NTkgMTEuODY1OSAxNC45OTk5IDcuOTk5OTYgMTQuOTk5OUM0LjEzMzk5IDE0Ljk5OTkgMSAxMS44NjU5IDEgNy45OTk5NkMxIDQuMTMzOTkgNC4xMzM5OSAxIDcuOTk5OTYgMUMxMS44NjU5IDEgMTQuOTk5OSA0LjEzMzk5IDE0Ljk5OTkgNy45OTk5NloiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTE0LjQ5OTkgNy45OTk5NkMxNC40OTk5IDExLjU4OTggMTEuNTg5OCAxNC40OTk5IDcuOTk5OTYgMTQuNDk5OUM0LjQxMDEzIDE0LjQ5OTkgMS41IDExLjU4OTggMS41IDcuOTk5OTZDMS41IDQuNDEwMTMgNC40MTAxMyAxLjUgNy45OTk5NiAxLjVDMTEuNTg5OCAxLjUgMTQuNDk5OSA0LjQxMDEzIDE0LjQ5OTkgNy45OTk5NloiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjU4NTggOEw0LjI5MjkxIDUuNzA3MTFMNS43MDcxMiA0LjI5Mjg5TDguMDAwMDEgNi41ODU3OUwxMC4yOTI5IDQuMjkyODlMMTEuNzA3MSA1LjcwNzExTDkuNDE0MjMgOEwxMS43MDcxIDEwLjI5MjlMMTAuMjkyOSAxMS43MDcxTDguMDAwMDEgOS40MTQyMUw1LjcwNzEyIDExLjcwNzFMNC4yOTI5MSAxMC4yOTI5TDYuNTg1OCA4WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZD0iTTcuMjcxNTIgOC42NTM5TDcuMDU5NiA1LjQ5MDA5QzcuMDE5ODcgNC44NzM2MiA3IDQuNDMxMDkgNyA0LjE2MjQ4QzcgMy43OTcwMSA3LjA5NDkyIDMuNTEyOTkgNy4yODQ3NyAzLjMxMDQ0QzcuNDc5MDMgMy4xMDM0OCA3LjczMjg5IDMgOC4wNDYzNiAzQzguNDI2MDUgMyA4LjY3OTkxIDMuMTMyMSA4LjgwNzk1IDMuMzk2M0M4LjkzNTk4IDMuNjU2MSA5IDQuMDMyNTggOSA0LjUyNTc2QzkgNC44MTYzOCA4Ljk4NDU1IDUuMTExNCA4Ljk1MzY0IDUuNDEwODNMOC42Njg4NyA4LjY2NzExQzguNjM3OTcgOS4wNTQ2IDguNTcxNzQgOS4zNTE4MyA4LjQ3MDIgOS41NTg3OEM4LjM2ODY1IDkuNzY1NzQgOC4yMDA4OCA5Ljg2OTIyIDcuOTY2ODkgOS44NjkyMkM3LjcyODQ4IDkuODY5MjIgNy41NjI5MSA5Ljc3MDE1IDcuNDcwMiA5LjU3MTk5QzcuMzc3NDggOS4zNjk0NCA3LjMxMTI2IDkuMDYzNDEgNy4yNzE1MiA4LjY1MzlaTTguMDA2NjIgMTNDNy43MzczMSAxMyA3LjUwMTEgMTIuOTE0MSA3LjI5ODAxIDEyLjc0MjRDNy4wOTkzNCAxMi41NjYzIDcgMTIuMzIxOSA3IDEyLjAwOTJDNyAxMS43MzYyIDcuMDk0OTIgMTEuNTA1MSA3LjI4NDc3IDExLjMxNTdDNy40NzkwMyAxMS4xMjIgNy43MTUyMyAxMS4wMjUxIDcuOTkzMzggMTEuMDI1MUM4LjI3MTUyIDExLjAyNTEgOC41MDc3MyAxMS4xMjIgOC43MDE5OSAxMS4zMTU3QzguOTAwNjYgMTEuNTA1MSA5IDExLjczNjIgOSAxMi4wMDkyQzkgMTIuMzE3NSA4LjkwMDY2IDEyLjU1OTcgOC43MDE5OSAxMi43MzU4QzguNTAzMzEgMTIuOTExOSA4LjI3MTUyIDEzIDguMDA2NjIgMTNaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi44MDUgNS41OTMyTDcuNjM5MTUgMTIuNjA0MUw0LjI0MTY3IDguNjUxODlMNS43NTgzIDcuMzQ4MTFMNy41MTg3MiA5LjM5NTk0TDExLjE5NDkgNC40MDY4TDEyLjgwNSA1LjU5MzJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjE5NzM1IDhMMiAzLjgwMjY1TDMuODAyNjUgMkw4IDYuMTk3MzVMMTIuMTk3MyAyTDE0IDMuODAyNjVMOS44MDI2NSA4TDE0IDEyLjE5NzNMMTIuMTk3MyAxNEw4IDkuODAyNjVMMy44MDI2NSAxNEwyIDEyLjE5NzNMNi4xOTczNSA4WiIgZmlsbD0iI0ZGMTExMSIvPgo8cGF0aCBkPSJNOC4zNTM1NSA2LjU1MDlMMTIuMTk3MyAyLjcwNzExTDEzLjI5MjkgMy44MDI2NUw5LjQ0OTEgNy42NDY0NUw5LjA5NTU1IDhMOS40NDkxIDguMzUzNTVMMTMuMjkyOSAxMi4xOTczTDEyLjE5NzMgMTMuMjkyOUw4LjM1MzU1IDkuNDQ5MUw4IDkuMDk1NTVMNy42NDY0NSA5LjQ0OTFMMy44MDI2NSAxMy4yOTI5TDIuNzA3MTEgMTIuMTk3M0w2LjU1MDkgOC4zNTM1NUw2LjkwNDQ1IDhMNi41NTA5IDcuNjQ2NDVMMi43MDcxMSAzLjgwMjY1TDMuODAyNjUgMi43MDcxMUw3LjY0NjQ1IDYuNTUwOUw4IDYuOTA0NDVMOC4zNTM1NSA2LjU1MDlaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuNDA3MjggOC45MTU0Nkw3LjA4OTQgNC40ODYxM0M3LjAyOTggMy42MjMwNyA3IDMuMDAzNTIgNyAyLjYyNzQ4QzcgMi4xMTU4MSA3LjE0MjM4IDEuNzE4MTkgNy40MjcxNSAxLjQzNDYxQzcuNzE4NTQgMS4xNDQ4NyA4LjA5OTM0IDEgOC41Njk1NCAxQzkuMTM5MDcgMSA5LjUxOTg3IDEuMTg0OTQgOS43MTE5MiAxLjU1NDgyQzkuOTAzOTcgMS45MTg1NCAxMCAyLjQ0NTYyIDEwIDMuMTM2MDZDMTAgMy41NDI5MyA5Ljk3NjgyIDMuOTU1OTcgOS45MzA0NiA0LjM3NTE2TDkuNTAzMzEgOC45MzM5NUM5LjQ1Njk1IDkuNDc2NDQgOS4zNTc2MiA5Ljg5MjU2IDkuMjA1MyAxMC4xODIzQzkuMDUyOTggMTAuNDcyIDguODAxMzIgMTAuNjE2OSA4LjQ1MDMzIDEwLjYxNjlDOC4wOTI3MiAxMC42MTY5IDcuODQ0MzcgMTAuNDc4MiA3LjcwNTMgMTAuMjAwOEM3LjU2NjIzIDkuOTE3MjIgNy40NjY4OSA5LjQ4ODc3IDcuNDA3MjggOC45MTU0NlpNOC41MDk5MyAxNUM4LjEwNTk2IDE1IDcuNzUxNjYgMTQuODc5OCA3LjQ0NzAyIDE0LjYzOTRDNy4xNDkwMSAxNC4zOTI4IDcgMTQuMDUwNiA3IDEzLjYxMjlDNyAxMy4yMzA3IDcuMTQyMzggMTIuOTA3MSA3LjQyNzE1IDEyLjY0MkM3LjcxODU0IDEyLjM3MDggOC4wNzI4NSAxMi4yMzUxIDguNDkwMDcgMTIuMjM1MUM4LjkwNzI4IDEyLjIzNTEgOS4yNjE1OSAxMi4zNzA4IDkuNTUyOTggMTIuNjQyQzkuODUwOTkgMTIuOTA3MSAxMCAxMy4yMzA3IDEwIDEzLjYxMjlDMTAgMTQuMDQ0NSA5Ljg1MDk5IDE0LjM4MzUgOS41NTI5OCAxNC42MzAxQzkuMjU0OTcgMTQuODc2NyA4LjkwNzI4IDE1IDguNTA5OTMgMTVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik05LjI2ODE3IDEuNzg1MjNMOS4yNjgxNiAxLjc4NTIzTDkuMjY5NzcgMS43ODgyOUM5LjQwNjI4IDIuMDQ2ODEgOS41IDIuNDc4NTEgOS41IDMuMTM2MDZDOS41IDMuNTIzOTIgOS40Nzc5MSAzLjkxODYgOS40MzM0OSA0LjMyMDIxTDkuNDMzNDIgNC4zMjAyTDkuNDMyNjQgNC4zMjg1Mkw5LjAwNTQ5IDguODg3M0w5LjAwNTQ4IDguODg3M0w5LjAwNTEzIDguODkxMzhDOC45NjExNyA5LjQwNTczIDguODcwMDkgOS43NDU0MSA4Ljc2MjczIDkuOTQ5NjRDOC43MjQ4NyAxMC4wMjE3IDguNjg2NDkgMTAuMDU1NiA4LjY1Mjg3IDEwLjA3NDlDOC42MTczMSAxMC4wOTU0IDguNTU2NTIgMTAuMTE2OSA4LjQ1MDMzIDEwLjExNjlDOC4zMzUyOSAxMC4xMTY5IDguMjcyNTEgMTAuMDk0NyA4LjIzOTY3IDEwLjA3NjRDOC4yMTEyNCAxMC4wNjA1IDguMTgxNzggMTAuMDM0OSA4LjE1MzE2IDkuOTc4NDdDOC4wNTQxMSA5Ljc3NTMxIDcuOTYyOTUgOS40MiA3LjkwNTQyIDguODcxNThMNy41ODgyMiA0LjQ1MTY4QzcuNTg4MiA0LjQ1MTQ1IDcuNTg4MTggNC40NTEyMyA3LjU4ODE3IDQuNDUxQzcuNTI4NjQgMy41ODg5NSA3LjUgMi45ODQ2NiA3LjUgMi42Mjc0OEM3LjUgMi4yMTA3MiA3LjYxMzM0IDEuOTU0OSA3Ljc3OTg0IDEuNzg5MDNDNy45NjM4MiAxLjYwNjE2IDguMjEwODcgMS41IDguNTY5NTQgMS41QzkuMDMxMTYgMS41IDkuMTkzMiAxLjY0MDg0IDkuMjY4MTcgMS43ODUyM1pNOS4yMTIzIDEzLjAwOEw5LjIxMjIyIDEzLjAwODFMOS4yMjA2NyAxMy4wMTU2QzkuNDE3MjkgMTMuMTkwNSA5LjUgMTMuMzgwNCA5LjUgMTMuNjEyOUM5LjUgMTMuOTE0OSA5LjQwMzI1IDE0LjEwNSA5LjIzNDIzIDE0LjI0NDlDOS4wMjg1IDE0LjQxNTEgOC43OTQzNyAxNC41IDguNTA5OTMgMTQuNUM4LjIxNTU5IDE0LjUgNy45NzI5NyAxNC40MTU5IDcuNzYxNDkgMTQuMjUwNkM3LjU5Njg0IDE0LjExMjUgNy41IDEzLjkyMSA3LjUgMTMuNjEyOUM3LjUgMTMuMzcyNCA3LjU4MjYxIDEzLjE4MDQgNy43Njc4MyAxMy4wMDhDNy45NjE5MSAxMi44MjczIDguMTkyNTggMTIuNzM1MSA4LjQ5MDA3IDEyLjczNTFDOC43ODc1NSAxMi43MzUxIDkuMDE4MjMgMTIuODI3MyA5LjIxMjMgMTMuMDA4WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCA0LjI5NTc4TDYuNjgyMDMgMTRMMiA4LjY3ODIxTDMuNjM0MTcgNy4yNTYwOEw2LjU1MjE4IDEwLjU3MjhMMTIuMjYyOCAzTDE0IDQuMjk1NzhaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik02Ljk1MTM5IDEwLjg3MzlMMTIuMzYyNiAzLjY5ODE4TDEzLjI5ODIgNC4zOTYwNEw2LjY1MjIgMTMuMjA5MUwyLjcwNzQ2IDguNzI1MzdMMy41ODcyNyA3Ljk1OTczTDYuMTc2NzggMTAuOTAzMUw2LjU4MjAyIDExLjM2MzdMNi45NTEzOSAxMC44NzM5WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iI0ZGMTExMSIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iI0ZGQ0YzMyIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iIzJFOTk1RiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAxNUwzLjEwMDUzIDE1TDYuMjgyNTEgMTEuODE4TDEuMzMyNzYgNi44NjgyN0w0Ljg2ODMgMy4zMzI3M0w5LjgxODA1IDguMjgyNDhMMTMgNS4xMDA1TDEzIDE1WiIgZmlsbD0iI0ZGQ0YzMyIvPgo8cGF0aCBkPSJNNi42MzYwNyAxMS40NjQ1TDIuMDM5ODcgNi44NjgyN0w0Ljg2ODMgNC4wMzk4NEw5LjQ2NDQ5IDguNjM2MDNMOS44MTgwNSA4Ljk4OTU5TDEwLjE3MTYgOC42MzYwM0wxMi41IDYuMzA3NjFMMTIuNSAxNC41TDQuMzA3NjQgMTQuNUw2LjYzNjA3IDEyLjE3MTZMNi45ODk2MiAxMS44MThMNi42MzYwNyAxMS40NjQ1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzTDMuMTAwNSAzTDYuMjgyNDggNi4xODE5OEwxLjMzMjczIDExLjEzMTdMNC44NjgyNyAxNC42NjczTDkuODE4MDEgOS43MTc1MUwxMyAxMi44OTk1VjNaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik02LjYzNjAzIDUuODI4NDNMNC4zMDc2MSAzLjVMMTIuNSAzLjVWMTEuNjkyNEwxMC4xNzE2IDkuMzYzOTZMOS44MTgwMSA5LjAxMDQxTDkuNDY0NDYgOS4zNjM5Nkw0Ljg2ODI3IDEzLjk2MDJMMi4wMzk4NCAxMS4xMzE3TDYuNjM2MDMgNi41MzU1M0w2Ljk4OTU5IDYuMTgxOThMNi42MzYwMyA1LjgyODQzWiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQgMTRMNC4xMDA1MSAxNEw3LjI4MjQ5IDEwLjgxOEwyLjMzMjc0IDUuODY4MjdMNS44NjgyNyAyLjMzMjc0TDEwLjgxOCA3LjI4MjQ5TDE0IDQuMTAwNTFMMTQgMTRaIiBmaWxsPSIjNTA1MDUwIi8+CjxwYXRoIGQ9Ik0xMS4xNzE2IDcuNjM2MDRMMTMuNSA1LjMwNzYxTDEzLjUgMTMuNUw1LjMwNzYxIDEzLjVMNy42MzYwNCAxMS4xNzE2TDcuOTg5NTkgMTAuODE4TDcuNjM2MDQgMTAuNDY0NUwzLjAzOTg0IDUuODY4MjdMNS44NjgyNyAzLjAzOTg0TDEwLjQ2NDUgNy42MzYwNEwxMC44MTggNy45ODk1OUwxMS4xNzE2IDcuNjM2MDRaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQgMkw0LjEwMDUxIDJMNy4yODI0OSA1LjE4MTk4TDIuMzMyNzQgMTAuMTMxN0w1Ljg2ODI3IDEzLjY2NzNMMTAuODE4IDguNzE3NTFMMTQgMTEuODk5NUwxNCAyWiIgZmlsbD0iIzUwNTA1MCIvPgo8cGF0aCBkPSJNMTEuMTcxNiA4LjM2Mzk2TDEzLjUgMTAuNjkyNEwxMy41IDIuNUw1LjMwNzYxIDIuNUw3LjYzNjA0IDQuODI4NDNMNy45ODk1OSA1LjE4MTk4TDcuNjM2MDQgNS41MzU1M0wzLjAzOTg1IDEwLjEzMTdMNS44NjgyNyAxMi45NjAyTDEwLjQ2NDUgOC4zNjM5NkwxMC44MTggOC4wMTA0MUwxMS4xNzE2IDguMzYzOTZaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjciIGZpbGw9IiM1MDUwNTAiLz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjYuNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjciIGZpbGw9IiM5QjlCOUIiLz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjYuNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGVsbGlwc2UgY3g9IjgiIGN5PSI4IiByeD0iNyIgcnk9IjciIHRyYW5zZm9ybT0icm90YXRlKC0xODAgOCA4KSIgZmlsbD0iI0ZGODA4MCIvPgo8cGF0aCBkPSJNMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTggMS41IDhaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxjaXJjbGUgY3g9IjgiIGN5PSI4IiByPSI2IiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgOCA4KSIgZmlsbD0id2hpdGUiLz48L3N2Zz4=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNi44MTMzMSAyIDUuNjUzMjggMi4zNTE4OSA0LjY2NjU4IDMuMDExMThDMy42Nzk4OSAzLjY3MDQ3IDIuOTEwODUgNC42MDc1NCAyLjQ1NjczIDUuNzAzOUMyLjAwMjYgNi44MDAyNSAxLjg4Mzc4IDguMDA2NjUgMi4xMTUyOSA5LjE3MDU0QzIuMzQ2OCAxMC4zMzQ0IDIuOTE4MjUgMTEuNDAzNSAzLjc1NzM2IDEyLjI0MjZDNC41OTY0OCAxMy4wODE4IDUuNjY1NTggMTMuNjUzMiA2LjgyOTQ2IDEzLjg4NDdDNy45OTMzNSAxNC4xMTYyIDkuMTk5NzUgMTMuOTk3NCAxMC4yOTYxIDEzLjU0MzNDMTEuMzkyNSAxMy4wODkxIDEyLjMyOTUgMTIuMzIwMSAxMi45ODg4IDExLjMzMzRDMTMuNjQ4MSAxMC4zNDY3IDE0IDkuMTg2NjggMTQgOEw4IDhMOCAyWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNi40MDg3IDIgNC44ODI1OCAyLjYzMjE0IDMuNzU3MzYgMy43NTczNkMyLjYzMjE0IDQuODgyNTggMiA2LjQwODcgMiA4QzIgOS41OTEzIDIuNjMyMTQgMTEuMTE3NCAzLjc1NzM2IDEyLjI0MjZDNC44ODI1OCAxMy4zNjc5IDYuNDA4NyAxNCA4IDE0TDggOEw4IDJaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNy4yMTIwNyAyIDYuNDMxODUgMi4xNTUxOSA1LjcwMzkgMi40NTY3MkM0Ljk3NTk1IDIuNzU4MjUgNC4zMTQ1MSAzLjIwMDIxIDMuNzU3MzYgMy43NTczNkMzLjIwMDIxIDQuMzE0NTEgMi43NTgyNSA0Ljk3NTk1IDIuNDU2NzIgNS43MDM5QzIuMTU1MTkgNi40MzE4NSAyIDcuMjEyMDcgMiA4TDggOEw4IDJaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDRMMSA0TDggMTNMMTUgNFoiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTggMTIuMTg1NkwyLjAyMjMyIDQuNUwxMy45Nzc3IDQuNUw4IDEyLjE4NTZaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgNUgxNVYxMUgxVjVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik0xLjUgNS41SDE0LjVWMTAuNUgxLjVWNS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMTJIMTVMOCAzTDEgMTJaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik04IDMuODE0NDFMMTMuOTc3NyAxMS41SDIuMDIyMzJMOCAzLjgxNDQxWiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDIuMTI5NzhMOS4xMzk0OSA1LjQ1MTc1QzkuMjg1MTUgNS43NDY4OSA5LjU2NjcyIDUuOTUxNDYgOS44OTI0MyA1Ljk5ODc5TDEzLjU1ODQgNi41MzE0OUwxMC45MDU3IDkuMTE3MjlDMTAuNjcgOS4zNDcwMiAxMC41NjI1IDkuNjc4MDIgMTAuNjE4MSAxMC4wMDI0TDExLjI0NDMgMTMuNjUzNkw3Ljk2NTM0IDExLjkyOThDNy42NzQwMiAxMS43NzY2IDcuMzI1OTggMTEuNzc2NiA3LjAzNDY2IDExLjkyOThMMy43NTU2OCAxMy42NTM2TDQuMzgxOTEgMTAuMDAyNEM0LjQzNzU0IDkuNjc4MDMgNC4zMyA5LjM0NzAyIDQuMDk0MzEgOS4xMTcyOUwxLjQ0MTU2IDYuNTMxNDlMNS4xMDc1NyA1Ljk5ODc5QzUuNDMzMjggNS45NTE0NiA1LjcxNDg1IDUuNzQ2ODkgNS44NjA1MSA1LjQ1MTc1TDcuNSAyLjEyOTc4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzczNzM3MyIvPjwvc3ZnPg==",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTggMi4xMjk3OEw2LjM2MDUxIDUuNDUxNzVDNi4yMTQ4NSA1Ljc0Njg5IDUuOTMzMjggNS45NTE0NiA1LjYwNzU3IDUuOTk4NzlMMS45NDE1NiA2LjUzMTQ5TDQuNTk0MzEgOS4xMTcyOUM0LjgzIDkuMzQ3MDIgNC45Mzc1NCA5LjY3ODAyIDQuODgxOTEgMTAuMDAyNEw0LjI1NTY4IDEzLjY1MzZMNy41MzQ2NiAxMS45Mjk4QzcuODI1OTggMTEuNzc2NiA4LjE3NDAyIDExLjc3NjYgOC40NjUzNCAxMS45Mjk4TDExLjc0NDMgMTMuNjUzNkwxMS4xMTgxIDEwLjAwMjRDMTEuMDYyNSA5LjY3ODAzIDExLjE3IDkuMzQ3MDIgMTEuNDA1NyA5LjExNzI5TDE0LjA1ODQgNi41MzE0OUwxMC4zOTI0IDUuOTk4NzlDMTAuMDY2NyA1Ljk1MTQ2IDkuNzg1MTUgNS43NDY4OSA5LjYzOTQ5IDUuNDUxNzVMOCAyLjEyOTc4WiIgZmlsbD0iI0ZGQ0YzMyIgc3Ryb2tlPSIjRERBMTA5Ii8+CjxwYXRoIGQ9Ik04IDEyLjMxNDlDOC4wNzk5MSAxMi4zMTQ5IDguMTU5ODIgMTIuMzM0IDguMjMyNjQgMTIuMzcyM0wxMS41MTE2IDE0LjA5NjJDMTEuODc4NCAxNC4yODkgMTIuMzA3MiAxMy45Nzc2IDEyLjIzNzEgMTMuNTY5MUwxMS42MTA5IDkuOTE3OUMxMS41ODMgOS43NTU3IDExLjYzNjggOS41OTAyIDExLjc1NDcgOS40NzUzM0wxNC40MDc0IDYuODg5NTRDMTQuNzA0MiA2LjYwMDI3IDE0LjU0MDQgNi4wOTYyOCAxNC4xMzAzIDYuMDM2NjlMMTAuNDY0MyA1LjUwMzk5QzEwLjMwMTQgNS40ODAzMiAxMC4xNjA3IDUuMzc4MDQgMTAuMDg3OCA1LjIzMDQ3TDguNDQ4MzQgMS45MDg0OUM4LjM1NjY0IDEuNzIyNjkgOC4xNzgzMiAxLjYyOTc5IDggMS42Mjk3OFYxMi4zMTQ5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTggMTIuMzE0OUM4LjA3OTkxIDEyLjMxNDkgOC4xNTk4MiAxMi4zMzQgOC4yMzI2NCAxMi4zNzIzTDExLjUxMTYgMTQuMDk2MkMxMS44Nzg0IDE0LjI4OSAxMi4zMDcyIDEzLjk3NzYgMTIuMjM3MSAxMy41NjkxTDExLjYxMDkgOS45MTc5QzExLjU4MyA5Ljc1NTcgMTEuNjM2OCA5LjU5MDIgMTEuNzU0NyA5LjQ3NTMzTDE0LjQwNzQgNi44ODk1NEMxNC43MDQyIDYuNjAwMjcgMTQuNTQwNCA2LjA5NjI4IDE0LjEzMDMgNi4wMzY2OUwxMC40NjQzIDUuNTAzOTlDMTAuMzAxNCA1LjQ4MDMyIDEwLjE2MDcgNS4zNzgwNCAxMC4wODc4IDUuMjMwNDdMOC40NDgzNCAxLjkwODQ5QzguMzU2NjQgMS43MjI2OSA4LjE3ODMyIDEuNjI5NzkgOCAxLjYyOTc4VjMuMjU5NjFMOS4xOTEwOSA1LjY3MzAzQzkuNDA5NTkgNi4xMTU3NSA5LjgzMTk0IDYuNDIyNiAxMC4zMjA1IDYuNDkzNTlMMTIuOTgzOSA2Ljg4MDYxTDExLjA1NjcgOC43NTkyNEMxMC43MDMxIDkuMTAzODUgMTAuNTQxOCA5LjYwMDM1IDEwLjYyNTMgMTAuMDg2OUwxMS4wODAyIDEyLjczOTZMOC42OTc5OCAxMS40ODcyQzguNDc5NSAxMS4zNzIzIDguMjM5NzUgMTEuMzE0OSA4IDExLjMxNDlWMTIuMzE0OVoiIGZpbGw9IiM3MzczNzMiLz4KPHBhdGggZD0iTTggMTIuMzE0OUM4LjA3OTkxIDEyLjMxNDkgOC4xNTk4MiAxMi4zMzQgOC4yMzI2NCAxMi4zNzIzTDExLjUxMTYgMTQuMDk2MkMxMS44Nzg0IDE0LjI4OSAxMi4zMDcyIDEzLjk3NzYgMTIuMjM3MSAxMy41NjkxTDExLjYxMDkgOS45MTc5QzExLjU4MyA5Ljc1NTcgMTEuNjM2OCA5LjU5MDIgMTEuNzU0NyA5LjQ3NTMzTDE0LjQwNzQgNi44ODk1NEMxNC43MDQyIDYuNjAwMjcgMTQuNTQwNCA2LjA5NjI4IDE0LjEzMDMgNi4wMzY2OUwxMC40NjQzIDUuNTAzOTlDMTAuMzAxNCA1LjQ4MDMyIDEwLjE2MDcgNS4zNzgwNCAxMC4wODc4IDUuMjMwNDdMOC40NDgzNCAxLjkwODQ5QzguMzU2NjQgMS43MjI2OSA4LjE3ODMyIDEuNjI5NzkgOCAxLjYyOTc4VjMuMjU5NjFMOS4xOTEwOSA1LjY3MzAzQzkuNDA5NTkgNi4xMTU3NSA5LjgzMTk0IDYuNDIyNiAxMC4zMjA1IDYuNDkzNTlMMTIuOTgzOSA2Ljg4MDYxTDExLjA1NjcgOC43NTkyNEMxMC43MDMxIDkuMTAzODUgMTAuNTQxOCA5LjYwMDM1IDEwLjYyNTMgMTAuMDg2OUwxMS4wODAyIDEyLjczOTZMOC42OTc5OCAxMS40ODcyQzguNDc5NSAxMS4zNzIzIDguMjM5NzUgMTEuMzE0OSA4IDExLjMxNDlWMTIuMzE0OVoiIGZpbGw9IiM3MzczNzMiLz4KPC9zdmc+",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDIuMTI5NzhMOS4xMzk0OSA1LjQ1MTc1QzkuMjg1MTUgNS43NDY4OSA5LjU2NjcyIDUuOTUxNDYgOS44OTI0MyA1Ljk5ODc5TDEzLjU1ODQgNi41MzE0OUwxMC45MDU3IDkuMTE3MjlDMTAuNjcgOS4zNDcwMiAxMC41NjI1IDkuNjc4MDIgMTAuNjE4MSAxMC4wMDI0TDExLjI0NDMgMTMuNjUzNkw3Ljk2NTM0IDExLjkyOThDNy42NzQwMiAxMS43NzY2IDcuMzI1OTggMTEuNzc2NiA3LjAzNDY2IDExLjkyOThMMy43NTU2OCAxMy42NTM2TDQuMzgxOTEgMTAuMDAyNEM0LjQzNzU0IDkuNjc4MDMgNC4zMyA5LjM0NzAyIDQuMDk0MzEgOS4xMTcyOUwxLjQ0MTU2IDYuNTMxNDlMNS4xMDc1NyA1Ljk5ODc5QzUuNDMzMjggNS45NTE0NiA1LjcxNDg1IDUuNzQ2ODkgNS44NjA1MSA1LjQ1MTc1TDcuNSAyLjEyOTc4WiIgZmlsbD0iI0ZGQ0YzMyIgc3Ryb2tlPSIjRERBMTA5Ii8+PC9zdmc+",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMkg3VjhIMVYyWiIgZmlsbD0iIzIzNjFCRSIvPgo8cGF0aCBkPSJNMS41IDIuNUg2LjVWNy41SDEuNVYyLjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjIiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSIyLjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOCIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSI4LjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSIxIiB5PSI5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjMjM2MUJFIi8+CjxyZWN0IHg9IjEuNSIgeT0iOS41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo="];
var iDown = 1, iSide = 2, iUp = 3;
var iDownGray = 4, iSideGray = 5, iUpGray = 6;
var iFlagRed = 7, iFlagYellow = 8, iFlagGreen = 9;
var iDiamondRed = 10, iTriangleYellow = 11, iCircleGreen = 12;
var iCrossRed = 13, iExclamationYellow = 14, iCheckGreen = 15;
var iCrossSymbolRed = 16, iExclamationSymbolYellow = 17, iCheckSymbolGreen = 18;
var iCircleRed = 19, iCircleYellow = 20;
var iTrafficLightRed = 21, iTrafficLightYellow = 22, iTrafficLightGreen = 23;
var iDownIncline = 24, iUpIncline = 25;
var iDownInclineGray = 26, iUpInclineGray = 27;
var iOneFilledBars = 28, iTwoFilledBars = 29, iThreeFilledBars = 30, iFourFilledBars = 31;
var iCircleBlack = 32, iCircleGray = 33, iCircleLightRed = 34;
var iCircleWhite = 35, iCircleThreeWhiteQuarters = 36, iCircleTwoWhiteQuarters = 37, iCircleOneWhiteQuarter = 38;
var iZeroFilledBars = 39;
var iTriangleRed = 40, iDashYellow = 41, iTriangleGreen = 42;
var iStarSilver = 43, iStarHalf = 44, iStarGold = 45;
var iZeroFilledBoxes = 46, iOneFilledBoxes = 47, iTwoFilledBoxes = 48, iThreeFilledBoxes = 49,
iFourFilledBoxes = 50;
var c_arrIcons = [20];
c_arrIcons[EIconSetType.Arrows3] = [iDown, iSide, iUp];
c_arrIcons[EIconSetType.Arrows3Gray] = [iDownGray, iSideGray, iUpGray];
c_arrIcons[EIconSetType.Flags3] = [iFlagRed, iFlagYellow, iFlagGreen];
c_arrIcons[EIconSetType.Signs3] = [iDiamondRed, iTriangleYellow, iCircleGreen];
c_arrIcons[EIconSetType.Symbols3] = [iCrossRed, iExclamationYellow, iCheckGreen];
c_arrIcons[EIconSetType.Symbols3_2] = [iCrossSymbolRed, iExclamationSymbolYellow, iCheckSymbolGreen];
c_arrIcons[EIconSetType.Traffic3Lights1] = [iCircleRed, iCircleYellow, iCircleGreen];
c_arrIcons[EIconSetType.Traffic3Lights2] = [iTrafficLightRed, iTrafficLightYellow, iTrafficLightGreen];
c_arrIcons[EIconSetType.Arrows4] = [iDown, iDownIncline, iUpIncline, iUp];
c_arrIcons[EIconSetType.Arrows4Gray] = [iDownGray, iDownInclineGray, iUpInclineGray, iUpGray];
c_arrIcons[EIconSetType.Rating4] = [iOneFilledBars, iTwoFilledBars, iThreeFilledBars, iFourFilledBars];
c_arrIcons[EIconSetType.RedToBlack4] = [iCircleBlack, iCircleGray, iCircleLightRed, iCircleRed];
c_arrIcons[EIconSetType.Traffic4Lights] = [iCircleBlack, iCircleRed, iCircleYellow, iCircleGreen];
c_arrIcons[EIconSetType.Arrows5] = [iDown, iDownIncline, iSide, iUpIncline, iUp];
c_arrIcons[EIconSetType.Arrows5Gray] = [iDownGray, iDownInclineGray, iSideGray, iUpInclineGray, iUpGray];
c_arrIcons[EIconSetType.Quarters5] = [iCircleWhite, iCircleThreeWhiteQuarters, iCircleTwoWhiteQuarters, iCircleOneWhiteQuarter, iCircleBlack];
c_arrIcons[EIconSetType.Rating5] = [iZeroFilledBars, iOneFilledBars, iTwoFilledBars, iThreeFilledBars, iFourFilledBars];
c_arrIcons[EIconSetType.Triangles3] = [iTriangleRed, iDashYellow, iTriangleGreen];
c_arrIcons[EIconSetType.Stars3] = [iStarSilver, iStarHalf, iStarGold];
c_arrIcons[EIconSetType.Boxes5] = [iZeroFilledBoxes, iOneFilledBoxes, iTwoFilledBoxes, iThreeFilledBoxes, iFourFilledBoxes];
function getCFIconsForLoad() {
return fullIconArray;
}
function getCFIcon(oRuleElement, index) {
var oIconSet = oRuleElement.aIconSets && oRuleElement.aIconSets[index];
var iconSetType = (oIconSet && null !== oIconSet.IconSet) ? oIconSet.IconSet : oRuleElement.IconSet;
if (EIconSetType.NoIcons === iconSetType) {
return null;
}
var icons = c_arrIcons[iconSetType] || c_arrIcons[EIconSetType.Traffic3Lights1];
return fullIconArray[(icons[(oIconSet && null !== oIconSet.IconId) ? oIconSet.IconId : index] || icons[icons.length - 1]) - 1];
}
function getDataBarGradientColor(color) {
if (!color) {
return null;
}
var RGB = {R: 0xFF, G: 0xFF, B: 0xFF};
var bCoeff = 0.828;
RGB.R = Math.min(255, (color.getR() + bCoeff * (0xFF - color.getR()) + 0.5) >> 0);
RGB.G = Math.min(255, (color.getG() + bCoeff * (0xFF - color.getG()) + 0.5) >> 0);
RGB.B = Math.min(255, (color.getB() + bCoeff * (0xFF - color.getB()) + 0.5) >> 0);
return AscCommonExcel.createRgbColor(RGB.R, RGB.G, RGB.B);
}
function getFullCFIcons() {
return fullIconArray;
}
function getCFIconsByType() {
return c_arrIcons;
}
function getFullCFPresets() {
return conditionalFormattingPresets;
}
//[AxisColor, BorderColor, Color, Gradient, NegativeBorderColor, NegativeColor]
var aDataBarStyles = [[0, 6524614, 6524614, true, 16711680, 16711680],
[0, 6538116, 6538116, true, 16711680, 16711680], [0, 16733530, 16733530, true, 16711680, 16711680],
[0, 16758312, 16758312, true, 16711680, 16711680], [0, 35567, 35567, true, 16711680, 16711680],
[0, 14024827, 14024827, true, 16711680, 16711680], [0, , 6524614, false, , 16711680],
[0, , 6538116, false, , 16711680], [0, , 16733530, false, , 16711680], [0, , 16758312, false, , 16711680],
[0, , 35567, false, , 16711680], [0, , 14024827, false, , 16711680]];
//[[Type, Val, Rgb], [Type, Val, Rgb], ...]
var aColorScaleStyles = [[[2, null, 16279915], [5, 50, 16771972], [1, null, 6536827]],
[[2, null, 6536827], [5, 50, 16771972], [1, null, 16279915]],
[[2, null, 16279915], [5, 50, 16579839], [1, null, 6536827]],
[[2, null, 6536827], [5, 50, 16579839], [1, null, 16279915]],
[[2, null, 16279915], [5, 50, 16579839], [1, null, 5933766]],
[[2, null, 5933766], [5, 50, 16579839], [1, null, 16279915]], [[2, null, 16279915], [1, null, 16579839]],
[[2, null, 16579839], [1, null, 16279915]], [[2, null, 16579839], [1, null, 6536827]],
[[2, null, 6536827], [1, null, 16579839]], [[2, null, 16773020], [1, null, 6536827]],
[[2, null, 6536827], [1, null, 16773020]]];
//[[[Type, Val, Formula], [Type, Val, Formula], ...], [[Type, Val, Formula], [Type, Val, Formula], ...]]
var aIconsStyles = [[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '33', null], [4, '67', '67']],
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']]];
//[[fontColor, fillColor, borderColor]]
var aFormatStyles = [["9C0006", "FFC7CE"], ["9C5700", "FFEB9C"], ["006100", "C6EFCE"], [, "FFC7CE"], ["9C0006"],
[, , "9C0006"]];
var conditionalFormattingPresets = {};
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.dataBar] = aDataBarStyles;
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.colorScale] = aColorScaleStyles;
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.icons] = aIconsStyles;
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.format] = aFormatStyles;
/*
* Export
* -----------------------------------------------------------------------------
*/
var prot;
window['AscCommonExcel'] = window['AscCommonExcel'] || {};
window['AscCommonExcel'].CConditionalFormatting = CConditionalFormatting;
window['AscCommonExcel'].CConditionalFormattingFormulaParent = CConditionalFormattingFormulaParent;
window['Asc']["asc_CConditionalFormattingRule"] = window['AscCommonExcel'].CConditionalFormattingRule = CConditionalFormattingRule;
window['Asc']["asc_CColorScale"] = window['AscCommonExcel'].CColorScale = CColorScale;
window['Asc']["asc_CDataBar"] = window['AscCommonExcel'].CDataBar = CDataBar;
window['AscCommonExcel'].CFormulaCF = CFormulaCF;
window['Asc']["asc_CIconSet"] = window['AscCommonExcel'].CIconSet = CIconSet;
window['Asc']["asc_CConditionalFormatValueObject"] = window['AscCommonExcel'].CConditionalFormatValueObject = CConditionalFormatValueObject;
window['Asc']["asc_CConditionalFormatIconSet"] = window['AscCommonExcel'].CConditionalFormatIconSet = CConditionalFormatIconSet;
window['AscCommonExcel'].CGradient = CGradient;
window['AscCommonExcel'].cDefIconSize = cDefIconSize;
window['AscCommonExcel'].cDefIconFont = cDefIconFont;
window['AscCommonExcel'].getCFIconsForLoad = getCFIconsForLoad;
window['AscCommonExcel'].getCFIcon = getCFIcon;
window['AscCommonExcel'].getDataBarGradientColor = getDataBarGradientColor;
window['AscCommonExcel'].getFullCFIcons = getFullCFIcons;
window['AscCommonExcel'].getFullCFPresets = getFullCFPresets;
window['AscCommonExcel'].getCFIconsByType = getCFIconsByType;
window['AscCommonExcel'].isValidDataRefCf = isValidDataRefCf;
prot = CConditionalFormattingRule.prototype;
prot['asc_getDxf'] = prot.asc_getDxf;
prot['asc_getType'] = prot.asc_getType;
prot['asc_getLocation'] = prot.asc_getLocation;
prot['asc_getContainsText'] = prot.asc_getContainsText;
prot['asc_getTimePeriod'] = prot.asc_getTimePeriod;
prot['asc_getOperator'] = prot.asc_getOperator;
prot['asc_getPriority'] = prot.asc_getPriority;
prot['asc_getRank'] = prot.asc_getRank;
prot['asc_getBottom'] = prot.asc_getBottom;
prot['asc_getPercent'] = prot.asc_getPercent;
prot['asc_getAboveAverage'] = prot.asc_getAboveAverage;
prot['asc_getEqualAverage'] = prot.asc_getEqualAverage;
prot['asc_getStdDev'] = prot.asc_getStdDev;
prot['asc_getValue1'] = prot.asc_getValue1;
prot['asc_getValue2'] = prot.asc_getValue2;
prot['asc_getColorScaleOrDataBarOrIconSetRule'] = prot.asc_getColorScaleOrDataBarOrIconSetRule;
prot['asc_getId'] = prot.asc_getId;
prot['asc_getIsLock'] = prot.asc_getIsLock;
prot['asc_getPreview'] = prot.asc_getPreview;
prot['asc_setDxf'] = prot.asc_setDxf;
prot['asc_setType'] = prot.asc_setType;
prot['asc_setLocation'] = prot.asc_setLocation;
prot['asc_setContainsText'] = prot.asc_setContainsText;
prot['asc_setTimePeriod'] = prot.asc_setTimePeriod;
prot['asc_setOperator'] = prot.asc_setOperator;
prot['asc_setPriority'] = prot.asc_setPriority;
prot['asc_setRank'] = prot.asc_setRank;
prot['asc_setBottom'] = prot.asc_setBottom;
prot['asc_setPercent'] = prot.asc_setPercent;
prot['asc_setAboveAverage'] = prot.asc_setAboveAverage;
prot['asc_setEqualAverage'] = prot.asc_setEqualAverage;
prot['asc_setStdDev'] = prot.asc_setStdDev;
prot['asc_setValue1'] = prot.asc_setValue1;
prot['asc_setValue2'] = prot.asc_setValue2;
prot['asc_checkScope'] = prot.asc_checkScope;
prot['asc_setColorScaleOrDataBarOrIconSetRule'] = prot.asc_setColorScaleOrDataBarOrIconSetRule;
prot = CColorScale.prototype;
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
prot['asc_getColors'] = prot.asc_getColors;
prot['asc_getPreview'] = prot.asc_getPreview;
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
prot['asc_setColors'] = prot.asc_setColors;
prot = CDataBar.prototype;
prot['asc_setInterfaceDefault'] = prot.asc_setInterfaceDefault;
prot['asc_getShowValue'] = prot.asc_getShowValue;
prot['asc_getAxisPosition'] = prot.asc_getAxisPosition;
prot['asc_getGradient'] = prot.asc_getGradient;
prot['asc_getDirection'] = prot.asc_getDirection;
prot['asc_getNegativeBarColorSameAsPositive'] = prot.asc_getNegativeBarColorSameAsPositive;
prot['asc_getNegativeBarBorderColorSameAsPositive'] = prot.asc_getNegativeBarBorderColorSameAsPositive;
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
prot['asc_getColor'] = prot.asc_getColor;
prot['asc_getNegativeColor'] = prot.asc_getNegativeColor;
prot['asc_getBorderColor'] = prot.asc_getBorderColor;
prot['asc_getNegativeBorderColor'] = prot.asc_getNegativeBorderColor;
prot['asc_getAxisColor'] = prot.asc_getAxisColor;
prot['asc_setShowValue'] = prot.asc_setShowValue;
prot['asc_setAxisPosition'] = prot.asc_setAxisPosition;
prot['asc_setGradient'] = prot.asc_setGradient;
prot['asc_setDirection'] = prot.asc_setDirection;
prot['asc_setNegativeBarColorSameAsPositive'] = prot.asc_setNegativeBarColorSameAsPositive;
prot['asc_setNegativeBarBorderColorSameAsPositive'] = prot.asc_setNegativeBarBorderColorSameAsPositive;
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
prot['asc_setColor'] = prot.asc_setColor;
prot['asc_setNegativeColor'] = prot.asc_setNegativeColor;
prot['asc_setBorderColor'] = prot.asc_setBorderColor;
prot['asc_setNegativeBorderColor'] = prot.asc_setNegativeBorderColor;
prot['asc_setAxisColor'] = prot.asc_setAxisColor;
prot = CIconSet.prototype;
prot['asc_getIconSet'] = prot.asc_getIconSet;
prot['asc_getReverse'] = prot.asc_getReverse;
prot['asc_getShowValue'] = prot.asc_getShowValue;
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
prot['asc_getIconSets'] = prot.asc_getIconSets;
prot['asc_setIconSet'] = prot.asc_setIconSet;
prot['asc_setReverse'] = prot.asc_setReverse;
prot['asc_setShowValue'] = prot.asc_setShowValue;
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
prot['asc_setIconSets'] = prot.asc_setIconSets;
prot = CConditionalFormatValueObject.prototype;
prot['asc_getGte'] = prot.asc_getGte;
prot['asc_getType'] = prot.asc_getType;
prot['asc_getVal'] = prot.asc_getVal;
prot['asc_setGte'] = prot.asc_setGte;
prot['asc_setType'] = prot.asc_setType;
prot['asc_setVal'] = prot.asc_setVal;
prot = CFormulaCF.prototype;
prot['asc_getText'] = prot.asc_getText;
prot['asc_setText'] = prot.asc_setText;
prot = CConditionalFormatIconSet.prototype;
prot['asc_getIconSet'] = prot.asc_getIconSet;
prot['asc_getIconId'] = prot.asc_getIconId;
prot['asc_setIconSet'] = prot.asc_setIconSet;
prot['asc_setIconId'] = prot.asc_setIconId;
})(window);